Skip to content

About this page

On this page

Migrating from upstream ps2sdk ​

This SDK replaces the upstream build system and package layout. These are the changes for projects coming from ps2dev/ps2sdk and ps2dev/ps2sdk-ports.

Build system: Makefile → ps2.yaml ​

Makefile.pref, Makefile.eeglobal, Makefile.iopglobal and hand-written EE_CFLAGS/EE_LIBS/IOP_IMPORT_INCS are replaced by a single ps2.yaml describing a project's targets and the packages each one needs by name.

yaml
project: my-game

targets:
  - name: my-game
    type: ee
    sources: [main.c]
    libs: [png, freetype, gskit, dmakit]

ps2build build generates build.ninja and build/compile_commands.json, then runs ninja. libs: resolves each package's include and link flags. See ps2.yaml for the full format and Getting started for the workflow.

Package tree: flat → per-package ​

Upstream installs everything into one shared tree ($PS2SDK/ee/include, $PS2SDK/ee/lib, $PS2SDK/iop/include). Here, each package has its own directory:

$PS2DEV/packages/core/<name>/
$PS2DEV/packages/world/<name>/

Each one carries its own package.yaml, and libs: resolves a package by that directory name. See Packages for header and link resolution and Available packages for the package list.

There is no single $PS2SDK/ee/include. Use libs: instead.

Package names must match the -l stem ​

Name the directory after the value passed to -l. For example, zlib is z (libz.a, -lz), aalib is aa, libmad is mad, libtap is tap, libid3tag is id3tag and libjpeg-turbo is jpeg. ps2build derives the link flag from the name in libs: and does not read package.yaml for the archive name.

Tiers: core vs world ​

Every package declares a tier::

  • core - ps2sdk code (origin: ps2sdk) under a permissive license: kernel, drivers, filesystem, memory and networking.
  • world - everything else: ps2sdk-ports, third-party ports, LGPL/GPL/BSD/MIT, no restriction.

core requires both origin: ps2sdk and a permissive license. A package missing either goes to world, including some upstream ps2sdk modules such as a few BIOS-variant modules. audsrv (GPL) is in neither tier. It has its own repository and is installed the same way.

common is an exception. Its headers are on the include path for every target, and headers: [common] is not accepted.

Porting your own library ​

See Custom packages for the two supported shapes: wrap an existing CMake build against ps2dev.cmake, or write a native ps2.yaml and package.yaml that mirror your Makefile's object list. In both cases packages/world/<name>/ is zipped and released, and installs by name like any core or world package.

What's not migrated yet ​

This list is not exhaustive. Niche BIOS-revision variants and development-only diagnostic tools are omitted. A package missing from both this list and Available packages has not been migrated.

  • ee/mpeg helper utilities - the IPU-accelerated decoder (mpeg) is migrated; a few helper files are not.
  • IOP-side HTTP client (iop/fs/http) - its lwip dependency (ps2ip-nm/ps2ips-iop) is migrated.
  • Audio codecs: vorbis/vorbisfile/ogg, and clearspu (below libspu2, which is migrated).
  • vmcman - a virtual memory card backed by a file, for emulation and development.
  • DEV9/HDD/memory-card BIOS-revision variants and diagnostic tools - alternate apa/pfs configs, hdck/hdsk/fsck/fssk. Low demand.

Out of scope: arcade-only hardware (dongle and security-chip drivers, arcade watchdog keepalives) and upstream utilities that are legacy development-workflow shims.