@@ -37,229 +37,98 @@ set(common_incs
3737
3838include_directories (${common_incs} )
3939
40- function (add_device_target target_name DSP_ARCH IS_SIMULATOR BUILD_CPU_COUNT )
41- if (${CMAKE_BUILD_TYPE } MATCHES "Debug|Dbg" )
42- set (HEXAGON_BUILD_CONFIG "Debug" )
43- set (EXTRA_BUILD_FLAGS
44- VERBOSE=1
45- TREE=1
46- )
47- else ()
48- set (HEXAGON_BUILD_CONFIG "Release" )
49- set (EXTRA_BUILD_FLAGS)
50- endif ()
51-
52- if (${GGML_SANITIZE_ADDRESS} OR ${LLAMA_SANITIZE_ADDRESS} )
53- set (GGML_HEXAGON_NPU_SANITIZE_ADDRESS ON )
54- else ()
55- set (GGML_HEXAGON_NPU_SANITIZE_ADDRESS OFF )
56- endif ()
57-
58- set (EXTRA_BUILD_FLAGS ${EXTRA_BUILD_FLAGS} GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS=${GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS} )
59- set (EXTRA_BUILD_FLAGS ${EXTRA_BUILD_FLAGS} GGML_HEXAGON_NPU_SANITIZE_ADDRESS=${GGML_HEXAGON_NPU_SANITIZE_ADDRESS} )
60- set (EXTRA_BUILD_FLAGS ${EXTRA_BUILD_FLAGS} GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING=${GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING} )
61-
62- set (HEXAGON_TOOLS_VARIANT $ENV{DEFAULT_TOOLS_VARIANT} )
63- set (BUILD_DIR ${CMAKE_CURRENT_LIST_DIR } /hexagon_${HEXAGON_BUILD_CONFIG} _${HEXAGON_TOOLS_VARIANT} _${DSP_ARCH} )
64- set (BUILD_BINARY_NAME ${BUILD_DIR} /libhexagon_npu_skel_${DSP_ARCH} .so)
65-
66- if (${IS_SIMULATOR} )
67- set (HEXAGON_TOOLCHAIN_TYPE "hexagonsim" )
68- set (OUTPUT_BINARY_NAME libhexagon_npu_skel_${DSP_ARCH} _sim.so)
69- else ()
70- set (HEXAGON_TOOLCHAIN_TYPE "hexagon" )
71- set (OUTPUT_BINARY_NAME libhexagon_npu_skel_${DSP_ARCH} .so)
72- endif ()
73-
74- add_custom_target (${target_name} ALL
75- COMMAND ${CMAKE_COMMAND } -E remove_directory ${BUILD_DIR}
76- COMMAND build_cmake ${HEXAGON_TOOLCHAIN_TYPE} DSP_ARCH=${DSP_ARCH} BUILD =${HEXAGON_BUILD_CONFIG} ${EXTRA_BUILD_FLAGS} -j${BUILD_CPU_COUNT}
77- COMMAND ${CMAKE_COMMAND } -E copy ${BUILD_BINARY_NAME} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY } /${OUTPUT_BINARY_NAME}
78- BYPRODUCTS ${BUILD_BINARY_NAME}
79- WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR }
80- )
81- endfunction ()
82-
83- function (add_dsp_targets_for_host host_target DSP_ARCH BUILD_CPU_COUNT )
84- add_device_target (hexagon-npu-device-${DSP_ARCH} ${DSP_ARCH} FALSE ${BUILD_CPU_COUNT} )
85- add_device_target (hexagon-npu-device-${DSP_ARCH}-sim ${DSP_ARCH} TRUE ${BUILD_CPU_COUNT} )
86- add_dependencies (hexagon-npu-device-${DSP_ARCH}-sim hexagon-npu-device-${DSP_ARCH} )
87- add_dependencies (${host_target} hexagon-npu-device-${DSP_ARCH}-sim )
88- endfunction ()
40+ # host build
41+ file (GLOB common_srcs "${CMAKE_CURRENT_LIST_DIR } /common/*.cpp" )
42+ file (GLOB host_srcs "${CMAKE_CURRENT_LIST_DIR } /host/*.cpp" )
43+ set (stub_srcs "${CMAKE_CURRENT_BINARY_DIR } /npu_device_stub.c" )
44+ add_library (hexagon-npu-host STATIC
45+ ${common_srcs}
46+ ${host_srcs}
47+ ${stub_srcs}
48+ )
8949
90- if (${CMAKE_SYSTEM_NAME } MATCHES "Android|Linux|Windows" )
91- # host build
92- file (GLOB common_srcs "${CMAKE_CURRENT_LIST_DIR } /common/*.cpp" )
93- file (GLOB host_srcs "${CMAKE_CURRENT_LIST_DIR } /host/*.cpp" )
94- set (stub_srcs "${CMAKE_CURRENT_BINARY_DIR } /npu_device_stub.c" )
95- add_library (hexagon-npu-host STATIC
96- ${common_srcs}
97- ${host_srcs}
98- ${stub_srcs}
99- )
50+ # disable warnings for the stub
51+ set_source_files_properties (
52+ ${stub_srcs}
53+ PROPERTIES
54+ COMPILE_FLAGS "-w"
55+ )
10056
101- # disable warnings for the stub
102- set_source_files_properties (
103- ${stub_srcs}
104- PROPERTIES
105- COMPILE_FLAGS "-w"
106- )
57+ build_idl (idl/hexagon_npu.idl hexagon-npu-host )
10758
108- build_idl (idl/hexagon_npu.idl hexagon-npu-host )
59+ # Add compile definitions to the target
60+ target_compile_definitions (hexagon-npu-host PUBLIC
61+ VERIFY_PRINT_ERROR
62+ GGML_QNN_ENABLE_HEXAGON_BACKEND
63+ )
10964
110- # Add compile definitions to the target
65+ if (GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS)
11166 target_compile_definitions (hexagon-npu-host PUBLIC
112- VERIFY_PRINT_ERROR
113- GGML_QNN_ENABLE_HEXAGON_BACKEND
67+ GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS
11468 )
69+ endif ()
11570
116- if (GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS)
117- target_compile_definitions (hexagon-npu-host PUBLIC
118- GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS
119- )
120- endif ()
121-
122- target_include_directories (hexagon-npu-host PRIVATE
123- ${HEXAGON_SDK_ROOT} /ipc/fastrpc/rpcmem/inc/
124- ${QNN_SDK_ROOT} /include/QNN/
125- ${CMAKE_CURRENT_LIST_DIR } /host/
126- ${CMAKE_CURRENT_LIST_DIR } /
127- )
128-
129- target_include_directories (hexagon-npu-host PUBLIC
130- ${HEXAGON_SDK_ROOT} /incs/ # TODO: this is for rpc-mem
131- )
132-
133- if (NOT ${CMAKE_SYSTEM_NAME } MATCHES "Windows" )
134- set_target_properties (hexagon-npu-host PROPERTIES OUTPUT_NAME "hexagon_npu" )
135- endif ()
136-
137- if (${CMAKE_SYSTEM_NAME } MATCHES "Android|Linux" )
138- target_link_options (hexagon-npu-host PUBLIC -pie )
139- endif ()
140-
141- if (GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING)
142- message ("GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING is enabled" )
143- target_compile_definitions (hexagon-npu-host PUBLIC GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING )
144- else ()
145- message ("GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING is disabled" )
146- endif ()
147-
148- link_options (hexagon-npu-host )
71+ target_include_directories (hexagon-npu-host PRIVATE
72+ ${HEXAGON_SDK_ROOT} /ipc/fastrpc/rpcmem/inc/
73+ ${QNN_SDK_ROOT} /include/QNN/
74+ ${CMAKE_CURRENT_LIST_DIR } /host/
75+ ${CMAKE_CURRENT_LIST_DIR } /
76+ )
14977
150- choose_dsprpc ("3" dsprpc ) # cdsprpc
151- link_custom_library (hexagon-npu-host ${dsprpc} )
78+ target_include_directories (hexagon-npu-host PUBLIC
79+ ${HEXAGON_SDK_ROOT} /incs/ # TODO: this is for rpc-mem
80+ )
15281
153- cmake_host_system_information (RESULT BUILD_CPU_COUNT QUERY NUMBER_OF_PHYSICAL_CORES )
154- add_dsp_targets_for_host (hexagon-npu-host "v73" ${BUILD_CPU_COUNT} )
155- add_dsp_targets_for_host (hexagon-npu-host "v75" ${BUILD_CPU_COUNT} )
156- add_dsp_targets_for_host (hexagon-npu-host "v79" ${BUILD_CPU_COUNT} )
82+ if (NOT ${CMAKE_SYSTEM_NAME } MATCHES "Windows" )
83+ set_target_properties (hexagon-npu-host PROPERTIES OUTPUT_NAME "hexagon_npu" )
84+ endif ()
15785
158- list (APPEND NPU_RUNTIME_LIBS "${HEXAGON_SDK_ROOT} /tools/utils/sysmon/sysMonApp" )
159- list (APPEND NPU_RUNTIME_LIBS "${HEXAGON_SDK_ROOT} /tools/utils/sysmon/sysMonAppLE" )
86+ if (${CMAKE_SYSTEM_NAME } MATCHES "Android|Linux" )
87+ target_link_options (hexagon-npu-host PUBLIC -pie )
88+ endif ()
16089
161- foreach (RUNTIME_LIB ${NPU_RUNTIME_LIBS} )
162- message ("Copy: ${RUNTIME_LIB} -> ${CMAKE_RUNTIME_OUTPUT_DIRECTORY } " )
163- add_custom_command (
164- TARGET hexagon-npu-host POST_BUILD
165- COMMAND ${CMAKE_COMMAND } -E copy
166- ${RUNTIME_LIB}
167- ${CMAKE_RUNTIME_OUTPUT_DIRECTORY } )
168- endforeach ()
90+ if (GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING)
91+ message ("GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING is enabled" )
92+ target_compile_definitions (hexagon-npu-host PUBLIC GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING )
16993else ()
170- # hexagon npu build, this section will run inside the `build_cmake` script
171- cmake_minimum_required (VERSION 3.14.3 )
172- project (hexagon_npu C CXX ASM )
173-
174- # check if QNN_SDK_ROOT is set
175- if (NOT DEFINED ENV{QNN_SDK_ROOT})
176- message (FATAL_ERROR "QNN_SDK_ROOT not defined" )
177- endif ()
178-
179- set (QNN_SDK_ROOT $ENV{QNN_SDK_ROOT} )
180- message ("QNN_SDK_ROOT: ${QNN_SDK_ROOT} " )
181- message ("GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS: ${GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS} " )
182-
183- include_directories (
184- ${QNN_SDK_ROOT} /include/QNN/
185- )
186- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -std=c++17" )
187-
188- file (GLOB common_srcs "${CMAKE_CURRENT_LIST_DIR } /common/*.cpp" )
189- file (GLOB device_srcs "${CMAKE_CURRENT_LIST_DIR } /device/*.cpp" )
190- file (GLOB device_op_srcs "${CMAKE_CURRENT_LIST_DIR } /device/op/*.cpp" )
191- set (skel_srcs "${CMAKE_CURRENT_BINARY_DIR } /npu_device_skel.c" )
192- add_library (hexagon_npu_skel_OBJS OBJECT
193- ${common_srcs}
194- ${device_srcs}
195- ${device_op_srcs}
196- ${skel_srcs}
197- )
198-
199- if (CMAKE_BUILD_TYPE MATCHES "Debug|Dbg" )
200- message ("Debug build, enable all logging" )
201- target_compile_definitions (hexagon_npu_skel_OBJS PUBLIC
202- _DEBUG
203- DEBUG_LOGGING
204- )
205- else ()
206- message ("Release build, disable debug logging" )
207- target_compile_definitions (hexagon_npu_skel_OBJS PUBLIC
208- NDEBUG
209- RELEASE_LOGGING
210- )
211- endif ()
212-
213- if (GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS)
214- message ("GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS is enabled" )
215- target_compile_definitions (hexagon_npu_skel_OBJS PUBLIC
216- GGML_HEXAGON_ENABLE_QUANTIZED_TENSORS
217- )
218- endif ()
219-
220- if (GGML_HEXAGON_NPU_SANITIZE_ADDRESS)
221- message ("GGML_HEXAGON_NPU_SANITIZE_ADDRESS is enabled" )
222- target_compile_options (hexagon_npu_skel_OBJS PUBLIC
223- -fsanitize=address -fno-omit-frame-pointer
224- )
225- target_link_options (hexagon_npu_skel_OBJS PUBLIC
226- -fsanitize=address
227- )
228- endif ()
229-
230- if (GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING)
231- message ("GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING is enabled" )
232- target_compile_definitions (hexagon_npu_skel_OBJS PUBLIC
233- GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING
234- )
235- endif ()
236-
237- build_idl (idl/hexagon_npu.idl hexagon_npu_skel_OBJS )
238-
239- add_subdirectory (${HEXAGON_SDK_ROOT} /libs/qprintf qprintf_dir )
240- target_include_directories (hexagon_npu_skel_OBJS PUBLIC
241- ${HEXAGON_SDK_ROOT} /libs/qprintf/inc/
242-
243- # TODO: find a better way to include these
244- ${CMAKE_CURRENT_LIST_DIR } /device/
245- ${CMAKE_CURRENT_LIST_DIR } /device/op/
246- )
247-
248- # disable warnings for the skel
249- set_source_files_properties (
250- ${skel_srcs}
251- PROPERTIES
252- COMPILE_FLAGS "-w"
253- )
254-
255- add_library (hexagon_npu_skel SHARED $<TARGET_OBJECTS :hexagon_npu_skel_OBJS >)
256- target_link_libraries (hexagon_npu_skel
257- ${HEXAGON_LIB_DIR} /${HEXAGON_ARCH}/G0/pic/libc++abi.so.1
258- ${HEXAGON_LIB_DIR} /${HEXAGON_ARCH}/G0/pic/libc++.so.1
259- ${HEXAGON_LIB_DIR} /${HEXAGON_ARCH}/G0/pic/libc.so
260- )
261- set_target_properties (hexagon_npu_skel PROPERTIES OUTPUT_NAME "hexagon_npu_skel_${HEXAGON_ARCH} " )
262- target_link_libraries (hexagon_npu_skel qprintf_static )
263-
264- copy_binaries (hexagon_npu_skel )
94+ message ("GGML_HEXAGON_ENABLE_PERFORMANCE_TRACKING is disabled" )
26595endif ()
96+
97+ link_options (hexagon-npu-host )
98+
99+ choose_dsprpc ("3" dsprpc ) # cdsprpc
100+ link_custom_library (hexagon-npu-host ${dsprpc} )
101+
102+ cmake_host_system_information (RESULT BUILD_CPU_COUNT QUERY NUMBER_OF_PHYSICAL_CORES )
103+
104+ # Build HTP bits
105+ set (HTP_CMAKE_ARGS
106+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_SOURCE_DIR } /../../ggml-hexagon/htp/cmake-toolchain.cmake
107+ -DCMAKE_BUILD_TYPE=Release
108+ -DCMAKE_INSTALL_LIBDIR=${CMAKE_CURRENT_BINARY_DIR }
109+ -DHEXAGON_SDK_ROOT=$ENV{HEXAGON_SDK_ROOT}
110+ -DHEXAGON_TOOLS_ROOT=$ENV{HEXAGON_TOOLS_ROOT}
111+ -DHEXAGON_HTP_DEBUG=${GGML_HEXAGON_HTP_DEBUG}
112+ -DGGML_HEXAGON_FP32_QUANTIZE_GROUP_SIZE=${GGML_HEXAGON_FP32_QUANTIZE_GROUP_SIZE} )
113+
114+ ExternalProject_Add (hexagon_npu_skel_v73
115+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR } /device BUILD_ALWAYS ON
116+ CMAKE_ARGS ${HTP_CMAKE_ARGS} -DDSP_VERSION=v73 -DPREBUILT_LIB_DIR="toolv19_v73" )
117+ ExternalProject_Add (hexagon_npu_skel_v75
118+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR } /device BUILD_ALWAYS ON
119+ CMAKE_ARGS ${HTP_CMAKE_ARGS} -DDSP_VERSION=v75 -DPREBUILT_LIB_DIR="toolv19_v75" )
120+ ExternalProject_Add (hexagon_npu_skel_v79
121+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR } /device BUILD_ALWAYS ON
122+ CMAKE_ARGS ${HTP_CMAKE_ARGS} -DDSP_VERSION=v79 -DPREBUILT_LIB_DIR="toolv19_v79" )
123+
124+ list (APPEND NPU_RUNTIME_LIBS "${HEXAGON_SDK_ROOT} /tools/utils/sysmon/sysMonApp" )
125+ list (APPEND NPU_RUNTIME_LIBS "${HEXAGON_SDK_ROOT} /tools/utils/sysmon/sysMonAppLE" )
126+
127+ # Install Hexagon skels required at runtime
128+ install (FILES
129+ ${CMAKE_CURRENT_BINARY_DIR } /libhexagon_npu_skel_v73.so
130+ ${CMAKE_CURRENT_BINARY_DIR } /libhexagon_npu_skel_v75.so
131+ ${CMAKE_CURRENT_BINARY_DIR } /libhexagon_npu_skel_v79.so
132+ ${HEXAGON_SDK_ROOT} /tools/utils/sysmon/sysMonApp
133+ ${HEXAGON_SDK_ROOT} /tools/utils/sysmon/sysMonAppLE
134+ TYPE LIB)
0 commit comments