From b038b3ce3d304cde0cc0e305756b2ad858741b36 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Sun, 28 Nov 2021 09:09:53 +0000 Subject: [PATCH] Add an option to build SDL2 from source Replaces the Android-specific version of this. We'll need it for the iOS build as well. Also switches to the 2.0.16 release version now that it's out. --- 3rdParty/SDL2/CMake/FindSDL2.cmake | 1 + 3rdParty/SDL2/CMakeLists.txt | 24 +++++++++ CMakeLists.txt | 56 ++++++++++++-------- android-project/3rdParty/SDL2/CMakeLists.txt | 11 ---- android-project/CMake/FindSDL2.cmake | 2 - android-project/CMake/android_defs.cmake | 1 + 6 files changed, 61 insertions(+), 34 deletions(-) create mode 100644 3rdParty/SDL2/CMake/FindSDL2.cmake create mode 100644 3rdParty/SDL2/CMakeLists.txt delete mode 100644 android-project/3rdParty/SDL2/CMakeLists.txt delete mode 100644 android-project/CMake/FindSDL2.cmake diff --git a/3rdParty/SDL2/CMake/FindSDL2.cmake b/3rdParty/SDL2/CMake/FindSDL2.cmake new file mode 100644 index 000000000..50f5cecfd --- /dev/null +++ b/3rdParty/SDL2/CMake/FindSDL2.cmake @@ -0,0 +1 @@ +# An empty find module to allow calls to `find_package(SDL2)` to succeed. diff --git a/3rdParty/SDL2/CMakeLists.txt b/3rdParty/SDL2/CMakeLists.txt new file mode 100644 index 000000000..1fd842936 --- /dev/null +++ b/3rdParty/SDL2/CMakeLists.txt @@ -0,0 +1,24 @@ +if(DEVILUTIONX_STATIC_SDL2) + set(BUILD_SHARED_LIBS OFF) + set(SDL_SHARED OFF) + set(SDL_STATIC ON) + if(PIE) + set(SDL_STATIC_PIC ON) + endif() +else() + set(BUILD_SHARED_LIBS ON) + set(SDL_SHARED ON) + set(SDL_STATIC OFF) +endif() + +include(FetchContent_MakeAvailableExcludeFromAll) +include(FetchContent) +FetchContent_Declare(SDL2 + URL https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.0.16.tar.gz + URL_HASH MD5=b52877e5e92d80a20a4be4c868aa1f18 +) +FetchContent_MakeAvailableExcludeFromAll(SDL2) + +if(TARGET SDL2::SDL2-static) + add_library(SDL2::SDL2 ALIAS SDL2-static) +endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index a5f6eba81..5ef874deb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -119,6 +119,12 @@ option(DEVILUTIONX_SYSTEM_LIBFMT "Use system-provided libfmt" ON) cmake_dependent_option(DEVILUTIONX_STATIC_LIBFMT "Link static libfmt" OFF "DEVILUTIONX_SYSTEM_LIBFMT AND NOT DIST" ON) +if (NOT USE_SDL1) + option(DEVILUTIONX_SYSTEM_SDL2 "Use system-provided SDL2" ON) + cmake_dependent_option(DEVILUTIONX_STATIC_SDL2 "Link static SDL2" OFF + "DEVILUTIONX_SYSTEM_SDL2 AND NOT DIST" ON) +endif() + option(DEVILUTIONX_SYSTEM_SDL_IMAGE "Use system-provided SDL_image" ON) cmake_dependent_option(DEVILUTIONX_STATIC_SDL_IMAGE "Link static SDL_image" OFF "DEVILUTIONX_SYSTEM_SDL_IMAGE AND NOT DIST" ON) @@ -166,6 +172,10 @@ if(NOT DISABLE_LTO) endif() endif() +if(TSAN) + set(ASAN OFF) +endif() + list(APPEND CMAKE_MODULE_PATH "${DevilutionX_SOURCE_DIR}/CMake") if(GPERF) @@ -298,32 +308,36 @@ if(NOT DEVILUTIONX_SYSTEM_BZIP2) add_subdirectory(3rdParty/bzip2) endif() -if(ANDROID) - add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/android-project/3rdParty/SDL2) -elseif(USE_SDL1) +if(USE_SDL1) find_package(SDL REQUIRED) include_directories(${SDL_INCLUDE_DIR}) else() - find_package(SDL2 REQUIRED) - if(TARGET SDL2::SDL2) - set(SDL2_MAIN SDL2::SDL2main) - elseif(TARGET SDL2::SDL2-static) - # On some distros, such as vitasdk, only the SDL2::SDL2-static target is available. - # Alias to SDL2::SDL2 because some finder scripts may refer to SDL2::SDL2. - if(CMAKE_VERSION VERSION_LESS "3.18") - # Aliasing local targets is not supported on CMake < 3.18, so make it global. - set_target_properties(SDL2::SDL2-static PROPERTIES IMPORTED_GLOBAL TRUE) + if(DEVILUTIONX_SYSTEM_SDL2) + find_package(SDL2 REQUIRED) + if(TARGET SDL2::SDL2) + set(SDL2_MAIN SDL2::SDL2main) + elseif(TARGET SDL2::SDL2-static) + # On some distros, such as vitasdk, only the SDL2::SDL2-static target is available. + # Alias to SDL2::SDL2 because some finder scripts may refer to SDL2::SDL2. + if(CMAKE_VERSION VERSION_LESS "3.18") + # Aliasing local targets is not supported on CMake < 3.18, so make it global. + set_target_properties(SDL2::SDL2-static PROPERTIES IMPORTED_GLOBAL TRUE) + endif() + add_library(SDL2::SDL2 ALIAS SDL2::SDL2-static) + set(SDL2_MAIN SDL2::SDL2main) + else() + # Assume an older Debian derivate that comes with an sdl2-config.cmake + # that only defines `SDL2_LIBRARIES` (as -lSDL2) and `SDL2_INCLUDE_DIRS`. + add_library(SDL2_lib INTERFACE) + target_link_libraries(SDL2_lib INTERFACE ${SDL2_LIBRARIES}) + target_include_directories(SDL2_lib INTERFACE ${SDL2_INCLUDE_DIRS}) + # Can't define an INTERFACE target with ::, so alias instead + add_library(SDL2::SDL2 ALIAS SDL2_lib) endif() - add_library(SDL2::SDL2 ALIAS SDL2::SDL2-static) - set(SDL2_MAIN SDL2::SDL2main) else() - # Assume an older Debian derivate that comes with an sdl2-config.cmake - # that only defines `SDL2_LIBRARIES` (as -lSDL2) and `SDL2_INCLUDE_DIRS`. - add_library(SDL2_lib INTERFACE) - target_link_libraries(SDL2_lib INTERFACE ${SDL2_LIBRARIES}) - target_include_directories(SDL2_lib INTERFACE ${SDL2_INCLUDE_DIRS}) - # Can't define an INTERFACE target with ::, so alias instead - add_library(SDL2::SDL2 ALIAS SDL2_lib) + add_subdirectory(3rdParty/SDL2) + set(SDL2_MAIN SDL2::SDL2main) + list(APPEND CMAKE_MODULE_PATH "${DevilutionX_SOURCE_DIR}/3rdParty/SDL2/CMake") endif() endif() diff --git a/android-project/3rdParty/SDL2/CMakeLists.txt b/android-project/3rdParty/SDL2/CMakeLists.txt deleted file mode 100644 index 04f49d90f..000000000 --- a/android-project/3rdParty/SDL2/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -set(BUILD_SHARED_LIBS ON) - -include(FetchContent_MakeAvailableExcludeFromAll) -include(FetchContent) -FetchContent_Declare(SDL2 - URL https://github.com/libsdl-org/SDL/archive/4cd981609b50ed273d80c635c1ca4c1e5518fb21.tar.gz - URL_HASH MD5=b805579e8bf30dcc543eced3686ee72e -) -FetchContent_MakeAvailableExcludeFromAll(SDL2) - -add_library(SDL2::SDL2 ALIAS SDL2) diff --git a/android-project/CMake/FindSDL2.cmake b/android-project/CMake/FindSDL2.cmake deleted file mode 100644 index 8095f7078..000000000 --- a/android-project/CMake/FindSDL2.cmake +++ /dev/null @@ -1,2 +0,0 @@ -# This script exists for find_package() but SDL2 is provided by: -# .../devilutionX/android-project/3rdParty/SDL2/CMakeLists.txt \ No newline at end of file diff --git a/android-project/CMake/android_defs.cmake b/android-project/CMake/android_defs.cmake index 779910d3c..7cb2906be 100644 --- a/android-project/CMake/android_defs.cmake +++ b/android-project/CMake/android_defs.cmake @@ -1,6 +1,7 @@ #General compilation options set(ASAN OFF) set(UBSAN OFF) +set(DEVILUTIONX_SYSTEM_SDL2 OFF) set(DEVILUTIONX_SYSTEM_LIBSODIUM OFF) set(DEVILUTIONX_SYSTEM_LIBPNG OFF) set(DEVILUTIONX_SYSTEM_BZIP2 OFF)