diff --git a/CMakeLists.txt b/CMakeLists.txt index 531f4bd..1b95bca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -343,7 +343,12 @@ endif () if (WIN32) set(OPENVR_LIB_DIR ${CMAKE_SOURCE_DIR}/third-party/openvr/lib/win64) elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64|ARM64)$") - set(OPENVR_LIB_DIR ${CMAKE_SOURCE_DIR}/third-party/openvr/lib/linuxarm64) + # bin/, not lib/: the SDK's lib/linuxarm64/libopenvr_api.so looks for the + # VR path registry in the fixed path /data/work/openvrpaths.vrpath instead + # of ~/.config/openvr, so on the Steam Frame it never finds SteamVR + # ("Installation path could not be located"). bin/linuxarm64 (SDK 2.15.6) + # uses ~/.config/openvr. + set(OPENVR_LIB_DIR ${CMAKE_SOURCE_DIR}/third-party/openvr/bin/linuxarm64) else () set(OPENVR_LIB_DIR ${CMAKE_SOURCE_DIR}/third-party/openvr/lib/linux64) endif () diff --git a/docs/steamframe/PROGRESS.md b/docs/steamframe/PROGRESS.md index 34fbfb3..57d7da3 100644 --- a/docs/steamframe/PROGRESS.md +++ b/docs/steamframe/PROGRESS.md @@ -189,6 +189,31 @@ - **Not tested yet:** the fix itself on the Frame (T1, T11). No local x86 build was at hand for a test without a display. +### Fix: OpenVR library for aarch64 (2026-10-07) + +- **Problem (second deploy):** with the display fix, `--force-install-manifest` got as far + as `VR_Init` and failed there: "Installation path could not be located (110)", and on + stderr "Unable to read VR Path Registry from /data/work/openvrpaths.vrpath". + `~/.config/openvr/openvrpaths.vrpath` on the Frame is correct (runtime `/opt/steamvr`). +- **Cause:** the package shipped `third-party/openvr/lib/linuxarm64/libopenvr_api.so`. It is + byte-identical to the OpenVR SDK 2.15.6's `lib/linuxarm64` and looks for the path registry + in the fixed path `/data/work/openvrpaths.vrpath`. The SDK's `bin/linuxarm64` library + (used by the template, verified on the Frame) and SteamVR's own one in + `/opt/steamvr/bin/linuxarm64` don't contain that path. OVRAS's `third-party/openvr` had no + `bin/linuxarm64`. +- **Fix:** + - New file `third-party/openvr/bin/linuxarm64/libopenvr_api.so` from the SDK v2.15.6 + (`raw.githubusercontent.com/ValveSoftware/openvr/v2.15.6/bin/linuxarm64/…`, SHA-256 + `cc3671d2…47e9`). + - `CMakeLists.txt`: `OPENVR_LIB_DIR` = `bin/linuxarm64` for aarch64 only. x86_64 and + Windows are unchanged. + - Rejected: setting `VR_PATHREG_OVERRIDE` in the scripts. It wouldn't help when SteamVR + autostarts OVRAS. +- **Result:** cross build and package succeed. The package contains the new library (no + `/data/work`), `Qt_6_PRIVATE_API` without `QVulkan*`: 0, RUNPATH `$ORIGIN`. Package + 1.6 MB (was 3.0 MB, the old library was 5.4 MB). +- **Not tested yet:** on the Frame (T1). + ### Test checklist on the Frame (step 5) Deploy: `build_scripts/steamframe/deploy-to-frame.sh @` (SteamVR running). diff --git a/docs/steamframe/README.md b/docs/steamframe/README.md index 200c6b1..e57792a 100644 --- a/docs/steamframe/README.md +++ b/docs/steamframe/README.md @@ -19,7 +19,7 @@ point for continuing the work on any computer. - Linux x86_64 build. - aarch64 cross build: no private Qt API except `QVulkan*`, Qt 6.8, GLIBC ≤ 2.38. - Render tests with OpenGL and Vulkan; Vulkan with validation layers and no messages. - - Release package (3.0 MB). + - Release package (1.6 MB). - **Next step:** test checklist T1–T11 on the Frame ([PROGRESS.md](PROGRESS.md)), record the results there, then assessment. - **After that:** iteration 2. R5 hides the features that are native in SteamVR or don't diff --git a/third-party/openvr/bin/linuxarm64/libopenvr_api.so b/third-party/openvr/bin/linuxarm64/libopenvr_api.so new file mode 100644 index 0000000..109815e Binary files /dev/null and b/third-party/openvr/bin/linuxarm64/libopenvr_api.so differ