@@ -1305,6 +1305,81 @@ jobs:
13051305 cd examples/llama.android
13061306 ./gradlew build --no-daemon
13071307
1308+ android-ndk-build :
1309+ runs-on : ubuntu-latest
1310+
1311+ env :
1312+ OPENCL_VERSION : 2025.07.22
1313+
1314+ strategy :
1315+ matrix :
1316+ include :
1317+ - build : ' arm64-cpu'
1318+ defines : ' -D ANDROID_ABI=arm64-v8a -D ANDROID_PLATFORM=android-31 -D CMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake -D GGML_NATIVE=OFF -DGGML_CPU_ARM_ARCH=armv8.5-a+fp16+i8mm -G Ninja -D LLAMA_CURL=OFF -D GGML_OPENMP=OFF'
1319+ - build : ' arm64-snapdragon'
1320+ defines : ' --preset arm64-android-snapdragon-release'
1321+
1322+ steps :
1323+ - name : Clone
1324+ id : checkout
1325+ uses : actions/checkout@v4
1326+
1327+ - name : Install OpenCL Headers and Libs
1328+ id : install_opencl
1329+ if : ${{ matrix.build == 'arm64-snapdragon' }}
1330+ run : |
1331+ mkdir opencl
1332+ curl -L -o opencl/clhpp.tar.gz https://github.com/KhronosGroup/OpenCL-CLHPP/archive/refs/tags/v${OPENCL_VERSION}.tar.gz
1333+ curl -L -o opencl/headers.tar.gz https://github.com/KhronosGroup/OpenCL-Headers/archive/refs/tags/v${OPENCL_VERSION}.tar.gz
1334+ curl -L -o opencl/icd-loader.tar.gz https://github.com/KhronosGroup/OpenCL-ICD-Loader/archive/refs/tags/v${OPENCL_VERSION}.tar.gz
1335+ tar -xaf opencl/headers.tar.gz -C opencl
1336+ tar -xaf opencl/clhpp.tar.gz -C opencl
1337+ tar -xaf opencl/icd-loader.tar.gz -C opencl
1338+ sudo cp -r opencl/OpenCL-Headers-${OPENCL_VERSION}/CL ${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include
1339+ sudo cp -r opencl/OpenCL-CLHPP-${OPENCL_VERSION}/include/CL/* ${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/CL
1340+ cd opencl/OpenCL-ICD-Loader-${OPENCL_VERSION}
1341+ cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake -DOPENCL_ICD_LOADER_HEADERS_DIR=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=31 -DANDROID_STL=c++_shared
1342+ cmake --build build
1343+ sudo cp build/libOpenCL.so ${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android
1344+ rm -rf opencl
1345+
1346+ - name : Install Hexagon SDK
1347+ id : install_hexsdk
1348+ if : ${{ matrix.build == 'arm64-snapdragon' }}
1349+ env :
1350+ HEXSDK_VER : 6.4.0.2
1351+ HEXTLS_VER : 19.0.04
1352+ run : |
1353+ curl -L -o hex-sdk.tar.gz https://github.com/snapdragon-toolchain/hexagon-sdk/releases/download/v$HEXSDK_VER/hexagon-sdk-v$HEXSDK_VER-amd64-lnx.tar.xz
1354+ mkdir hex-sdk
1355+ tar -xaf hex-sdk.tar.gz -C hex-sdk
1356+ ls -l hex-sdk
1357+ sudo mv hex-sdk /opt/hexagon
1358+ echo "HEXAGON_SDK_ROOT=/opt/hexagon/$HEXSDK_VER" >> "$GITHUB_ENV"
1359+ echo "HEXAGON_TOOLS_ROOT=/opt/hexagon/$HEXSDK_VER/tools/HEXAGON_Tools/$HEXTLS_VER" >> "$GITHUB_ENV"
1360+ echo "DEFAULT_HLOS_ARCH=64" >> "$GITHUB_ENV"
1361+ echo "DEFAULT_TOOLS_VARIANT=toolv19" >> "$GITHUB_ENV"
1362+ echo "DEFAULT_NO_QURT_INC=0" >> "$GITHUB_ENV"
1363+ echo "DEFAULT_DSP_ARCH=v73" >> "$GITHUB_ENV"
1364+
1365+ - name : Update CMake presets
1366+ id : update_presets
1367+ if : ${{ matrix.build == 'arm64-snapdragon' }}
1368+ run : |
1369+ cp docs/backend/hexagon/CMakeUserPresets.json .
1370+
1371+ - name : Build
1372+ id : ndk_build
1373+ run : |
1374+ cmake ${{ matrix.defines }} -B build
1375+ cmake --build build
1376+ cmake --install build --prefix pkg-adb/llama.cpp
1377+
1378+ - name : Test
1379+ id : cmake_test
1380+ run : |
1381+ echo "FIXME: test on devices"
1382+
13081383 openEuler-latest-cmake-cann :
13091384 if : ${{ github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'Ascend NPU') }}
13101385 defaults :
0 commit comments