gallery/harnesses/egtest/scripts/build.sh

41 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# Build + install egtest (egui grid, no textures) on the emulator or phone.
# ./build.sh # x86_64 (emulator) + install
# ./build.sh aarch64 # phone + install
# ./build.sh <arch> no-install
set -euo pipefail
cd "$(dirname "$0")/.."
export ANDROID_HOME=$HOME/android-sdk
export ANDROID_NDK_ROOT=$HOME/android-sdk/ndk/27.0.12077973
export PATH="$HOME/.cargo/bin:$ANDROID_HOME/platform-tools:$PATH"
SDK_PLATFORM=android-35
export ANDROID_JAR=$HOME/android-sdk/platforms/$SDK_PLATFORM/android.jar
NDK_BIN=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin
arg1=${1:-x86_64}
arg2=${2:-install}
case $arg1 in
x86_64) export ANDROID_ABI=x86_64; export CC_x86_64_linux_android=$NDK_BIN/x86_64-linux-android26-clang CXX_x86_64_linux_android=$NDK_BIN/x86_64-linux-android26-clang++ AR_x86_64_linux_android=$NDK_BIN/llvm-ar; target=x86_64-linux-android ;;
aarch64) export ANDROID_ABI=arm64-v8a; export CC_aarch64_linux_android=$NDK_BIN/aarch64-linux-android26-clang CXX_aarch64_linux_android=$NDK_BIN/aarch64-linux-android26-clang++ AR_aarch64_linux_android=$NDK_BIN/llvm-ar; target=aarch64-linux-android ;;
*) echo "unknown: $arg1"; exit 1 ;;
esac
# 16KB-page kernel (Pixel 9 Pro) rejects .so with p_align that the segment
# offsets don't satisfy — pin max-page-size to 4 KB (sltest-verified layout).
export RUSTFLAGS="-C link-arg=-Wl,-z,max-page-size=4096"
export CARGO_APK_RELEASE_KEYSTORE=$HOME/.android/debug.keystore
export CARGO_APK_RELEASE_KEYSTORE_PASSWORD=android
adb=(); [ -n "${ADB_SERIAL:-}" ] && adb=(adb -s "$ADB_SERIAL")
cargo apk2 build --release --target "$target" --lib
apk=target/release/apk/egtest.apk
echo "APK: $apk ($(du -h "$apk" | cut -f1))"
if [ "$arg2" = install ] && command -v adb >/dev/null; then
"${adb[@]}" install -r "$apk"
"${adb[@]}" shell am start -n wow.gmp.egtest/android.app.NativeActivity || true
fi