#!/usr/bin/env bash # Cross-compiles libsummarize-llm-jni.so (arm64-v8a) for the summarize feature. # # One-off build on a Linux box with network access (this project was built in # a sandbox with NDK r27c; the Android Studio side does NOT need any NDK). # Run from tools/llama-jni/. Requires: git, cmake >= 3.22, unzip, $ANDROID_NDK # pointing at an extracted NDK (r26+), ANDROID_ABI override optional. # # llama.cpp commit pinned below = the one verified to support arch "gemma4" # (src/llama-arch.cpp LLM_ARCH_GEMMA4). Bump only together with re-running # PC-side prompt validation. set -euo pipefail LLAMA_COMMIT="df03399b885831b2a1603b3abb0d8c156808e363" ABI="${ANDROID_ABI:-arm64-v8a}" PLATFORM="${ANDROID_PLATFORM:-android-24}" OUT_DIR="../../app/src/main/jniLibs/${ABI}" if [ ! -d llama.cpp ]; then git clone https://github.com/ggml-org/llama.cpp fi cd llama.cpp git fetch --depth 1 origin "${LLAMA_COMMIT}" 2>/dev/null || true git checkout "${LLAMA_COMMIT}" 2>/dev/null || git pull # 应用本地修改:STQ1_0 1.25bit 内核移植(PR #22836)+ 私有编号重排(见 README) git apply "../llama-df03399b-stq1_0.patch" cd .. cmake -B "build-${ABI}" \ -DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK}/build/cmake/android.toolchain.cmake" \ -DANDROID_ABI="${ABI}" \ -DANDROID_PLATFORM="${PLATFORM}" \ -DANDROID_STL=c++_static \ -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON \ -DGGML_CPU_ARM_ARCH=armv8.2-a+dotprod \ -DCMAKE_BUILD_TYPE=Release # 注:GGML_CPU_ARM_ARCH 给 ggml-cpu 编入 dotprod 真指令(dotprod 版 sdot 内核 # 是 STQ1_0 被独立验证过的路径;基线 armv8-a 编出的模拟路径在真机上有数值 # 偏差案)。运行时要求 CPU 支持 dotprod(高通 845 世代以后/所有目标机型)。 # 该 commit 的 GGML_CPU_ALL_VARIANTS 已强制 GGML_BACKEND_DL(多 .so),与 # 单 .so 打包不符,故用单变体开关。x86_64 构建忽略此变量。 cmake --build "build-${ABI}" -j "$(nproc)" mkdir -p "${OUT_DIR}" cp -v "build-${ABI}/libsummarize-llm-jni.so" "${OUT_DIR}/" echo "done -> ${OUT_DIR}/libsummarize-llm-jni.so"