35 lines
2.1 KiB
Bash
35 lines
2.1 KiB
Bash
#!/bin/sh
|
|
# 123 · 121: Android (arm64) 용 stable-diffusion.cpp 의 sd-cli 를 소스에서 빌드해
|
|
# third_party/sdcpp/android/arm64-v8a/libsdcli.so 로 둔다 (APK 의 jniLibs 로 들어가 앱의 네이티브 라이브러리 폴더에서 실행된다 -
|
|
# Android 10+ 는 앱 데이터 폴더의 파일을 실행할 수 없으므로 받아서 쓰지 않는다).
|
|
# 소스: https://github.com/leejet/stable-diffusion.cpp (MIT) 커밋 고정 - Windows 실행 파일 (ai_catalog.dart 의 sdCppVersion) 과 같은 판
|
|
# CPU (arm64, dotprod · i8mm · fp16) 만. OpenMP 는 끈다.
|
|
# 사용법 (Git Bash): sh tool/build_sdcpp_android.sh - Android NDK · SDK 의 cmake (tools/android-sdk) 가 필요
|
|
set -e
|
|
APP=$(cd "$(dirname "$0")/.." && pwd)
|
|
COMMIT=228c707fde018221de74674f1c2f480a9d2b228e
|
|
SHORT=228c707
|
|
NDK_ROOT=${ANDROID_NDK:-$(ls -d "$APP"/../tools/android-sdk/ndk/* | sort | tail -1)}
|
|
CMAKE_DIR=$(ls -d "$APP"/../tools/android-sdk/cmake/* | sort | tail -1)/bin
|
|
case "$(uname -s)" in MINGW*|MSYS*|CYGWIN*) HOST=windows-x86_64; EXE=.exe ;; Darwin) HOST=darwin-x86_64; EXE= ;; *) HOST=linux-x86_64; EXE= ;; esac
|
|
TC=$NDK_ROOT/toolchains/llvm/prebuilt/$HOST/bin
|
|
WORK=${SDCPP_WORK:-${TMPDIR:-/tmp}/jj_sdcpp_android}
|
|
if [ ! -d "$WORK/src/.git" ]; then
|
|
rm -rf "$WORK" && mkdir -p "$WORK"
|
|
git clone --recursive https://github.com/leejet/stable-diffusion.cpp.git "$WORK/src"
|
|
fi
|
|
cd "$WORK/src"
|
|
git fetch --depth 1 origin "$COMMIT" 2>/dev/null || git fetch origin
|
|
git checkout -q "$COMMIT" 2>/dev/null || git checkout -q "$SHORT"
|
|
git submodule update --init --recursive
|
|
PATH="$CMAKE_DIR:$PATH"
|
|
cmake -S . -B build-android -G Ninja -DCMAKE_MAKE_PROGRAM="$CMAKE_DIR/ninja$EXE" \
|
|
-DCMAKE_TOOLCHAIN_FILE="$NDK_ROOT/build/cmake/android.toolchain.cmake" \
|
|
-DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-28 -DCMAKE_BUILD_TYPE=Release \
|
|
-DGGML_OPENMP=OFF -DGGML_CPU_ARM_ARCH=armv8.2-a+dotprod+i8mm+fp16 > cmake.log
|
|
cmake --build build-android --target sd-cli -j 8 > build.log 2>&1
|
|
OUT="$APP/third_party/sdcpp/android/arm64-v8a"
|
|
mkdir -p "$OUT"
|
|
"$TC/llvm-strip$EXE" -o "$OUT/libsdcli.so" build-android/bin/sd-cli
|
|
ls -l "$OUT/libsdcli.so"
|