66f02a0c61
build / build (push) Successful in 1m8s
immediate-mode GL (glBegin/glVertex3f/glEnd and friends) from scratch on top of GLES, since GLES has none of it. That code compiled but was never actually exercised - no on-screen verification was possible without real Quest hardware - making it the biggest unverified risk in the port. Replace it with GL4ES (MIT-licensed, prebuilt into the build image), a mature desktop-GL-on-GLES translation library used by other Quest/Android game ports for exactly this problem. This cuts 04-android-opengl-es-render.patch by half, deleting the hand-written vertex-accumulation emulation entirely; alpha test, point sprites, and point size stay on their existing GLES-native fixes rather than trusting GL4ES's shakier custom-shader interop for those. Bump build-image/VERSION to 3 - a fresh image with GL4ES cross-compiled for arm64-v8a was built and make apk verified successfully against it.
65 lines
2.9 KiB
Bash
Executable File
65 lines
2.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Builds the Quest APK from a scratch, patched copy of engine/ (see
|
|
# android/engine-patches/ - engine/ itself is never modified) plus the
|
|
# Android SDL2/SDL2_mixer/fluidsynth-lite prebuilt into this image at
|
|
# /opt/prebuilt/android/*. Run via ../run-image.sh (or directly, if
|
|
# already inside this image - see the Makefile's `apk` target).
|
|
#
|
|
# Unlike build-engine.sh, this step needs network access: Gradle/AGP's
|
|
# own dependency resolution isn't prebuilt into the image (see
|
|
# build-image/Dockerfile's comment on that trade-off).
|
|
set -euo pipefail
|
|
|
|
REPO_ROOT="$(pwd)"
|
|
ANDROID_DIR="$REPO_ROOT/android"
|
|
SCRATCH_ENGINE="$REPO_ROOT/build/android-engine"
|
|
|
|
echo "== Preparing a scratch, patched copy of engine/ =="
|
|
rm -rf "$SCRATCH_ENGINE"
|
|
mkdir -p "$(dirname "$SCRATCH_ENGINE")"
|
|
cp -a "$REPO_ROOT/engine" "$SCRATCH_ENGINE"
|
|
for p in "$ANDROID_DIR"/engine-patches/*.patch; do
|
|
patch -p1 -d "$SCRATCH_ENGINE" < "$p"
|
|
done
|
|
|
|
echo "== Wiring up prebuilt Android SDL2_mixer/fluidsynth-lite (BUNDLED mode, like the desktop build) =="
|
|
mkdir -p "$SCRATCH_ENGINE/build_ext/built_sdl_mixer" "$SCRATCH_ENGINE/build_ext/fluidsynth-lite"
|
|
cp -a /opt/prebuilt/android/sdl2_mixer/. "$SCRATCH_ENGINE/build_ext/built_sdl_mixer/"
|
|
mkdir -p "$SCRATCH_ENGINE/build_ext/fluidsynth-lite/src"
|
|
cp -a /opt/prebuilt/android/fluidsynth-lite/lib/. "$SCRATCH_ENGINE/build_ext/fluidsynth-lite/src/"
|
|
cp -a /opt/prebuilt/android/fluidsynth-lite/include/. "$SCRATCH_ENGINE/build_ext/fluidsynth-lite/include/"
|
|
|
|
echo "engineDir=$SCRATCH_ENGINE" > "$ANDROID_DIR/engine.properties"
|
|
|
|
echo "== Staging bundled assets (shaders, soundfont, get-assets text) =="
|
|
ASSETS_DIR="$ANDROID_DIR/app/src/main/assets"
|
|
rm -rf "$ASSETS_DIR"
|
|
mkdir -p "$ASSETS_DIR/shaders" "$ASSETS_DIR/res"
|
|
# GLES ports of engine/shaders/ (see android/gles-shaders/ and
|
|
# android/engine-patches/04-android-opengl-es-render.patch) - not
|
|
# engine/shaders/ itself, which is desktop-only GLSL.
|
|
cp -a "$ANDROID_DIR/gles-shaders/." "$ASSETS_DIR/shaders/"
|
|
cp "/opt/prebuilt/soundfont/default.sf2" "$ASSETS_DIR/res/soundfont.sf2"
|
|
cp "$REPO_ROOT/res/assets/GET_ASSETS_QUEST.txt" "$ASSETS_DIR/GET_ASSETS_QUEST.txt"
|
|
|
|
echo "== Staging prebuilt Android SDL2/SDL2_mixer/fluidsynth-lite/gl4es .so's into jniLibs =="
|
|
JNI_LIBS_DIR="$ANDROID_DIR/app/src/main/jniLibs/arm64-v8a"
|
|
rm -rf "$ANDROID_DIR/app/src/main/jniLibs"
|
|
mkdir -p "$JNI_LIBS_DIR"
|
|
find /opt/prebuilt/android/sdl2/lib /opt/prebuilt/android/sdl2_mixer/lib /opt/prebuilt/android/fluidsynth-lite/lib \
|
|
/opt/prebuilt/android/gl4es/lib \
|
|
-name '*.so' -exec cp -a {} "$JNI_LIBS_DIR/" \;
|
|
|
|
echo "== Building the APK (gradlew assembleDebug) =="
|
|
cd "$ANDROID_DIR"
|
|
./gradlew --no-daemon assembleDebug
|
|
|
|
APK="$ANDROID_DIR/app/build/outputs/apk/debug/app-debug.apk"
|
|
[ -f "$APK" ] || { echo "BUILD FAIL: $APK not found after assembleDebug" >&2; exit 1; }
|
|
|
|
mkdir -p "$REPO_ROOT/dist"
|
|
cp "$APK" "$REPO_ROOT/dist/questshock-debug.apk"
|
|
|
|
echo "== Done =="
|
|
echo "APK: $REPO_ROOT/dist/questshock-debug.apk"
|