Disponibile un nuovo aggiornamento per la toolchain OpenOrbis, la raccolta di strumenti open source dedicato allo sviluppo di applicazioni homebrew su console PlayStation 4 e PlayStation 4 Pro jailbroken.
Questa nuova versione include moduli stub che possono essere utilizzati per evitare di rompere giochi, SDL2, threading e sincronizzazione C++, oltre a riportare moltissime correzioni di bug.
PS4 toolchain v0.5 is out! Includes stub modules to avoid breaking games, SDL2, C++ threading and synchronization, and a big bag of bug fixes. More in the changelog.https://t.co/scltaWKxKf
Recommend updating your Mira version and using the updated VS templates.
— Specter (@SpecterDev) August 8, 2020
[stextbox id=’info’]Nota: Si consiglia di aggiornare la propria versione di Mira e di utilizzare i template VS aggiornati.[/stextbox]
Note
I seguenti progetti verranno aggiunti all’interno della repository ufficiale entro i prossimi giorni:
- Debugger
- MiraLib
Documentazione
Ogni strumento avrà un file README.md
aggiuntivo all’interno della sottodirectory che fornisce informazioni più specifiche su quel progetto. La sottodirectory docs
contiene anche materiali e documentazione aggiuntivi. Di seguito una panoramica dello scopo di ciascuna sottodirectory:
Directory | Contenuti |
/bin | File eseguibili per strumenti su ogni piattaforma (Windows in /bin/windows e Linux in /bin/linux ). |
/docs | Documentazione per le specifiche del formato PS4 (reverse engineering) e la toolchain stessa. |
/extra | File extra e varie. Attualmente, questo include modelli di progetto per Visual Studio. |
/include | Contiene i file di intestazione da compilare quando si creano applicazioni/librerie (i file specifici di PS4 sono in /include/orbis . |
/lib | Contiene gli stub della libreria a cui collegarsi durante la creazione di applicazioni/librerie. |
/samples | Programmi di esempio per iniziare e per riferimento. |
/scripts | Script utili per visualizzare le informazioni Orbis ELF (OELF) e altri strumenti. |
/src | Contiene il codice sorgente per gli strumenti (vedere /src/README.md per ulteriori informazioni su questa directory). |
Setup e installazione
La toolchain clang e il linker llvm (lld) sono necessari per compilare e collegare utilizzando questo SDK. Per Windows, questi possono essere scaricati utilizzando i file binari predefiniti forniti da LLVM. Per Linux e macOS, la stessa pagina contiene file binari predefiniti, tuttavia è anche possibile usare i seguenti comandi (Debian/Ubuntu):
sudo apt-get update
sudo apt-get install clang
sudo apt-get install lld
Nel caso in cui si utilizzi un derivato Arch:
sudo pacman -S clang
sudo pacman -S lld
Gli utenti macOS possono utilizzare Homebrew per installare una copia pura di LLVM (la versione Apple non funzionerebbe con la toolchain).
brew install llvm
In futuro, potremmo includere binari predefiniti per clang/lld, tuttavia per il momento è necessario installarli separatamente, è inoltre necessario impostare la variabile di ambiente OO_PS4_TOOLCHAIN
.
Su Windows, questo può essere fatto utilizzando il pannello di controllo delle variabili d’ambiente. Su Linux e macOS, è possibile aggiungere il seguente comando a ~/.bashrc
(Debian/Ubuntu), ~/.bash_profile
(macOS Mojave e inferiore) o ~/.zshrc
(macOS Catalina):
export OO_PS4_TOOLCHAIN=[directory di installazione]
Ciò è necessario affinché gli script di compilazione e lo strumento di conversione sappiano dove cercare determinati file. Si consiglia inoltre di aggiungere la directory root SDK + /bin
alla variabile del percorso.
Windows Installer
Per PC Windows, viene fornito un programma di installazione tramite script Nullsoft, che automatizzerà il processo di estrazione dei file della toolchain e l’impostazione della variabile di ambiente OO_PS4_TOOLCHAIN
.
Linux
Per Linux, dopo aver installato le dipendenze richieste e aver impostato la variabile d’ambiente come indicato sopra, ti consigliamo di eseguire lo script setup-toolchain.sh
in /extra
. Ciò contrassegnerà tutti i file binari di Linux come eseguibili, poiché per impostazione predefinita sono in lettura/scrittura.
macOS
Per macOS, viene fornito un programma di installazione PKG, che automatizzerà il processo di estrazione dei file della toolchain e l’impostazione della variabile di ambiente OO_PS4_TOOLCHAIN
nelle shell bash e zsh.
Creazione di progetti homebrew
Per Windows, /extra
fornisce modelli di Visual Studio che possono essere aggiunti nella directory dei modelli dell’installazione VS per consentire una facile creazione di progetti homebrew, è inoltre possibile copiare e modificare le soluzioni dagli esempi forniti.
Per Linux e macOS, /extra
contiene uno script setup-project.sh
che creerà una directory di progetto basata sull’esempio hello_world
.
Strumenti
Ogni strumento avrà un file README.md
dedicato con informazioni più specifiche sullo strumento. Di seguito viene elencata una panoramica generica degli strumenti inclusi attualmente nella toolchain.
create-eboot
Lo strumento create-eboot
prende i normali file ELF (Executable Linkable Format) ed esegue le patch e il ricollegamento necessari per creare un ELF (OELF) Orbis.
Prenderà ulteriormente questo OELF e lo trasformerà in Signed Executable Linkable Format (SELF). Ciò è stato reso possibile grazie al precedente lavoro di flatz sullo script make-fself.py
, che può essere trovato in /scripts
. Per ulteriori informazioni su questi formati, consultare il wiki o /docs
.
Autore: Specter + flatz (fself stuff)
create-lib
Lo strumento create-lib
è simile allo strumento create-eboot
, tuttavia produce file della libreria Playstation Relocatable eXecutable (PRX) da un determinato file ELF.
Autore: Specter + flatz (fself stuff)
create-pkg
Lo strumento create-pkg
prende una serie di file che le applicazioni dovrebbero avere (eboot.bin
, param.sfo
, moduli necessari, ecc..) e crea un file di pacchetto (pkg) che può essere installato su PS4.
Autore: maxton
stub-generator
Il generatore di stub genera i file header e i file delle librerie condivise (.so
) per il collegamento con le librerie di sistema PS4. L’output di questo strumento è disponibile in /include/orbis
e in /lib
. Queste directory sono essenziali per collegarsi correttamente con le librerie PS4.
Autore: CrazyVoid
miralib
La libreria miralib
contiene codice C# e Python per interagire con Mira sul lato desktop delle cose. Ciò include la gestione di un elenco locale di console, la connessione a una console e l’esecuzione di varie azioni una volta connesse tramite RPC.
Autore: Specter + Kiwi
assistant
Assistant è in realtà una suite di strumenti per aiutare nello sviluppo di homebrew per PS4. Ciò include un visualizzatore di registri, un debugger, un launcher per Mira e un’applicazione della barra delle applicazioni per avviarli facilmente.
Autore: Specter
readelf replacement
Questo è uno strumento sostitutivo per la lettura di file ELF compatibili con PS4, altrimenti noto come ELF Orbis (OELF).
Autore: Specter
Script
Tutti gli script presenti nella directory /scripts
sono script Python 3, specifici per Python 3.7.0, ad eccezione di /scripts/make_fself.py
. Avrai bisogno di Python installato sul tuo sistema per eseguire questi script. L’uso di questi script è disponibile in /scripts/README.md
.
autobuild.py
– è uno script per la generazione automatica di file pkg basato sul contenuto della directory del progetto (potrebbe essere instabile, attendere la compilazione del rilascio).
dynamic_entries.py
– Questo script ottiene un elenco di voci dinamiche dalla tabella dinamica degli ELF Orbis.
make_fself.py
– Copia dello script flatz’ per generare file SELF falsi. Questa funzionalità è stata ora integrata come parte di create-eboot
e create-lib
.
program_headers.py
– Ottiene un elenco di intestazioni del programma dalla tabella delle intestazioni del programma degli ELF Orbis.
rela_entries.py
– Ottiene un elenco di voci di trasferimento con aggiunta (RELA) dalla tabella di trasferimento degli ELF Orbis.
symbol_entries.py
– ottiene un elenco di simboli dalla tabella dei simboli degli ELF Orbis.
Changelog
- La toolchain ora include i moduli stub/empty libc e libSceFios2 per evitare di rompere giochi e applicazioni non homebrew.
- Nota: Questa modifica funziona in combinazione con Mira, il che significa che dovrai aggiornare anche la versione di Mira che stai caricando.
- Nota aggiuntiva: Questi moduli possono essere trovati in
/bin/data/modules/libc.prx
e/bin/data/modules/libSceFios2.prx
e dovrebbero essere inseriti insce_module/
nel file del pacchetto del tuo homebrew.
- Ora sono stati aggiunti gli header SDL2 e un mini gioco di esempio (grazie znullptr per la porta SDL originale).
- Aggiunto il supporto per il threading C++ (
std::thread
). - Aggiunto il supporto per il blocco/sincronizzazione C++!
- Corretto un problema di prestazioni in create-eboot, dandogli un aumento delle prestazioni del 7858% (misurato con il campione SDL)!
- I modelli di progetto di Visual Studio ora supportano e si collegano a C++ per impostazione predefinita.
- Aggiunte varie macro e definizioni di funzioni a libkernel, libScePad, libSceUserService e libSceVideoOut, oltre alla documentazione per queste aggiunte.
- Aggiunto
right.prx
da IDC a tutti i campioni (grazie IDC perright.prx
). - File PKG gp4 di esempio leggermente modificati per utilizzare lo stesso eboot.bin creato dagli script di compilazione invece di utilizzare inutilmente una copia.
- Corretto il problema con il rendering del testo frastagliato in
/samples/_common/graphics.cpp
a causa del fatto che non si prendeva in considerazione correttamente l’alfa bitmap in scala di grigi freetype. - Il buffering ora è disabilitato automaticamente su stdout perché non gestisce bene il buffering.
- Aggiornata intestazione pthread per utilizzare valori specifici per PS4/BSD.
- I campioni ora hanno simboli DWARF / debug inclusi per impostazione predefinita (grazie sleirsgoevy).
- Rielaborato l’esempio di threading per utilizzare std::thread e std::mutex ora che il threading C++ è supportato.
- Rielaborato l’esempio di rete su di un server TCP invece che su di un client TCP.
- Corretto un problema per cui una modifica davvero stupida a FreeBSD interrompeva le funzioni di rete che dovevano usare la struttura sockaddr come bind.
- Corretto un problema per cui i file di progetto GP4 utilizzavano separatori di percorso in stile Windows non portatili (grazie sleirsgoevy).
- Corretto un problema per cui la funzione non-sce sleep() non funzionava a causa di problemi relativi a MUSL (grazie LM, ChendoChap).
- Corretto un problema per cui i progetti di Visual Studio SPRX contenevano un errore di battitura in un’istruzione include e un set di librerie errato per lo script di build.
- Corretto il problema con l’intestazione cmath c++, che includeva l’istruzione
using
per funzioni che sono macro su obiettivi FreeBSD (grazie kiwidog). - Corretto un problema per cui la struttura
sockaddr_in
non era corretta a causa di una discrepanza tra Linux e FreeBSD (grazie kiwidog). - Corretto un problema per cui AF_INET6 era impostato erroneamente su 10 a causa di una discrepanza tra Linux e FreeBSD (grazie sleirsgoevy).
Video
Download: OpenOrbis PS4 Toolchain v0.5 (exe)
Download: OpenOrbis PS4 Toolchain v0.5 (pkg)
Download: Pacchetto esempi
Download: OpenOrbis PS4 Toolchain v0.5 (zip)
Download: Source code OpenOrbis PS4 Toolchain v0.5
Fonte: github.com