#!/usr/bin/env bash # Build the Khronos OpenXR loader (libopenxr_loader.so) for Android arm64 so the # shim's NEEDED dependency resolves at runtime. Output -> packaging/libs/arm64/. set -euo pipefail source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/_env.sh" [ -n "${NDK:-}" ] && [ -d "$NDK" ] || { echo "NDK not found. Set \$ANDROID_NDK or run scripts/fetch_deps.sh"; exit 1; } command -v cmake >/dev/null || { echo "cmake not found — install it (and optionally ninja) to build the loader"; exit 1; } # Keep this in step with OPENXR_TAG in scripts/fetch_deps.sh so the loader and the headers # the shim compiles against are the same OpenXR version. OPENXR_TAG="${OPENXR_TAG:-release-1.1.50}" SRC="$ROOT/tools/OpenXR-SDK" if [ ! -d "$SRC" ]; then echo "downloading OpenXR-SDK source..." curl -fsSL -o "$ROOT/tools/oxrsdk.tgz" \ "https://github.com/KhronosGroup/OpenXR-SDK/archive/refs/tags/${OPENXR_TAG}.tar.gz" tar xzf "$ROOT/tools/oxrsdk.tgz" -C "$ROOT/tools" mv "$ROOT/tools/OpenXR-SDK-${OPENXR_TAG}" "$SRC" fi GEN="Unix Makefiles"; command -v ninja >/dev/null && GEN="Ninja" cmake -S "$SRC" -B "$SRC/build-android" \ -DCMAKE_TOOLCHAIN_FILE="$NDK/build/cmake/android.toolchain.cmake" \ -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-29 \ -DDYNAMIC_LOADER=ON -DBUILD_TESTS=OFF -DBUILD_API_LAYERS=OFF \ -DBUILD_CONFORMANCE_TESTS=OFF -DBUILD_WITH_SYSTEM_JSONCPP=OFF \ -G "$GEN" >/dev/null cmake --build "$SRC/build-android" --target openxr_loader -j4 mkdir -p "$PKG/libs/arm64" find "$SRC/build-android" -name 'libopenxr_loader.so' -exec cp {} "$PKG/libs/arm64/" \; echo "loader -> $PKG/libs/arm64/libopenxr_loader.so" file "$PKG/libs/arm64/libopenxr_loader.so" 2>/dev/null || true