Files
questshock/run-image.sh
T
ml ac640762d7
build / build (push) Successful in 2m13s
Fix Quest launch crashes, version the APK like the tarball, and support native builds in Android Studio
- patchelf gl4es's embedded SONAME to libGL.so so AGP's jniLibs packaging
  (which drops any file not literally named "*.so") and the dynamic
  linker's NEEDED-entry resolution (by embedded SONAME, not filename)
  finally agree - fixes the "library \"libGL.so.1\" not found" crash seen
  on real Quest hardware.
- QuestShockActivity now checks that res/data and res/sound exist before
  starting the native engine, showing an explanatory dialog instead of
  crashing on init_popups' unchecked NULL resource load when a fresh
  install has no game data copied in yet.
- dist/questshock-<version>-android-arm64.apk is now versioned from the
  same git-tag-or-dev-placeholder scheme as the desktop tarball
  (build-image/version.sh, shared by both via the Makefile and
  build-apk.sh).
- build-image/prepare-android-project.sh (prep logic extracted out of
  build-apk.sh) can now stage android/ for a native build directly in
  Android Studio (--host-paths), exporting the prebuilt SDL2/SDL2_mixer/
  fluidsynth-lite/gl4es libraries and writing host-resolvable paths,
  instead of only ever building inside the Docker image.
- Corrected GET_ASSETS.txt/GET_ASSETS_QUEST.txt, which wrongly described
  merging res/pc/hd and res/pc/cdrom trees out of the raw installer's
  sshock.kpf - an already-installed copy's res/data res/sound can just
  be copied directly, with extract_assets.sh only needed from the raw
  installer.
2026-07-23 06:42:45 +02:00

62 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Runs the build-image against the repo to compile engine/ (the vendored
# Shockolate snapshot), entirely offline - every dependency it needs
# (SDL2, SDL2_mixer, fluidsynth-lite, a MIDI soundfont) was already built
# into the image by ./build-image.sh.
#
# Output lands in engine/.build-output/ - run `make dist` afterwards to
# assemble it (together with the game assets from res/assets/ss_ee/) into
# dist/.
#
# Usage: ./run-image.sh [command...]
# With no arguments, runs the engine build. Pass a command (e.g. `bash`)
# to get a shell in the build environment instead, useful for debugging
# a failed build.
set -euo pipefail
cd "$(dirname "${BASH_SOURCE[0]}")"
ROOT="$(pwd)"
fail() { echo "PREFLIGHT FAIL: $*" >&2; exit 1; }
command -v docker >/dev/null 2>&1 \
|| fail "docker not found in PATH"
IMAGE="${REGISTRY_IMAGE:-questshock/builder}"
if [ -f "$ROOT/registry.env" ]; then
# shellcheck disable=SC1091
source "$ROOT/registry.env"
IMAGE="${REGISTRY_IMAGE:-$IMAGE}"
fi
IMAGE_TAG="$(<"$ROOT/build-image/VERSION")"
[ -n "$IMAGE_TAG" ] || fail "build-image/VERSION is empty"
IMAGE="$IMAGE:$IMAGE_TAG"
docker image inspect "$IMAGE" >/dev/null 2>&1 \
|| fail "$IMAGE not found locally - run ./build-image.sh first"
TTY_FLAGS="-i"
[ -t 1 ] && TTY_FLAGS="-it"
# HOST_REPO_ROOT: lets scripts running in the container (e.g.
# build-image/prepare-android-project.sh --host-paths) write paths that
# resolve on the HOST filesystem instead of this container's own
# /workspace - needed so a gradlew/Android Studio running natively on the
# host afterwards can find them.
# shellcheck disable=SC2086
docker run --rm $TTY_FLAGS \
-v "$ROOT:/workspace" \
-e HOST_UID="$(id -u)" \
-e HOST_GID="$(id -g)" \
-e HOST_REPO_ROOT="$ROOT" \
"$IMAGE" \
"$@"
if [ "$#" -eq 0 ]; then
echo
echo "This only compiled the engine (engine/.build-output/) - it does not"
echo "create dist/ by itself. Run 'make dist' next to assemble a runnable"
echo "copy (or 'make package' for a redistributable tarball)."
fi