Skip to content

Commit 9e07f7d

Browse files
author
zhouwg
committed
ggml-hexagon: simplify hexagon-kernel build logic in CMakeLists.txt
1 parent 254f4d5 commit 9e07f7d

File tree

3 files changed

+36
-21
lines changed

3 files changed

+36
-21
lines changed

ggml/src/ggml-qnn/CMakeLists.txt

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
message(STATUS "Using QNN backend")
1+
project(ggml-qnn)
2+
message(STATUS "Using HEXAGON backend")
23
message("CMAKE_SYSTEM_NAME : ${CMAKE_SYSTEM_NAME}")
34

45
if(NOT DEFINED QNN_SDK_PATH)
@@ -9,8 +10,9 @@ if(NOT DEFINED HEXAGON_SDK_PATH)
910
message(FATAL_ERROR "HEXAGON_SDK_PATH not defined")
1011
endif()
1112

12-
message("QNN_SDK_PATH: ${QNN_SDK_PATH}")
13+
message("QNN_SDK_PATH : ${QNN_SDK_PATH}")
1314
message("HEXAGON_SDK_PATH: ${HEXAGON_SDK_PATH}")
15+
message("HTP_ARCH_VERSION: ${HTP_ARCH_VERSION}")
1416

1517
if(CMAKE_SYSTEM_NAME STREQUAL "Android")
1618
find_library(LOG_LIB log)
@@ -37,7 +39,6 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Android")
3739
include_directories(${HEXAGON_SDK_PATH}/libs/atomic/android_Debug_aarch64/ship)
3840
include_directories(${CMAKE_SOURCE_DIR}/ggml/src/ggml-qnn/)
3941
include_directories(${CMAKE_SOURCE_DIR}/ggml/src/ggml-qnn/kernels/)
40-
4142
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
4243
set(QNN_DEFAULT_LIB_SEARCH_PATH "C:\\" CACHE STRING "customized library search path for QNN backend")
4344
else()
@@ -55,3 +56,20 @@ target_link_libraries(ggml-qnn PRIVATE ${QNN_LINK_LIBRARIES})
5556

5657
string(REGEX REPLACE "/$" "" QNN_DEFAULT_LIB_SEARCH_PATH "${QNN_DEFAULT_LIB_SEARCH_PATH}")
5758
target_compile_definitions(ggml-qnn PRIVATE QNN_DEFAULT_LIB_SEARCH_PATH="${QNN_DEFAULT_LIB_SEARCH_PATH}/")
59+
60+
function(ggml_hexagon_build_kernel KNAME)
61+
message(STATUS "ggml_hexagon: build kernel ${KNAME}")
62+
63+
add_custom_command(
64+
TARGET ${PROJECT_NAME}
65+
POST_BUILD
66+
COMMAND echo "current working path:`pwd`\n"
67+
COMMAND echo "${CMAKE_CURRENT_LIST_DIR}/kernels"
68+
COMMAND make -C ${CMAKE_CURRENT_LIST_DIR}/kernels/ clean
69+
COMMAND make -C ${CMAKE_CURRENT_LIST_DIR}/kernels/ HEXAGON_SDK_PATH=${HEXAGON_SDK_PATH} HTP_ARCH_VERSION=${HTP_ARCH_VERSION}
70+
COMMAND echo "`pwd`"
71+
COMMENT "build hexagon-kernel"
72+
)
73+
endfunction()
74+
75+
ggml_hexagon_build_kernel("cdsp")

ggml/src/ggml-qnn/kernels/Makefile

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
HEXAGON_SDK_PATH=/opt/qcom/Hexagon_SDK/6.2.0.1
1+
TARGET=libggmlop_skel${HTP_ARCH_VERSION}.so
22

3-
TARGET=libggmlop_skel.so
3+
$(info HEXAGON_SDK_PATH:${HEXAGON_SDK_PATH})
4+
$(info HTP_ARCH_VERSION:${HTP_ARCH_VERSION})
45

56
INCS=-I${HEXAGON_SDK_PATH}/incs -I${HEXAGON_SDK_PATH}/libs/qprintf/inc -I${HEXAGON_SDK_PATH}/incs/stddef -I${HEXAGON_SDK_PATH}/ipc/fastrpc/incs -I${HEXAGON_SDK_PATH}/ipc/fastrpc/rpcmem/inc -I${HEXAGON_SDK_PATH}/utils/examples -I${HEXAGON_SDK_PATH}/ipc/fastrpc/rtld/ship/inc -I${HEXAGON_SDK_PATH}/libs/atomic/inc -I${HEXAGON_SDK_PATH}/utils/sim_utils/inc
67

7-
CFLAGS=-mv75 -c -Ofast -Wall -Wstrict-prototypes -fno-zero-initialized-in-bss -fdata-sections -fpic -D__V_DYNAMIC__ -mhvx -mhvx-length=128B ${INCS}
8+
CFLAGS=-m${HTP_ARCH_VERSION} -c -Ofast -Wall -Wstrict-prototypes -fno-zero-initialized-in-bss -fdata-sections -fpic -D__V_DYNAMIC__ -mhvx -mhvx-length=128B ${INCS}
89

9-
LDFLAGS=-mv75 -Wl,--defsym=ISDB_TRUSTED_FLAG=2 -Wl,--defsym=ISDB_SECURE_FLAG=2 -Wl,--no-threads -fpic -shared -Wl,-Bsymbolic -Wl,--wrap=malloc -Wl,--wrap=calloc -Wl,--wrap=free -Wl,--wrap=realloc -Wl,--wrap=memalign -lc -Wl,-soname=${TARGET}
10+
LDFLAGS=-m${HTP_ARCH_VERSION} -Wl,--defsym=ISDB_TRUSTED_FLAG=2 -Wl,--defsym=ISDB_SECURE_FLAG=2 -Wl,--no-threads -fpic -shared -Wl,-Bsymbolic -Wl,--wrap=malloc -Wl,--wrap=calloc -Wl,--wrap=free -Wl,--wrap=realloc -Wl,--wrap=memalign -lc -Wl,-soname=${TARGET}
1011

1112
SRCS = ggmlop_cdsp.c ggmlop_cdsp_skel.c
1213
OBJS = $(patsubst %.c, %.o, $(SRCS))

scripts/build-run-android.sh

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,15 @@ QNN_SDK_URL=https://www.qualcomm.com/developer/software/qualcomm-ai-engine-direc
1616
QNN_SDK_INSTALL_PATH=/opt/qcom/aistack/qairt/
1717
QNN_SDK_VERSION=2.32.0.250228
1818
QNN_SDK_PATH=${QNN_SDK_INSTALL_PATH}/${QNN_SDK_VERSION}
19+
1920
HEXAGON_SDK_PATH=/opt/qcom/Hexagon_SDK/6.2.0.1
21+
#available htp arch version:
22+
#v68 --- Snapdragon 888
23+
#v69 --- Snapdragon 8 Gen1
24+
#v73 --- Snapdragon 8 Gen2
25+
#v75 --- Snapdragon 8 Gen3
26+
#v79 --- Snapdragon 8 Elite(aka Gen4)
27+
HTP_ARCH_VERSION=v75
2028

2129
qnnparams=" -mg 2 -ngl 99 "
2230

@@ -107,26 +115,14 @@ function check_and_download_ndk()
107115
}
108116

109117

110-
function build_dsp
111-
{
112-
cd ggml/src/ggml-qnn/kernels/
113-
show_pwd
114-
make clean
115-
make
116-
cd -
117-
}
118-
119-
120118
function build_arm64
121119
{
122-
cmake -H. -B./out/android -DCMAKE_BUILD_TYPE=Release -DGGML_OPENMP=OFF -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=latest -DCMAKE_C_FLAGS=-march=armv8.7-a -DGGML_QNN=ON -DQNN_SDK_PATH=${QNN_SDK_PATH} -DHEXAGON_SDK_PATH=${HEXAGON_SDK_PATH}
120+
cmake -H. -B./out/android -DCMAKE_BUILD_TYPE=Release -DGGML_OPENMP=OFF -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=latest -DCMAKE_C_FLAGS=-march=armv8.7-a -DGGML_QNN=ON -DQNN_SDK_PATH=${QNN_SDK_PATH} -DHEXAGON_SDK_PATH=${HEXAGON_SDK_PATH} -DHTP_ARCH_VERSION=${HTP_ARCH_VERSION}
123121
cd out/android
124122
make -j16
125123
show_pwd
126124

127125
cd -
128-
129-
build_dsp
130126
}
131127

132128

@@ -201,7 +197,7 @@ function prepare_run_on_phone()
201197
fi
202198
adb push ./out/android/bin/${program} ${REMOTE_PATH}/
203199
adb shell chmod +x ${REMOTE_PATH}/${program}
204-
adb push ggml/src/ggml-qnn/kernels/libggmlop_skel.so ${REMOTE_PATH}/
200+
adb push ggml/src/ggml-qnn/kernels/libggmlop_skel${HTP_ARCH_VERSION}.so ${REMOTE_PATH}/libggmlop_skel.so
205201
}
206202

207203
function run_llamacli()

0 commit comments

Comments
 (0)