Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 84 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ if(EMSCRIPTEN)
set(SDL_SHARED_AVAILABLE OFF)
endif()

if(VITA OR PSP OR PS2 OR N3DS OR RISCOS OR NGAGE)
if(VITA OR PSP OR PS2 OR N3DS OR RISCOS OR NGAGE OR OGC)
set(SDL_SHARED_AVAILABLE OFF)
endif()

Expand Down Expand Up @@ -304,7 +304,7 @@ dep_option(SDL_SSE3 "Use SSE3 assembly routines" ON "SDL_ASSEMBLY
dep_option(SDL_SSE4_1 "Use SSE4.1 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF)
dep_option(SDL_SSE4_2 "Use SSE4.2 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF)
dep_option(SDL_MMX "Use MMX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF)
dep_option(SDL_ALTIVEC "Use Altivec assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_POWERPC32 OR SDL_CPU_POWERPC64" OFF)
dep_option(SDL_ALTIVEC "Use Altivec assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_POWERPC32 OR SDL_CPU_POWERPC64;NOT OGC" OFF)
dep_option(SDL_ARMNEON "Use NEON assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_ARM32 OR SDL_CPU_ARM64" OFF)
dep_option(SDL_LSX "Use LSX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_LOONGARCH64" OFF)
dep_option(SDL_LASX "Use LASX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_LOONGARCH64" OFF)
Expand Down Expand Up @@ -430,6 +430,15 @@ if (NGAGE)
set(SDL_VIRTUAL_JOYSTICK OFF)
endif()

if (OGC)
set(SDL_DISKAUDIO OFF)
set(SDL_DUMMYAUDIO OFF)
set(SDL_DUMMYCAMERA OFF)
set(SDL_DUMMYVIDEO OFF)
set(SDL_OFFSCREEN OFF)
set(SDL_VIRTUAL_JOYSTICK OFF)
endif()

if(NOT (SDL_SHARED OR SDL_STATIC))
message(FATAL_ERROR "SDL_SHARED and SDL_STATIC cannot both be disabled")
endif()
Expand Down Expand Up @@ -3336,6 +3345,79 @@ elseif(N3DS)
"${SDL3_SOURCE_DIR}/src/io/n3ds/*.h"
)

elseif(OGC)
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/main/ogc/*.c")
sdl_link_dependency(main LIBS fat)
if(NINTENDO_WII)
sdl_link_dependency(keyboard LIBS wiikeyboard)
endif()

if(SDL_AUDIO)
set(SDL_AUDIO_DRIVER_OGC 1)
sdl_glob_sources(
"${SDL3_SOURCE_DIR}/src/audio/ogc/*.c"
"${SDL3_SOURCE_DIR}/src/audio/ogc/*.h"
)
sdl_link_dependency(audio LIBS aesnd)
set(HAVE_SDL_AUDIO TRUE)
endif()

set(SDL_FILESYSTEM_OGC 1)
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/ogc/*.c")
set(HAVE_SDL_FILESYSTEM TRUE)

if(SDL_JOYSTICK)
set(SDL_JOYSTICK_OGC 1)
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/ogc/*.c")
set(HAVE_SDL_JOYSTICK TRUE)
endif()

set(SDL_TIME_OGC 1)
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/time/ogc/*.c")
set(HAVE_SDL_TIME TRUE)

set(SDL_TIMER_OGC 1)
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/ogc/*.c")
set(HAVE_SDL_TIMERS TRUE)

set(SDL_FSOPS_POSIX 1)
sdl_sources("${SDL3_SOURCE_DIR}/src/filesystem/posix/SDL_sysfsops.c")
set(HAVE_SDL_FSOPS TRUE)

if(SDL_VIDEO)
set(SDL_VIDEO_DRIVER_OGC 1)
set(SDL_VIDEO_RENDER_OGC 1)
# Disabled since we have the GX renderer, but this can also be used as an
# option:
# set(SDL_VIDEO_RENDER_OGL 1)
sdl_glob_sources(
"${SDL3_SOURCE_DIR}/src/render/ogc/*.c"
"${SDL3_SOURCE_DIR}/src/video/ogc/*.c"
"${SDL3_SOURCE_DIR}/src/video/ogc/*.h"
)
pkg_search_module(EGC embedded-game-controller REQUIRED)
sdl_include_directories(PRIVATE SYSTEM ${EGC_INCLUDE_DIRS})
sdl_link_dependency(egc LIBS embedded-game-controller)
if(NINTENDO_WII)
sdl_link_dependency(egc LIBS bt-embedded)
endif()
set(SDL_VIDEO_OPENGL 0)
set(HAVE_SDL_VIDEO TRUE)
if(SDL_OPENGL)
# TODO: is the next line needed?
pkg_search_module(OPENGX opengl REQUIRED IMPORTED_TARGET)
set(SDL_VIDEO_OPENGL 1)
set(HAVE_OPENGL TRUE)
sdl_link_dependency(opengx LIBS opengx)
endif()
endif()

set(SDL_PTHREADS ON)
set(HAVE_SDL_THREADS TRUE)
set(SDL_PTHREADS_SEM ON)
message(STATUS "pthread")
CheckPTHREAD()

elseif(NGAGE)

enable_language(CXX)
Expand Down
2 changes: 2 additions & 0 deletions cmake/sdlplatform.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ function(SDL_DetectCMakePlatform)
set(sdl_cmake_platform RISCOS)
elseif(VITA)
set(sdl_cmake_platform Vita)
elseif(CMAKE_SYSTEM_NAME MATCHES "NintendoWii|NintendoGameCube")
set(sdl_cmake_platform OGC)
elseif(CMAKE_SYSTEM_NAME MATCHES ".*Linux")
set(sdl_cmake_platform Linux)
elseif(CMAKE_SYSTEM_NAME MATCHES "kFreeBSD.*")
Expand Down
10 changes: 10 additions & 0 deletions include/SDL3/SDL_main.h
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,16 @@
*/
#define SDL_MAIN_AVAILABLE

#elif defined(SDL_PLATFORM_OGC)
/*
On OGC, SDL provides a main function that sets up the filesystem,
checks the IOS and registers callbacks for the power and reset
buttons.

If you provide this yourself, you may define SDL_MAIN_HANDLED
*/
#define SDL_MAIN_AVAILABLE

#endif
#endif /* SDL_MAIN_HANDLED */

Expand Down
10 changes: 10 additions & 0 deletions include/SDL3/SDL_platform_defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -473,6 +473,16 @@
#define SDL_PLATFORM_3DS 1
#endif

#if defined(__wii__) || defined(__gamecube__)

/**
* A preprocessor macro that is only defined if compiling for Nintendo Wii or GameCube.
*
* \since This macro is available since SDL 3.4.0.
*/
#define SDL_PLATFORM_OGC 1
#endif

#ifdef __NGAGE__

/**
Expand Down
7 changes: 7 additions & 0 deletions include/build_config/SDL_build_config.h.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,7 @@
#cmakedefine SDL_AUDIO_DRIVER_PS2 1
#cmakedefine SDL_AUDIO_DRIVER_N3DS 1
#cmakedefine SDL_AUDIO_DRIVER_NGAGE 1
#cmakedefine SDL_AUDIO_DRIVER_OGC 1
#cmakedefine SDL_AUDIO_DRIVER_QNX 1

#cmakedefine SDL_AUDIO_DRIVER_PRIVATE 1
Expand All @@ -311,6 +312,7 @@
#cmakedefine SDL_JOYSTICK_LINUX 1
#cmakedefine SDL_JOYSTICK_MFI 1
#cmakedefine SDL_JOYSTICK_N3DS 1
#cmakedefine SDL_JOYSTICK_OGC 1
#cmakedefine SDL_JOYSTICK_PS2 1
#cmakedefine SDL_JOYSTICK_PSP 1
#cmakedefine SDL_JOYSTICK_RAWINPUT 1
Expand Down Expand Up @@ -379,6 +381,7 @@
#cmakedefine SDL_TIME_PSP 1
#cmakedefine SDL_TIME_PS2 1
#cmakedefine SDL_TIME_N3DS 1
#cmakedefine SDL_TIME_OGC 1
#cmakedefine SDL_TIME_NGAGE 1

#cmakedefine SDL_TIME_PRIVATE 1
Expand All @@ -391,6 +394,7 @@
#cmakedefine SDL_TIMER_PSP 1
#cmakedefine SDL_TIMER_PS2 1
#cmakedefine SDL_TIMER_N3DS 1
#cmakedefine SDL_TIMER_OGC 1

#cmakedefine SDL_TIMER_PRIVATE 1

Expand All @@ -406,6 +410,7 @@
#cmakedefine SDL_VIDEO_DRIVER_N3DS 1
#cmakedefine SDL_VIDEO_DRIVER_NGAGE 1
#cmakedefine SDL_VIDEO_DRIVER_OFFSCREEN 1
#cmakedefine SDL_VIDEO_DRIVER_OGC 1
#cmakedefine SDL_VIDEO_DRIVER_PS2 1
#cmakedefine SDL_VIDEO_DRIVER_PSP 1
#cmakedefine SDL_VIDEO_DRIVER_RISCOS 1
Expand Down Expand Up @@ -459,6 +464,7 @@
#cmakedefine SDL_VIDEO_RENDER_OGL 1
#cmakedefine SDL_VIDEO_RENDER_OGL_ES2 1
#cmakedefine SDL_VIDEO_RENDER_NGAGE 1
#cmakedefine SDL_VIDEO_RENDER_OGC 1
#cmakedefine SDL_VIDEO_RENDER_PS2 1
#cmakedefine SDL_VIDEO_RENDER_PSP 1
#cmakedefine SDL_VIDEO_RENDER_VITA_GXM 1
Expand Down Expand Up @@ -518,6 +524,7 @@
#cmakedefine SDL_FILESYSTEM_PSP 1
#cmakedefine SDL_FILESYSTEM_PS2 1
#cmakedefine SDL_FILESYSTEM_N3DS 1
#cmakedefine SDL_FILESYSTEM_OGC 1

#cmakedefine SDL_FILESYSTEM_PRIVATE 1

Expand Down
3 changes: 3 additions & 0 deletions src/audio/SDL_audio.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,9 @@ static const AudioBootStrap *const bootstrap[] = {
#ifdef SDL_AUDIO_DRIVER_NGAGE
&NGAGEAUDIO_bootstrap,
#endif
#ifdef SDL_AUDIO_DRIVER_OGC
&OGCAUDIO_bootstrap,
#endif
#ifdef SDL_AUDIO_DRIVER_EMSCRIPTEN
&EMSCRIPTENAUDIO_bootstrap,
#endif
Expand Down
1 change: 1 addition & 0 deletions src/audio/SDL_sysaudio.h
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,7 @@ extern AudioBootStrap PSPAUDIO_bootstrap;
extern AudioBootStrap VITAAUD_bootstrap;
extern AudioBootStrap N3DSAUDIO_bootstrap;
extern AudioBootStrap NGAGEAUDIO_bootstrap;
extern AudioBootStrap OGCAUDIO_bootstrap;
extern AudioBootStrap EMSCRIPTENAUDIO_bootstrap;
extern AudioBootStrap QSAAUDIO_bootstrap;

Expand Down
Loading