Files
fstat13 a3692b1e25 docs: italian editions + front-page links
- 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
2026-10-15 15:14:21 +02:00

163 lines
5.3 KiB
Markdown

# 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](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_SDK` nell'ambiente) impacchettato
in una immagine. Sulla macchina di sviluppo l'immagine si chiama `ps5sdk:18`
— qualsiasi nome va bene, basta adattare i comandi.
Controlla che l'immagine ci sia:
```bash
docker images | grep ps5sdk
```
### 1.2 Build
Dalla radice della repo:
```bash
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):
```bash
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.log` con il log di partenza,
- appare `/data/pscapture.port` con 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:
```powershell
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:
```bash
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.
```bash
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
```bash
# 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-libgcc` sulla 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.** `windres` legge `pscapture.dll` e `pscapture.elf` da
`pc/` al momento della compilazione. Ricompili la DLL → rifai `windres` →
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 failure` di
mingw con più manifest.
### 2.5 Preparare una release
```bash
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:
```bash
rundll32 "pscapture.dll",DllRegisterServer
```