steps:
- name: Clone
uses: actions/checkout@v6
-
- # Disabled due to size (400MB) and always 0 cache hits
- # - name: ccache
- # uses: ggml-org/ccache-action@v1.2.16
- # with:
- # key: android-build
- # evict-old-files: 1d
+ with:
+ fetch-depth: 0
+ lfs: false
- name: Set up JDK
uses: actions/setup-java@v5
android-ndk:
runs-on: ubuntu-latest
-
- env:
- OPENCL_VERSION: 2025.07.22
-
+ container:
+ image: 'ghcr.io/snapdragon-toolchain/arm64-android:v0.3'
+ defaults:
+ run:
+ shell: bash
strategy:
matrix:
include:
- name: Clone
id: checkout
uses: actions/checkout@v6
+ with:
+ fetch-depth: 0
+ lfs: false
- - name: Install OpenCL Headers and Libs
- id: install_opencl
- if: ${{ matrix.build == 'arm64-snapdragon' }}
- run: |
- mkdir opencl
- curl -L -o opencl/clhpp.tar.gz https://github.com/KhronosGroup/OpenCL-CLHPP/archive/refs/tags/v${OPENCL_VERSION}.tar.gz
- curl -L -o opencl/headers.tar.gz https://github.com/KhronosGroup/OpenCL-Headers/archive/refs/tags/v${OPENCL_VERSION}.tar.gz
- curl -L -o opencl/icd-loader.tar.gz https://github.com/KhronosGroup/OpenCL-ICD-Loader/archive/refs/tags/v${OPENCL_VERSION}.tar.gz
- tar -xaf opencl/headers.tar.gz -C opencl
- tar -xaf opencl/clhpp.tar.gz -C opencl
- tar -xaf opencl/icd-loader.tar.gz -C opencl
- sudo cp -r opencl/OpenCL-Headers-${OPENCL_VERSION}/CL ${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include
- sudo cp -r opencl/OpenCL-CLHPP-${OPENCL_VERSION}/include/CL/* ${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/CL
- cd opencl/OpenCL-ICD-Loader-${OPENCL_VERSION}
- 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
- cmake --build build
- sudo cp build/libOpenCL.so ${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android
- rm -rf opencl
-
- - name: Install Hexagon SDK
- id: install_hexsdk
- if: ${{ matrix.build == 'arm64-snapdragon' }}
- env:
- HEXSDK_VER: 6.4.0.2
- HEXTLS_VER: 19.0.04
- run: |
- 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
- mkdir hex-sdk
- tar -xaf hex-sdk.tar.gz -C hex-sdk
- ls -l hex-sdk
- sudo mv hex-sdk /opt/hexagon
- echo "HEXAGON_SDK_ROOT=/opt/hexagon/$HEXSDK_VER" >> "$GITHUB_ENV"
- echo "HEXAGON_TOOLS_ROOT=/opt/hexagon/$HEXSDK_VER/tools/HEXAGON_Tools/$HEXTLS_VER" >> "$GITHUB_ENV"
- echo "DEFAULT_HLOS_ARCH=64" >> "$GITHUB_ENV"
- echo "DEFAULT_TOOLS_VARIANT=toolv19" >> "$GITHUB_ENV"
- echo "DEFAULT_NO_QURT_INC=0" >> "$GITHUB_ENV"
- echo "DEFAULT_DSP_ARCH=v73" >> "$GITHUB_ENV"
-
- - name: Update CMake presets
- id: update_presets
- if: ${{ matrix.build == 'arm64-snapdragon' }}
- run: |
- cp docs/backend/snapdragon/CMakeUserPresets.json .
-
- - name: Build
- id: ndk_build
+ - name: Build Llama.CPP for Hexagon Android
+ id: build_llama_cpp_hexagon_android
run: |
+ if [[ "${{ matrix.build }}" == "arm64-snapdragon" ]]; then
+ cp docs/backend/snapdragon/CMakeUserPresets.json .
+ fi
cmake ${{ matrix.defines }} -B build
cmake --build build
cmake --install build --prefix pkg-adb/llama.cpp
- - name: Test
- id: cmake_test
- run: |
- echo "FIXME: test on devices"
+ - name: Upload Llama.CPP Hexagon Android Build Artifact
+ if: ${{ always() && steps.build_llama_cpp_hexagon_android.outcome == 'success' }}
+ uses: actions/upload-artifact@v6
+ with:
+ name: llama-cpp-android-${{ matrix.build }}
+ path: pkg-adb/llama.cpp