mirror of
https://github.com/daniel-lynch/ovrplugin-openxr-shim.git
synced 2026-10-06 01:00:05 +02:00
Repo hygiene round following a full review. No shim behaviour changes. Leak risk: - .gitignore: ignore CLAUDE.md (personal assistant-lane config, was one `git add -A` away from a public commit) and scratch_obj/. Docs vs. reality: - shim/README.md: rewritten. It described a pre-implementation skeleton with "core fns are TODO stubs returning -1005", three mutually inconsistent stub counts, and four completed milestones listed as open. Now carries the verified breakdown: 438/438 exports = 371 generated stubs + 46 core + 7 layers + 2 Vulkan queries + 12 passthru trampolines. - TESTING.md: dropped the self-contradicting "NOT yet" block (5 of 6 items were done or misstated, and contradicted the same file 45 lines above). Path B now points at tools/desktop-harness, which exists, instead of the orphaned shim/tests/harness.c. Path A prereqs marked as the record they are. - HOST.md: corrected the runtime assumption. The OpenXR runtime inside Lepton is SteamVR (vendor/etc/openxr/1/active_runtime.json -> vrclient.so), not Monado. Favourable: SteamVR emulates Oculus Touch by default and advertises the XR_FB_foveation family, so the existing input and foveation paths should carry over. The old "remaining unknowns" are resolved by Lepton's published source and replaced with the items to check before a first Frame boot. - README.md: same runtime correction. - docs/research/RECON.md: the four passages prescribing an entitlement NOP/stub/bypass are corrected in place rather than merely disclaimed by the top banner, which they contradicted. Build correctness: - shim/build_android.sh: missing patchelf is now fatal. It warned and exited 0, producing a .so that cannot resolve the OpenXR loader at runtime. - scripts/fetch_deps.sh + packaging/build_openxr_loader.sh: pin the OpenXR and Vulkan header versions (were tracking `main`), overridable via OPENXR_TAG / VULKAN_HEADERS_TAG; require cmake for the loader build. - packaging/steamframe_patches.sh: use the apktool.jar that fetch_deps.sh downloads. Its prereq check demanded an `apktool` binary on PATH that the documented setup never provides, so it could not run after a clean setup. - shim/gen_stubs.sh: it reads all_exports.txt, not shim_surface.txt; comment and emitted banner corrected. stubs.c regenerated (banner line only). - shim/src/core.c: split seven `if (out) ...; return ...;` one-liners. Host build now compiles with zero warnings, down from seven. Verified: host build 0 warnings; gen_stubs.sh output identical on regeneration; bash -n clean on all edited scripts; pinned header/tarball URLs return 200 and the tag tarball extracts to the expected directory name. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
39 lines
2.3 KiB
Bash
Executable File
39 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Cross-build the shim to Android arm64 (the deployable target — runs inside the
|
|
# RE4 APK on Quest/Lepton). Host build is validation-only; this is the real artifact.
|
|
set -euo pipefail
|
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
SHIM="$ROOT/shim"
|
|
NDK="${ANDROID_NDK:-$(ls -d "$ROOT"/tools/android-ndk-* 2>/dev/null | head -1)}"
|
|
[ -n "${NDK:-}" ] && [ -d "$NDK" ] || { echo "NDK not found. Set \$ANDROID_NDK or run scripts/fetch_deps.sh"; exit 1; }
|
|
TC="$(ls -d "$NDK"/toolchains/llvm/prebuilt/* 2>/dev/null | head -1)" # host tag (linux/darwin)
|
|
CC="$TC/bin/aarch64-linux-android29-clang" # API 29 (Quest is Android 10+; app targetSdk=29)
|
|
|
|
[ -x "$CC" ] || { echo "NDK clang not found at $CC"; exit 1; }
|
|
mkdir -p "$SHIM/build/arm64"
|
|
|
|
"$CC" -std=c11 -Wall -O2 -shared -fPIC -fvisibility=hidden \
|
|
-I"$SHIM/include" -I"$SHIM/third_party/openxr" -I"$SHIM/third_party/vulkan" \
|
|
"$SHIM/src/stubs.c" "$SHIM/src/core.c" "$SHIM/src/xr_runtime.c" \
|
|
"$SHIM/src/vk_session.c" "$SHIM/src/layers.c" "$SHIM/src/android_init.c" "$SHIM/src/xr_input.c" \
|
|
"$SHIM/src/passthru.c" \
|
|
-llog \
|
|
-o "$SHIM/build/arm64/libOVRPlugin.so"
|
|
|
|
# NOTE: entitlement handling is out of scope for this project. On Quest you own the title,
|
|
# so the platform's real entitlement check runs unchanged (keep the original
|
|
# libovrplatformloader.so). Running on hardware with no Meta backend requires a valid
|
|
# entitlement by some other means, which is the user's responsibility and not part of this repo.
|
|
|
|
# the xr* symbols resolve against libopenxr_loader.so at runtime; declare the dep so
|
|
# the dynamic linker loads it (bundle libopenxr_loader.so in the APK lib/arm64-v8a/).
|
|
# Without this the shim's xr* symbols never resolve at runtime, so a build that skipped it
|
|
# is unusable — fail loudly rather than emitting a broken .so.
|
|
PATCHELF="$(command -v patchelf || true)"
|
|
[ -n "$PATCHELF" ] || { echo "ERROR: patchelf not found. It is required to add"; \
|
|
echo " 'libopenxr_loader.so' as NEEDED; without it the shim cannot resolve the"; \
|
|
echo " OpenXR loader at runtime. Install patchelf and re-run."; exit 1; }
|
|
"$PATCHELF" --add-needed libopenxr_loader.so "$SHIM/build/arm64/libOVRPlugin.so"
|
|
echo "added NEEDED libopenxr_loader.so"
|
|
echo "built: $SHIM/build/arm64/libOVRPlugin.so"
|