OpenOrbis Toolchain PS4: Difference between revisions
More actions
Created page with "{{Infobox PS4 Homebrews |title=OpenOrbis Toolchain |image=openorbistoolchainps4.png |description=The OpenOrbis PS4 custom toolchain. Allows developers to build homebrew for the PS4 without the official SDK. |author=Cryptogenic |lastupdated=2021/12/22 |type=Developments |version=0.5.2 |license=GPL-3.0 |download=https://dlhb.gamebrew.org/ps4homebrews/openorbistoolchainps4.7z |website=https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain |source=https://github.com/OpenOrbis/..." |
No edit summary |
||
| Line 6: | Line 6: | ||
|lastupdated=2021/12/22 | |lastupdated=2021/12/22 | ||
|type=Developments | |type=Developments | ||
|version=0.5. | |version=0.5.3 | ||
|license=GPL-3.0 | |license=GPL-3.0 | ||
|download=https://dlhb.gamebrew.org/ps4homebrews/openorbistoolchainps4.7z | |download=https://dlhb.gamebrew.org/ps4homebrews/openorbistoolchainps4.7z | ||
| Line 20: | Line 20: | ||
}} | }} | ||
{{cleanup|article|Needs cleanup}} | {{cleanup|article|Needs cleanup}} | ||
The OpenOrbis PS4 | The OpenOrbis PS4 Toolchain is an open-source project designed to facilitate the development of homebrew (unofficial) applications for the PlayStation 4, '''without relying on Sony’s official SDK'''. It provides a collection of tools, libraries, and scripts that work together to enable developers to write, compile, and package PS4-compatible applications. Below are the key points that characterize the project: | ||
# '''Purpose''' | |||
''' | #* Allows developers to create PS4 homebrew software and games. | ||
#* Eliminates the need for proprietary (and often legally restricted) Sony development tools. | |||
# '''Core Components''' | |||
#* '''Clang/LLVM-based toolchain''' for compilation. | |||
#* Libraries and headers tailored for PS4-specific development. | |||
#* Linker and additional utilities designed to generate PS4 executables (self/elf files). | |||
# '''Cross-Platform Support''' | |||
#* Provides build scripts for multiple platforms, including Linux and Windows (through MSYS2). | |||
#* Aims to streamline the setup process across different operating systems. | |||
# '''Ease of Setup & Usage''' | |||
#* Automated build scripts help users install and configure the toolchain. | |||
#* Documentation (including a Wiki) offers guidance on how to compile and package homebrew apps. | |||
# '''Active Development & Community''' | |||
#* Maintained by contributors who continually refine and expand functionality. | |||
#* Encourages community feedback and contributions for improvements. | |||
# '''Open-Source Licensing''' | |||
#* Distributed under permissive licensing (e.g., MIT or similar), allowing free use and modification. | |||
#* Encourages developers to inspect, modify, and share the toolchain’s source code. | |||
==Setup & Installation== | |||
For detailed setup and installation instructions, please visit the [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain?tab=readme-ov-file#setup--installation project's GitHub repository]. The maintainers provide step-by-step guidelines to help you install dependencies, configure paths, and get the toolchain up and running on your system of choice. | |||
==Changelog== | |||
https:// | '''v0.5.3''' | ||
https:// | * Fix OrbisSaveDataParam definition by [https://github.com/bucanero @bucanero] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/174 #174] | ||
https:// | * Fix SaveData.h compiling error in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/173 #173] | ||
https:// | * Update SystemService.h to include dependency by [https://github.com/Al-Azif @Al-Azif] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/175 #175] | ||
https:// | * Piglet sample: censor out sceKernelDlsym by [https://github.com/sleirsgoevy @sleirsgoevy] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/182 #182] | ||
https:// | * libkernel.h: add scePthreadSelf definition by [https://github.com/Cpasjuste @Cpasjuste] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/184 #184] | ||
https:// | * Add RegMgr methods by [https://github.com/bucanero @bucanero] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/179 #179] | ||
https:// | * .NET Core 3.0 Runtime is required to run LibOrbisPkg by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/176 #176] | ||
* Update libkernel.h by [https://github.com/Backporter @Backporter] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/186 #186] | |||
* Readd keyboard sample (fixed a typo) by [https://github.com/Klairm @Klairm] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/183 #183] | |||
* Remove specific versioning from Dockerfile by [https://github.com/Al-Azif @Al-Azif] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/194 #194] | |||
* Fix [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/issues/178 #178] by [https://github.com/Al-Azif @Al-Azif] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/193 #193] | |||
* Add Trophy Support and add a sample for the trophy system by [https://github.com/Backporter @Backporter] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/188 #188] | |||
* Add HTTP sample by [https://github.com/bucanero @bucanero] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/196 #196] | |||
* Add a MsgDialog sample by [https://github.com/bucanero @bucanero] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/197 #197] | |||
* Update Rtc.h by [https://github.com/Backporter @Backporter] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/202 #202] | |||
* Add sceNetResolver...() methods by [https://github.com/bucanero @bucanero] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/207 #207] | |||
* fix firmware structure, fix sceKernelFstat's args, sceRtcCurrentClockLocalTime's args, add error dialog structures and function definitions, add Np defs. by [https://github.com/Backporter @Backporter] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/203 #203] | |||
* For convenience, add 2 XML tags to MyTemplate.vstemplate by [https://github.com/SummerFalls @SummerFalls] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/204 #204] | |||
* Update fliprate and Screenshot Overlay Stub by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/212 #212] | |||
* CI: fix build by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/217 #217] | |||
* Add user service methods by [https://github.com/bucanero @bucanero] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/215 #215] | |||
* Update bash script to exclude non make folders by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/222 #222] | |||
* dialogs: use <code>show_dialog</code> for condition example by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/221 #221] | |||
* Force sce sections to appear in the elf. by [https://github.com/nkrapivin @nkrapivin] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/211 #211] | |||
* Move fliprate to enum by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/216 #216] | |||
* Update ScreenShot defs by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/214 #214] | |||
* Add appinfo data type and functions. by [https://github.com/OSM-Made @OSM-Made] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/220 #220] | |||
* Defined some networking functions. by [https://github.com/OSM-Made @OSM-Made] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/219 #219] | |||
* Fix net http build by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/224 #224] | |||
* Update readme badges by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/225 #225] | |||
* CI: Download latest releases from URLs by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/227 #227] | |||
* add definitions by [https://github.com/bucanero @bucanero] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/230 #230] | |||
* Fix C definitions by [https://github.com/bucanero @bucanero] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/231 #231] | |||
* Add sceUsbd definitions by [https://github.com/InvoxiPlayGames @InvoxiPlayGames] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/229 #229] | |||
* Update save_data.h by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/234 #234] | |||
* Fix <code>#endif</code> order by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/233 #233] | |||
* Add some definitions for GnmDriver and VideoOut by [https://github.com/pipehuffer @pipehuffer] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/235 #235] | |||
* Add extension controller support to Pad.h header. by [https://github.com/InvoxiPlayGames @InvoxiPlayGames] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/228 #228] | |||
* kernel: replace BSD types with stdint's in kevent's flags by [https://github.com/pipehuffer @pipehuffer] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/236 #236] | |||
* Update scePadReadExt+scePadReadStateExt by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/246 #246] | |||
* Rename <code>int</code> to <code>int32_t</code> and <code>unsigned int</code> to <code>uint32_t</code> by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/248 #248] | |||
* Update .gitignore by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/244 #244] | |||
* Fix build for llvm 14+ by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/242 #242] | |||
* Fix undefined symbols by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/245 #245] | |||
* Change sys/time.h to time.h in save_data.h in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/238 #238] | |||
* Added Save Data Missing Info by [https://github.com/xXxTheDarkprogramerxXx @xXxTheDarkprogramerxXx] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/187 #187] | |||
* App launching definitions (from [https://github.com/LightningMods @LightningMods]) by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/232 #232] | |||
* Convert macro definitions into enums by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/243 #243] | |||
* Fix map protection types by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/247 #247] | |||
* Update libmonovm.h by [https://github.com/kiwidoggie @kiwidoggie] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/251 #251] | |||
* GnmDriver: Add definitions for SetEmbeddedShader and DrawIndexAuto by [https://github.com/pipehuffer @pipehuffer] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/240 #240] | |||
* Update CommonDialog.h by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/252 #252] | |||
* Update CRT version to 1.00 to allow building on older firmwares. by [https://github.com/kiwidoggie @kiwidoggie] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/253 #253] | |||
* build library stub from separate file by [https://github.com/0xcaff @0xcaff] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/258 #258] | |||
* Update action versions and rebuild every month by [https://github.com/illusion0001 @illusion0001] in [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/pull/263 #263] | |||
'''v0.5.2''' | |||
* C++ exception support has been added (thanks Nikita Krapivin)! | |||
* Added OpenGL/piglet GPU rendering sample + headers (thanks Nikita Krapivin)! | |||
* Added automated package generation to sample build scripts! | |||
* Added C++ support for building libraries/PRXs! | |||
* Added and updated prototypes/types for over 13 PS4-specific headers (thanks 0x199, sleirsgoevy, Nikita Krapivin, OSM, al-azif, bucanero)! | |||
* Updated build system/scripts for samples and VS project templates to a more clean and convenient system. | |||
* Fixed an issue where homebrew apps were hard to debug in GDB due to improper .dynamic section (thanks sleirsgoevy)! | |||
* Fixed more discrepancies between BSD and MUSL headers (thanks sleirsgoevy, al-azif). | |||
* Fixed an issue where C++ cmath headers failed to use certain namespaces (thanks Nikita Krapivin). | |||
* Fixed various miscalculation bugs in create-fself. | |||
* Reworked musl to use libkernel instead of syscalls for compatibility (thanks sleirsgoevy, John Tornblom). | |||
* Merged create-eboot and create-lib into one tool for ease-of-use. | |||
'''v0.5.1''' | |||
* Fixed various discrepancies between BSD and MUSL including function prototypes, structure definitions, and macros! | |||
* Added Docker container support (thanks alazif)! | |||
* Added proper TLS support (thanks sleirsgoevy)! | |||
* Added a battery of unit tests for issues addressed in v0.5.1. These tests will be kept up to date with future additions to attempt to improve release qualities. | |||
* Fixed an issue where MUSL was not thread-safe due to custom CRT. | |||
* Added support '+' and '-' escaping in NIDs (thanks sleirsgoevy). | |||
* Fixed an issue where relocations could refer to incorrect symbols due to not accounting for an additional <code>SECTION</code> entry (thanks sleirsgoevy). | |||
* Fixed copy/paste induced bugs in the autobuild.py script (thanks alazif). | |||
* Fixed a minor issue where the <code>__bswap32</code> macro in the endian include header produced compiler warnings (thanks astrelsky). | |||
'''v0.5''' | |||
* The toolchain now includes stub/empty libc and libSceFios2 modules to avoid breaking non-homebrew games and applications! | |||
** ''Note: This change works in conjunction with Mira, meaning you'll want to update the version of Mira you're loading as well.'' | |||
** ''Additional note: these modules can be found in /bin/data/modules/libc.prx and /bin/data/modules/libSceFios2.prx, and should be placed in <code>sce_module/</code> in your homebrew's package file.'' | |||
* SDL2 headers as well as a mini game sample have now been added (thanks znullptr for the original SDL port)! | |||
* C++ threading (std::thread) support has been added! | |||
* C++ locking / synchronization support has been added! | |||
* Fixed a performance issue in create-eboot, giving it a 7858% performance boost (measured with the SDL sample)! | |||
* Visual studio project templates now support and link with C++ by default. | |||
* Added various macros and function definitions to libkernel, libScePad, libSceUserService, and libSceVideoOut, as well as documentation for these additions. | |||
* Added right.prx by IDC to all samples (thanks IDC for right.prx). | |||
* Slightly adjusted sample pkg gp4 files to use the same eboot.bin created by build scripts instead of unnecessarily using a copy. | |||
* Fixed jagged text rendering in <code>/samples/_common/graphics.cpp</code> due to not factoring in the freetype greyscale bitmap alpha properly. | |||
* Buffering is now disabled on stdout automatically due to it not handling buffering well. | |||
* Updated pthread header to use PS4/BSD-specific values. | |||
* Samples now have DWARF / debug symbols included by default (thanks sleirsgoevy). | |||
* Reworked the threading sample to use std::thread and std::mutex now that C++ threading is supported. | |||
* Reworked the networking sample to a TCP server instead of a TCP client. | |||
* Fixed an issue where a really silly FreeBSD change broke any networking functions that need to use the sockaddr struct such as bind. | |||
* Fixed an issue where GP4 project files were using non-portable windows-style path separators (thanks sleirsgoevy). | |||
* Fixed an issue where the non-sce sleep() function didn't work due to a MUSL-related issues (thanks LM, ChendoChap). | |||
* Fixed an issue where SPRX visual studio projects contained a typo in an include statement and an incorrect set of libraries for the build script. | |||
* Fixed the cmath c++ header, which included <code>using</code> statements for functions that are macros on FreeBSD targets (thanks kiwidog). | |||
* Fixed an issue where the <code>sockaddr_in</code> structure was incorrect due to a discrepancy between Linux and FreeBSD (thanks kiwidog). | |||
* Fixed an issue where AF_INET6 was erroneously set to 10 due to a discrepancy between Linux and FreeBSD (thanks sleirsgoevy). | |||
'''v0.4''' | |||
* Added C++ support via <code>include/c++/v1</code> headers and statically built libcxx. | |||
* Added support for C++ init_array/fini_array dynamic tags in create-eboot / create-lib. | |||
* Remade a new fancy windows installer. | |||
* Created a script to streamline the release creation process. | |||
* Added initial PS4 library documentation into <code>/docs</code> for libkernel, pad, sysmodule, userservice, and videoout. | |||
* Common functionality between samples (graphics and logging as well as PNG decoding) have been moved into <code>/samples/_common</code>. | |||
* Font sample has been rewritten to use C++. | |||
* Hello world sample has been rewritten to use C++. | |||
* Input sample has been rewritten to use C++ and now has a visual component to make the sample more obvious in what it does. | |||
* PNG decoding sample has been rewritten to use C++. | |||
* System sample has been rewritten to use C++ and now prints to the screen instead of stdout to better demonstrate what it does. | |||
* Threading sample has been rewritten to use C++ and similar to system sample, now prints to the screen. | |||
* Fixed an issue where the create-eboot/lib and readelf build scripts were not building for macOS. | |||
* Fixed a minor typo in readelf which caused <code>DT_INIT_ARRAY_SZ</code> and <code>DT_FINI_ARRAY_SZ</code> tags to be incorrectly identified as <code>DT_INIT_ARRAY</code> and <code>DT_FINI_ARRAY</code> tags. | |||
* Updated various sample readmes to account for reworked samples. | |||
* Removed old installer NSIS script. | |||
''Known Issues'' | |||
''' | |||
* | * iostream's std::cout does not function properly and will cease to work after one write. For writing to stdout, use the <code>DEBUGLOG</code> macro in <code>samples/_uncommon/log.h</code>. We hope to address this in the future. | ||
'''v0.3''' | |||
* Added MUSL libc support, removed old BSD headers, and reworked samples to use MUSL. | |||
* Added libraries sources for Continuous Integration (CI). | |||
* Added debugging info via section header table into OELFs via create-eboot. | |||
* Fixed an issue in create-eboot where NIDs were written for local symbols when they shouldn't be. | |||
* Fixed an issue where <code>drawPixel()</code> in the font, graphics, and pngdec samples were not inlined, causing performance slowdown (thanks m0rph3us1987). | |||
* Added interpreter string write to linker script and removed it from create-eboot. | |||
* Removed condition from create-eboot where requiring a <code>.got.plt</code> section was only checked for SPRX libraries and not SELF eboots; all binaries need this section. | |||
* Removed sample package files to reduce bloat. They will later be available as separate releases. | |||
* Disabled buffering on stdout on various samples for MUSL. | |||
''' v0.2 ''' | |||
* Added macOS support (thanks Lord Friky). | |||
* Added package file sources for samples to make deploying samples easier, and to better demonstrate how packages should be constructed. | |||
* Fixed an issue where create-lib did not properly export NIDs and therefore dynamic resolving would fail (thanks IDC). | |||
* Fixed an issue where create-eboot/create-lib would occasionally calculate an incorrect data program size due to not accounting for the size of the <code>.sce_proc_param</code> section (thanks IDC). | |||
* Fixed an issue where create-eboot/create-lib would occasionally calculate an incorrect size of the string table due to an off by one via a subtle logic bug related to section padding (thanks IDC). | |||
* Fixed an issue where libraries would not have their Global Offset Table (GOT) / Procedure Linkage Table (PLT) aligned if no <code>.data.rel.ro</code> section was present (thanks IDC). | |||
* Added a build script for create-eboot/create-lib for Windows (thanks IDC). | |||
* Fixed an issue where the <code>__GNUC__</code> fix was being applied even if it was already defined, causing the compiler to complain if you manually defined it via compiler flags (thanks IDC). | |||
* Added <code>include/x86</code> directory for systems that don't have it. | |||
* Fixed an issue where even if there was no GOT/PLT, the PS4 would complain on libraries because it needs it for some silly reason. <code>.got.plt</code> is now forced into the build, even if there are no PLT entries (thanks IDC). | |||
'''v0.1.1''' | |||
* Fixes issue [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/issues/6 #6] where samples would fail to build on clang 10.0+. Credit to IDC, frangarcj for help root causing the issue, 1UP, and Tustin for initial reports. | |||
* Fixes issue [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/issues/7 #7] where makefiles were not creating intermediate directories and would thus fail on build. | |||
* Fixes issue [https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/issues/8 #8] where the <code>setup-*.sh</code> scripts in <code>/extra</code> had CRLF line endings, causing errors when attempting to run the scripts. | |||
'''v0.1 BETA ''' | |||
The first public BETA release of the OpenOrbis PS4 Toolchain. Attached is a copy of the release zip with binaries, as well as a windows NSIS installer for convenience. | |||
==Credits + Special Thanks== | |||
* Specter: Create-eboot/lib relinker, miralib, assistant suite, readelf, samples and documentation | |||
* CrazyVoid: Stub generator, headers, samples and documentation | |||
* maxton: Create-pkg pkg and SFO generation tools | |||
* Kiwidog: Mira, assistance, documentation | |||
* IDC: Lots of help with libraries and other bug fixes | |||
* flatz: Homebrew research and writeups, SELF reversing and documentation | |||
* m0rph3us1987: Help with debugging stuff | |||
* bigboss / psxdev: Library research and reverse engineering, used for reference by various samples | |||
* John Tormblom: Build system prototyping | |||
* LightningMods / LM: Testing via APP_HOME and lib loading help on the Mira side | |||
* Lord Friky: Proper macOS support | |||
* sleirsgoevy: Bug fixes and support, various samples | |||
* ChendoChap: Bug fixes and support | |||
* astrelsky: Bug fixes and support | |||
* Nikita Krapivin: C++ exception support, openGL/piglet work | |||
* MrSlick: Awesome logo <3 | |||
* OpenOrbis Team | |||
* Other anonymous contributors | |||
== External links == | == External links == | ||
* Github - https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain | * Github - https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain | ||
Revision as of 03:52, 23 February 2025
| OpenOrbis Toolchain | |
|---|---|
| General | |
| Author | Cryptogenic |
| Type | Developments |
| Version | 0.5.3 |
| License | GPL-3.0 |
| Last Updated | 2021/12/22 |
| Links | |
| Download | |
| Website | |
| Source | |
| This article may require cleanup to meet GameBrew's quality standards.
Reason: Needs cleanup |
The OpenOrbis PS4 Toolchain is an open-source project designed to facilitate the development of homebrew (unofficial) applications for the PlayStation 4, without relying on Sony’s official SDK. It provides a collection of tools, libraries, and scripts that work together to enable developers to write, compile, and package PS4-compatible applications. Below are the key points that characterize the project:
- Purpose
- Allows developers to create PS4 homebrew software and games.
- Eliminates the need for proprietary (and often legally restricted) Sony development tools.
- Core Components
- Clang/LLVM-based toolchain for compilation.
- Libraries and headers tailored for PS4-specific development.
- Linker and additional utilities designed to generate PS4 executables (self/elf files).
- Cross-Platform Support
- Provides build scripts for multiple platforms, including Linux and Windows (through MSYS2).
- Aims to streamline the setup process across different operating systems.
- Ease of Setup & Usage
- Automated build scripts help users install and configure the toolchain.
- Documentation (including a Wiki) offers guidance on how to compile and package homebrew apps.
- Active Development & Community
- Maintained by contributors who continually refine and expand functionality.
- Encourages community feedback and contributions for improvements.
- Open-Source Licensing
- Distributed under permissive licensing (e.g., MIT or similar), allowing free use and modification.
- Encourages developers to inspect, modify, and share the toolchain’s source code.
Setup & Installation
For detailed setup and installation instructions, please visit the project's GitHub repository. The maintainers provide step-by-step guidelines to help you install dependencies, configure paths, and get the toolchain up and running on your system of choice.
Changelog
v0.5.3
- Fix OrbisSaveDataParam definition by @bucanero in #174
- Fix SaveData.h compiling error in #173
- Update SystemService.h to include dependency by @Al-Azif in #175
- Piglet sample: censor out sceKernelDlsym by @sleirsgoevy in #182
- libkernel.h: add scePthreadSelf definition by @Cpasjuste in #184
- Add RegMgr methods by @bucanero in #179
- .NET Core 3.0 Runtime is required to run LibOrbisPkg by @illusion0001 in #176
- Update libkernel.h by @Backporter in #186
- Readd keyboard sample (fixed a typo) by @Klairm in #183
- Remove specific versioning from Dockerfile by @Al-Azif in #194
- Fix #178 by @Al-Azif in #193
- Add Trophy Support and add a sample for the trophy system by @Backporter in #188
- Add HTTP sample by @bucanero in #196
- Add a MsgDialog sample by @bucanero in #197
- Update Rtc.h by @Backporter in #202
- Add sceNetResolver...() methods by @bucanero in #207
- fix firmware structure, fix sceKernelFstat's args, sceRtcCurrentClockLocalTime's args, add error dialog structures and function definitions, add Np defs. by @Backporter in #203
- For convenience, add 2 XML tags to MyTemplate.vstemplate by @SummerFalls in #204
- Update fliprate and Screenshot Overlay Stub by @illusion0001 in #212
- CI: fix build by @illusion0001 in #217
- Add user service methods by @bucanero in #215
- Update bash script to exclude non make folders by @illusion0001 in #222
- dialogs: use
show_dialogfor condition example by @illusion0001 in #221 - Force sce sections to appear in the elf. by @nkrapivin in #211
- Move fliprate to enum by @illusion0001 in #216
- Update ScreenShot defs by @illusion0001 in #214
- Add appinfo data type and functions. by @OSM-Made in #220
- Defined some networking functions. by @OSM-Made in #219
- Fix net http build by @illusion0001 in #224
- Update readme badges by @illusion0001 in #225
- CI: Download latest releases from URLs by @illusion0001 in #227
- add definitions by @bucanero in #230
- Fix C definitions by @bucanero in #231
- Add sceUsbd definitions by @InvoxiPlayGames in #229
- Update save_data.h by @illusion0001 in #234
- Fix
#endiforder by @illusion0001 in #233 - Add some definitions for GnmDriver and VideoOut by @pipehuffer in #235
- Add extension controller support to Pad.h header. by @InvoxiPlayGames in #228
- kernel: replace BSD types with stdint's in kevent's flags by @pipehuffer in #236
- Update scePadReadExt+scePadReadStateExt by @illusion0001 in #246
- Rename
inttoint32_tandunsigned inttouint32_tby @illusion0001 in #248 - Update .gitignore by @illusion0001 in #244
- Fix build for llvm 14+ by @illusion0001 in #242
- Fix undefined symbols by @illusion0001 in #245
- Change sys/time.h to time.h in save_data.h in #238
- Added Save Data Missing Info by @xXxTheDarkprogramerxXx in #187
- App launching definitions (from @LightningMods) by @illusion0001 in #232
- Convert macro definitions into enums by @illusion0001 in #243
- Fix map protection types by @illusion0001 in #247
- Update libmonovm.h by @kiwidoggie in #251
- GnmDriver: Add definitions for SetEmbeddedShader and DrawIndexAuto by @pipehuffer in #240
- Update CommonDialog.h by @illusion0001 in #252
- Update CRT version to 1.00 to allow building on older firmwares. by @kiwidoggie in #253
- build library stub from separate file by @0xcaff in #258
- Update action versions and rebuild every month by @illusion0001 in #263
v0.5.2
- C++ exception support has been added (thanks Nikita Krapivin)!
- Added OpenGL/piglet GPU rendering sample + headers (thanks Nikita Krapivin)!
- Added automated package generation to sample build scripts!
- Added C++ support for building libraries/PRXs!
- Added and updated prototypes/types for over 13 PS4-specific headers (thanks 0x199, sleirsgoevy, Nikita Krapivin, OSM, al-azif, bucanero)!
- Updated build system/scripts for samples and VS project templates to a more clean and convenient system.
- Fixed an issue where homebrew apps were hard to debug in GDB due to improper .dynamic section (thanks sleirsgoevy)!
- Fixed more discrepancies between BSD and MUSL headers (thanks sleirsgoevy, al-azif).
- Fixed an issue where C++ cmath headers failed to use certain namespaces (thanks Nikita Krapivin).
- Fixed various miscalculation bugs in create-fself.
- Reworked musl to use libkernel instead of syscalls for compatibility (thanks sleirsgoevy, John Tornblom).
- Merged create-eboot and create-lib into one tool for ease-of-use.
v0.5.1
- Fixed various discrepancies between BSD and MUSL including function prototypes, structure definitions, and macros!
- Added Docker container support (thanks alazif)!
- Added proper TLS support (thanks sleirsgoevy)!
- Added a battery of unit tests for issues addressed in v0.5.1. These tests will be kept up to date with future additions to attempt to improve release qualities.
- Fixed an issue where MUSL was not thread-safe due to custom CRT.
- Added support '+' and '-' escaping in NIDs (thanks sleirsgoevy).
- Fixed an issue where relocations could refer to incorrect symbols due to not accounting for an additional
SECTIONentry (thanks sleirsgoevy). - Fixed copy/paste induced bugs in the autobuild.py script (thanks alazif).
- Fixed a minor issue where the
__bswap32macro in the endian include header produced compiler warnings (thanks astrelsky).
v0.5
- The toolchain now includes stub/empty libc and libSceFios2 modules to avoid breaking non-homebrew games and applications!
- Note: This change works in conjunction with Mira, meaning you'll want to update the version of Mira you're loading as well.
- Additional note: these modules can be found in /bin/data/modules/libc.prx and /bin/data/modules/libSceFios2.prx, and should be placed in
sce_module/in your homebrew's package file.
- SDL2 headers as well as a mini game sample have now been added (thanks znullptr for the original SDL port)!
- C++ threading (std::thread) support has been added!
- C++ locking / synchronization support has been added!
- Fixed a performance issue in create-eboot, giving it a 7858% performance boost (measured with the SDL sample)!
- Visual studio project templates now support and link with C++ by default.
- Added various macros and function definitions to libkernel, libScePad, libSceUserService, and libSceVideoOut, as well as documentation for these additions.
- Added right.prx by IDC to all samples (thanks IDC for right.prx).
- Slightly adjusted sample pkg gp4 files to use the same eboot.bin created by build scripts instead of unnecessarily using a copy.
- Fixed jagged text rendering in
/samples/_common/graphics.cppdue to not factoring in the freetype greyscale bitmap alpha properly. - Buffering is now disabled on stdout automatically due to it not handling buffering well.
- Updated pthread header to use PS4/BSD-specific values.
- Samples now have DWARF / debug symbols included by default (thanks sleirsgoevy).
- Reworked the threading sample to use std::thread and std::mutex now that C++ threading is supported.
- Reworked the networking sample to a TCP server instead of a TCP client.
- Fixed an issue where a really silly FreeBSD change broke any networking functions that need to use the sockaddr struct such as bind.
- Fixed an issue where GP4 project files were using non-portable windows-style path separators (thanks sleirsgoevy).
- Fixed an issue where the non-sce sleep() function didn't work due to a MUSL-related issues (thanks LM, ChendoChap).
- Fixed an issue where SPRX visual studio projects contained a typo in an include statement and an incorrect set of libraries for the build script.
- Fixed the cmath c++ header, which included
usingstatements for functions that are macros on FreeBSD targets (thanks kiwidog). - Fixed an issue where the
sockaddr_instructure was incorrect due to a discrepancy between Linux and FreeBSD (thanks kiwidog). - Fixed an issue where AF_INET6 was erroneously set to 10 due to a discrepancy between Linux and FreeBSD (thanks sleirsgoevy).
v0.4
- Added C++ support via
include/c++/v1headers and statically built libcxx. - Added support for C++ init_array/fini_array dynamic tags in create-eboot / create-lib.
- Remade a new fancy windows installer.
- Created a script to streamline the release creation process.
- Added initial PS4 library documentation into
/docsfor libkernel, pad, sysmodule, userservice, and videoout. - Common functionality between samples (graphics and logging as well as PNG decoding) have been moved into
/samples/_common. - Font sample has been rewritten to use C++.
- Hello world sample has been rewritten to use C++.
- Input sample has been rewritten to use C++ and now has a visual component to make the sample more obvious in what it does.
- PNG decoding sample has been rewritten to use C++.
- System sample has been rewritten to use C++ and now prints to the screen instead of stdout to better demonstrate what it does.
- Threading sample has been rewritten to use C++ and similar to system sample, now prints to the screen.
- Fixed an issue where the create-eboot/lib and readelf build scripts were not building for macOS.
- Fixed a minor typo in readelf which caused
DT_INIT_ARRAY_SZandDT_FINI_ARRAY_SZtags to be incorrectly identified asDT_INIT_ARRAYandDT_FINI_ARRAYtags. - Updated various sample readmes to account for reworked samples.
- Removed old installer NSIS script.
Known Issues
- iostream's std::cout does not function properly and will cease to work after one write. For writing to stdout, use the
DEBUGLOGmacro insamples/_uncommon/log.h. We hope to address this in the future.
v0.3
- Added MUSL libc support, removed old BSD headers, and reworked samples to use MUSL.
- Added libraries sources for Continuous Integration (CI).
- Added debugging info via section header table into OELFs via create-eboot.
- Fixed an issue in create-eboot where NIDs were written for local symbols when they shouldn't be.
- Fixed an issue where
drawPixel()in the font, graphics, and pngdec samples were not inlined, causing performance slowdown (thanks m0rph3us1987). - Added interpreter string write to linker script and removed it from create-eboot.
- Removed condition from create-eboot where requiring a
.got.pltsection was only checked for SPRX libraries and not SELF eboots; all binaries need this section. - Removed sample package files to reduce bloat. They will later be available as separate releases.
- Disabled buffering on stdout on various samples for MUSL.
v0.2
- Added macOS support (thanks Lord Friky).
- Added package file sources for samples to make deploying samples easier, and to better demonstrate how packages should be constructed.
- Fixed an issue where create-lib did not properly export NIDs and therefore dynamic resolving would fail (thanks IDC).
- Fixed an issue where create-eboot/create-lib would occasionally calculate an incorrect data program size due to not accounting for the size of the
.sce_proc_paramsection (thanks IDC). - Fixed an issue where create-eboot/create-lib would occasionally calculate an incorrect size of the string table due to an off by one via a subtle logic bug related to section padding (thanks IDC).
- Fixed an issue where libraries would not have their Global Offset Table (GOT) / Procedure Linkage Table (PLT) aligned if no
.data.rel.rosection was present (thanks IDC). - Added a build script for create-eboot/create-lib for Windows (thanks IDC).
- Fixed an issue where the
__GNUC__fix was being applied even if it was already defined, causing the compiler to complain if you manually defined it via compiler flags (thanks IDC). - Added
include/x86directory for systems that don't have it. - Fixed an issue where even if there was no GOT/PLT, the PS4 would complain on libraries because it needs it for some silly reason.
.got.pltis now forced into the build, even if there are no PLT entries (thanks IDC).
v0.1.1
- Fixes issue #6 where samples would fail to build on clang 10.0+. Credit to IDC, frangarcj for help root causing the issue, 1UP, and Tustin for initial reports.
- Fixes issue #7 where makefiles were not creating intermediate directories and would thus fail on build.
- Fixes issue #8 where the
setup-*.shscripts in/extrahad CRLF line endings, causing errors when attempting to run the scripts.
v0.1 BETA The first public BETA release of the OpenOrbis PS4 Toolchain. Attached is a copy of the release zip with binaries, as well as a windows NSIS installer for convenience.
Credits + Special Thanks
- Specter: Create-eboot/lib relinker, miralib, assistant suite, readelf, samples and documentation
- CrazyVoid: Stub generator, headers, samples and documentation
- maxton: Create-pkg pkg and SFO generation tools
- Kiwidog: Mira, assistance, documentation
- IDC: Lots of help with libraries and other bug fixes
- flatz: Homebrew research and writeups, SELF reversing and documentation
- m0rph3us1987: Help with debugging stuff
- bigboss / psxdev: Library research and reverse engineering, used for reference by various samples
- John Tormblom: Build system prototyping
- LightningMods / LM: Testing via APP_HOME and lib loading help on the Mira side
- Lord Friky: Proper macOS support
- sleirsgoevy: Bug fixes and support, various samples
- ChendoChap: Bug fixes and support
- astrelsky: Bug fixes and support
- Nikita Krapivin: C++ exception support, openGL/piglet work
- MrSlick: Awesome logo <3
- OpenOrbis Team
- Other anonymous contributors