Steam Frame build, packaging and deployment scripts; render test

- build_scripts/steamframe/: Debian trixie (Qt 6.8) containers for the
  aarch64 cross build, native build and tests; toolchain; scripts to build,
  test (Vulkan validation layers), package (system Qt, ~3 MB) and deploy over
  SSH. Adapted from the vrdashboard template.
- test/render/: render test for the OpenGL and Vulkan backends, driven like
  OverlayController (option OVRAS_BUILD_TESTS).
- RPATH only $ORIGIN, without the build machine's link directories.
- Ignore dist/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Matthias Janetschek
2026-10-07 13:50:57 +02:00
co-authored by Claude Opus 5.5
parent b22c35ae29
commit bde675f1b8
15 changed files with 610 additions and 14 deletions
+25 -13
View File
@@ -211,27 +211,39 @@ existing code:
| File | Purpose |
|---|---|
| `cross-arm64.Dockerfile` | Debian container with Qt 6.8 (aarch64 multiarch), CMake, Vulkan headers, X11/Xtst, libpulse |
| `cross-arm64.Dockerfile` | Debian trixie (Qt 6.8) with arm64 multiarch libraries, cross compiler |
| `native.Dockerfile` | The same for the host's own architecture (on the Frame: native build); base of the test container |
| `test.Dockerfile` | Mesa (incl. lavapipe), Vulkan validation layers, Xvfb |
| `aarch64-linux-gnu.cmake` | Cross-compile toolchain |
| `container-build.sh` | Configures the build (`OVRAS_STEAM_FRAME=ON`) and builds it in the container |
| `package-release.sh` | Folder with the binary, `libopenvr_api.so`, `res/`, manifests, `install.sh` / `uninstall.sh` → `.tar.gz` |
| `deploy-to-frame.sh` | Copies the package to the Frame over SSH and runs `install.sh` |
| `install.sh` / `uninstall.sh` | `--force-install-manifest` / `--force-remove-manifest` (section 2) and start / stop |
| `container-build.sh cross\|native` | Builds with `OVRAS_STEAM_FRAME=ON` → `build/steamframe-<mode>/Release/` |
| `container-test.sh` | Render tests with both APIs, Vulkan with validation layers |
| `package-release.sh` | Build output + `install.sh` / `uninstall.sh` / `run.sh` / `README.txt` → `dist/AdvancedSettings-<version>-linux-arm64(.tar.gz)` |
| `deploy-to-frame.sh` | Copies the package to the Frame over SSH (`rsync`) and runs `install.sh` there |
- **Scripts in the package:**
- `install.sh` stops a running instance, registers it (`--force-install-manifest`, auto-start)
and starts it with `DISPLAY=:0`. Over SSH there is no display, and Qt needs one.
- `run.sh [opengl|vulkan]` restarts it with a given graphics API.
- The scripts start the program in the package folder, because OVRAS writes
`AdvancedSettings.log` into the working directory.
- Packages use the **system Qt**: no Qt is bundled, because of section 3 the binary uses no
private API.
- The template's Qt-bundling fallback is not adopted for now.
- RPATH is only `$ORIGIN` (`BUILD_WITH_INSTALL_RPATH`): the build tree gets packaged.
## Tests
- **x86_64 locally:** the build succeeds; `objdump` check (R1).
- **Vulkan:** `container-test.sh` with validation layers. It reports no messages, and the
render path is checked by a snapshot test (`tst_render` from the template, reduced to the
backends).
- **OVRAS:** the keyboard parser test `test/keyboard_input` is included in CMake if that is
easy; otherwise it is noted as not run.
- **On the Frame:** a checklist per acceptance criterion R1–R4, R6, R7, with both graphics
APIs. Results go to `docs/steamframe/PROGRESS.md`.
- **Render test `test/render/tst_render`** (`OVRAS_BUILD_TESTS=ON`):
- Drives the backends and `QQuickRenderControl` in the same order as `OverlayController`.
- Checks the texture description for SteamVR (type, Vulkan format) and the content and
orientation via readback.
- One CTest entry per API.
- `container-test.sh` runs it with the Vulkan validation layers. It fails on validation
messages and on skipped tests.
- **OVRAS's keyboard parser test** (`test/keyboard_input`, qmake) is not included in CMake
in iteration 1 (not run).
- **On the Frame:** the checklist in `PROGRESS.md` per acceptance criterion R1–R4, R6, R7,
with both graphics APIs.
## Implementation order