Packages

QNN (Qualcomm AI Engine Direct) NIF bindings for the Hexagon NPU (QCS6490/HTP)

Current section

Files

Jump to
hexagon_tpu Makefile
Raw

Makefile

# Makefile wrapper for CMake-based NIF build
ifndef MIX_APP_PATH
MIX_APP_PATH=$(shell pwd)
endif
PRIV_DIR = $(MIX_APP_PATH)/priv
NIF_SO = $(PRIV_DIR)/hexagon_tpu_nif.so
CMAKE_BUILD_DIR = $(MIX_APP_PATH)/cmake_build
# Accept QAIRT_SDK_PATH as an alias for QNN_SDK_ROOT
ifndef QNN_SDK_ROOT
ifdef QAIRT_SDK_PATH
QNN_SDK_ROOT = $(QAIRT_SDK_PATH)
endif
endif
ifdef CMAKE_TOOLCHAIN_FILE
CMAKE_CONFIGURE_FLAGS=-D CMAKE_TOOLCHAIN_FILE="$(CMAKE_TOOLCHAIN_FILE)"
else ifdef CROSSCOMPILE
# Nerves exports CC/CXX/CROSSCOMPILE; use the generic env-driven cross file.
CMAKE_CONFIGURE_FLAGS=-D CMAKE_TOOLCHAIN_FILE="$(shell pwd)/cmake/env-toolchain.cmake"
endif
CMAKE_BUILD_TYPE ?= Release
MAKE_JOBS ?= $(shell nproc 2>/dev/null || echo 1)
build: check_sdk $(NIF_SO)
check_sdk:
ifndef QNN_SDK_ROOT
$(error QNN_SDK_ROOT is not set. Point it at an extracted QAIRT SDK \
(e.g. .../qairt/2.42.0.251225) so the QNN headers under include/QNN are found. \
QAIRT_SDK_PATH is accepted as an alias)
endif
NIF_SOURCES = $(wildcard c_src/*.cpp) $(wildcard c_src/*.hpp) CMakeLists.txt
$(NIF_SO): $(PRIV_DIR) $(NIF_SOURCES)
@ mkdir -p "$(CMAKE_BUILD_DIR)" && \
cd "$(CMAKE_BUILD_DIR)" && \
cmake --no-warn-unused-cli \
-D CMAKE_BUILD_TYPE="$(CMAKE_BUILD_TYPE)" \
-D C_SRC="$(shell pwd)/c_src" \
-D MIX_APP_PATH="$(MIX_APP_PATH)" \
-D PRIV_DIR="$(PRIV_DIR)" \
-D ERTS_INCLUDE_DIR="$(ERTS_INCLUDE_DIR)" \
-D QNN_SDK_ROOT="$(QNN_SDK_ROOT)" \
$(CMAKE_CONFIGURE_FLAGS) "$(shell pwd)" && \
cmake --build . --config "$(CMAKE_BUILD_TYPE)" -j$(MAKE_JOBS) && \
cp "hexagon_tpu_nif.so" "$(NIF_SO)"
clean:
@rm -rf "$(CMAKE_BUILD_DIR)"
@rm -f "$(NIF_SO)"
$(PRIV_DIR):
@mkdir -p "$(PRIV_DIR)"
.PHONY: build check_sdk clean