Files
2026-07-03 07:44:47 +02:00

58 lines
2.2 KiB
Bash

set -euo pipefail
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
S="$HERE/tools/scripts"
REQUIRED_LIBS=(libfmod.so libg.so libcr.so)
ABI=""
while [ $# -gt 0 ]; do
case "$1" in
--abi) ABI="${2:-}"; shift 2;;
-h|--help) sed -n '2,12p' "$0"; exit 0;;
*) echo "unknown arg: $1"; exit 1;;
esac
done
[ -n "$ABI" ] || { echo "usage: ./build.sh --abi <armeabi-v7a|arm64-v8a|universal|32|64|both>"; exit 1; }
case "$ABI" in
32) ABI=armeabi-v7a;;
64) ABI=arm64-v8a;;
both|all) ABI=universal;;
armeabi-v7a|arm64-v8a|universal) ;;
*) echo "invalid --abi '$ABI'"; exit 1;;
esac
case "$ABI" in universal) ABIS=(armeabi-v7a arm64-v8a);; *) ABIS=("$ABI");; esac
echo "==> Target ABI: $ABI (build set: ${ABIS[*]})"
echo "==> Checking tools"
miss=0
for t in java cmake ninja; do command -v "$t" >/dev/null || { echo " MISSING: $t"; miss=1; }; done
command -v gradle >/dev/null || [ -x "$HERE/gradlew" ] || { echo " MISSING: gradle/gradlew"; miss=1; }
[ -n "${ANDROID_NDK_HOME:-${NDK:-}}" ] || echo " WARN: ANDROID_NDK_HOME unset (needed for native build; see tools/scripts/fetch_ndk.sh)"
[ -n "${ANDROID_HOME:-${ANDROID_SDK_ROOT:-}}" ] || echo " WARN: ANDROID_HOME unset (needed for Gradle/AAPT2/apksigner; see tools/scripts/fetch_sdk.sh)"
[ "$miss" -eq 0 ] || { echo "==> Install missing tools first (analysis/TOOLCHAIN.md)"; exit 2; }
for abi in "${ABIS[@]}"; do
echo "==> Native build: $abi"
"$S/build_native.sh" "$abi" Debug
done
echo "==> Verifying required native libs are present per ABI"
for abi in "${ABIS[@]}"; do
d="$HERE/app/src/main/jniLibs/$abi"
for req in "${REQUIRED_LIBS[@]}"; do
[ -f "$d/$req" ] || { echo " ERROR: $abi missing required $req"; \
echo " -> reconstruct/replace it before building this ABI (see SHARED_LIBRARY_PORTING_PLAN.md)"; exit 3; }
if [ "$abi" = arm64-v8a ] && ! file -b "$d/$req" | grep -qi '64-bit'; then
echo " ERROR: $abi/$req is not ELF64 (arm64 INCOMPLETE)"; exit 3; fi
done
done
echo "==> Gradle app build ($ABI)"
"$S/build_project.sh" "$ABI"
"$S/package_apk.sh" "$ABI"
OUT_APK="$HERE/out/app-${ABI}-debug.apk"
"$S/sign_apk.sh" "$OUT_APK"
"$S/verify_apk.sh" "$OUT_APK" "$ABI"
echo "==> DONE: $OUT_APK"