Browse Source

Merge pull request #5063 from kariem2k/fix_cmake_sdl3

Fixed: CMake support for SDL3
Ray 1 ngày trước cách đây
mục cha
commit
4da399141a

+ 31 - 4
cmake/LibraryConfigurations.cmake

@@ -101,10 +101,37 @@ elseif ("${PLATFORM}" MATCHES "DRM")
     set(LIBS_PRIVATE ${GLESV2} ${EGL} ${DRM} ${GBM} atomic pthread m dl)
     set(LIBS_PRIVATE ${GLESV2} ${EGL} ${DRM} ${GBM} atomic pthread m dl)
 
 
 elseif ("${PLATFORM}" MATCHES "SDL")
 elseif ("${PLATFORM}" MATCHES "SDL")
-    find_package(SDL2 REQUIRED)
-    set(PLATFORM_CPP "PLATFORM_DESKTOP_SDL")
-    set(LIBS_PRIVATE SDL2::SDL2)
-
+	# First, check if SDL is included as a subdirectory
+	if(TARGET SDL3::SDL3)
+		message(STATUS "Using SDL3 from subdirectory")
+		set(PLATFORM_CPP "PLATFORM_DESKTOP_SDL")
+		set(LIBS_PRIVATE SDL3::SDL3)
+		add_compile_definitions(USING_SDL3_PROJECT)
+	elseif(TARGET SDL2::SDL2)
+		message(STATUS "Using SDL2 from subdirectory")
+		set(PLATFORM_CPP "PLATFORM_DESKTOP_SDL")
+		set(LIBS_PRIVATE SDL2::SDL2)
+		add_compile_definitions(USING_SDL2_PROJECT)
+	else()
+		# No SDL added via add_subdirectory(), try find_package()
+		message(STATUS "No SDL target from subdirectory, searching via find_package()...")
+
+		# First try SDL3
+		find_package(SDL3 QUIET)
+		if(SDL3_FOUND)
+			message(STATUS "Found SDL3 via find_package()")
+			set(PLATFORM_CPP "PLATFORM_DESKTOP_SDL")
+			set(LIBS_PRIVATE SDL3::SDL3)
+			add_compile_definitions(USING_SDL3_PACKAGE)
+		else()
+			# Fallback to SDL2
+			find_package(SDL2 REQUIRED)
+			message(STATUS "Found SDL2 via find_package()")
+			set(PLATFORM_CPP "PLATFORM_DESKTOP_SDL")
+			set(LIBS_PRIVATE SDL2::SDL2)
+			add_compile_definitions(USING_SDL2_PACKAGE)
+		endif()
+	endif()	
 endif ()
 endif ()
 
 
 if (NOT ${OPENGL_VERSION} MATCHES "OFF")
 if (NOT ${OPENGL_VERSION} MATCHES "OFF")

+ 16 - 2
src/platforms/rcore_desktop_sdl.c

@@ -52,13 +52,27 @@
 #ifndef SDL_ENABLE_OLD_NAMES
 #ifndef SDL_ENABLE_OLD_NAMES
     #define SDL_ENABLE_OLD_NAMES    // Just in case we're on SDL3, we need some in-between compatibily
     #define SDL_ENABLE_OLD_NAMES    // Just in case we're on SDL3, we need some in-between compatibily
 #endif
 #endif
-#include "SDL.h"                // SDL base library (window/rendered, input, timing... functionality)
+// SDL base library (window/rendered, input, timing... functionality)
+#ifdef USING_SDL3_PROJECT
+    #include "SDL3/SDL.h"
+#elif USING_SDL2_PROJECT
+    #include "SDL2/SDL.h"
+#else 
+    #include "SDL.h"    
+#endif
 
 
 #if defined(GRAPHICS_API_OPENGL_ES2)
 #if defined(GRAPHICS_API_OPENGL_ES2)
     // It seems it does not need to be included to work
     // It seems it does not need to be included to work
     //#include "SDL_opengles2.h"
     //#include "SDL_opengles2.h"
 #else
 #else
-    #include "SDL_opengl.h"     // SDL OpenGL functionality (if required, instead of internal renderer)
+    // SDL OpenGL functionality (if required, instead of internal renderer)
+    #ifdef USING_SDL3_PROJECT        
+        #include "SDL3/SDL_opengl.h" 
+    #elif USING_SDL2_PROJECT
+        #include "SDL2/SDL_opengl.h" 
+    #else 
+        #include "SDL_opengl.h" 
+    #endif
 #endif
 #endif
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------