77# See docs/release_checklist.md
88project (SDL3 LANGUAGES C VERSION "3.3.0" )
99
10+ if (GDK_GAMING_XBOX)
11+ # FIXME: Setting the standard of individual files doesn't seem to work properly
12+ set (CMAKE_CXX_STANDARD 17)
13+ endif ()
14+
1015if (CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR )
1116 set (SDL3_MAINPROJECT ON )
1217else ()
@@ -331,8 +336,8 @@ dep_option(SDL_DISKAUDIO "Support the disk writer audio driver" ON "SD
331336dep_option(SDL_DUMMYAUDIO "Support the dummy audio driver" ON "SDL_AUDIO" OFF )
332337dep_option(SDL_DUMMYVIDEO "Use dummy video driver" ON "SDL_VIDEO" OFF )
333338dep_option(SDL_IBUS "Enable IBus support" ON "${UNIX_SYS} " OFF )
334- dep_option(SDL_OPENGL "Include OpenGL support" ON "SDL_VIDEO;NOT IOS;NOT VISIONOS;NOT TVOS;NOT WATCHOS" OFF )
335- dep_option(SDL_OPENGLES "Include OpenGL ES support" ON "SDL_VIDEO;NOT VISIONOS;NOT TVOS;NOT WATCHOS" OFF )
339+ dep_option(SDL_OPENGL "Include OpenGL support" ON "SDL_VIDEO;NOT IOS;NOT VISIONOS;NOT TVOS;NOT WATCHOS;NOT GDK_GAMING_XBOX " OFF )
340+ dep_option(SDL_OPENGLES "Include OpenGL ES support" ON "SDL_VIDEO;NOT VISIONOS;NOT TVOS;NOT WATCHOS;NOT GDK_GAMING_XBOX " OFF )
336341set_option(SDL_PTHREADS "Use POSIX threads for multi-threading" ${SDL_PTHREADS_DEFAULT} )
337342dep_option(SDL_PTHREADS_SEM "Use pthread semaphores" ON "SDL_PTHREADS" OFF )
338343dep_option(SDL_OSS "Support the OSS audio API" ${SDL_OSS_DEFAULT} "UNIX_SYS OR RISCOS;SDL_AUDIO" OFF )
@@ -375,8 +380,8 @@ dep_option(SDL_RENDER_D3D12 "Enable the Direct3D 12 render driver" ON "SD
375380dep_option(SDL_RENDER_METAL "Enable the Metal render driver" ON "SDL_RENDER;${APPLE} " OFF )
376381dep_option(SDL_RENDER_GPU "Enable the SDL_GPU render driver" ON "SDL_RENDER;SDL_GPU" OFF )
377382dep_option(SDL_VIVANTE "Use Vivante EGL video driver" ON "${UNIX_SYS} ;SDL_CPU_ARM32" OFF )
378- dep_option(SDL_VULKAN "Enable Vulkan support" ON "SDL_VIDEO;ANDROID OR APPLE OR LINUX OR FREEBSD OR WINDOWS" OFF )
379- dep_option(SDL_RENDER_VULKAN "Enable the Vulkan render driver" ON "SDL_RENDER;SDL_VULKAN" OFF )
383+ dep_option(SDL_VULKAN "Enable Vulkan support" ON "SDL_VIDEO;ANDROID OR APPLE OR LINUX OR FREEBSD OR WINDOWS;NOT GDK_GAMING_XBOX " OFF )
384+ dep_option(SDL_RENDER_VULKAN "Enable the Vulkan render driver" ON "SDL_RENDER;SDL_VULKAN;NOT GDK_GAMING_XBOX " OFF )
380385dep_option(SDL_METAL "Enable Metal support" ON "APPLE" OFF )
381386set_option(SDL_OPENVR "Use OpenVR video driver" OFF )
382387dep_option(SDL_KMSDRM "Use KMS DRM video driver" ${UNIX_SYS} "SDL_VIDEO" OFF )
@@ -385,11 +390,11 @@ set_option(SDL_OFFSCREEN "Use offscreen video driver" ON)
385390dep_option(SDL_DUMMYCAMERA "Support the dummy camera driver" ON SDL_CAMERA OFF )
386391option_string(SDL_BACKGROUNDING_SIGNAL "number to use for magic backgrounding signal or 'OFF'" OFF )
387392option_string(SDL_FOREGROUNDING_SIGNAL "number to use for magic foregrounding signal or 'OFF'" OFF )
388- dep_option(SDL_HIDAPI "Enable the HIDAPI subsystem" ON "NOT VISIONOS" OFF )
393+ dep_option(SDL_HIDAPI "Enable the HIDAPI subsystem" ON "NOT VISIONOS;NOT GDK_GAMING_XBOX " OFF )
389394dep_option(SDL_HIDAPI_LIBUSB "Use libusb for low level joystick drivers" ON SDL_HIDAPI_LIBUSB_AVAILABLE OFF )
390395dep_option(SDL_HIDAPI_LIBUSB_SHARED "Dynamically load libusb support" ON "SDL_HIDAPI_LIBUSB;SDL_DEPS_SHARED" OFF )
391396dep_option(SDL_HIDAPI_JOYSTICK "Use HIDAPI for low level joystick drivers" ON SDL_HIDAPI OFF )
392- dep_option(SDL_VIRTUAL_JOYSTICK "Enable the virtual-joystick driver" ON SDL_HIDAPI OFF )
397+ dep_option(SDL_VIRTUAL_JOYSTICK "Enable the virtual-joystick driver" ON " SDL_HIDAPI OR GDK_GAMING_XBOX" OFF )
393398set_option(SDL_LIBUDEV "Enable libudev support" ON )
394399set_option(SDL_ASAN "Use AddressSanitizer to detect memory errors" OFF )
395400set_option(SDL_CCACHE "Use Ccache to speed up build" OFF )
@@ -441,6 +446,32 @@ if(SDL_PRESEED)
441446 SDL_Preseed_CMakeCache()
442447endif ()
443448
449+ if (GDK_GAMING_XBOX)
450+ if (GDK_GAMING_XBOX_ONE)
451+ message (STATUS "Building shader blobs (Xbox One)" )
452+ execute_process (
453+ COMMAND cmd.exe /Q /c "${SDL3_SOURCE_DIR} /src/render/direct3d12/compile_shaders_xbox.bat ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} one"
454+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
455+ )
456+ execute_process (
457+ COMMAND cmd.exe /Q /c "${SDL3_SOURCE_DIR} /src/gpu/d3d12/compile_shaders_xbox.bat ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} one"
458+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
459+ )
460+ elseif (GDK_GAMING_XBOX_SCARLETT)
461+ message (STATUS "Building shader blobs (Xbox Series)" )
462+ execute_process (
463+ COMMAND cmd.exe /Q /c "${SDL3_SOURCE_DIR} /src/render/direct3d12/compile_shaders_xbox.bat ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} "
464+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
465+ )
466+ execute_process (
467+ COMMAND cmd.exe /Q /c "${SDL3_SOURCE_DIR} /src/gpu/d3d12/compile_shaders_xbox.bat ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} "
468+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
469+ )
470+ else ()
471+ message (FATAL_ERROR "Unknown Xbox system" )
472+ endif ()
473+ endif ()
474+
444475if (SDL_SHARED)
445476 add_library (SDL3-shared SHARED)
446477 add_library (SDL3::SDL3-shared ALIAS SDL3-shared)
@@ -1055,6 +1086,10 @@ if(SDL_LIBC)
10551086 strcasestr
10561087 )
10571088 endif ()
1089+ if (GDK_GAMING_XBOX)
1090+ list (REMOVE_ITEM symbols_to_check itoa)
1091+ endif ()
1092+
10581093 check_library_exists(m pow "" HAVE_LIBM)
10591094 cmake_push_check_state()
10601095 if (HAVE_LIBM)
@@ -1922,6 +1957,9 @@ elseif(WINDOWS)
19221957 sdl_glob_sources("${SDL3_SOURCE_DIR} /src/core/windows/*.cpp" )
19231958 sdl_glob_sources("${SDL3_SOURCE_DIR} /src/main/windows/*.c" )
19241959 sdl_glob_sources("${SDL3_SOURCE_DIR} /src/io/windows/*.c" )
1960+ if (GDK_GAMING_XBOX)
1961+ sdl_sources("${SDL3_SOURCE_DIR} /src/main/gdk/SDL_sysmain_runapp.cpp" )
1962+ endif ()
19251963
19261964 if (TARGET SDL3-shared AND MSVC AND NOT SDL_LIBC)
19271965 # Prevent codegen that would use the VC runtime libraries.
@@ -1955,10 +1993,19 @@ elseif(WINDOWS)
19551993 check_include_file(ddraw.h HAVE_DDRAW_H)
19561994 check_include_file(dsound.h HAVE_DSOUND_H)
19571995 check_include_file(dinput.h HAVE_DINPUT_H)
1996+ check_include_file(dxgi.h HAVE_DXGI_H)
1997+ # FIXME: Not sure why, avoiding the above still keeps "HAVE_DDRAW_H" and friends being 1?
1998+ if (GDK_GAMING_XBOX)
1999+ set (HAVE_D3D9_H 0)
2000+ set (HAVE_D3D11_H 0)
2001+ set (HAVE_DDRAW_H 0)
2002+ set (HAVE_DSOUND_H 0)
2003+ set (HAVE_DINPUT_H 0)
2004+ set (HAVE_DXGI_H 0)
2005+ endif ()
19582006 if (SDL_CPU_ARM32) # !!! FIXME: this should probably check if we're !(x86 or x86-64) instead of arm.
19592007 set (HAVE_DINPUT_H 0)
19602008 endif ()
1961- check_include_file(dxgi.h HAVE_DXGI_H)
19622009 cmake_pop_check_state()
19632010 if (HAVE_D3D9_H OR HAVE_D3D11_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR HAVE_DINPUT_H)
19642011 set (HAVE_DIRECTX TRUE )
@@ -1989,6 +2036,10 @@ elseif(WINDOWS)
19892036 static __x_ABI_CWindows_CGaming_CInput_CIGamepadStatics2 *s2;
19902037 int main(int argc, char **argv) { return 0; }" HAVE_WINDOWS_GAMING_INPUT_H
19912038 )
2039+ # FIXME: Avoiding the check above still marks it as 1
2040+ if (GDK_GAMING_XBOX)
2041+ set (HAVE_WINDOWS_GAMING_INPUT_H 0)
2042+ endif ()
19922043 check_c_source_compiles("
19932044 #include <stdbool.h>
19942045 #define COBJMACROS
@@ -2003,6 +2054,11 @@ elseif(WINDOWS)
20032054 check_include_file(sensorsapi.h HAVE_SENSORSAPI_H)
20042055 check_include_file(shellscalingapi.h HAVE_SHELLSCALINGAPI_H)
20052056 check_include_file(shobjidl_core.h HAVE_SHOBJIDL_CORE_H)
2057+ # FIXME: removing the checks didn't work?
2058+ if (GDK_GAMING_XBOX)
2059+ set (HAVE_ROAPI_H 0)
2060+ set (HAVE_SHELLSCALINGAPI_H 0)
2061+ endif ()
20062062 check_c_source_compiles("
20072063 #include <windows.h>
20082064 #include <mfapi.h>
@@ -2034,17 +2090,35 @@ elseif(WINDOWS)
20342090
20352091 CheckOpenVR()
20362092
2037- if (SDL_RENDER_D3D AND HAVE_D3D9_H)
2093+ if (SDL_RENDER_D3D AND HAVE_D3D9_H AND NOT GDK_GAMING_XBOX )
20382094 set (SDL_VIDEO_RENDER_D3D 1)
20392095 set (HAVE_RENDER_D3D TRUE )
20402096 endif ()
2041- if (SDL_RENDER_D3D11 AND HAVE_D3D11_H)
2097+ if (GDK_GAMING_XBOX)
2098+ set_source_files_properties ("${SDL3_SOURCE_DIR} /src/render/direct3d/SDL_render_d3d.c" PROPERTIES LANGUAGE CXX)
2099+ sdl_sources("${SDL3_SOURCE_DIR} /src/video/gdk/SDL_gdktextinput.cpp" )
2100+ endif ()
2101+ if (SDL_RENDER_D3D11 AND HAVE_D3D11_H AND NOT GDK_GAMING_XBOX)
20422102 set (SDL_VIDEO_RENDER_D3D11 1)
20432103 set (HAVE_RENDER_D3D11 TRUE )
20442104 endif ()
20452105 if (SDL_RENDER_D3D12)
20462106 set (SDL_VIDEO_RENDER_D3D12 1)
20472107 set (HAVE_RENDER_D3D12 TRUE )
2108+ if (GDK_GAMING_XBOX)
2109+ set_source_files_properties ("${SDL3_SOURCE_DIR} /src/render/direct3d12/SDL_render_d3d12.c" PROPERTIES LANGUAGE CXX)
2110+ sdl_sources("${SDL3_SOURCE_DIR} /src/render/direct3d12/SDL_render_d3d12_xbox.cpp" )
2111+ if (GDK_GAMING_XBOX_ONE)
2112+ sdl_sources("${SDL3_SOURCE_DIR} /src/render/direct3d12/SDL_shaders_d3d12_xboxone.cpp" )
2113+ # TODO: This should also happen for "SDL_GPU && !(SDL_RENDER)"
2114+ sdl_link_dependency(d3d12 LIBS d3d12_x.lib)
2115+ elseif (GDK_GAMING_XBOX_SCARLETT)
2116+ sdl_sources("${SDL3_SOURCE_DIR} /src/render/direct3d12/SDL_shaders_d3d12_xboxseries.cpp" )
2117+ sdl_link_dependency(d3d12 LIBS d3d12_xs.lib)
2118+ else ()
2119+ message (FATAL_ERROR "Unknown Xbox system" )
2120+ endif ()
2121+ endif ()
20482122 endif ()
20492123 set (HAVE_SDL_VIDEO TRUE )
20502124 endif ()
@@ -2065,23 +2139,34 @@ elseif(WINDOWS)
20652139
20662140 set (HAVE_SDL_THREADS TRUE )
20672141
2068- if (SDL_SENSOR AND HAVE_SENSORSAPI_H)
2142+ if (SDL_SENSOR AND HAVE_SENSORSAPI_H AND NOT GDK_GAMING_XBOX )
20692143 set (SDL_SENSOR_WINDOWS 1)
20702144 set (HAVE_SDL_SENSORS TRUE )
20712145 sdl_glob_sources("${SDL3_SOURCE_DIR} /src/sensor/windows/*.c" )
20722146 endif ()
20732147
20742148 if (SDL_POWER)
2075- set (SDL_POWER_WINDOWS 1)
2149+ if (GDK_GAMING_XBOX)
2150+ set (SDL_POWER_HARDWIRED 1)
2151+ else ()
2152+ set (SDL_POWER_WINDOWS 1)
2153+ endif ()
20762154 sdl_sources("${SDL3_SOURCE_DIR} /src/power/windows/SDL_syspower.c" )
20772155 set (HAVE_SDL_POWER TRUE )
20782156 endif ()
20792157
20802158 sdl_glob_sources("${SDL3_SOURCE_DIR} /src/locale/windows/*.c" )
20812159 set (HAVE_SDL_LOCALE TRUE )
20822160
2083- set (SDL_FILESYSTEM_WINDOWS 1)
2084- sdl_glob_sources("${SDL3_SOURCE_DIR} /src/filesystem/windows/*.c" )
2161+ if (NOT GDK_GAMING_XBOX)
2162+ set (SDL_FILESYSTEM_WINDOWS 1)
2163+ endif ()
2164+ file (GLOB SDL3_WIN_FILESYSTEM_FILES "${SDL3_SOURCE_DIR} /src/filesystem/windows/*.c" )
2165+ if (GDK_GAMING_XBOX)
2166+ list (REMOVE_ITEM SDL3_WIN_FILESYSTEM_FILES "${SDL3_SOURCE_DIR} /src/filesystem/windows/SDL_sysfilesystem.c" )
2167+ sdl_sources("${SDL3_SOURCE_DIR} /src/filesystem/gdk/SDL_sysfilesystem.cpp" )
2168+ endif ()
2169+ sdl_glob_sources("${SDL3_WIN_FILESYSTEM_FILES} " )
20852170 set (HAVE_SDL_FILESYSTEM TRUE )
20862171
20872172 set (SDL_FSOPS_WINDOWS 1)
@@ -2094,7 +2179,14 @@ elseif(WINDOWS)
20942179 set (HAVE_SDL_STORAGE 1)
20952180
20962181 # Libraries for Win32 native and MinGW
2097- sdl_link_dependency(base LIBS kernel32 user32 gdi32 winmm imm32 ole32 oleaut32 version uuid advapi32 setupapi shell32)
2182+ if (GDK_GAMING_XBOX)
2183+ add_link_options ("/NODEFAULTLIB" )
2184+ # Needed to inherit base dependencies, specifically to link XblInitialize correctly
2185+ set (CMAKE_CXX_STANDARD_LIBRARIES "$(CMAKE_CXX_STANDARD_LIBRARIES) %(AdditionalDependencies) " )
2186+ sdl_link_dependency(base LIBS xgameplatform xgameruntime xmem pixevt)
2187+ else ()
2188+ sdl_link_dependency(base LIBS kernel32 user32 gdi32 winmm imm32 ole32 oleaut32 version uuid advapi32 setupapi shell32)
2189+ endif ()
20982190
20992191 set (SDL_TIME_WINDOWS 1)
21002192 sdl_glob_sources("${SDL3_SOURCE_DIR} /src/time/windows/*.c" )
@@ -2109,6 +2201,10 @@ elseif(WINDOWS)
21092201 set (HAVE_SDL_LOADSO TRUE )
21102202
21112203 sdl_glob_sources("${SDL3_SOURCE_DIR} /src/core/windows/*.c" )
2204+ if (GDK_GAMING_XBOX)
2205+ sdl_sources("${SDL3_SOURCE_DIR} /src/core/gdk/SDL_gdk.cpp" )
2206+ # sdl_sources("${SDL3_SOURCE_DIR}/src/core/windows/pch_cpp.cpp")
2207+ endif ()
21122208
21132209 if (SDL_VIDEO)
21142210 if (SDL_OPENGL)
@@ -2134,8 +2230,10 @@ elseif(WINDOWS)
21342230 endif ()
21352231 endif ()
21362232
2137- sdl_glob_sources("${SDL3_SOURCE_DIR} /src/tray/windows/*.c" )
2138- set (HAVE_SDL_TRAY TRUE )
2233+ if (NOT GDK_GAMING_XBOX)
2234+ sdl_glob_sources("${SDL3_SOURCE_DIR} /src/tray/windows/*.c" )
2235+ set (HAVE_SDL_TRAY TRUE )
2236+ endif ()
21392237 endif ()
21402238
21412239 if (SDL_HIDAPI)
@@ -2144,30 +2242,47 @@ elseif(WINDOWS)
21442242
21452243 if (SDL_JOYSTICK)
21462244 sdl_glob_sources("${SDL3_SOURCE_DIR} /src/joystick/windows/*.c" )
2245+ if (GDK_GAMING_XBOX)
2246+ set_source_files_properties ("${SDL3_SOURCE_DIR} /src/joystick/windows/SDL_windowsjoystick.c" PROPERTIES LANGUAGE CXX CXX_STANDARD 17)
2247+ set_source_files_properties ("${SDL3_SOURCE_DIR} /src/joystick/windows/SDL_xinputjoystick.c" PROPERTIES LANGUAGE CXX CXX_STANDARD 17)
2248+ sdl_sources("${SDL3_SOURCE_DIR} /src/joystick/gdk/SDL_gameinputjoystick.c" )
2249+ endif ()
21472250
2148- set (SDL_JOYSTICK_RAWINPUT 1)
2251+ if (NOT GDK_GAMING_XBOX)
2252+ set (SDL_JOYSTICK_RAWINPUT 1)
2253+ endif ()
21492254 if (HAVE_DINPUT_H)
21502255 set (SDL_JOYSTICK_DINPUT 1)
21512256 sdl_link_dependency(joystick LIBS dinput8)
21522257 endif ()
2153- if (HAVE_XINPUT_H)
2258+ if (HAVE_XINPUT_H AND NOT GDK_GAMING_XBOX )
21542259 set (SDL_JOYSTICK_XINPUT 1)
21552260 set (HAVE_XINPUT TRUE )
21562261 endif ()
2157- if (HAVE_WINDOWS_GAMING_INPUT_H)
2262+ if (GDK_GAMING_XBOX)
2263+ set_source_files_properties ("${SDL3_SOURCE_DIR} /src/core/windows/SDL_xinput.c" PROPERTIES LANGUAGE CXX CXX_STANDARD 17)
2264+ endif ()
2265+ if (HAVE_WINDOWS_GAMING_INPUT_H AND NOT GDK_GAMING_XBOX)
21582266 set (SDL_JOYSTICK_WGI 1)
21592267 endif ()
21602268 if (HAVE_GAMEINPUT_H)
21612269 sdl_glob_sources("${SDL3_SOURCE_DIR} /src/joystick/gdk/*.cpp" )
21622270 set (SDL_JOYSTICK_GAMEINPUT 1)
21632271 endif ()
2272+ if (GDK_GAMING_DESKTOP OR GDK_GAMING_XBOX)
2273+ set (SDL_GDK_TEXTINPUT 1)
2274+ set (SDL_DISABLE_WINDOWS_IME 1)
2275+ endif ()
21642276 set (HAVE_SDL_JOYSTICK TRUE )
21652277
21662278 if (SDL_HAPTIC)
21672279 if (HAVE_DINPUT_H)
21682280 sdl_glob_sources("${SDL3_SOURCE_DIR} /src/haptic/windows/*.c" )
21692281 set (SDL_HAPTIC_DINPUT 1)
21702282 set (HAVE_SDL_HAPTIC TRUE )
2283+ if (GDK_GAMING_XBOX)
2284+ set_source_files_properties ("${SDL3_SOURCE_DIR} /src/haptic/windows/SDL_windowshaptic.c" PROPERTIES LANGUAGE CXX CXX_STANDARD 17)
2285+ endif ()
21712286 endif ()
21722287 endif ()
21732288 endif ()
@@ -3041,7 +3156,7 @@ if (SDL_DIALOG)
30413156 elseif (HAIKU)
30423157 sdl_sources(${SDL3_SOURCE_DIR} /src/dialog/haiku/SDL_haikudialog.cc)
30433158 set (HAVE_SDL_DIALOG TRUE )
3044- elseif (WINDOWS)
3159+ elseif (WINDOWS AND NOT GDK_GAMING_XBOX )
30453160 sdl_sources(${SDL3_SOURCE_DIR} /src/dialog/windows/SDL_windowsdialog.c)
30463161 set (HAVE_SDL_DIALOG TRUE )
30473162 elseif (MACOS)
@@ -3051,7 +3166,7 @@ if (SDL_DIALOG)
30513166endif ()
30523167
30533168sdl_sources("${SDL3_SOURCE_DIR} /src/process/SDL_process.c" )
3054- if (WINDOWS)
3169+ if (WINDOWS AND NOT GDK_GAMING_XBOX )
30553170 sdl_glob_sources("${SDL3_SOURCE_DIR} /src/process/windows/*.c" )
30563171 set (SDL_PROCESS_WINDOWS 1)
30573172 set (HAVE_SDL_PROCESS TRUE )
@@ -3120,6 +3235,10 @@ if(SDL_GPU)
31203235 endif ()
31213236 if (WINDOWS)
31223237 sdl_glob_sources("${SDL3_SOURCE_DIR} /src/gpu/d3d12/*.c" )
3238+ sdl_glob_sources("${SDL3_SOURCE_DIR} /src/gpu/d3d12/*.cpp" )
3239+ if (GDK_GAMING_XBOX)
3240+ set_source_files_properties ("${SDL3_SOURCE_DIR} /src/gpu/d3d12/SDL_gpu_d3d12.c" PROPERTIES LANGUAGE CXX CXX_STANDARD 17)
3241+ endif ()
31233242 set (SDL_GPU_D3D12 1)
31243243 set (HAVE_SDL_GPU TRUE )
31253244 endif ()
0 commit comments