mirror of
https://github.com/ApfelTeeSaft/OpenRoyale.git
synced 2026-08-26 19:33:32 +00:00
58 lines
2.2 KiB
Bash
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"
|