with:
name: llama-cpp-android-arm64-cpu
path: pkg-adb/llama.cpp
+
+ android-arm64:
+ runs-on: ubuntu-latest
+
+ env:
+ NDK_VERSION: "29.0.14206865"
+
+ steps:
+ - name: Clone
+ id: checkout
+ uses: actions/checkout@v6
+
+ - name: ccache
+ uses: ggml-org/ccache-action@v1.2.21
+ with:
+ key: android-arm64
+ evict-old-files: 1d
+ save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
+
+ - name: Set up JDK
+ uses: actions/setup-java@v5
+ with:
+ java-version: 17
+ distribution: temurin
+
+ - name: Setup Android SDK
+ uses: android-actions/setup-android@40fd30fb8d7440372e1316f5d1809ec01dcd3699 # v4.0.1
+ with:
+ log-accepted-android-sdk-licenses: false
+
+ - name: Install NDK
+ run: |
+ sdkmanager "ndk;${{ env.NDK_VERSION }}"
+ echo "ANDROID_NDK=${ANDROID_SDK_ROOT}/ndk/${{ env.NDK_VERSION }}" >> $GITHUB_ENV
+
+ - name: Build
+ id: cmake_build
+ run: |
+ cmake -B build \
+ -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
+ -DANDROID_ABI=arm64-v8a \
+ -DANDROID_PLATFORM=android-28 \
+ -DLLAMA_FATAL_WARNINGS=ON \
+ -DGGML_BACKEND_DL=ON \
+ -DGGML_NATIVE=OFF \
+ -DGGML_CPU_ALL_VARIANTS=ON \
+ -DGGML_OPENMP=OFF \
+ -DLLAMA_BUILD_BORINGSSL=ON \
+ -DGGML_RPC=ON
+ time cmake --build build --config Release -j $(nproc)
--- /dev/null
+name: CI (hip)
+
+on:
+ workflow_dispatch: # allows manual triggering
+ push:
+ branches:
+ - master
+ paths: [
+ '.github/workflows/build-hip.yml',
+ '**/CMakeLists.txt',
+ '**/.cmake',
+ '**/*.h',
+ '**/*.hpp',
+ '**/*.c',
+ '**/*.cpp',
+ '**/*.cu',
+ '**/*.cuh'
+ ]
+
+ pull_request:
+ types: [opened, synchronize, reopened]
+ paths: [
+ '.github/workflows/build-hip.yml',
+ 'ggml/src/ggml-cuda/**'
+ ]
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}
+ cancel-in-progress: true
+
+env:
+ GGML_NLOOP: 3
+ GGML_N_THREADS: 1
+ LLAMA_LOG_COLORS: 1
+ LLAMA_LOG_PREFIX: 1
+ LLAMA_LOG_TIMESTAMPS: 1
+
+jobs:
+
+ ubuntu-22-hip:
+ runs-on: ubuntu-22.04
+ container: rocm/dev-ubuntu-22.04:6.1.2
+
+ steps:
+ - name: Clone
+ id: checkout
+ uses: actions/checkout@v6
+
+ - name: Dependencies
+ id: depends
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y build-essential git cmake rocblas-dev hipblas-dev libssl-dev rocwmma-dev
+
+ - name: ccache
+ uses: ggml-org/ccache-action@v1.2.21
+ with:
+ key: ubuntu-22-hip
+ evict-old-files: 1d
+ save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
+
+ - name: Build with native CMake HIP support
+ id: cmake_build
+ run: |
+ cmake -B build -S . \
+ -DCMAKE_HIP_COMPILER="$(hipconfig -l)/clang" \
+ -DGGML_HIP_ROCWMMA_FATTN=ON \
+ -DGPU_TARGETS="gfx1030" \
+ -DGGML_HIP=ON
+ cmake --build build --config Release -j $(nproc)
+
+ windows-latest-hip:
+ runs-on: windows-2022
+
+ env:
+ # Make sure this is in sync with build-cache.yml
+ HIPSDK_INSTALLER_VERSION: "26.Q1"
+
+ steps:
+ - name: Clone
+ id: checkout
+ uses: actions/checkout@v6
+
+ - name: Grab rocWMMA package
+ id: grab_rocwmma
+ run: |
+ curl -o rocwmma.deb "https://repo.radeon.com/rocm/apt/7.2.1/pool/main/r/rocwmma-dev/rocwmma-dev_2.2.0.70201-81~24.04_amd64.deb"
+ 7z x rocwmma.deb
+ 7z x data.tar
+
+ - name: Use ROCm Installation Cache
+ uses: actions/cache@v5
+ id: cache-rocm
+ with:
+ path: C:\Program Files\AMD\ROCm
+ key: rocm-${{ env.HIPSDK_INSTALLER_VERSION }}-${{ runner.os }}
+
+ - name: Setup ROCm
+ if: steps.cache-rocm.outputs.cache-hit != 'true'
+ uses: ./.github/actions/windows-setup-rocm
+ with:
+ version: ${{ env.HIPSDK_INSTALLER_VERSION }}
+
+ - name: Verify ROCm
+ id: verify
+ run: |
+ # Find and test ROCm installation
+ $clangPath = Get-ChildItem 'C:\Program Files\AMD\ROCm\*\bin\clang.exe' | Select-Object -First 1
+ if (-not $clangPath) {
+ Write-Error "ROCm installation not found"
+ exit 1
+ }
+ & $clangPath.FullName --version
+
+ - name: Install ccache
+ uses: ggml-org/ccache-action@v1.2.21
+ with:
+ key: ${{ github.job }}
+ evict-old-files: 1d
+ save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
+
+ - name: Build
+ id: cmake_build
+ run: |
+ $env:HIP_PATH=$(Resolve-Path 'C:\Program Files\AMD\ROCm\*\bin\clang.exe' | split-path | split-path)
+ $env:CMAKE_PREFIX_PATH="${env:HIP_PATH}"
+ cmake -G "Unix Makefiles" -B build -S . `
+ -DCMAKE_C_COMPILER="${env:HIP_PATH}\bin\clang.exe" `
+ -DCMAKE_CXX_COMPILER="${env:HIP_PATH}\bin\clang++.exe" `
+ -DCMAKE_CXX_FLAGS="-I$($PWD.Path.Replace('\', '/'))/opt/rocm-7.2.1/include/" `
+ -DCMAKE_BUILD_TYPE=Release `
+ -DLLAMA_BUILD_BORINGSSL=ON `
+ -DROCM_DIR="${env:HIP_PATH}" `
+ -DGGML_HIP=ON `
+ -DGGML_HIP_ROCWMMA_FATTN=ON `
+ -DGPU_TARGETS="gfx1100" `
+ -DGGML_RPC=ON
+ cmake --build build -j ${env:NUMBER_OF_PROCESSORS}
+
+ ubuntu-22-musa:
+ runs-on: ubuntu-22.04
+ container: mthreads/musa:rc4.3.0-devel-ubuntu22.04-amd64
+
+ steps:
+ - name: Clone
+ id: checkout
+ uses: actions/checkout@v6
+
+ - name: Dependencies
+ id: depends
+ run: |
+ apt-get update
+ apt-get install -y build-essential git cmake libssl-dev
+
+ - name: ccache
+ uses: ggml-org/ccache-action@v1.2.21
+ with:
+ key: ubuntu-22-musa
+ evict-old-files: 1d
+ save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
+
+ - name: Build with native CMake MUSA support
+ id: cmake_build
+ run: |
+ cmake -B build -S . \
+ -DGGML_MUSA=ON
+ time cmake --build build --config Release -j $(nproc)
--- /dev/null
+name: CI (ibm)
+
+on:
+ workflow_dispatch: # allows manual triggering
+ push:
+ branches:
+ - master
+ paths: [
+ '.github/workflows/build-ibm.yml',
+ '**/CMakeLists.txt',
+ '**/.cmake',
+ '**/*.h',
+ '**/*.hpp',
+ '**/*.c',
+ '**/*.cpp'
+ ]
+
+ pull_request:
+ types: [opened, synchronize, reopened]
+ paths: [
+ '.github/workflows/build-ibm.yml',
+ 'ggml/src/ggml-cpu/**'
+ ]
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}
+ cancel-in-progress: true
+
+env:
+ GGML_NLOOP: 3
+ GGML_N_THREADS: 1
+ LLAMA_LOG_COLORS: 1
+ LLAMA_LOG_PREFIX: 1
+ LLAMA_LOG_TIMESTAMPS: 1
+
+jobs:
+
+ ubuntu-24-s390x:
+ runs-on: ubuntu-24.04-s390x
+
+ steps:
+ - name: Clone
+ id: checkout
+ uses: actions/checkout@v6
+
+ - name: Build Dependencies
+ id: build_depends
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y --no-install-recommends \
+ python3 python3-pip python3-dev python3-wheel \
+ libjpeg-dev build-essential libssl-dev \
+ git-lfs
+
+ - name: Toolchain workaround (GCC 14)
+ run: |
+ sudo apt-get install -y gcc-14 g++-14
+ echo "CC=gcc-14" >> "$GITHUB_ENV"
+ echo "CXX=g++-14" >> "$GITHUB_ENV"
+
+ - name: Python Dependencies
+ id: python_depends
+ run: |
+ export PIP_BREAK_SYSTEM_PACKAGES="1"
+ python3 -m pip install --upgrade pip setuptools
+ pip3 install ./gguf-py
+
+ - name: Swap Endianness
+ id: endianness
+ run: |
+ for f in models/*.gguf; do
+ echo YES | python3 gguf-py/gguf/scripts/gguf_convert_endian.py $f big
+ done
+
+ - name: Build
+ id: cmake_build
+ run: |
+ cmake -B build \
+ -DLLAMA_FATAL_WARNINGS=ON \
+ -DGGML_RPC=ON
+ time cmake --build build --config Release -j $(nproc)
+
+ - name: Test
+ id: cmake_test
+ run: |
+ cd build
+ ctest -L main --verbose --timeout 900
+
+ - name: Test llama2c (s390x)
+ id: llama2c_test_s390x
+ run: |
+ cd build
+ echo "Fetch llama2c big-endian model"
+ wget https://huggingface.co/ggml-org/models/resolve/main/tinyllamas/stories260K-be.gguf
+ ./bin/llama-completion -m stories260K-be.gguf -p "One day, Lily met a Shoggoth" -n 500 -c 256
+
+ ubuntu-24-ppc64le:
+ runs-on: ubuntu-24.04-ppc64le
+
+ steps:
+ - name: Clone
+ id: checkout
+ uses: actions/checkout@v6
+
+ - name: Build Dependencies
+ id: build_depends
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y --no-install-recommends \
+ python3 python3-pip python3-dev python3-wheel \
+ libjpeg-dev build-essential libssl-dev \
+ git-lfs
+
+ - name: Toolchain workaround (GCC 14)
+ run: |
+ sudo apt-get install -y gcc-14 g++-14
+ echo "CC=gcc-14" >> "$GITHUB_ENV"
+ echo "CXX=g++-14" >> "$GITHUB_ENV"
+
+ - name: Python Dependencies
+ id: python_depends
+ run: |
+ export PIP_BREAK_SYSTEM_PACKAGES="1"
+ python3 -m pip install --upgrade pip setuptools
+ pip3 install ./gguf-py
+
+ - name: Build
+ id: cmake_build
+ run: |
+ cmake -B build \
+ -DLLAMA_FATAL_WARNINGS=ON \
+ -DGGML_RPC=ON
+ time cmake --build build --config Release -j $(nproc)
+
+ - name: Test
+ id: cmake_test
+ run: |
+ cd build
+ ctest -L main --verbose --timeout 900
+
+ - name: Test llama2c conversion
+ id: llama2c_test
+ run: |
+ cd build
+ echo "Fetch tokenizer"
+ wget https://huggingface.co/karpathy/tinyllamas/resolve/main/stories260K/tok512.bin
+ echo "Fetch llama2c model"
+ wget https://huggingface.co/karpathy/tinyllamas/resolve/main/stories260K/stories260K.bin
+ ./bin/llama-convert-llama2c-to-ggml --copy-vocab-from-model ./tok512.bin --llama2c-model stories260K.bin --llama2c-output-model stories260K.gguf
+ ./bin/llama-completion -m stories260K.gguf -p "One day, Lily met a Shoggoth" -n 500 -c 256
--- /dev/null
+name: CI (opencl)
+
+on:
+ workflow_dispatch: # allows manual triggering
+ push:
+ branches:
+ - master
+ paths: [
+ '.github/workflows/build-opencl.yml',
+ '**/CMakeLists.txt',
+ '**/.cmake',
+ '**/*.h',
+ '**/*.hpp',
+ '**/*.c',
+ '**/*.cpp',
+ '**/*.cl'
+ ]
+
+ pull_request:
+ types: [opened, synchronize, reopened]
+ paths: [
+ '.github/workflows/build-opencl.yml',
+ 'ggml/src/ggml-opencl/**'
+ ]
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}
+ cancel-in-progress: true
+
+env:
+ GGML_NLOOP: 3
+ GGML_N_THREADS: 1
+ LLAMA_LOG_COLORS: 1
+ LLAMA_LOG_PREFIX: 1
+ LLAMA_LOG_TIMESTAMPS: 1
+
+jobs:
+
+ windows-latest-opencl-adreno:
+ runs-on: windows-2025
+
+ steps:
+ - name: Clone
+ id: checkout
+ uses: actions/checkout@v6
+
+ - name: ccache
+ uses: ggml-org/ccache-action@v1.2.21
+ with:
+ key: windows-latest-llvm-arm64-opencl-adreno
+ variant: ccache
+ evict-old-files: 1d
+ save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
+
+ - name: Install Ninja
+ id: install_ninja
+ run: |
+ choco install ninja
+
+ - name: Install OpenCL Headers and Libs
+ id: install_opencl
+ run: |
+ git clone https://github.com/KhronosGroup/OpenCL-Headers
+ cd OpenCL-Headers
+ cmake -B build `
+ -DBUILD_TESTING=OFF `
+ -DOPENCL_HEADERS_BUILD_TESTING=OFF `
+ -DOPENCL_HEADERS_BUILD_CXX_TESTS=OFF `
+ -DCMAKE_INSTALL_PREFIX="$env:RUNNER_TEMP/opencl-arm64-release"
+ cmake --build build --target install
+ git clone https://github.com/KhronosGroup/OpenCL-ICD-Loader
+ cd OpenCL-ICD-Loader
+ cmake -B build-arm64-release `
+ -A arm64 `
+ -DCMAKE_PREFIX_PATH="$env:RUNNER_TEMP/opencl-arm64-release" `
+ -DCMAKE_INSTALL_PREFIX="$env:RUNNER_TEMP/opencl-arm64-release"
+ cmake --build build-arm64-release --target install --config release
+
+ - name: Build
+ id: cmake_build
+ run: |
+ cmake -S . -B build -G "Ninja Multi-Config" -D CMAKE_TOOLCHAIN_FILE=cmake/arm64-windows-llvm.cmake -DCMAKE_PREFIX_PATH="$env:RUNNER_TEMP/opencl-arm64-release" -DGGML_OPENCL=ON -DGGML_OPENCL_USE_ADRENO_KERNELS=ON -DLLAMA_BUILD_BORINGSSL=ON
+ cmake --build build --config Release -j ${env:NUMBER_OF_PROCESSORS}
LLAMA_LOG_TIMESTAMPS: 1
jobs:
+ ubuntu-cpu-riscv64-native:
+ runs-on: ubuntu-24.04-riscv
+
+ steps:
+ - name: Install dependencies
+ run: |
+ # Install necessary packages
+ sudo apt-get update
+ sudo apt-get install -y libssl-dev
+
+ # Set gcc-14 and g++-14 as the default compilers
+ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 100
+ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-14 100
+
+ git lfs install
+
+ - name: Check environment
+ run: |
+ uname -a
+ gcc --version
+ g++ --version
+ ldd --version
+ cmake --version
+ rustc --version
+
+ - name: Clone
+ id: checkout
+ uses: actions/checkout@v6
+
+ - name: ccache
+ uses: ggml-org/ccache-action@afde29e5b5422e5da23cb1f639e8baecadeadfc3 # https://github.com/ggml-org/ccache-action/pull/1
+ with:
+ key: ubuntu-cpu-riscv64-native
+ evict-old-files: 1d
+ save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
+
+ - name: Build
+ id: cmake_build
+ run: |
+ cmake -B build \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DGGML_OPENMP=OFF \
+ -DLLAMA_BUILD_EXAMPLES=ON \
+ -DLLAMA_BUILD_TOOLS=ON \
+ -DLLAMA_BUILD_TESTS=ON \
+ -DCMAKE_C_COMPILER_LAUNCHER=ccache \
+ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
+ -DGGML_RPC=ON \
+ -DCMAKE_C_COMPILER=riscv64-linux-gnu-gcc-14 \
+ -DCMAKE_CXX_COMPILER=riscv64-linux-gnu-g++-14
+
+ time cmake --build build --config Release -j $(nproc)
+
+ - name: Test
+ id: cmake_test
+ run: |
+ cd build
+ ctest -L main --verbose --timeout 900
+
+ - name: Test llama2c conversion
+ id: llama2c_test
+ run: |
+ cd build
+ echo "Fetch tokenizer"
+ wget https://huggingface.co/karpathy/tinyllamas/resolve/main/stories260K/tok512.bin
+ echo "Fetch llama2c model"
+ wget https://huggingface.co/karpathy/tinyllamas/resolve/main/stories260K/stories260K.bin
+ ./bin/llama-convert-llama2c-to-ggml --copy-vocab-from-model ./tok512.bin --llama2c-model stories260K.bin --llama2c-output-model stories260K.gguf
+ ./bin/llama-completion -m stories260K.gguf -p "One day, Lily met a Shoggoth" -n 500 -c 256
+
ubuntu-riscv64-native-sanitizer:
runs-on: ubuntu-24.04-riscv
--- /dev/null
+name: CI (rpc)
+
+on:
+ workflow_dispatch: # allows manual triggering
+ push:
+ branches:
+ - master
+ paths: [
+ '.github/workflows/build-rpc.yml',
+ '**/CMakeLists.txt',
+ '**/.cmake',
+ '**/*.h',
+ '**/*.hpp',
+ '**/*.c',
+ '**/*.cpp'
+ ]
+
+ pull_request:
+ types: [opened, synchronize, reopened]
+ paths: [
+ '.github/workflows/build-rpc.yml',
+ 'ggml/src/ggml-rpc/**'
+ ]
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}
+ cancel-in-progress: true
+
+env:
+ GGML_NLOOP: 3
+ GGML_N_THREADS: 1
+ LLAMA_LOG_COLORS: 1
+ LLAMA_LOG_PREFIX: 1
+ LLAMA_LOG_TIMESTAMPS: 1
+
+jobs:
+
+ ubuntu-latest-rpc:
+ runs-on: ubuntu-latest
+
+ continue-on-error: true
+
+ steps:
+ - name: Clone
+ id: checkout
+ uses: actions/checkout@v6
+
+ - name: Dependencies
+ id: depends
+ run: |
+ sudo apt-get update
+ sudo apt-get install build-essential libssl-dev ninja-build
+
+ - name: Build
+ id: cmake_build
+ run: |
+ cmake -B build \
+ -G "Ninja" \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DGGML_RPC=ON
+ time cmake --build build --config Release -j $(nproc)
+
+ - name: Test
+ id: cmake_test
+ run: |
+ cd build
+ ctest -L main --verbose
ubuntu-24-sycl:
strategy:
matrix:
- build: [fp32, fp16]
+ build: [fp32]
include:
- build: fp32
fp16: OFF
- - build: fp16
- fp16: ON
runs-on: ubuntu-24.04
--- /dev/null
+name: CI (webgpu)
+
+on:
+ workflow_dispatch: # allows manual triggering
+ push:
+ branches:
+ - master
+ paths: [
+ '.github/workflows/build-webgpu.yml',
+ '**/CMakeLists.txt',
+ '**/.cmake',
+ '**/*.h',
+ '**/*.hpp',
+ '**/*.c',
+ '**/*.cpp',
+ '**/*.wgsl'
+ ]
+
+ pull_request:
+ types: [opened, synchronize, reopened]
+ paths: [
+ '.github/workflows/build-webgpu.yml',
+ 'ggml/src/ggml-webgpu/**'
+ ]
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}
+ cancel-in-progress: true
+
+env:
+ GGML_NLOOP: 3
+ GGML_N_THREADS: 1
+ LLAMA_LOG_COLORS: 1
+ LLAMA_LOG_PREFIX: 1
+ LLAMA_LOG_TIMESTAMPS: 1
+
+jobs:
+
+ macOS-latest-arm64-webgpu:
+ runs-on: macos-latest
+
+ steps:
+ - name: Clone
+ id: checkout
+ uses: actions/checkout@v6
+
+ - name: ccache
+ uses: ggml-org/ccache-action@v1.2.21
+ with:
+ key: macOS-latest-arm64-webgpu
+ evict-old-files: 1d
+ save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
+
+ - name: Dawn Dependency
+ id: dawn-depends
+ run: |
+ DAWN_VERSION="v20260317.182325"
+ DAWN_OWNER="google"
+ DAWN_REPO="dawn"
+ DAWN_ASSET_NAME="Dawn-18eb229ef5f707c1464cc581252e7603c73a3ef0-macos-latest-Release"
+ echo "Fetching release asset from https://github.com/google/dawn/releases/download/${DAWN_VERSION}/${DAWN_ASSET_NAME}.tar.gz"
+ curl -L -o artifact.tar.gz \
+ "https://github.com/google/dawn/releases/download/${DAWN_VERSION}/${DAWN_ASSET_NAME}.tar.gz"
+ mkdir dawn
+ tar -xvf artifact.tar.gz -C dawn --strip-components=1
+
+ - name: Build
+ id: cmake_build
+ run: |
+ export CMAKE_PREFIX_PATH=dawn
+ cmake -B build -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DGGML_WEBGPU=ON -DGGML_METAL=OFF -DGGML_BLAS=OFF
+ time cmake --build build --config Release -j $(sysctl -n hw.logicalcpu)
+
+ - name: Test
+ id: cmake_test
+ run: |
+ cd build
+ ctest -L main --verbose --timeout 900
+
+ ubuntu-24-webgpu:
+ runs-on: ubuntu-24.04
+
+ steps:
+ - name: Clone
+ id: checkout
+ uses: actions/checkout@v6
+
+ - name: ccache
+ uses: ggml-org/ccache-action@v1.2.21
+ with:
+ key: ubuntu-24-webgpu
+ evict-old-files: 1d
+ save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
+
+ - name: Dependencies
+ id: depends
+ run: |
+ sudo add-apt-repository -y ppa:kisak/kisak-mesa
+ sudo apt-get update -y
+ sudo apt-get install -y build-essential mesa-vulkan-drivers \
+ libxcb-xinput0 libxcb-xinerama0 libxcb-cursor-dev libssl-dev
+
+ - name: Get latest Vulkan SDK version
+ id: vulkan_sdk_version
+ run: |
+ echo "VULKAN_SDK_VERSION=$(curl https://vulkan.lunarg.com/sdk/latest/linux.txt)" >> "$GITHUB_ENV"
+
+ - name: Use Vulkan SDK Cache
+ uses: actions/cache@v5
+ id: cache-sdk
+ with:
+ path: ./vulkan_sdk
+ key: vulkan-sdk-${{ env.VULKAN_SDK_VERSION }}-${{ runner.os }}
+
+ - name: Setup Vulkan SDK
+ if: steps.cache-sdk.outputs.cache-hit != 'true'
+ uses: ./.github/actions/linux-setup-vulkan
+ with:
+ path: ./vulkan_sdk
+ version: ${{ env.VULKAN_SDK_VERSION }}
+
+ - name: Dawn Dependency
+ id: dawn-depends
+ run: |
+ sudo apt-get install -y libxrandr-dev libxinerama-dev libxcursor-dev mesa-common-dev libx11-xcb-dev libxi-dev
+ DAWN_VERSION="v20260317.182325"
+ DAWN_OWNER="google"
+ DAWN_REPO="dawn"
+ DAWN_ASSET_NAME="Dawn-18eb229ef5f707c1464cc581252e7603c73a3ef0-ubuntu-latest-Release"
+ echo "Fetching release asset from https://github.com/google/dawn/releases/download/${DAWN_VERSION}/${DAWN_ASSET_NAME}.tar.gz"
+ curl -L -o artifact.tar.gz \
+ "https://github.com/google/dawn/releases/download/${DAWN_VERSION}/${DAWN_ASSET_NAME}.tar.gz"
+ mkdir dawn
+ tar -xvf artifact.tar.gz -C dawn --strip-components=1
+
+ - name: Build
+ id: cmake_build
+ run: |
+ export Dawn_DIR=dawn/lib64/cmake/Dawn
+ cmake -B build \
+ -DGGML_WEBGPU=ON
+ time cmake --build build --config Release -j $(nproc)
+
+ - name: Test
+ id: cmake_test
+ run: |
+ cd build
+ # This is using llvmpipe and runs slower than other backends
+ # test-backend-ops is too slow on llvmpipe, skip it
+ ctest -L main -E test-backend-ops --verbose --timeout 900
+
+ ubuntu-24-webgpu-wasm:
+ runs-on: ${{ 'ubuntu-24.04-arm' || 'ubuntu-24.04' }}
+
+ steps:
+ - name: Clone
+ id: checkout
+ uses: actions/checkout@v6
+
+ - name: Install Emscripten
+ run: |
+ git clone https://github.com/emscripten-core/emsdk.git
+ cd emsdk
+ ./emsdk install latest
+ ./emsdk activate latest
+
+ - name: Fetch emdawnwebgpu
+ run: |
+ DAWN_TAG="v20260317.182325"
+ EMDAWN_PKG="emdawnwebgpu_pkg-${DAWN_TAG}.zip"
+ echo "Downloading ${EMDAWN_PKG}"
+ curl -L -o emdawn.zip \
+ "https://github.com/google/dawn/releases/download/${DAWN_TAG}/${EMDAWN_PKG}"
+ unzip emdawn.zip
+
+ - name: Build WASM WebGPU
+ run: |
+ source emsdk/emsdk_env.sh
+ emcmake cmake -B build-wasm \
+ -G "Ninja" \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DGGML_WEBGPU=ON \
+ -DLLAMA_OPENSSL=OFF \
+ -DEMDAWNWEBGPU_DIR=emdawnwebgpu_pkg
+
+ time cmake --build build-wasm --config Release --target test-backend-ops -j $(nproc)
cd build
ctest -L main --verbose --timeout 900
- macOS-latest-arm64-webgpu:
- runs-on: macos-latest
-
- steps:
- - name: Clone
- id: checkout
- uses: actions/checkout@v6
-
- - name: ccache
- uses: ggml-org/ccache-action@v1.2.21
- with:
- key: macOS-latest-arm64-webgpu
- evict-old-files: 1d
- save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
-
- - name: Dawn Dependency
- id: dawn-depends
- run: |
- DAWN_VERSION="v20260317.182325"
- DAWN_OWNER="google"
- DAWN_REPO="dawn"
- DAWN_ASSET_NAME="Dawn-18eb229ef5f707c1464cc581252e7603c73a3ef0-macos-latest-Release"
- echo "Fetching release asset from https://github.com/google/dawn/releases/download/${DAWN_VERSION}/${DAWN_ASSET_NAME}.tar.gz"
- curl -L -o artifact.tar.gz \
- "https://github.com/google/dawn/releases/download/${DAWN_VERSION}/${DAWN_ASSET_NAME}.tar.gz"
- mkdir dawn
- tar -xvf artifact.tar.gz -C dawn --strip-components=1
-
- - name: Build
- id: cmake_build
- run: |
- export CMAKE_PREFIX_PATH=dawn
- cmake -B build -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DGGML_WEBGPU=ON -DGGML_METAL=OFF -DGGML_BLAS=OFF
- time cmake --build build --config Release -j $(sysctl -n hw.logicalcpu)
-
- - name: Test
- id: cmake_test
- run: |
- cd build
- ctest -L main --verbose --timeout 900
-
ubuntu-cpu:
strategy:
matrix:
os: ubuntu-22.04
- build: 'arm64'
os: ubuntu-24.04-arm
- - build: 's390x'
- os: ubuntu-24.04-s390x
- - build: 'ppc64le'
- os: ubuntu-24.04-ppc64le
runs-on: ${{ matrix.os }}
uses: actions/checkout@v6
- name: ccache
- if: ${{ matrix.build != 's390x' && matrix.build != 'ppc64le' }}
uses: ggml-org/ccache-action@v1.2.21
with:
key: ubuntu-cpu-${{ matrix.build }}
python3 -m pip install --upgrade pip setuptools
pip3 install ./gguf-py
- - name: Swap Endianness
- id: endianness
- if: ${{ matrix.build == 's390x' }}
- run: |
- for f in models/*.gguf; do
- echo YES | python3 gguf-py/gguf/scripts/gguf_convert_endian.py $f big
- done
-
- name: Build
id: cmake_build
run: |
- name: Test llama2c conversion
id: llama2c_test
- if: ${{ matrix.build != 's390x' }}
run: |
cd build
echo "Fetch tokenizer"
./bin/llama-convert-llama2c-to-ggml --copy-vocab-from-model ./tok512.bin --llama2c-model stories260K.bin --llama2c-output-model stories260K.gguf
./bin/llama-completion -m stories260K.gguf -p "One day, Lily met a Shoggoth" -n 500 -c 256
- - name: Test llama2c (s390x)
- id: llama2c_test_s390x
- if: ${{ matrix.build == 's390x' }}
- run: |
- cd build
- echo "Fetch llama2c big-endian model"
- wget https://huggingface.co/ggml-org/models/resolve/main/tinyllamas/stories260K-be.gguf
- ./bin/llama-completion -m stories260K-be.gguf -p "One day, Lily met a Shoggoth" -n 500 -c 256
-
- android-arm64:
- runs-on: ubuntu-latest
-
- env:
- NDK_VERSION: "29.0.14206865"
-
- steps:
- - name: Clone
- id: checkout
- uses: actions/checkout@v6
-
- - name: ccache
- uses: ggml-org/ccache-action@v1.2.21
- with:
- key: android-arm64
- evict-old-files: 1d
- save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
-
- - name: Set up JDK
- uses: actions/setup-java@v5
- with:
- java-version: 17
- distribution: temurin
-
- - name: Setup Android SDK
- uses: android-actions/setup-android@40fd30fb8d7440372e1316f5d1809ec01dcd3699 # v4.0.1
- with:
- log-accepted-android-sdk-licenses: false
-
- - name: Install NDK
- run: |
- sdkmanager "ndk;${{ env.NDK_VERSION }}"
- echo "ANDROID_NDK=${ANDROID_SDK_ROOT}/ndk/${{ env.NDK_VERSION }}" >> $GITHUB_ENV
-
- - name: Build
- id: cmake_build
- run: |
- cmake -B build \
- -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
- -DANDROID_ABI=arm64-v8a \
- -DANDROID_PLATFORM=android-28 \
- -DLLAMA_FATAL_WARNINGS=ON \
- -DGGML_BACKEND_DL=ON \
- -DGGML_NATIVE=OFF \
- -DGGML_CPU_ALL_VARIANTS=ON \
- -DGGML_OPENMP=OFF \
- -DLLAMA_BUILD_BORINGSSL=ON \
- -DGGML_RPC=ON
- time cmake --build build --config Release -j $(nproc)
-
- ubuntu-latest-rpc:
- runs-on: ubuntu-latest
-
- continue-on-error: true
-
- steps:
- - name: Clone
- id: checkout
- uses: actions/checkout@v6
-
- - name: Dependencies
- id: depends
- run: |
- sudo apt-get update
- sudo apt-get install build-essential libssl-dev ninja-build
-
- - name: Build
- id: cmake_build
- run: |
- cmake -B build \
- -G "Ninja" \
- -DCMAKE_BUILD_TYPE=Release \
- -DGGML_RPC=ON
- time cmake --build build --config Release -j $(nproc)
-
- - name: Test
- id: cmake_test
- run: |
- cd build
- ctest -L main --verbose
-
ubuntu-24-vulkan:
strategy:
matrix:
run: |
time cmake --build build -j $(nproc)
- ubuntu-24-webgpu:
- runs-on: ubuntu-24.04
-
- steps:
- - name: Clone
- id: checkout
- uses: actions/checkout@v6
-
- - name: ccache
- uses: ggml-org/ccache-action@v1.2.21
- with:
- key: ubuntu-24-webgpu
- evict-old-files: 1d
- save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
-
- - name: Dependencies
- id: depends
- run: |
- sudo add-apt-repository -y ppa:kisak/kisak-mesa
- sudo apt-get update -y
- sudo apt-get install -y build-essential mesa-vulkan-drivers \
- libxcb-xinput0 libxcb-xinerama0 libxcb-cursor-dev libssl-dev
-
- - name: Get latest Vulkan SDK version
- id: vulkan_sdk_version
- run: |
- echo "VULKAN_SDK_VERSION=$(curl https://vulkan.lunarg.com/sdk/latest/linux.txt)" >> "$GITHUB_ENV"
-
- - name: Use Vulkan SDK Cache
- uses: actions/cache@v5
- id: cache-sdk
- with:
- path: ./vulkan_sdk
- key: vulkan-sdk-${{ env.VULKAN_SDK_VERSION }}-${{ runner.os }}
-
- - name: Setup Vulkan SDK
- if: steps.cache-sdk.outputs.cache-hit != 'true'
- uses: ./.github/actions/linux-setup-vulkan
- with:
- path: ./vulkan_sdk
- version: ${{ env.VULKAN_SDK_VERSION }}
-
- - name: Dawn Dependency
- id: dawn-depends
- run: |
- sudo apt-get install -y libxrandr-dev libxinerama-dev libxcursor-dev mesa-common-dev libx11-xcb-dev libxi-dev
- DAWN_VERSION="v20260317.182325"
- DAWN_OWNER="google"
- DAWN_REPO="dawn"
- DAWN_ASSET_NAME="Dawn-18eb229ef5f707c1464cc581252e7603c73a3ef0-ubuntu-latest-Release"
- echo "Fetching release asset from https://github.com/google/dawn/releases/download/${DAWN_VERSION}/${DAWN_ASSET_NAME}.tar.gz"
- curl -L -o artifact.tar.gz \
- "https://github.com/google/dawn/releases/download/${DAWN_VERSION}/${DAWN_ASSET_NAME}.tar.gz"
- mkdir dawn
- tar -xvf artifact.tar.gz -C dawn --strip-components=1
-
- - name: Build
- id: cmake_build
- run: |
- export Dawn_DIR=dawn/lib64/cmake/Dawn
- cmake -B build \
- -DGGML_WEBGPU=ON
- time cmake --build build --config Release -j $(nproc)
-
- - name: Test
- id: cmake_test
- run: |
- cd build
- # This is using llvmpipe and runs slower than other backends
- # test-backend-ops is too slow on llvmpipe, skip it
- ctest -L main -E test-backend-ops --verbose --timeout 900
-
- ubuntu-24-webgpu-wasm:
- runs-on: ${{ 'ubuntu-24.04-arm' || 'ubuntu-24.04' }}
-
- steps:
- - name: Clone
- id: checkout
- uses: actions/checkout@v6
-
- - name: Install Emscripten
- run: |
- git clone https://github.com/emscripten-core/emsdk.git
- cd emsdk
- ./emsdk install latest
- ./emsdk activate latest
-
- - name: Fetch emdawnwebgpu
- run: |
- DAWN_TAG="v20260317.182325"
- EMDAWN_PKG="emdawnwebgpu_pkg-${DAWN_TAG}.zip"
- echo "Downloading ${EMDAWN_PKG}"
- curl -L -o emdawn.zip \
- "https://github.com/google/dawn/releases/download/${DAWN_TAG}/${EMDAWN_PKG}"
- unzip emdawn.zip
-
- - name: Build WASM WebGPU
- run: |
- source emsdk/emsdk_env.sh
- emcmake cmake -B build-wasm \
- -G "Ninja" \
- -DCMAKE_BUILD_TYPE=Release \
- -DGGML_WEBGPU=ON \
- -DLLAMA_OPENSSL=OFF \
- -DEMDAWNWEBGPU_DIR=emdawnwebgpu_pkg
-
- time cmake --build build-wasm --config Release --target test-backend-ops -j $(nproc)
-
- ubuntu-22-hip:
- runs-on: ubuntu-22.04
- container: rocm/dev-ubuntu-22.04:6.1.2
-
- steps:
- - name: Clone
- id: checkout
- uses: actions/checkout@v6
-
- - name: Dependencies
- id: depends
- run: |
- sudo apt-get update
- sudo apt-get install -y build-essential git cmake rocblas-dev hipblas-dev libssl-dev rocwmma-dev
-
- - name: ccache
- uses: ggml-org/ccache-action@v1.2.21
- with:
- key: ubuntu-22-hip
- evict-old-files: 1d
- save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
-
- - name: Build with native CMake HIP support
- id: cmake_build
- run: |
- cmake -B build -S . \
- -DCMAKE_HIP_COMPILER="$(hipconfig -l)/clang" \
- -DGGML_HIP_ROCWMMA_FATTN=ON \
- -DGPU_TARGETS="gfx1030" \
- -DGGML_HIP=ON
- cmake --build build --config Release -j $(nproc)
-
- ubuntu-22-musa:
- runs-on: ubuntu-22.04
- container: mthreads/musa:rc4.3.0-devel-ubuntu22.04-amd64
-
- steps:
- - name: Clone
- id: checkout
- uses: actions/checkout@v6
-
- - name: Dependencies
- id: depends
- run: |
- apt-get update
- apt-get install -y build-essential git cmake libssl-dev
-
- - name: ccache
- uses: ggml-org/ccache-action@v1.2.21
- with:
- key: ubuntu-22-musa
- evict-old-files: 1d
- save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
-
- - name: Build with native CMake MUSA support
- id: cmake_build
- run: |
- cmake -B build -S . \
- -DGGML_MUSA=ON
- time cmake --build build --config Release -j $(nproc)
-
-
windows-latest:
runs-on: windows-2025
- build: 'llvm-arm64'
arch: 'arm64'
defines: '-G "Ninja Multi-Config" -D CMAKE_TOOLCHAIN_FILE=cmake/arm64-windows-llvm.cmake -DGGML_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON'
- - build: 'llvm-arm64-opencl-adreno'
- arch: 'arm64'
- defines: '-G "Ninja Multi-Config" -D CMAKE_TOOLCHAIN_FILE=cmake/arm64-windows-llvm.cmake -DCMAKE_PREFIX_PATH="$env:RUNNER_TEMP/opencl-arm64-release" -DGGML_OPENCL=ON -DGGML_OPENCL_USE_ADRENO_KERNELS=ON'
steps:
- name: Clone
run: |
choco install ninja
- - name: Install OpenCL Headers and Libs
- id: install_opencl
- if: ${{ matrix.build == 'llvm-arm64-opencl-adreno' }}
- run: |
- git clone https://github.com/KhronosGroup/OpenCL-Headers
- cd OpenCL-Headers
- cmake -B build `
- -DBUILD_TESTING=OFF `
- -DOPENCL_HEADERS_BUILD_TESTING=OFF `
- -DOPENCL_HEADERS_BUILD_CXX_TESTS=OFF `
- -DCMAKE_INSTALL_PREFIX="$env:RUNNER_TEMP/opencl-arm64-release"
- cmake --build build --target install
- git clone https://github.com/KhronosGroup/OpenCL-ICD-Loader
- cd OpenCL-ICD-Loader
- cmake -B build-arm64-release `
- -A arm64 `
- -DCMAKE_PREFIX_PATH="$env:RUNNER_TEMP/opencl-arm64-release" `
- -DCMAKE_INSTALL_PREFIX="$env:RUNNER_TEMP/opencl-arm64-release"
- cmake --build build-arm64-release --target install --config release
-
- name: Build
id: cmake_build
run: |
cmake --build build --config Release -j %NINJA_JOBS% -t ggml
cmake --build build --config Release
-
- windows-latest-hip:
- runs-on: windows-2022
-
- env:
- # Make sure this is in sync with build-cache.yml
- HIPSDK_INSTALLER_VERSION: "26.Q1"
-
- steps:
- - name: Clone
- id: checkout
- uses: actions/checkout@v6
-
- - name: Grab rocWMMA package
- id: grab_rocwmma
- run: |
- curl -o rocwmma.deb "https://repo.radeon.com/rocm/apt/7.2.1/pool/main/r/rocwmma-dev/rocwmma-dev_2.2.0.70201-81~24.04_amd64.deb"
- 7z x rocwmma.deb
- 7z x data.tar
-
- - name: Use ROCm Installation Cache
- uses: actions/cache@v5
- id: cache-rocm
- with:
- path: C:\Program Files\AMD\ROCm
- key: rocm-${{ env.HIPSDK_INSTALLER_VERSION }}-${{ runner.os }}
-
- - name: Setup ROCm
- if: steps.cache-rocm.outputs.cache-hit != 'true'
- uses: ./.github/actions/windows-setup-rocm
- with:
- version: ${{ env.HIPSDK_INSTALLER_VERSION }}
-
- - name: Verify ROCm
- id: verify
- run: |
- # Find and test ROCm installation
- $clangPath = Get-ChildItem 'C:\Program Files\AMD\ROCm\*\bin\clang.exe' | Select-Object -First 1
- if (-not $clangPath) {
- Write-Error "ROCm installation not found"
- exit 1
- }
- & $clangPath.FullName --version
-
- - name: Install ccache
- uses: ggml-org/ccache-action@v1.2.21
- with:
- key: ${{ github.job }}
- evict-old-files: 1d
- save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
-
- - name: Build
- id: cmake_build
- run: |
- $env:HIP_PATH=$(Resolve-Path 'C:\Program Files\AMD\ROCm\*\bin\clang.exe' | split-path | split-path)
- $env:CMAKE_PREFIX_PATH="${env:HIP_PATH}"
- cmake -G "Unix Makefiles" -B build -S . `
- -DCMAKE_C_COMPILER="${env:HIP_PATH}\bin\clang.exe" `
- -DCMAKE_CXX_COMPILER="${env:HIP_PATH}\bin\clang++.exe" `
- -DCMAKE_CXX_FLAGS="-I$($PWD.Path.Replace('\', '/'))/opt/rocm-7.2.1/include/" `
- -DCMAKE_BUILD_TYPE=Release `
- -DLLAMA_BUILD_BORINGSSL=ON `
- -DROCM_DIR="${env:HIP_PATH}" `
- -DGGML_HIP=ON `
- -DGGML_HIP_ROCWMMA_FATTN=ON `
- -DGPU_TARGETS="gfx1100" `
- -DGGML_RPC=ON
- cmake --build build -j ${env:NUMBER_OF_PROCESSORS}
-
- ubuntu-cpu-riscv64-native:
- runs-on: ubuntu-24.04-riscv
-
- steps:
- - name: Install dependencies
- run: |
- # Install necessary packages
- sudo apt-get update
- sudo apt-get install -y libssl-dev
-
- # Set gcc-14 and g++-14 as the default compilers
- sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 100
- sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-14 100
-
- git lfs install
-
- - name: Check environment
- run: |
- uname -a
- gcc --version
- g++ --version
- ldd --version
- cmake --version
- rustc --version
-
- - name: Clone
- id: checkout
- uses: actions/checkout@v6
-
- - name: ccache
- uses: ggml-org/ccache-action@afde29e5b5422e5da23cb1f639e8baecadeadfc3 # https://github.com/ggml-org/ccache-action/pull/1
- with:
- key: ubuntu-cpu-riscv64-native
- evict-old-files: 1d
- save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
-
- - name: Build
- id: cmake_build
- run: |
- cmake -B build \
- -DCMAKE_BUILD_TYPE=Release \
- -DGGML_OPENMP=OFF \
- -DLLAMA_BUILD_EXAMPLES=ON \
- -DLLAMA_BUILD_TOOLS=ON \
- -DLLAMA_BUILD_TESTS=ON \
- -DCMAKE_C_COMPILER_LAUNCHER=ccache \
- -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
- -DGGML_RPC=ON \
- -DCMAKE_C_COMPILER=riscv64-linux-gnu-gcc-14 \
- -DCMAKE_CXX_COMPILER=riscv64-linux-gnu-g++-14
-
- time cmake --build build --config Release -j $(nproc)
-
- - name: Test
- id: cmake_test
- run: |
- cd build
- ctest -L main --verbose --timeout 900
-
- - name: Test llama2c conversion
- id: llama2c_test
- run: |
- cd build
- echo "Fetch tokenizer"
- wget https://huggingface.co/karpathy/tinyllamas/resolve/main/stories260K/tok512.bin
- echo "Fetch llama2c model"
- wget https://huggingface.co/karpathy/tinyllamas/resolve/main/stories260K/stories260K.bin
- ./bin/llama-convert-llama2c-to-ggml --copy-vocab-from-model ./tok512.bin --llama2c-model stories260K.bin --llama2c-output-model stories260K.gguf
- ./bin/llama-completion -m stories260K.gguf -p "One day, Lily met a Shoggoth" -n 500 -c 256
-
# TODO: simplify the following workflows using a matrix
# TODO: run lighter CI on PRs and the full CI only on master (if needed)
ggml-ci-x64-cpu-low-perf:
strategy:
matrix:
- build: [fp32, fp16]
+ build: [fp32]
include:
- build: fp32
fp16: OFF
- - build: fp16
- fp16: ON
runs-on: ubuntu-24.04
- [Ubuntu x64 (ROCm 7.2)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-ubuntu-rocm-7.2-x64.tar.gz)
- [Ubuntu x64 (OpenVINO)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-ubuntu-openvino-${{ needs.ubuntu-24-openvino.outputs.openvino_version }}-x64.tar.gz)
- [Ubuntu x64 (SYCL FP32)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-ubuntu-sycl-fp32-x64.tar.gz)
- - [Ubuntu x64 (SYCL FP16)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-ubuntu-sycl-fp16-x64.tar.gz)
**Android:**
- [Android arm64 (CPU)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-android-arm64.tar.gz)