47 lines
2.0 KiB
Bash
47 lines
2.0 KiB
Bash
#!/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"
|