- docs/GUIDE.it.md and docs/BUILD.it.md: full italian translations - docs/index.it.html: italian HTML guide with language switcher - README: guide/build links right under the badges (EN + IT) - GUIDE.md / BUILD.md: link to their italian editions
5.3 KiB
PSCapture — build dai sorgenti, passo per passo
Tutto il necessario per passare da questi sorgenti a un PSCapture.exe
funzionante e a un pscapture.elf per la console. Ogni comando è scritto
esattamente come va eseguito, in ordine. Qui dentro non c'è magia: l'ordine
conta e ogni passo è spiegato.
Ci sono due metà, che si compilano in posti diversi:
| Metà | Output | Dove si compila | Toolchain |
|---|---|---|---|
| Payload console | payload/pscapture.elf |
Docker (container Linux) | PS5 payload SDK (prospero-clang) |
| Lato PC | pc/pscapture.exe + pc/pscapture.dll |
Windows | MinGW-w64 (gcc + windres) |
🇬🇧 English version: BUILD.md
Parte 1 — Il payload per la console
1.1 Cosa serve
- Docker (Docker Desktop su Windows, o Docker normale su Linux/macOS).
- L'immagine del PS5 payload SDK. È il payload SDK della community per
PS5 (
prospero-clang,make,PS5_PAYLOAD_SDKnell'ambiente) impacchettato in una immagine. Sulla macchina di sviluppo l'immagine si chiamaps5sdk:18— qualsiasi nome va bene, basta adattare i comandi.
Controlla che l'immagine ci sia:
docker images | grep ps5sdk
1.2 Build
Dalla radice della repo:
docker run --rm -v "$PWD/payload:/payload" -w /payload ps5sdk:18 make
Su Windows (PowerShell/cmd) metti il percorso completo al posto di
"$PWD/payload", es.: -v "C:\Users\tuonome\PSCapture\payload:/payload".
Risultato: payload/pscapture.elf (~175 KB).
Il Makefile fa l'unica cosa che conta: compila main.c con il clang
Prospero dell'SDK e linka l'ELF finale. Nessun altro input.
1.3 Opzionale — mandarlo alla console
Con la console jailbroken (payload loader sulla porta 9021):
docker run --rm -v "$PWD/payload:/payload" -w /payload ps5sdk:18 \
make deploy PS5_HOST=192.168.0.36
(oppure carica pscapture.elf con il loader che usi di solito).
Come si presenta un avvio sano sulla console:
- appare
/data/pscapture.logcon il log di partenza, - appare
/data/pscapture.portcon la porta TCP dello stream, - la console mostra la notifica PSCapture is streaming on:PORT.
Parte 2 — Il lato PC
2.1 Cosa serve (Windows)
MinGW-w64 64-bit con gcc e windres. Sulla macchina di sviluppo:
winget install BrechtSanders.WinLibs.POSIX.UCRT
(oppure qualsiasi MSYS2 con mingw-w64-x86_64-gcc — pacman -S mingw-w64-x86_64-gcc).
Controlla che entrambi siano nel PATH:
gcc --version
windres --version
2.2 Build — l'ordine è obbligatorio
pscapture.res è un bundle che incastra i file così come sono su disco:
l'icona, il payload della console e il driver della capture card. Quindi la
DLL va compilata prima del passo risorse, e il payload deve già trovarsi in
pc/ quando gira windres. L'EXE si compila per ultimo.
cd pc
# 0) porta il payload appena compilato accanto al .rc (viene incastrato così com'è)
cp ../payload/pscapture.elf .
# 1) il driver della capture card (filtro sorgente DirectShow)
gcc -O2 -shared -static -static-libgcc -o pscapture.dll ps5cam.c \
-lole32 -loleaut32 -luser32 -ladvapi32 -lws2_32
# 2) bundle: icona + payload + driver in un unico oggetto risorse
# (pscapture.rc => 1 ICON pscapture.ico / 2 RCDATA pscapture.elf
# / 3 RCDATA pscapture.dll)
windres pscapture.rc -O coff -o pscapture.res
# 3) l'app — un unico eseguibile autocontenuto
gcc -O2 -mwindows -o pscapture.exe pscapture.c pscapture.res \
-lws2_32 -lshell32 -ladvapi32 -luxtheme
2.3 Verifica della build
# il driver deve dipendere SOLO da DLL di sistema (niente libgcc/libwinpthread):
objdump -p pscapture.dll | grep "DLL Name"
# le dimensioni giuste: exe ~500 KB, dll ~220 KB
ls -la pscapture.exe pscapture.dll
# payload e driver sono davvero dentro l'eseguibile:
strings pscapture.exe | grep -c PSCapture
Avvia pscapture.exe: si apre la finestra (prompt UAC → Sì) e il pannello log
mostra la sequenza controllo driver → estrazione payload → tentativo di
deploy. È la stessa sequenza descritta in docs/INSTALLER.md.
2.4 Trappole (imparate sul campo)
-static -static-libgccsulla DLL non è cosmetico. Senza, il driver può ritrovarsi a dipendere dalle DLL runtime di mingw che non sono nel PATH di sistema quando Windows (o un'altra app) lo carica — il classico "impossibile trovare il modulo specificato".- Ordine di build.
windresleggepscapture.dllepscapture.elfdapc/al momento della compilazione. Ricompili la DLL → rifaiwindres→ ricompili l'EXE, ogni volta. Dimenticare il passo centrale spedisce il driver vecchio dentro l'exe nuovo. - Solo ASCII nelle stringhe passate alle API Win32
*A(titoli, bottoni, log). Byte UTF-8 in una stringa ANSI si vedono come caratteri rotti. - Il manifest (
pc/pscapture.manifest) è tenuto solo per riferimento; la build attuale non lo incastra — l'auto-elevazione è fatta nel codice (ShellExecuteEx … "runas"), cosa che evita il.rsrc merge failuredi mingw con più manifest.
2.5 Preparare una release
mkdir -p dist
cp pc/pscapture.exe pc/pscapture.dll dist/
Per gli utenti basta pscapture.exe da solo (la DLL e il payload viaggiano
dentro). La pscapture.dll sciolta si allega per le installazioni manuali:
rundll32 "pscapture.dll",DllRegisterServer