From cd95c4635a10c64f85e2704e1fa74e31087d9a46 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Wed, 22 Jan 2025 20:06:30 +0100 Subject: [PATCH] Add support for linking against SDL3 as a system package. --- CMakeLists.txt | 1 + application/input/CMakeLists.txt | 8 +++++++- application/platforms/CMakeLists.txt | 16 ++++++++++------ third_party/CMakeLists.txt | 2 +- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6293aaa4..3df03b1f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,6 +53,7 @@ option(GRANITE_FFMPEG "Enable FFmpeg." OFF) option(GRANITE_FFMPEG_VULKAN "Enable experimental Vulkan HW decode support in FFmpeg." OFF) option(GRANITE_FAST_MATH "Enable fast math." ON) option(GRANITE_SHIPPING "Disable code paths not related to development." OFF) +option(GRANITE_SYSTEM_SDL "Use system SDL3 instead of vendored submodule." OFF) if (GRANITE_FAST_MATH) message("Enabling fast math.") diff --git a/application/input/CMakeLists.txt b/application/input/CMakeLists.txt index 3df5c6e5..1f414441 100644 --- a/application/input/CMakeLists.txt +++ b/application/input/CMakeLists.txt @@ -4,5 +4,11 @@ target_link_libraries(granite-input PUBLIC granite-util granite-event granite-ma if (${GRANITE_PLATFORM} MATCHES "SDL") add_granite_internal_static_lib(granite-input-sdl input_sdl.cpp input_sdl.hpp) - target_link_libraries(granite-input-sdl PUBLIC granite-input SDL3-static) + target_link_libraries(granite-input-sdl PUBLIC granite-input) + if (GRANITE_SYSTEM_SDL) + find_package(SDL3 REQUIRED) + target_link_libraries(granite-input-sdl PUBLIC SDL3::SDL3-shared) + else() + target_link_libraries(granite-input-sdl PUBLIC SDL3-static) + endif() endif() \ No newline at end of file diff --git a/application/platforms/CMakeLists.txt b/application/platforms/CMakeLists.txt index 8a7c0699..bd62efee 100644 --- a/application/platforms/CMakeLists.txt +++ b/application/platforms/CMakeLists.txt @@ -31,13 +31,17 @@ elseif (${GRANITE_PLATFORM} MATCHES "libretro") target_include_directories(granite-platform PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/libretro) elseif (${GRANITE_PLATFORM} MATCHES "SDL") add_granite_internal_static_lib(granite-platform application_sdl3.cpp) - # For non-vendored version, but SDL3 is not stable yet as far as I can tell. - #find_package(SDL3 REQUIRED CONFIG REQUIRED COMPONENTS SDL3-shared) - #target_link_libraries(granite-platform PRIVATE SDL3::SDL3-shared) - target_link_libraries(granite-platform PRIVATE SDL3-static granite-input-sdl) - if (NOT WIN32) - target_link_libraries(granite-platform PRIVATE dl) + + if (GRANITE_SYSTEM_SDL) + find_package(SDL3 REQUIRED) + target_link_libraries(granite-platform PRIVATE SDL3::SDL3-shared) + else() + target_link_libraries(granite-platform PRIVATE SDL3-static) + if (NOT WIN32) + target_link_libraries(granite-platform PRIVATE dl) + endif() endif() + target_link_libraries(granite-platform PRIVATE granite-input-sdl) elseif (${GRANITE_PLATFORM} MATCHES "headless") add_granite_internal_static_lib(granite-platform application_headless_wrapper.cpp) elseif (${GRANITE_PLATFORM} MATCHES "null") diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt index 4abff1ad..8525cd32 100644 --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -113,7 +113,7 @@ else() endif() target_link_libraries(granite-volk PRIVATE granite-volk-headers) -if ((NOT ANDROID) AND (${GRANITE_PLATFORM} MATCHES "SDL")) +if ((NOT ANDROID) AND (${GRANITE_PLATFORM} MATCHES "SDL") AND (NOT GRANITE_SYSTEM_SDL)) set(SDL_SHARED OFF CACHE BOOL "" FORCE) set(SDL_STATIC ON CACHE BOOL "" FORCE) set(SDL_TIMERS ON CACHE BOOL "" FORCE)