4.2 KiB
Building KB-RPCS3 from source
KB-RPCS3 has two separately licensed parts that are combined only at build time, on your own machine:
| Part | Folder | Licence |
|---|---|---|
| RPCS3 + the KB-RPCS3 core patches | port/rpcs3-patches/ (applied to upstream RPCS3) |
GPL-2.0-only (RPCS3's licence) |
| The PS5 title shell (home screen, settings, installer, PS5 platform glue) | app/ |
mixed — see app/LICENSING.md (MIT base, GPL-3.0-or-later UI and title code) |
Read LICENSING_STATUS.md before distributing anything you build: a binary that combines both parts
cannot currently be distributed.
Status of these instructions: they describe the build exactly as it was done for Alpha 0.1.0. That build ran in an Ubuntu (arm64) virtual machine with the PS5 toolchain installed at fixed paths under
~/work/. The scripts inport/andtools/still assume that layout. Reproducing the build on another machine requires the same dependencies at the same paths, or editing the paths in the scripts. A portable build is planned; it is not part of this alpha.
1. Dependencies (fetched separately, not included here)
| Dependency | Used for | Licence |
|---|---|---|
Upstream RPCS3 at revision 46aee28f8 (with its git submodules) |
the emulator core | GPL-2.0-only (+ submodule licences) |
PS5_Vulkan (Mihawk) — RADV/Mesa build for the PS5, link recipe, native ELF/SELF tool, libc.prx |
graphics driver and title packaging | GPL-3.0 (Mesa/RADV parts: MIT) |
| ps5-payload-sdk (ps5-payload-dev) and its fork with the PS5 platform layer (Mihawk) | toolchain, headers, platform library | GPL-3.0-or-later |
| PS5_VKHomebrewUI (Mihawk's fork of BlackBearReloaded's ps5-homebrew-ui) | the UI kit, fetched by app/ps5/ui/setup-kit.sh |
GPL-3.0 |
| LLVM, FFmpeg, libiconv and zlib built for the PS5 | linked by the emulator core | Apache-2.0 WITH LLVM-exception, LGPL/GPL, LGPL, Zlib |
| Vulkan-Headers 1.4.354 and volk 1.4.350.1 | Vulkan loading | Apache-2.0 / MIT |
The LLVM/FFmpeg/libiconv/zlib PS5 builds used for the alpha came from a separate PS5 RetroArch build's
dependency folder; port/rpcs3-build.sh shows the exact paths it expects.
2. Apply the RPCS3 patch series
port/apply-rpcs3-patches.sh /path/to/rpcs3
This clones upstream RPCS3, checks out 46aee28f8, initialises the submodules and applies the 47
patches with git am --keep-cr. The --keep-cr is required: some upstream files use CRLF line endings.
3. Build the emulator core
SRC_DIR=/path/to/rpcs3 BUILD_DIR=/path/to/rpcs3-build JOBS=8 port/rpcs3-build.sh rpcs3_ps5
- Leave
EXTRA_CFLAGSempty. The working configuration uses emulated TLS. Native TLS (-fno-emulated-tls) failed on real hardware (KNOWN_ISSUES.md). - Set
CCACHE_DISABLE=1when you need trustworthy compiler diagnostics. - A full build takes about two hours on an 8-core machine. It ends with
BUILD OKand writesrpcs3-link-inputs.txt, the list of static archives the title links.
4. Build the title
APP_DIR=/path/to/app-build-copy RPCS3_BUILD_DIR=/path/to/rpcs3-build tools/vm-build-app.sh
The title is written to dist/PPSA99303/. Do not set PS5_NATIVE_TLS=1.
Optional: the per-game recommended settings need RPCS3's configuration database, which is not redistributed here. Download it before building:
mkdir -p app/examples/rpcs3ps5/data
curl -o app/examples/rpcs3ps5/data/rpcs3-config-db.json 'https://api.rpcs3.net/config/?api=v1'
5. Experimental options
All experimental SPU options are off by default. They are switched on per console with a tuning
file, rpcs3/ps5-tuning.txt in the title folder, one key value per line:
| Key | Default | Meaning |
|---|---|---|
spu_insert_select |
0 | SPU LLVM: variable-index insert as a lane select |
spu_narrow_ls_store |
0 | SPU LLVM: narrow local-store store for load → insert → store |
spu_narrow_ls_check |
0 | debug: verify every narrow store against the full store |
spu_hot_cpu |
-1 | keep the busiest SPU thread on the given CPU (12 = the CPU without an SMT sibling) |
spu_jit_verify |
0 | debug: LLVM IR verification of all compiled SPU code |
None of these is a validated improvement yet.