Files
dusk/.claude/platforms.md
T
2026-06-16 10:15:59 -05:00

3.8 KiB

Platform Support

Dusk targets a wide range of platforms, from modern desktops to classic handheld and home consoles. New platform targets will be added over time.

Platform index

Platform DUSK_TARGET_SYSTEM Status Reference
Linux linux Supported .claude/platform-linux.md
Knulli knulli Supported .claude/platform-linux.md
Windows windows Planned .claude/platform-windows.md
macOS macos Planned .claude/platform-macos.md
Sony PSP psp Supported .claude/platform-psp.md
PlayStation Vita vita Supported .claude/platform-vita.md
Nintendo GameCube gamecube Supported .claude/platform-dolphin.md
Nintendo Wii wii Supported .claude/platform-dolphin.md

GameCube and Wii share the src/duskdolphin/ layer and are collectively referred to as Dolphin targets throughout the codebase.


Layer structure

src/dusk/          Core -- platform-agnostic game logic and ECS
src/duskgl/        OpenGL abstraction (Linux, Knulli, PSP, Vita)
src/dusksdl2/      SDL2 window + input (Linux, Knulli, PSP, Vita)
src/dusklinux/     Linux + Knulli platform impl
src/duskpsp/       PSP platform impl
src/duskvita/      Vita platform impl
src/duskdolphin/   GameCube + Wii platform impl

Dolphin is the only target that bypasses SDL2 and OpenGL entirely -- it uses native libogc GX for rendering and PAD for input.


Capability macros

Each target sets a combination of these macros. Do not assume a capability is present without checking the appropriate macro.

Macro Meaning
DUSK_SDL2 SDL2 is available
DUSK_OPENGL OpenGL is available
DUSK_OPENGL_ES OpenGL ES variant (Knulli)
DUSK_OPENGL_LEGACY Fixed-function OpenGL (PSP, Vita)
DUSK_INPUT_GAMEPAD Gamepad / controller input
DUSK_INPUT_KEYBOARD Keyboard input (Linux, Knulli only)
DUSK_INPUT_POINTER Mouse / pointer input (Linux, Knulli only)
DUSK_DISPLAY_SIZE_DYNAMIC Window is resizable (Linux, Knulli)
DUSK_TIME_DYNAMIC Dynamic timestep available (Linux, Knulli)
DUSK_THREAD_PTHREAD pthreads available
DUSK_NETWORK_IPV6 IPv6 supported (Linux only)
DUSK_PLATFORM_ENDIAN_BIG Big-endian byte order
DUSK_PLATFORM_ENDIAN_LITTLE Little-endian byte order
DUSK_DOLPHIN Any Dolphin target
DUSK_DOLPHIN_BUILD_ISO Dolphin DVD-ISO asset mode
DUSK_CONSOLE_POSIX POSIX assert backtrace (Linux only)

Quick comparison

Linux Knulli PSP Vita GameCube Wii
SDL2 yes yes yes yes no no
OpenGL desktop ES2 legacy vitaGL no no
Endian little little little little big big
Dynamic resize yes yes no no no no
Dynamic timestep yes yes no no no no
Keyboard yes yes no no no no
Pointer/mouse yes yes no no no no
Network full full partial no no partial
Save storage file file MS/SAVEDATA SceIo Mem Card SD/NAND
Asset source dsk file dsk file inside .pbp inside .vpk SD or DVD SD or DVD

Abstraction pattern

Platform-specific implementations are wired in via #define macros in each platform's displayplatform.h, inputplatform.h, etc., which the core calls through. Functions that a platform does not support are simply left undefined -- the core guards calls with #ifdef.

Adding platform-specific code

  • Put new code under src/dusk<platform>/ in the matching subsystem folder.
  • Gate any core call-site with #ifdef DUSK_<PLATFORM> or the relevant capability macro.
  • Keep src/dusk/ free of platform #ifdefs -- delegate through the platform header macros instead.