Kazeia-engine/dist/build_decoder_subproc.sh

45 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Build kazeia_decoder_chraac : sous-process décodeur statique chraac.
# Link entièrement statique contre les .a chraac (libggml + libqwen3tts-decoder)
# pour être autonome — aucun .so chraac sur la tablette n'est requis au runtime.
set -euo pipefail
HERE="$(cd "$(dirname "$0")" && pwd)"
NDK="${ANDROID_NDK_ROOT:-/opt/Kazeia/android-ndk-r27d}"
CXX="$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android31-clang++"
DEC_BUILD="/opt/Kazeia/kazeia-tts-decoder-ggml/build-android-chraac-fresh"
DEC_SRC="/opt/Kazeia/kazeia-tts-decoder-ggml/src"
CHRAAC_GGML_INC="/opt/Kazeia/chraac-llama/ggml/include"
[ -f "$DEC_BUILD/libqwen3tts-decoder.a" ] || { echo "decoder.a chraac absent: $DEC_BUILD"; exit 1; }
mkdir -p "$HERE/b-jni"
OUT="$HERE/b-jni/kazeia_decoder_chraac"
CFLAGS=( -std=c++17 -O3 -fPIE
-march=armv8.6-a+i8mm+bf16+dotprod+fp16
-Wno-unused-parameter -Wno-unused-variable -Wno-sign-compare
)
INCS=( -I"$DEC_SRC" -I"$CHRAAC_GGML_INC" )
# Important : --start-group / --end-group pour résoudre les références cycliques
# entre libqwen3tts-decoder et ggml. Ordre: decoder.a en premier (références
# ggml symbols), puis ggml-cpu, ggml-base, ggml (qui se référencent entre eux).
LIBS=(
"$HERE/jni/decoder_subprocess.cpp"
-Wl,--start-group
"$DEC_BUILD/libqwen3tts-decoder.a"
"$DEC_BUILD/ggml-build/src/libggml-cpu.a"
"$DEC_BUILD/ggml-build/src/libggml-base.a"
"$DEC_BUILD/ggml-build/src/libggml.a"
-Wl,--end-group
-fopenmp -static-openmp
-llog -ldl -lm
)
echo "== building $OUT =="
"$CXX" "${CFLAGS[@]}" "${INCS[@]}" "${LIBS[@]}" -o "$OUT"
ls -la "$OUT"
echo "== check qu'il n'y a pas de dépendance .so chraac =="
"$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-readelf" -d "$OUT" | grep -E "NEEDED|RUNPATH"