Main PSP Repo for building the whole PSP Development
environment in your local machine.
This program will automatically build and install the whole compiler and other tools used in the creation of Homebrew software for the Sony PlayStation Portable® video game system.
You can get started very quickly by grabbing the latest development pre-releases from the releases' page for your platform and extract them to the pspdev
directory in your path
.
Export the PSPDEV
environment variable to point to the pspdev
directory. For example:
export PSPDEV=~/pspdev
export PATH=$PATH:$PSPDEV/bin
These scripts download (git clone
) and install:
- Install
gcc/clang
,make
,cmake
,patch
,git
,texinfo
,flex
,bison
,gettext
,wget
,gsl
,gmp
,mpfr
,mpc
,libusb
,readline
,libarchive
,gpgme
,bash
,openssl
andlibtool
. - If you don't have those. We offer a script to help you for installing dependencies:
sudo ./prepare-debian-ubuntu.sh
sudo ./prepare-fedora.sh
sudo ./prepare-arch.sh
sudo ./prepare-mac-os.sh
-
Optional. If you are upgrading from the previous version of the PSPDEV environment, it is highly recommended removing the content of the PSPDEV folder before upgrade. This is a necessary step after the major toolchain upgrade.
sudo rm -rf $PSPDEV
-
Ensure that you have enough permissions for managing PSPDEV location (default to
/usr/local/pspdev
, but you can use a different path). PSPDEV location MUST NOT have spaces or special characters in its path! PSPDEV should be an absolute path. On Unix systems, if the commandmkdir -p $PSPDEV
fails for you, you can set access for the current user by running commands:export PSPDEV=/usr/local/pspdev sudo mkdir -p $PSPDEV sudo chown -R $USER: $PSPDEV
-
Add this to your login script (example:
~/.bash_profile
) Note: Ensure that you have full access to the PSPDEV path. You can change the PSPDEV path with the following requirements: only use absolute paths, don't use spaces, only use Latin characters.export PSPDEV=/usr/local/pspdev export PATH=$PATH:$PSPDEV/bin
-
Run build-all.sh
./build-all.sh
This repo also uses CI/CD to create a docker image called pspdev/pspdev:latest
per change. This is useful if you're a developer that wants to create/port an application to the PSP. You can compile your project using this docker image.
If you want, you can JUST install the extra dependencies as psplinkusb and ebootsigner
. To achieve this execute
./build-extra.sh
If you download the pre-built macOS binaries and get a security error such as "pspsh" cannot be opened because the developer cannot be verified.
, you can remove the quarantine attribute by running:
xattr -dr com.apple.quarantine path/to/prebuilt/pspdev
The toolchain (binutils, gcc), the SDK (pspsdk) and the host tools are built locally. However, the provided packages (psp-packages) are installed via psp-pacman
(or a similar mechanism if not available), which fetches packages from GitHub releases. If you wish to build these packages locally, you might define the variable LOCAL_PACKAGE_BUILD which will force pacman to build the packages from source instead of downloading them:
LOCAL_PACKAGE_BUILD=1 ./build-all.sh
This is particularly useful if you are testing changes in the toolchain (i.e. gcc or binutils) and want to test your changes end to end. It can also be useful if you want a hermetic build and don't want to use any of the provided binaries.
- Install qemu-user-static and binfmt-misc
- Install this https://github.com/docker/buildx
mkdir $HOME/psptmp
docker buildx create --use
docker buildx build --platform linux,arm64 -o type=tar,dest=$HOME/psptmp/psptmp.tar -f cross/Dockerfile.cross-ubuntu .
cd $HOME/psptmp
tar xf psptmp.tar linux_arm64/usr/local/pspdev
After these commands finish, you should have the typical /usr/local/pspdev folder cross-compiled for aarch64 on ubuntu 22.04 at $HOME/psptmp/linux_arm64/usr/local/pspdev
. Copy this out to your aarch64 ubuntu machine (maybe re-tar it first) and delete the rest of the junk in $HOME/psptmp
I could not find a way to only copy what we care about from a docker buildx build (aside from breaking into my /var/lib/docker/volumes) so that is why we have to go through these shenanigans of making a tar, taking what we want from it, and deleting it. The local output mode takes forever, so that is another reason we use the tar.