Browse Source

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.
pull/3199/head
Gleb Mazovetskiy 4 years ago
parent
commit
b038b3ce3d
  1. 1
      3rdParty/SDL2/CMake/FindSDL2.cmake
  2. 24
      3rdParty/SDL2/CMakeLists.txt
  3. 56
      CMakeLists.txt
  4. 11
      android-project/3rdParty/SDL2/CMakeLists.txt
  5. 2
      android-project/CMake/FindSDL2.cmake
  6. 1
      android-project/CMake/android_defs.cmake

1
3rdParty/SDL2/CMake/FindSDL2.cmake vendored

@ -0,0 +1 @@
# An empty find module to allow calls to `find_package(SDL2)` to succeed.

24
3rdParty/SDL2/CMakeLists.txt vendored

@ -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()

56
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()

11
android-project/3rdParty/SDL2/CMakeLists.txt vendored

@ -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)

2
android-project/CMake/FindSDL2.cmake

@ -1,2 +0,0 @@
# This script exists for find_package() but SDL2 is provided by:
# .../devilutionX/android-project/3rdParty/SDL2/CMakeLists.txt

1
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)

Loading…
Cancel
Save