Use the OpenVR SDK's bin/linuxarm64 library on aarch64

On the Steam Frame, VR_Init failed with "Installation path could not be
located": the SDK's lib/linuxarm64/libopenvr_api.so (2.15.6) reads the VR
path registry from the fixed path /data/work/openvrpaths.vrpath instead
of ~/.config/openvr. The SDK's bin/linuxarm64 library of the same version
uses ~/.config/openvr; the vrdashboard template ships it and was verified
on the Frame. It is added as a new file (third-party/openvr had no
bin/linuxarm64, and "bin" is gitignored, hence force-added), and aarch64
builds link against and ship it. x86_64 and Windows are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-07 23:13:47 +02:00
co-authored by Claude Opus 5.5
parent 537539ab5e
commit 317db6831d
4 changed files with 32 additions and 2 deletions
+6 -1
View File
@@ -343,7 +343,12 @@ endif ()
if (WIN32) if (WIN32)
set(OPENVR_LIB_DIR ${CMAKE_SOURCE_DIR}/third-party/openvr/lib/win64) set(OPENVR_LIB_DIR ${CMAKE_SOURCE_DIR}/third-party/openvr/lib/win64)
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64|ARM64)$") 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 () else ()
set(OPENVR_LIB_DIR ${CMAKE_SOURCE_DIR}/third-party/openvr/lib/linux64) set(OPENVR_LIB_DIR ${CMAKE_SOURCE_DIR}/third-party/openvr/lib/linux64)
endif () endif ()
+25
View File
@@ -189,6 +189,31 @@
- **Not tested yet:** the fix itself on the Frame (T1, T11). No local x86 build was at hand - **Not tested yet:** the fix itself on the Frame (T1, T11). No local x86 build was at hand
for a test without a display. 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) ### Test checklist on the Frame (step 5)
Deploy: `build_scripts/steamframe/deploy-to-frame.sh <user>@<frame>` (SteamVR running). Deploy: `build_scripts/steamframe/deploy-to-frame.sh <user>@<frame>` (SteamVR running).
+1 -1
View File
@@ -19,7 +19,7 @@ point for continuing the work on any computer.
- Linux x86_64 build. - Linux x86_64 build.
- aarch64 cross build: no private Qt API except `QVulkan*`, Qt 6.8, GLIBC ≤ 2.38. - 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. - 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 - **Next step:** test checklist T1–T11 on the Frame ([PROGRESS.md](PROGRESS.md)), record
the results there, then assessment. the results there, then assessment.
- **After that:** iteration 2. R5 hides the features that are native in SteamVR or don't - **After that:** iteration 2. R5 hides the features that are native in SteamVR or don't
Binary file not shown.