Repository navigation
Building
Build the EE application with the repository's existing legacy GCC toolchain. IOP module rebuilding is a separate task; a normal player build uses the committed compressed modules.
You do not need a compiler to run SMS. Use the prebuilt downloads for ordinary installation.
- Docker running on your host and a source checkout, including
irx/, artwork and fonts. - The known-working
ps2dev/ps2dev:v1.0image for the application, using EE GCC 3.2.3. Do not silently replace it with a current SDK or LLVM build. - A separate checkout/build directory when comparing variants. Changing make flags without cleaning can reuse objects built for a different variant.
The old Alpine image can compile SMS, but its musl runtime cannot run modern GitHub Actions JavaScript steps. CI checks out and uploads on the host and runs only make inside Docker. A tag selects the expected toolchain; verify actual output hashes rather than assuming a tag alone guarantees every future build is identical.
git clone https://github.com/NathanNeurotic/Simple-Media-System.git
cd Simple-Media-System
docker run --rm -v "$PWD":/src -w /src ps2dev/ps2dev:v1.0 \
sh -c 'apk add --no-cache build-base git zip && make all pack'
docker run --rm -v "${PWD}:/src" -w /src ps2dev/ps2dev:v1.0 sh -c 'apk add --no-cache build-base git zip && make all pack'
Run the PowerShell command from the repository root. Shell quoting and line continuation differ from POSIX/cmd.exe; do not copy the backslash-continued command into cmd.exe unchanged.
Outputs are bin/SMS.elf and bin/SMS-packed.elf. BDM defaults to enabled; that is the distributed full-device player.
In a disposable build checkout, clean between variants, then use the same container setup with:
make clean
make SMS_DIAG=1 all
# Save/copy bin/SMS.elf before cleaning again.
make clean
make BDM=0 all
SMS_DIAG=1 adds on-screen diagnostic labels. BDM=0 verifies the legacy build still links; it is not the standard rolling download. Cleaning removes that checkout's build outputs, so keep any binaries or symbols you need before running it.
The Makefile converts committed irx/*.irx.xz into embedded arrays. SMS decompresses and starts them on the IOP. Normal installation/building does not require a separate IRX build or copying loose modules next to the player.
The modules include iomanX/fileXio, BDM/FAT/exFAT, USB, MX4SIO, ATA, i.LINK, MMCE, card/pad support and network stacks. Consult the actual Makefile for the selected objects; the enabled stack depends on the build flags and runtime choices.
The embedded MX4SIO module carries a local driver patch. Preserve its watchdog, bounded SIO2 waits, batch limit and partial-read progress handling. Patch notes describe the rebuild; the historical investigation records the original reproducer and earlier read strategy.
An IOP module's compiler/SDK requirements can differ from the EE application. In particular, the UDPFS module build uses its own script/toolchain and must retain SMS's dev9 import ordinals. See IOP and network development. Do not replace compressed modules with arbitrary SDK builds.
| Trigger | Result |
|---|---|
| Push / PR | Host regressions, ABI checks, standard/packed/DIAG and separate legacy builds; downloadable per-run artifacts. |
Successful master push |
Updates the rolling player assets. Separate converter jobs update Windows, Win7 and Linux assets on the same release. |
v* tag |
Versioned release publication. |
| Master test-media workflow | Regenerates synthetic media. This does not execute console playback. |
| Documentation changes | Checks shared generation, local links/anchors, search targets and browser-script syntax. Pages serves master:/docs. |
See host test prerequisites and the workflow sources. A successful compile is not a device test. Keep the build manifest, symbols and exact media when reporting results.
Architecture and contributing · Known issues and acceptance · Build identity and downloads.