Files
erickdavestech a94b0ff451 Add CI, Dependabot for actions and pin PS5 payload SDK v0.43
CI runs host tests, the upstream source gate, the plugin wrapper test and the PS5 build with release verification. The dependency script now installs the SDK version used to build the releases.

Signed-off-by: erickdavestech <54048831+erickdavestech@users.noreply.github.com>
2026-10-03 20:42:00 -04:00

3.3 KiB

Building

The build system comes from Common FPS for PS5 by porhe911 and is used unchanged except for the plugin identity and the release verifier.

Requirements

  • A POSIX host (Linux or WSL) with git, wget, unzip, python3, objdump, CMake 3.20 or newer and a host C/C++ compiler for the tests.
  • The PS5 payload SDK. PS5_PAYLOAD_SDK must point to it (default: /opt/ps5-payload-sdk).

1. Fetch the pinned dependencies

bash ./scripts/prepare_ps5_deps.sh

The script installs PS5 payload SDK v0.43 — the version used to build the releases — into /opt/ps5-payload-sdk (it uses sudo) and clones the exact etaHEN and shsrv commits listed in DEPENDENCIES.lock.json into .deps/. If you already have SDK v0.43 installed, export PS5_PAYLOAD_SDK and skip the SDK step.

2. Build the payloads

bash ./scripts/ps5_source_build.sh

Outputs in dist/:

File Description Published as
Common_FPS_PS5_v1.2.1.elf Controller payload with the renderer embedded ps5-dualsense-overlay-<version>.elf
Common_FPS_PS5_etaHEN_v1.2.1.plugin The same payload wrapped as an etaHEN plugin (DSOV00001) ps5-dualsense-overlay-<version>.plugin
Common_FPS_ShellUI_v1.2.1.elf The renderer alone (already embedded in the controller) not published
SHA256SUMS.txt Checksums of the three files —

The internal file names come from upstream and are kept so the build system stays unchanged.

The script runs tools/verify_release.py, which checks that the renderer is embedded byte for byte in the controller, that the plugin wraps exactly the controller ELF with this project's identity, that the injection gates are present and that the renderer never references /data. It also checks that main does not call fork.

Host tests

cmake -S . -B build-host -DCMAKE_BUILD_TYPE=Release
cmake --build build-host
ctest --test-dir build-host --output-on-failure
python3 tests/test_plugin_wrapper.py

If your host only has a versioned compiler, select it explicitly, for example CC=clang-18 CXX=clang++-18 cmake -S . -B build-host ....

Regenerating the controller artwork

python3 tools/build_assets.py

Requires Pillow and Google Chrome or Chromium (headless). It regenerates assets/png/, assets/layout.json and the embedded sprite tables in src/ps5/shellui_payload/ from the source SVGs in assets/source/. assets/preview.html shows the result on a PC.

Continuous integration

Every push to main and every pull request runs .github/workflows/ci.yml: host tests, the upstream source gate, the plugin wrapper test and the full PS5 build with tools/verify_release.py. Each run publishes the build checksums in its summary and attaches the build as an artifact.

Reproducing a release

Release v1.0.0 was built with ps5-payload-sdk v0.43 and the etaHEN and shsrv commits pinned in DEPENDENCIES.lock.json. Following the steps above from a clean checkout produces a controller ELF identical to the published one:

sha256sum dist/Common_FPS_PS5_v1.2.1.elf

Compare the result with the release's SHA256SUMS.txt. The dependency script at the v1.0.0 tag still points to SDK v0.41; when building that tag, install SDK v0.43 and export PS5_PAYLOAD_SDK first.