From 897501a78b4aa61ebb17a61acf8d78957c4effd0 Mon Sep 17 00:00:00 2001 From: Hongrui Chen Date: Fri, 26 Dec 2025 21:17:53 +0800 Subject: [PATCH] Refactor CMake configuration for Hexagon NPU: consolidate device target setup and improve build structure --- ggml/src/ggml-qnn/npu/CMakeLists.txt | 307 ++++++-------------- ggml/src/ggml-qnn/npu/device/CMakeLists.txt | 135 +++++++++ 2 files changed, 223 insertions(+), 219 deletions(-) create mode 100644 ggml/src/ggml-qnn/npu/device/CMakeLists.txt diff --git a/ggml/src/ggml-qnn/npu/CMakeLists.txt b/ggml/src/ggml-qnn/npu/CMakeLists.txt index a5b6d18e34..471364c199 100644 --- a/ggml/src/ggml-qnn/npu/CMakeLists.txt +++ b/ggml/src/ggml-qnn/npu/CMakeLists.txt @@ -37,229 +37,98 @@ set(common_incs include_directories(${common_incs}) -function(add_device_target target_name DSP_ARCH IS_SIMULATOR BUILD_CPU_COUNT) - if(${CMAKE_BUILD_TYPE} MATCHES "Debug|Dbg") - set(HEXAGON_BUILD_CONFIG "Debug") - set(EXTRA_BUILD_FLAGS - VERBOSE=1 - TREE=1 - ) - else() - set(HEXAGON_BUILD_CONFIG "Release") - set(EXTRA_BUILD_FLAGS) - endif() +# host build +file(GLOB common_srcs "${CMAKE_CURRENT_LIST_DIR}/common/*.cpp") +file(GLOB host_srcs "${CMAKE_CURRENT_LIST_DIR}/host/*.cpp") +set(stub_srcs "${CMAKE_CURRENT_BINARY_DIR}/npu_device_stub.c") +add_library(hexagon-npu-host STATIC + ${common_srcs} + ${host_srcs} + ${stub_srcs} +) - if(${GGML_SANITIZE_ADDRESS} OR ${LLAMA_SANITIZE_ADDRESS}) - set(GGML_HEXAGON_NPU_SANITIZE_ADDRESS ON) - else() - set(GGML_HEXAGON_NPU_SANITIZE_ADDRESS OFF) - endif() +# disable warnings for the stub +set_source_files_properties( + ${stub_srcs} + PROPERTIES + COMPILE_FLAGS "-w" +) - set(EXTRA_BUILD_FLAGS ${EXTRA_BUILD_FLAGS} GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS=${GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS}) - set(EXTRA_BUILD_FLAGS ${EXTRA_BUILD_FLAGS} GGML_HEXAGON_NPU_SANITIZE_ADDRESS=${GGML_HEXAGON_NPU_SANITIZE_ADDRESS}) - set(EXTRA_BUILD_FLAGS ${EXTRA_BUILD_FLAGS} GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING=${GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING}) +build_idl(idl/hexagon_npu.idl hexagon-npu-host) - set(HEXAGON_TOOLS_VARIANT $ENV{DEFAULT_TOOLS_VARIANT}) - set(BUILD_DIR ${CMAKE_CURRENT_LIST_DIR}/hexagon_${HEXAGON_BUILD_CONFIG}_${HEXAGON_TOOLS_VARIANT}_${DSP_ARCH}) - set(BUILD_BINARY_NAME ${BUILD_DIR}/libhexagon_npu_skel_${DSP_ARCH}.so) +# Add compile definitions to the target +target_compile_definitions(hexagon-npu-host PUBLIC + VERIFY_PRINT_ERROR + GGML_QNN_ENABLE_HEXAGON_BACKEND +) - if(${IS_SIMULATOR}) - set(HEXAGON_TOOLCHAIN_TYPE "hexagonsim") - set(OUTPUT_BINARY_NAME libhexagon_npu_skel_${DSP_ARCH}_sim.so) - else() - set(HEXAGON_TOOLCHAIN_TYPE "hexagon") - set(OUTPUT_BINARY_NAME libhexagon_npu_skel_${DSP_ARCH}.so) - endif() - - add_custom_target(${target_name} ALL - COMMAND ${CMAKE_COMMAND} -E remove_directory ${BUILD_DIR} - COMMAND build_cmake ${HEXAGON_TOOLCHAIN_TYPE} DSP_ARCH=${DSP_ARCH} BUILD=${HEXAGON_BUILD_CONFIG} ${EXTRA_BUILD_FLAGS} -j${BUILD_CPU_COUNT} - COMMAND ${CMAKE_COMMAND} -E copy ${BUILD_BINARY_NAME} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${OUTPUT_BINARY_NAME} - BYPRODUCTS ${BUILD_BINARY_NAME} - WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} - ) -endfunction() - -function(add_dsp_targets_for_host host_target DSP_ARCH BUILD_CPU_COUNT) - add_device_target(hexagon-npu-device-${DSP_ARCH} ${DSP_ARCH} FALSE ${BUILD_CPU_COUNT}) - add_device_target(hexagon-npu-device-${DSP_ARCH}-sim ${DSP_ARCH} TRUE ${BUILD_CPU_COUNT}) - add_dependencies(hexagon-npu-device-${DSP_ARCH}-sim hexagon-npu-device-${DSP_ARCH}) - add_dependencies(${host_target} hexagon-npu-device-${DSP_ARCH}-sim) -endfunction() - -if(${CMAKE_SYSTEM_NAME} MATCHES "Android|Linux|Windows") - # host build - file(GLOB common_srcs "${CMAKE_CURRENT_LIST_DIR}/common/*.cpp") - file(GLOB host_srcs "${CMAKE_CURRENT_LIST_DIR}/host/*.cpp") - set(stub_srcs "${CMAKE_CURRENT_BINARY_DIR}/npu_device_stub.c") - add_library(hexagon-npu-host STATIC - ${common_srcs} - ${host_srcs} - ${stub_srcs} - ) - - # disable warnings for the stub - set_source_files_properties( - ${stub_srcs} - PROPERTIES - COMPILE_FLAGS "-w" - ) - - build_idl(idl/hexagon_npu.idl hexagon-npu-host) - - # Add compile definitions to the target +if(GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS) target_compile_definitions(hexagon-npu-host PUBLIC - VERIFY_PRINT_ERROR - GGML_QNN_ENABLE_HEXAGON_BACKEND + GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS ) - - if(GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS) - target_compile_definitions(hexagon-npu-host PUBLIC - GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS - ) - endif() - - target_include_directories(hexagon-npu-host PRIVATE - ${HEXAGON_SDK_ROOT}/ipc/fastrpc/rpcmem/inc/ - ${QNN_SDK_ROOT}/include/QNN/ - ${CMAKE_CURRENT_LIST_DIR}/host/ - ${CMAKE_CURRENT_LIST_DIR}/ - ) - - target_include_directories(hexagon-npu-host PUBLIC - ${HEXAGON_SDK_ROOT}/incs/ # TODO: this is for rpc-mem - ) - - if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Windows") - set_target_properties(hexagon-npu-host PROPERTIES OUTPUT_NAME "hexagon_npu") - endif() - - if(${CMAKE_SYSTEM_NAME} MATCHES "Android|Linux") - target_link_options(hexagon-npu-host PUBLIC -pie) - endif() - - if(GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING) - message("GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING is enabled") - target_compile_definitions(hexagon-npu-host PUBLIC GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING) - else() - message("GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING is disabled") - endif() - - link_options(hexagon-npu-host) - - choose_dsprpc("3" dsprpc) # cdsprpc - link_custom_library(hexagon-npu-host ${dsprpc}) - - cmake_host_system_information(RESULT BUILD_CPU_COUNT QUERY NUMBER_OF_PHYSICAL_CORES) - add_dsp_targets_for_host(hexagon-npu-host "v73" ${BUILD_CPU_COUNT}) - add_dsp_targets_for_host(hexagon-npu-host "v75" ${BUILD_CPU_COUNT}) - add_dsp_targets_for_host(hexagon-npu-host "v79" ${BUILD_CPU_COUNT}) - - list(APPEND NPU_RUNTIME_LIBS "${HEXAGON_SDK_ROOT}/tools/utils/sysmon/sysMonApp") - list(APPEND NPU_RUNTIME_LIBS "${HEXAGON_SDK_ROOT}/tools/utils/sysmon/sysMonAppLE") - - foreach(RUNTIME_LIB ${NPU_RUNTIME_LIBS}) - message("Copy: ${RUNTIME_LIB} -> ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") - add_custom_command( - TARGET hexagon-npu-host POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${RUNTIME_LIB} - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) - endforeach() -else() - # hexagon npu build, this section will run inside the `build_cmake` script - cmake_minimum_required(VERSION 3.14.3) - project(hexagon_npu C CXX ASM) - - # check if QNN_SDK_ROOT is set - if(NOT DEFINED ENV{QNN_SDK_ROOT}) - message(FATAL_ERROR "QNN_SDK_ROOT not defined") - endif() - - set(QNN_SDK_ROOT $ENV{QNN_SDK_ROOT}) - message("QNN_SDK_ROOT: ${QNN_SDK_ROOT}") - message("GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS: ${GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS}") - - include_directories( - ${QNN_SDK_ROOT}/include/QNN/ - ) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") - - file(GLOB common_srcs "${CMAKE_CURRENT_LIST_DIR}/common/*.cpp") - file(GLOB device_srcs "${CMAKE_CURRENT_LIST_DIR}/device/*.cpp") - file(GLOB device_op_srcs "${CMAKE_CURRENT_LIST_DIR}/device/op/*.cpp") - set(skel_srcs "${CMAKE_CURRENT_BINARY_DIR}/npu_device_skel.c") - add_library(hexagon_npu_skel_OBJS OBJECT - ${common_srcs} - ${device_srcs} - ${device_op_srcs} - ${skel_srcs} - ) - - if(CMAKE_BUILD_TYPE MATCHES "Debug|Dbg") - message("Debug build, enable all logging") - target_compile_definitions(hexagon_npu_skel_OBJS PUBLIC - _DEBUG - DEBUG_LOGGING - ) - else() - message("Release build, disable debug logging") - target_compile_definitions(hexagon_npu_skel_OBJS PUBLIC - NDEBUG - RELEASE_LOGGING - ) - endif() - - if(GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS) - message("GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS is enabled") - target_compile_definitions(hexagon_npu_skel_OBJS PUBLIC - GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS - ) - endif() - - if(GGML_HEXAGON_NPU_SANITIZE_ADDRESS) - message("GGML_HEXAGON_NPU_SANITIZE_ADDRESS is enabled") - target_compile_options(hexagon_npu_skel_OBJS PUBLIC - -fsanitize=address -fno-omit-frame-pointer - ) - target_link_options(hexagon_npu_skel_OBJS PUBLIC - -fsanitize=address - ) - endif() - - if(GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING) - message("GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING is enabled") - target_compile_definitions(hexagon_npu_skel_OBJS PUBLIC - GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING - ) - endif() - - build_idl(idl/hexagon_npu.idl hexagon_npu_skel_OBJS) - - add_subdirectory(${HEXAGON_SDK_ROOT}/libs/qprintf qprintf_dir) - target_include_directories(hexagon_npu_skel_OBJS PUBLIC - ${HEXAGON_SDK_ROOT}/libs/qprintf/inc/ - - # TODO: find a better way to include these - ${CMAKE_CURRENT_LIST_DIR}/device/ - ${CMAKE_CURRENT_LIST_DIR}/device/op/ - ) - - # disable warnings for the skel - set_source_files_properties( - ${skel_srcs} - PROPERTIES - COMPILE_FLAGS "-w" - ) - - add_library(hexagon_npu_skel SHARED $) - target_link_libraries(hexagon_npu_skel - ${HEXAGON_LIB_DIR}/${HEXAGON_ARCH}/G0/pic/libc++abi.so.1 - ${HEXAGON_LIB_DIR}/${HEXAGON_ARCH}/G0/pic/libc++.so.1 - ${HEXAGON_LIB_DIR}/${HEXAGON_ARCH}/G0/pic/libc.so - ) - set_target_properties(hexagon_npu_skel PROPERTIES OUTPUT_NAME "hexagon_npu_skel_${HEXAGON_ARCH}") - target_link_libraries(hexagon_npu_skel qprintf_static) - - copy_binaries(hexagon_npu_skel) endif() + +target_include_directories(hexagon-npu-host PRIVATE + ${HEXAGON_SDK_ROOT}/ipc/fastrpc/rpcmem/inc/ + ${QNN_SDK_ROOT}/include/QNN/ + ${CMAKE_CURRENT_LIST_DIR}/host/ + ${CMAKE_CURRENT_LIST_DIR}/ +) + +target_include_directories(hexagon-npu-host PUBLIC + ${HEXAGON_SDK_ROOT}/incs/ # TODO: this is for rpc-mem +) + +if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Windows") + set_target_properties(hexagon-npu-host PROPERTIES OUTPUT_NAME "hexagon_npu") +endif() + +if(${CMAKE_SYSTEM_NAME} MATCHES "Android|Linux") + target_link_options(hexagon-npu-host PUBLIC -pie) +endif() + +if(GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING) + message("GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING is enabled") + target_compile_definitions(hexagon-npu-host PUBLIC GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING) +else() + message("GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING is disabled") +endif() + +link_options(hexagon-npu-host) + +choose_dsprpc("3" dsprpc) # cdsprpc +link_custom_library(hexagon-npu-host ${dsprpc}) + +cmake_host_system_information(RESULT BUILD_CPU_COUNT QUERY NUMBER_OF_PHYSICAL_CORES) + +# Build HTP bits +set(HTP_CMAKE_ARGS + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_SOURCE_DIR}/../../ggml-hexagon/htp/cmake-toolchain.cmake + -DCMAKE_BUILD_TYPE=Release + -DCMAKE_INSTALL_LIBDIR=${CMAKE_CURRENT_BINARY_DIR} + -DHEXAGON_SDK_ROOT=$ENV{HEXAGON_SDK_ROOT} + -DHEXAGON_TOOLS_ROOT=$ENV{HEXAGON_TOOLS_ROOT} + -DHEXAGON_HTP_DEBUG=${GGML_HEXAGON_HTP_DEBUG} + -DGGML_HEXAGON_FP32_QUANTIZE_GROUP_SIZE=${GGML_HEXAGON_FP32_QUANTIZE_GROUP_SIZE}) + +ExternalProject_Add(hexagon_npu_skel_v73 + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/device BUILD_ALWAYS ON + CMAKE_ARGS ${HTP_CMAKE_ARGS} -DDSP_VERSION=v73 -DPREBUILT_LIB_DIR="toolv19_v73") +ExternalProject_Add(hexagon_npu_skel_v75 + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/device BUILD_ALWAYS ON + CMAKE_ARGS ${HTP_CMAKE_ARGS} -DDSP_VERSION=v75 -DPREBUILT_LIB_DIR="toolv19_v75") +ExternalProject_Add(hexagon_npu_skel_v79 + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/device BUILD_ALWAYS ON + CMAKE_ARGS ${HTP_CMAKE_ARGS} -DDSP_VERSION=v79 -DPREBUILT_LIB_DIR="toolv19_v79") + +list(APPEND NPU_RUNTIME_LIBS "${HEXAGON_SDK_ROOT}/tools/utils/sysmon/sysMonApp") +list(APPEND NPU_RUNTIME_LIBS "${HEXAGON_SDK_ROOT}/tools/utils/sysmon/sysMonAppLE") + +# Install Hexagon skels required at runtime +install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/libhexagon_npu_skel_v73.so + ${CMAKE_CURRENT_BINARY_DIR}/libhexagon_npu_skel_v75.so + ${CMAKE_CURRENT_BINARY_DIR}/libhexagon_npu_skel_v79.so + ${HEXAGON_SDK_ROOT}/tools/utils/sysmon/sysMonApp + ${HEXAGON_SDK_ROOT}/tools/utils/sysmon/sysMonAppLE + TYPE LIB) diff --git a/ggml/src/ggml-qnn/npu/device/CMakeLists.txt b/ggml/src/ggml-qnn/npu/device/CMakeLists.txt new file mode 100644 index 0000000000..167c0bb1fe --- /dev/null +++ b/ggml/src/ggml-qnn/npu/device/CMakeLists.txt @@ -0,0 +1,135 @@ + +# hexagon npu build, this section will run inside the `build_cmake` script +cmake_minimum_required(VERSION 3.14.3) +project(hexagon_npu C CXX ASM) + +enable_language(ASM) +cmake_policy(SET CMP0115 OLD) + +if(DEFINED ENV{HEXAGON_SDK_ROOT}) + set(HEXAGON_SDK_ROOT $ENV{HEXAGON_SDK_ROOT}) + message("HEXAGON_SDK_ROOT (from environment): ${HEXAGON_SDK_ROOT}") +elseif(DEFINED HEXAGON_SDK_ROOT) + message("HEXAGON_SDK_ROOT: ${HEXAGON_SDK_ROOT}") +else() + message(FATAL_ERROR "HEXAGON_SDK_ROOT not defined") +endif() + +if(${CMAKE_SYSTEM_NAME} MATCHES "Android") + set(PREBUILT_LIB_DIR "android_aarch64") +elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") + set(PREBUILT_LIB_DIR "UbuntuARM_aarch64") +elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + # Windows + set(PREBUILT_LIB_DIR "windows_aarch64") +endif() + +if(HEXAGON_SDK_ROOT) + include(${HEXAGON_SDK_ROOT}/build/cmake/hexagon_fun.cmake) +else() + include(${HEXAGON_CMAKE_ROOT}/hexagon_fun.cmake) +endif() + +# Base Include dirs for the Project +set(common_incs + ${CMAKE_CURRENT_BINARY_DIR}/ + ${HEXAGON_SDK_ROOT}/incs/ + ${HEXAGON_SDK_ROOT}/incs/stddef/ + ${HEXAGON_SDK_ROOT}/incs/HAP/ + ${HEXAGON_SDK_ROOT}/rtos/qurt/ + ${HEXAGON_SDK_ROOT}/utils/examples/ +) + +include_directories(${common_incs}) + +# check if QNN_SDK_ROOT is set +if(NOT DEFINED ENV{QNN_SDK_ROOT}) + message(FATAL_ERROR "QNN_SDK_ROOT not defined") +endif() + +set(QNN_SDK_ROOT $ENV{QNN_SDK_ROOT}) +message("QNN_SDK_ROOT: ${QNN_SDK_ROOT}") +message("GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS: ${GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS}") + +include_directories( + ${QNN_SDK_ROOT}/include/QNN/ +) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") + +file(GLOB common_srcs "${CMAKE_CURRENT_LIST_DIR}/common/*.cpp") +file(GLOB device_srcs "${CMAKE_CURRENT_LIST_DIR}/device/*.cpp") +file(GLOB device_op_srcs "${CMAKE_CURRENT_LIST_DIR}/device/op/*.cpp") +set(skel_srcs "${CMAKE_CURRENT_BINARY_DIR}/npu_device_skel.c") +add_library(hexagon_npu_skel_OBJS OBJECT + ${common_srcs} + ${device_srcs} + ${device_op_srcs} + ${skel_srcs} +) + +if(CMAKE_BUILD_TYPE MATCHES "Debug|Dbg") + message("Debug build, enable all logging") + target_compile_definitions(hexagon_npu_skel_OBJS PUBLIC + _DEBUG + DEBUG_LOGGING + ) +else() + message("Release build, disable debug logging") + target_compile_definitions(hexagon_npu_skel_OBJS PUBLIC + NDEBUG + RELEASE_LOGGING + ) +endif() + +if(GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS) + message("GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS is enabled") + target_compile_definitions(hexagon_npu_skel_OBJS PUBLIC + GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS + ) +endif() + +if(GGML_HEXAGON_NPU_SANITIZE_ADDRESS) + message("GGML_HEXAGON_NPU_SANITIZE_ADDRESS is enabled") + target_compile_options(hexagon_npu_skel_OBJS PUBLIC + -fsanitize=address -fno-omit-frame-pointer + ) + target_link_options(hexagon_npu_skel_OBJS PUBLIC + -fsanitize=address + ) +endif() + +if(GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING) + message("GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING is enabled") + target_compile_definitions(hexagon_npu_skel_OBJS PUBLIC + GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING + ) +endif() + +build_idl(../idl/hexagon_npu.idl hexagon_npu_skel_OBJS) + +add_subdirectory(${HEXAGON_SDK_ROOT}/libs/qprintf qprintf_dir) +target_include_directories(hexagon_npu_skel_OBJS PUBLIC + ${HEXAGON_SDK_ROOT}/libs/qprintf/inc/ + + # TODO: find a better way to include these + ${CMAKE_CURRENT_LIST_DIR} + ${CMAKE_CURRENT_LIST_DIR}/op/ +) + +# disable warnings for the skel +set_source_files_properties( + ${skel_srcs} + PROPERTIES + COMPILE_FLAGS "-w" +) + +add_library(hexagon_npu_skel SHARED $) +target_link_libraries(hexagon_npu_skel + ${HEXAGON_LIB_DIR}/${HEXAGON_ARCH}/G0/pic/libc++abi.so.1 + ${HEXAGON_LIB_DIR}/${HEXAGON_ARCH}/G0/pic/libc++.so.1 + ${HEXAGON_LIB_DIR}/${HEXAGON_ARCH}/G0/pic/libc.so +) +set_target_properties(hexagon_npu_skel PROPERTIES OUTPUT_NAME "hexagon_npu_skel_${HEXAGON_ARCH}") +target_link_libraries(hexagon_npu_skel qprintf_static) + +copy_binaries(hexagon_npu_skel)