mirror of
https://github.com/love2d/megasource.git
synced 2026-08-17 11:11:35 +02:00
Update SDL to 2.0.7
This commit is contained in:
+252
-67
@@ -2,7 +2,7 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
|
||||
message(FATAL_ERROR "Prevented in-tree built. Please create a build directory outside of the SDL source code and call cmake from there")
|
||||
endif()
|
||||
|
||||
cmake_minimum_required(VERSION 2.8.5)
|
||||
cmake_minimum_required(VERSION 2.8.11)
|
||||
project(SDL2 C)
|
||||
|
||||
# !!! FIXME: this should probably do "MACOSX_RPATH ON" as a target property
|
||||
@@ -20,6 +20,7 @@ include(CheckLibraryExists)
|
||||
include(CheckIncludeFiles)
|
||||
include(CheckIncludeFile)
|
||||
include(CheckSymbolExists)
|
||||
include(CheckCSourceCompiles)
|
||||
include(CheckCSourceRuns)
|
||||
include(CheckCCompilerFlag)
|
||||
include(CheckTypeSize)
|
||||
@@ -41,11 +42,17 @@ include(${SDL2_SOURCE_DIR}/cmake/sdlchecks.cmake)
|
||||
# set SDL_BINARY_AGE and SDL_INTERFACE_AGE to 0.
|
||||
set(SDL_MAJOR_VERSION 2)
|
||||
set(SDL_MINOR_VERSION 0)
|
||||
set(SDL_MICRO_VERSION 5)
|
||||
set(SDL_INTERFACE_AGE 1)
|
||||
set(SDL_BINARY_AGE 5)
|
||||
set(SDL_MICRO_VERSION 7)
|
||||
set(SDL_INTERFACE_AGE 0)
|
||||
set(SDL_BINARY_AGE 7)
|
||||
set(SDL_VERSION "${SDL_MAJOR_VERSION}.${SDL_MINOR_VERSION}.${SDL_MICRO_VERSION}")
|
||||
|
||||
# Set defaults preventing destination file conflicts
|
||||
set(CMAKE_DEBUG_POSTFIX "d"
|
||||
CACHE STRING "Name suffix for debug builds")
|
||||
|
||||
mark_as_advanced(CMAKE_IMPORT_LIBRARY_SUFFIX CMAKE_DEBUG_POSTFIX)
|
||||
|
||||
# Calculate a libtool-like version number
|
||||
math(EXPR LT_CURRENT "${SDL_MICRO_VERSION} - ${SDL_INTERFACE_AGE}")
|
||||
math(EXPR LT_AGE "${SDL_BINARY_AGE} - ${SDL_INTERFACE_AGE}")
|
||||
@@ -137,7 +144,9 @@ endif()
|
||||
|
||||
# Default option knobs
|
||||
if(APPLE OR ARCH_64)
|
||||
set(OPT_DEF_SSEMATH ON)
|
||||
if(NOT "${CMAKE_OSX_ARCHITECTURES}" MATCHES "arm")
|
||||
set(OPT_DEF_SSEMATH ON)
|
||||
endif()
|
||||
endif()
|
||||
if(UNIX OR MINGW OR MSYS)
|
||||
set(OPT_DEF_LIBC ON)
|
||||
@@ -157,6 +166,10 @@ else()
|
||||
set(OPT_DEF_ASM FALSE)
|
||||
endif()
|
||||
|
||||
if(USE_GCC OR USE_CLANG)
|
||||
set(OPT_DEF_GCC_ATOMICS ON)
|
||||
endif()
|
||||
|
||||
# Default flags, if not set otherwise
|
||||
if("$ENV{CFLAGS}" STREQUAL "")
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "")
|
||||
@@ -220,6 +233,11 @@ endif()
|
||||
add_definitions(-DUSING_GENERATED_CONFIG_H)
|
||||
# General includes
|
||||
include_directories(${SDL2_BINARY_DIR}/include ${SDL2_SOURCE_DIR}/include)
|
||||
if(USE_GCC OR USE_CLANG)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -idirafter ${SDL2_SOURCE_DIR}/src/video/khronos")
|
||||
else()
|
||||
include_directories(${SDL2_SOURCE_DIR}/src/video/khronos)
|
||||
endif()
|
||||
|
||||
# All these ENABLED_BY_DEFAULT vars will default to ON if not specified, so
|
||||
# you only need to have a platform override them if they are disabling.
|
||||
@@ -255,20 +273,19 @@ endforeach()
|
||||
option_string(ASSERTIONS "Enable internal sanity checks (auto/disabled/release/enabled/paranoid)" "auto")
|
||||
#set_option(DEPENDENCY_TRACKING "Use gcc -MMD -MT dependency tracking" ON)
|
||||
set_option(LIBC "Use the system C library" ${OPT_DEF_LIBC})
|
||||
set_option(GCC_ATOMICS "Use gcc builtin atomics" ${USE_GCC})
|
||||
set_option(GCC_ATOMICS "Use gcc builtin atomics" ${OPT_DEF_GCC_ATOMICS})
|
||||
set_option(ASSEMBLY "Enable assembly routines" ${OPT_DEF_ASM})
|
||||
set_option(SSEMATH "Allow GCC to use SSE floating point math" ${OPT_DEF_SSEMATH})
|
||||
set_option(MMX "Use MMX assembly routines" ${OPT_DEF_ASM})
|
||||
set_option(3DNOW "Use 3Dnow! MMX assembly routines" ${OPT_DEF_ASM})
|
||||
set_option(SSE "Use SSE assembly routines" ${OPT_DEF_ASM})
|
||||
set_option(SSE2 "Use SSE2 assembly routines" ${OPT_DEF_SSEMATH})
|
||||
set_option(SSE3 "Use SSE3 assembly routines" ${OPT_DEF_SSEMATH})
|
||||
set_option(ALTIVEC "Use Altivec assembly routines" ${OPT_DEF_ASM})
|
||||
set_option(DISKAUDIO "Support the disk writer audio driver" ON)
|
||||
set_option(DUMMYAUDIO "Support the dummy audio driver" ON)
|
||||
set_option(VIDEO_DIRECTFB "Use DirectFB video driver" OFF)
|
||||
dep_option(DIRECTFB_SHARED "Dynamically load directfb support" ON "VIDEO_DIRECTFB" OFF)
|
||||
set_option(FUSIONSOUND "Use FusionSound audio driver" OFF)
|
||||
dep_option(FUSIONSOUND_SHARED "Dynamically load fusionsound audio support" ON "FUSIONSOUND" OFF)
|
||||
set_option(VIDEO_DUMMY "Use dummy video driver" ON)
|
||||
set_option(VIDEO_OPENGL "Include OpenGL support" ON)
|
||||
set_option(VIDEO_OPENGLES "Include OpenGL ES support" ON)
|
||||
@@ -278,6 +295,8 @@ set_option(SDL_DLOPEN "Use dlopen for shared object loading" ${SDL_DLOP
|
||||
set_option(OSS "Support the OSS audio API" ${UNIX_SYS})
|
||||
set_option(ALSA "Support the ALSA audio API" ${UNIX_SYS})
|
||||
dep_option(ALSA_SHARED "Dynamically load ALSA audio support" ON "ALSA" OFF)
|
||||
set_option(JACK "Support the JACK audio API" ${UNIX_SYS})
|
||||
dep_option(JACK_SHARED "Dynamically load JACK audio support" ON "JACK" OFF)
|
||||
set_option(ESD "Support the Enlightened Sound Daemon" ${UNIX_SYS})
|
||||
dep_option(ESD_SHARED "Dynamically load ESD audio support" ON "ESD" OFF)
|
||||
set_option(PULSEAUDIO "Use PulseAudio" ${UNIX_SYS})
|
||||
@@ -287,6 +306,10 @@ dep_option(ARTS_SHARED "Dynamically load aRts audio support" ON "ARTS" O
|
||||
set_option(NAS "Support the NAS audio API" ${UNIX_SYS})
|
||||
set_option(NAS_SHARED "Dynamically load NAS audio API" ${UNIX_SYS})
|
||||
set_option(SNDIO "Support the sndio audio API" ${UNIX_SYS})
|
||||
set_option(FUSIONSOUND "Use FusionSound audio driver" OFF)
|
||||
dep_option(FUSIONSOUND_SHARED "Dynamically load fusionsound audio support" ON "FUSIONSOUND" OFF)
|
||||
set_option(LIBSAMPLERATE "Use libsamplerate for audio rate conversion" ${UNIX_SYS})
|
||||
dep_option(LIBSAMPLERATE_SHARED "Dynamically load libsamplerate" ON "LIBSAMPLERATE" OFF)
|
||||
set_option(RPATH "Use an rpath when linking SDL" ${UNIX_SYS})
|
||||
set_option(CLOCK_GETTIME "Use clock_gettime() instead of gettimeofday()" OFF)
|
||||
set_option(INPUT_TSLIB "Use the Touchscreen library for input" ${UNIX_SYS})
|
||||
@@ -307,11 +330,14 @@ set_option(VIDEO_COCOA "Use Cocoa video driver" ${APPLE})
|
||||
set_option(DIRECTX "Use DirectX for Windows audio/video" ${WINDOWS})
|
||||
set_option(RENDER_D3D "Enable the Direct3D render driver" ${WINDOWS})
|
||||
set_option(VIDEO_VIVANTE "Use Vivante EGL video driver" ${UNIX_SYS})
|
||||
dep_option(VIDEO_VULKAN "Enable Vulkan support" ON "ANDROID OR APPLE OR LINUX OR WINDOWS" OFF)
|
||||
set_option(VIDEO_KMSDRM "Use KMS DRM video driver" ${UNIX_SYS})
|
||||
dep_option(KMSDRM_SHARED "Dynamically load KMS DRM support" ON "VIDEO_KMSDRM" OFF)
|
||||
|
||||
# TODO: We should (should we?) respect cmake's ${BUILD_SHARED_LIBS} flag here
|
||||
# The options below are for compatibility to configure's default behaviour.
|
||||
set(SDL_SHARED ON CACHE BOOL "Build a shared version of the library")
|
||||
set(SDL_STATIC OFF CACHE BOOL "Build a static version of the library")
|
||||
set(SDL_SHARED ${SDL_SHARED_ENABLED_BY_DEFAULT} CACHE BOOL "Build a shared version of the library")
|
||||
set(SDL_STATIC ON CACHE BOOL "Build a static version of the library")
|
||||
|
||||
dep_option(SDL_STATIC_PIC "Static version of the library should be built with Position Independent Code" OFF "SDL_STATIC" OFF)
|
||||
|
||||
@@ -414,11 +440,15 @@ if(USE_GCC OR USE_CLANG)
|
||||
list(APPEND EXTRA_CFLAGS "-Wshadow")
|
||||
endif()
|
||||
|
||||
set(CMAKE_REQUIRED_FLAGS "-Wl,--no-undefined")
|
||||
check_c_compiler_flag("" HAVE_NO_UNDEFINED)
|
||||
set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
|
||||
if(HAVE_NO_UNDEFINED)
|
||||
list(APPEND EXTRA_LDFLAGS "-Wl,--no-undefined")
|
||||
if(APPLE)
|
||||
list(APPEND EXTRA_LDFLAGS "-Wl,-undefined,error")
|
||||
else()
|
||||
set(CMAKE_REQUIRED_FLAGS "-Wl,--no-undefined")
|
||||
check_c_compiler_flag("" HAVE_NO_UNDEFINED)
|
||||
set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
|
||||
if(HAVE_NO_UNDEFINED)
|
||||
list(APPEND EXTRA_LDFLAGS "-Wl,--no-undefined")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -514,10 +544,36 @@ if(ASSEMBLY)
|
||||
set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
|
||||
endif()
|
||||
|
||||
if(SSEMATH)
|
||||
if(SSE OR SSE2)
|
||||
if(SSE3)
|
||||
set(CMAKE_REQUIRED_FLAGS "-msse3")
|
||||
check_c_source_compiles("
|
||||
#ifdef __MINGW32__
|
||||
#include <_mingw.h>
|
||||
#ifdef __MINGW64_VERSION_MAJOR
|
||||
#include <intrin.h>
|
||||
#else
|
||||
#include <pmmintrin.h>
|
||||
#endif
|
||||
#else
|
||||
#include <pmmintrin.h>
|
||||
#endif
|
||||
#ifndef __SSE3__
|
||||
#error Assembler CPP flag not enabled
|
||||
#endif
|
||||
int main(int argc, char **argv) { }" HAVE_SSE3)
|
||||
if(HAVE_SSE3)
|
||||
list(APPEND EXTRA_CFLAGS "-msse3")
|
||||
endif()
|
||||
set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
|
||||
endif()
|
||||
|
||||
if(NOT SSEMATH)
|
||||
if(SSE OR SSE2 OR SSE3)
|
||||
if(USE_GCC)
|
||||
list(APPEND EXTRA_CFLAGS "-mfpmath=387")
|
||||
check_c_compiler_flag(-mfpmath=387 HAVE_FP_387)
|
||||
if(HAVE_FP_387)
|
||||
list(APPEND EXTRA_CFLAGS "-mfpmath=387")
|
||||
endif()
|
||||
endif()
|
||||
set(HAVE_SSEMATH TRUE)
|
||||
endif()
|
||||
@@ -555,12 +611,13 @@ if(ASSEMBLY)
|
||||
endif()
|
||||
set(HAVE_SSE TRUE)
|
||||
set(HAVE_SSE2 TRUE)
|
||||
set(HAVE_SSE3 TRUE)
|
||||
set(SDL_ASSEMBLY_ROUTINES 1)
|
||||
endif()
|
||||
# TODO:
|
||||
#else()
|
||||
# if(USE_GCC OR USE_CLANG)
|
||||
# list(APPEND EXTRA_CFLAGS "-mno-sse" "-mno-sse2" "-mno-mmx")
|
||||
# list(APPEND EXTRA_CFLAGS "-mno-sse" "-mno-sse2" "-mno-sse3" "-mno-mmx")
|
||||
# endif()
|
||||
endif()
|
||||
|
||||
@@ -569,7 +626,7 @@ endif()
|
||||
if(LIBC)
|
||||
if(WINDOWS AND NOT MINGW)
|
||||
set(HAVE_LIBC TRUE)
|
||||
foreach(_HEADER stdio.h string.h ctype.h math.h)
|
||||
foreach(_HEADER stdio.h string.h wchar.h ctype.h math.h limits.h)
|
||||
string(TOUPPER "HAVE_${_HEADER}" _UPPER)
|
||||
string(REPLACE "." "_" _HAVE_H ${_UPPER})
|
||||
set(${_HAVE_H} 1)
|
||||
@@ -577,6 +634,7 @@ if(LIBC)
|
||||
set(HAVE_SIGNAL_H 1)
|
||||
foreach(_FN
|
||||
malloc calloc realloc free qsort abs memset memcpy memmove memcmp
|
||||
wcslen wcscmp
|
||||
strlen _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa
|
||||
_ultoa strtol strtoul strtoll strtod atoi atof strcmp strncmp
|
||||
_stricmp _strnicmp sscanf atan atan2 acos asin ceil copysign cos
|
||||
@@ -594,8 +652,8 @@ if(LIBC)
|
||||
set(HAVE_LIBC TRUE)
|
||||
check_include_file(sys/types.h HAVE_SYS_TYPES_H)
|
||||
foreach(_HEADER
|
||||
stdio.h stdlib.h stddef.h stdarg.h malloc.h memory.h string.h
|
||||
strings.h inttypes.h stdint.h ctype.h math.h iconv.h signal.h)
|
||||
stdio.h stdlib.h stddef.h stdarg.h malloc.h memory.h string.h limits.h
|
||||
strings.h wchar.h inttypes.h stdint.h ctype.h math.h iconv.h signal.h libunwind.h)
|
||||
string(TOUPPER "HAVE_${_HEADER}" _UPPER)
|
||||
string(REPLACE "." "_" _HAVE_H ${_UPPER})
|
||||
check_include_file("${_HEADER}" ${_HAVE_H})
|
||||
@@ -611,11 +669,11 @@ if(LIBC)
|
||||
foreach(_FN
|
||||
strtod malloc calloc realloc free getenv setenv putenv unsetenv
|
||||
qsort abs bcopy memset memcpy memmove memcmp strlen strlcpy strlcat
|
||||
strdup _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa
|
||||
_strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa
|
||||
_uitoa _ultoa strtol strtoul _i64toa _ui64toa strtoll strtoull
|
||||
atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp strncasecmp
|
||||
vsscanf vsnprintf fseeko fseeko64 sigaction setjmp
|
||||
nanosleep sysconf sysctlbyname
|
||||
vsscanf vsnprintf fopen64 fseeko fseeko64 sigaction setjmp
|
||||
nanosleep sysconf sysctlbyname getauxval poll
|
||||
)
|
||||
string(TOUPPER ${_FN} _UPPER)
|
||||
set(_HAVEVAR "HAVE_${_UPPER}")
|
||||
@@ -725,8 +783,19 @@ endif()
|
||||
if(ANDROID)
|
||||
file(GLOB ANDROID_CORE_SOURCES ${SDL2_SOURCE_DIR}/src/core/android/*.c)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_CORE_SOURCES})
|
||||
|
||||
# SDL_spinlock.c Needs to be compiled in ARM mode.
|
||||
# There seems to be no better way currently to set the ARM mode.
|
||||
# see: https://issuetracker.google.com/issues/62264618
|
||||
# Another option would be to set ARM mode to all compiled files
|
||||
check_c_compiler_flag(-marm HAVE_ARM_MODE)
|
||||
if(HAVE_ARM_MODE)
|
||||
set_source_files_properties(${SDL2_SOURCE_DIR}/src/atomic/SDL_spinlock.c PROPERTIES COMPILE_FLAGS -marm)
|
||||
endif()
|
||||
|
||||
file(GLOB ANDROID_MAIN_SOURCES ${SDL2_SOURCE_DIR}/src/main/android/*.c)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_MAIN_SOURCES})
|
||||
set(SDLMAIN_SOURCES ${SDLMAIN_SOURCES} ${ANDROID_MAIN_SOURCES})
|
||||
|
||||
if(SDL_AUDIO)
|
||||
set(SDL_AUDIO_DRIVER_ANDROID 1)
|
||||
file(GLOB ANDROID_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/android/*.c)
|
||||
@@ -739,33 +808,78 @@ if(ANDROID)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_FILESYSTEM_SOURCES})
|
||||
set(HAVE_SDL_FILESYSTEM TRUE)
|
||||
endif()
|
||||
if(SDL_HAPTIC)
|
||||
set(SDL_HAPTIC_ANDROID 1)
|
||||
file(GLOB ANDROID_HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/android/*.c)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_HAPTIC_SOURCES})
|
||||
set(HAVE_SDL_HAPTIC TRUE)
|
||||
endif()
|
||||
if(SDL_JOYSTICK)
|
||||
set(SDL_JOYSTICK_ANDROID 1)
|
||||
file(GLOB ANDROID_JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/android/*.c)
|
||||
file(GLOB ANDROID_JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/android/*.c ${SDL2_SOURCE_DIR}/src/joystick/steam/*.c)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_JOYSTICK_SOURCES})
|
||||
set(HAVE_SDL_JOYSTICK TRUE)
|
||||
endif()
|
||||
if(SDL_LOADSO)
|
||||
set(SDL_LOADSO_DLOPEN 1)
|
||||
file(GLOB LOADSO_SOURCES ${SDL2_SOURCE_DIR}/src/loadso/dlopen/*.c)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${LOADSO_SOURCES})
|
||||
set(HAVE_SDL_LOADSO TRUE)
|
||||
endif()
|
||||
if(SDL_POWER)
|
||||
set(SDL_POWER_ANDROID 1)
|
||||
file(GLOB ANDROID_POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/android/*.c)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_POWER_SOURCES})
|
||||
set(HAVE_SDL_POWER TRUE)
|
||||
endif()
|
||||
if(SDL_TIMERS)
|
||||
set(SDL_TIMER_UNIX 1)
|
||||
file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/unix/*.c)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES})
|
||||
set(HAVE_SDL_TIMERS TRUE)
|
||||
endif()
|
||||
if(SDL_VIDEO)
|
||||
set(SDL_VIDEO_DRIVER_ANDROID 1)
|
||||
file(GLOB ANDROID_VIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/android/*.c)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_VIDEO_SOURCES})
|
||||
set(HAVE_SDL_VIDEO TRUE)
|
||||
|
||||
# Core stuff
|
||||
find_library(ANDROID_DL_LIBRARY dl)
|
||||
find_library(ANDROID_LOG_LIBRARY log)
|
||||
find_library(ANDROID_LIBRARY_LIBRARY android)
|
||||
list(APPEND EXTRA_LIBS ${ANDROID_DL_LIBRARY} ${ANDROID_LOG_LIBRARY} ${ANDROID_LIBRARY_LIBRARY})
|
||||
add_definitions(-DGL_GLEXT_PROTOTYPES)
|
||||
|
||||
#enable gles
|
||||
if(VIDEO_OPENGLES)
|
||||
set(SDL_VIDEO_OPENGL_EGL 1)
|
||||
set(HAVE_VIDEO_OPENGLES TRUE)
|
||||
set(SDL_VIDEO_OPENGL_ES2 1)
|
||||
set(SDL_VIDEO_RENDER_OGL_ES2 1)
|
||||
|
||||
find_library(OpenGLES1_LIBRARY GLESv1_CM)
|
||||
find_library(OpenGLES2_LIBRARY GLESv2)
|
||||
list(APPEND EXTRA_LIBS ${OpenGLES1_LIBRARY} ${OpenGLES2_LIBRARY})
|
||||
endif()
|
||||
|
||||
CHECK_C_SOURCE_COMPILES("
|
||||
#if defined(__ARM_ARCH) && __ARM_ARCH < 7
|
||||
#error Vulkan doesn't work on this configuration
|
||||
#endif
|
||||
int main()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
" VULKAN_PASSED_ANDROID_CHECKS)
|
||||
if(NOT VULKAN_PASSED_ANDROID_CHECKS)
|
||||
set(VIDEO_VULKAN OFF)
|
||||
message(STATUS "Vulkan doesn't work on this configuration")
|
||||
endif()
|
||||
endif()
|
||||
list(APPEND EXTRA_LDFLAGS "-Wl,--undefined=Java_org_libsdl_app_SDLActivity_nativeInit")
|
||||
|
||||
CheckPTHREAD()
|
||||
|
||||
endif()
|
||||
|
||||
# Platform-specific options and settings
|
||||
@@ -821,17 +935,17 @@ if(EMSCRIPTEN)
|
||||
set(SDL_VIDEO_RENDER_OGL_ES2 1)
|
||||
endif()
|
||||
endif()
|
||||
elseif(UNIX AND NOT APPLE)
|
||||
elseif(UNIX AND NOT APPLE AND NOT ANDROID)
|
||||
if(SDL_AUDIO)
|
||||
if(SYSV5 OR SOLARIS OR HPUX)
|
||||
set(SDL_AUDIO_DRIVER_SUNAUDIO 1)
|
||||
file(GLOB SUN_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/sun/*.c)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${SUN_AUDIO_SOURCES})
|
||||
set(HAVE_SDL_AUDIO TRUE)
|
||||
elseif(NETBSD OR OPENBSD)
|
||||
set(SDL_AUDIO_DRIVER_BSD 1)
|
||||
file(GLOB BSD_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/bsd/*.c)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${BSD_AUDIO_SOURCES})
|
||||
elseif(NETBSD)
|
||||
set(SDL_AUDIO_DRIVER_NETBSD 1)
|
||||
file(GLOB NETBSD_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/netbsd/*.c)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${NETBSD_AUDIO_SOURCES})
|
||||
set(HAVE_SDL_AUDIO TRUE)
|
||||
elseif(AIX)
|
||||
set(SDL_AUDIO_DRIVER_PAUDIO 1)
|
||||
@@ -841,12 +955,14 @@ elseif(UNIX AND NOT APPLE)
|
||||
endif()
|
||||
CheckOSS()
|
||||
CheckALSA()
|
||||
CheckJACK()
|
||||
CheckPulseAudio()
|
||||
CheckESD()
|
||||
CheckARTS()
|
||||
CheckNAS()
|
||||
CheckSNDIO()
|
||||
CheckFusionSound()
|
||||
CheckLibSampleRate()
|
||||
endif()
|
||||
|
||||
if(SDL_VIDEO)
|
||||
@@ -859,6 +975,12 @@ elseif(UNIX AND NOT APPLE)
|
||||
CheckOpenGLESX11()
|
||||
CheckWayland()
|
||||
CheckVivante()
|
||||
CheckKMSDRM()
|
||||
endif()
|
||||
|
||||
if(UNIX)
|
||||
file(GLOB CORE_UNIX_SOURCES ${SDL2_SOURCE_DIR}/src/core/unix/*.c)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${CORE_UNIX_SOURCES})
|
||||
endif()
|
||||
|
||||
if(LINUX)
|
||||
@@ -880,8 +1002,8 @@ elseif(UNIX AND NOT APPLE)
|
||||
ioctl(0, KDGKBENT, &kbe);
|
||||
}" HAVE_INPUT_KD)
|
||||
|
||||
file(GLOB CORE_SOURCES ${SDL2_SOURCE_DIR}/src/core/linux/*.c)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${CORE_SOURCES})
|
||||
file(GLOB CORE_LINUX_SOURCES ${SDL2_SOURCE_DIR}/src/core/linux/*.c)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${CORE_LINUX_SOURCES})
|
||||
|
||||
if(HAVE_INPUT_EVENTS)
|
||||
set(SDL_INPUT_LINUXEV 1)
|
||||
@@ -917,7 +1039,6 @@ elseif(UNIX AND NOT APPLE)
|
||||
endif()
|
||||
|
||||
check_include_file("fcitx/frontend.h" HAVE_FCITX_FRONTEND_H)
|
||||
|
||||
endif()
|
||||
|
||||
if(INPUT_TSLIB)
|
||||
@@ -934,7 +1055,7 @@ elseif(UNIX AND NOT APPLE)
|
||||
CheckUSBHID() # seems to be BSD specific - limit the test to BSD only?
|
||||
if(LINUX AND NOT ANDROID)
|
||||
set(SDL_JOYSTICK_LINUX 1)
|
||||
file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/linux/*.c)
|
||||
file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/linux/*.c ${SDL2_SOURCE_DIR}/src/joystick/steam/*.c)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES})
|
||||
set(HAVE_SDL_JOYSTICK TRUE)
|
||||
endif()
|
||||
@@ -1013,14 +1134,12 @@ elseif(WINDOWS)
|
||||
|
||||
if(MSVC)
|
||||
# Prevent codegen that would use the VC runtime libraries.
|
||||
add_definitions(/GS-)
|
||||
set_property(DIRECTORY . APPEND PROPERTY COMPILE_OPTIONS "/GS-")
|
||||
if(NOT ARCH_64)
|
||||
add_definitions(/arch:SSE)
|
||||
set_property(DIRECTORY . APPEND PROPERTY COMPILE_OPTIONS "/arch:SSE")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(SDL_LINK_DIR ${PARENT_SCOPE})
|
||||
|
||||
# Check for DirectX
|
||||
if(DIRECTX)
|
||||
if(DEFINED MSVC_VERSION AND NOT ${MSVC_VERSION} LESS 1700)
|
||||
@@ -1039,6 +1158,16 @@ elseif(WINDOWS)
|
||||
#include <windows.h>
|
||||
#include <xinput.h>
|
||||
int main(int argc, char **argv) { }" HAVE_XINPUT_H)
|
||||
check_c_source_compiles("
|
||||
#include <windows.h>
|
||||
#include <xinput.h>
|
||||
XINPUT_GAMEPAD_EX x1;
|
||||
int main(int argc, char **argv) { }" HAVE_XINPUT_GAMEPAD_EX)
|
||||
check_c_source_compiles("
|
||||
#include <windows.h>
|
||||
#include <xinput.h>
|
||||
XINPUT_STATE_EX s1;
|
||||
int main(int argc, char **argv) { }" HAVE_XINPUT_STATE_EX)
|
||||
else()
|
||||
check_include_file(xinput.h HAVE_XINPUT_H)
|
||||
endif()
|
||||
@@ -1049,20 +1178,20 @@ elseif(WINDOWS)
|
||||
check_include_file(dsound.h HAVE_DSOUND_H)
|
||||
check_include_file(dinput.h HAVE_DINPUT_H)
|
||||
check_include_file(xaudio2.h HAVE_XAUDIO2_H)
|
||||
check_include_file(mmdeviceapi.h HAVE_MMDEVICEAPI_H)
|
||||
check_include_file(audioclient.h HAVE_AUDIOCLIENT_H)
|
||||
check_include_file(dxgi.h HAVE_DXGI_H)
|
||||
if(HAVE_D3D_H OR HAVE_D3D11_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR HAVE_DINPUT_H OR HAVE_XAUDIO2_H)
|
||||
set(HAVE_DIRECTX TRUE)
|
||||
if(NOT CMAKE_COMPILER_IS_MINGW AND NOT USE_WINSDK_DIRECTX)
|
||||
# TODO: change $ENV{DXSDL_DIR} to get the path from the include checks
|
||||
set(SDL_LINK_DIR $ENV{DXSDK_DIR}\\lib\\${PROCESSOR_ARCH} ${SDL_LINK_DIR})
|
||||
link_directories($ENV{DXSDK_DIR}\\lib\\${PROCESSOR_ARCH})
|
||||
include_directories($ENV{DXSDK_DIR}\\Include)
|
||||
endif()
|
||||
endif()
|
||||
set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
|
||||
endif()
|
||||
|
||||
link_directories(${SDL_LINK_DIR})
|
||||
|
||||
if(SDL_AUDIO)
|
||||
set(SDL_AUDIO_DRIVER_WINMM 1)
|
||||
file(GLOB WINMM_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/winmm/*.c)
|
||||
@@ -1080,6 +1209,12 @@ elseif(WINDOWS)
|
||||
file(GLOB XAUDIO2_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/xaudio2/*.c)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${XAUDIO2_AUDIO_SOURCES})
|
||||
endif()
|
||||
|
||||
if(HAVE_AUDIOCLIENT_H AND HAVE_MMDEVICEAPI_H)
|
||||
set(SDL_AUDIO_DRIVER_WASAPI 1)
|
||||
file(GLOB WASAPI_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/wasapi/*.c)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${WASAPI_AUDIO_SOURCES})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(SDL_VIDEO)
|
||||
@@ -1211,15 +1346,25 @@ elseif(WINDOWS)
|
||||
list(APPEND SDL_LIBS "-lmingw32" "-lSDL2main" "-mwindows")
|
||||
endif()
|
||||
elseif(APPLE)
|
||||
# TODO: rework this for proper MacOS X, iOS and Darwin support
|
||||
# TODO: rework this all for proper MacOS X, iOS and Darwin support
|
||||
|
||||
# We always need these libs on macOS at the moment.
|
||||
# !!! FIXME: we need Carbon for some very old API calls in
|
||||
# !!! FIXME: src/video/cocoa/SDL_cocoakeyboard.c, but we should figure out
|
||||
# !!! FIXME: how to dump those.
|
||||
if(NOT IOS)
|
||||
set(SDL_FRAMEWORK_COCOA 1)
|
||||
set(SDL_FRAMEWORK_CARBON 1)
|
||||
endif()
|
||||
|
||||
# Requires the darwin file implementation
|
||||
if(SDL_FILE)
|
||||
file(GLOB EXTRA_SOURCES ${SDL2_SOURCE_DIR}/src/file/cocoa/*.m)
|
||||
set(SOURCE_FILES ${EXTRA_SOURCES} ${SOURCE_FILES})
|
||||
# !!! FIXME: modern CMake doesn't need "LANGUAGE C" for Objective-C.
|
||||
set_source_files_properties(${EXTRA_SOURCES} PROPERTIES LANGUAGE C)
|
||||
set(HAVE_SDL_FILE TRUE)
|
||||
set(SDL_FRAMEWORK_COCOA 1)
|
||||
# !!! FIXME: why is COREVIDEO inside this if() block?
|
||||
set(SDL_FRAMEWORK_COREVIDEO 1)
|
||||
else()
|
||||
message_error("SDL_FILE must be enabled to build on MacOS X")
|
||||
@@ -1228,6 +1373,8 @@ elseif(APPLE)
|
||||
if(SDL_AUDIO)
|
||||
set(SDL_AUDIO_DRIVER_COREAUDIO 1)
|
||||
file(GLOB AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/coreaudio/*.m)
|
||||
# !!! FIXME: modern CMake doesn't need "LANGUAGE C" for Objective-C.
|
||||
set_source_files_properties(${AUDIO_SOURCES} PROPERTIES LANGUAGE C)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${AUDIO_SOURCES})
|
||||
set(HAVE_SDL_AUDIO TRUE)
|
||||
set(SDL_FRAMEWORK_COREAUDIO 1)
|
||||
@@ -1237,7 +1384,7 @@ elseif(APPLE)
|
||||
if(SDL_JOYSTICK)
|
||||
set(SDL_JOYSTICK_IOKIT 1)
|
||||
if (IOS)
|
||||
file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/iphoneos/*.m)
|
||||
file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/iphoneos/*.m ${SDL2_SOURCE_DIR}/src/joystick/steam/*.c)
|
||||
else()
|
||||
file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/darwin/*.c)
|
||||
endif()
|
||||
@@ -1250,7 +1397,7 @@ elseif(APPLE)
|
||||
if(SDL_HAPTIC)
|
||||
set(SDL_HAPTIC_IOKIT 1)
|
||||
if (IOS)
|
||||
file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/dummy/*.c)
|
||||
file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/dummy/*.c)
|
||||
set(SDL_HAPTIC_DUMMY 1)
|
||||
else()
|
||||
file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/darwin/*.c)
|
||||
@@ -1273,7 +1420,6 @@ elseif(APPLE)
|
||||
endif()
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${POWER_SOURCES})
|
||||
set(HAVE_SDL_POWER TRUE)
|
||||
set(SDL_FRAMEWORK_CARBON 1)
|
||||
set(SDL_FRAMEWORK_IOKIT 1)
|
||||
endif()
|
||||
|
||||
@@ -1287,6 +1433,7 @@ elseif(APPLE)
|
||||
if(SDL_FILESYSTEM)
|
||||
set(SDL_FILESYSTEM_COCOA 1)
|
||||
file(GLOB FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/cocoa/*.m)
|
||||
# !!! FIXME: modern CMake doesn't need "LANGUAGE C" for Objective-C.
|
||||
set_source_files_properties(${FILESYSTEM_SOURCES} PROPERTIES LANGUAGE C)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${FILESYSTEM_SOURCES})
|
||||
set(HAVE_SDL_FILESYSTEM TRUE)
|
||||
@@ -1372,6 +1519,10 @@ elseif(HAIKU)
|
||||
CheckPTHREAD()
|
||||
endif()
|
||||
|
||||
if(VIDEO_VULKAN)
|
||||
set(SDL_VIDEO_VULKAN 1)
|
||||
endif()
|
||||
|
||||
# Dummies
|
||||
# configure.in does it differently:
|
||||
# if not have X
|
||||
@@ -1538,12 +1689,14 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
|
||||
|
||||
# Always build SDLmain
|
||||
add_library(SDL2main STATIC ${SDLMAIN_SOURCES})
|
||||
target_include_directories(SDL2main PUBLIC $<INSTALL_INTERFACE:include>)
|
||||
set(_INSTALL_LIBS "SDL2main")
|
||||
|
||||
if(SDL_SHARED)
|
||||
add_library(SDL2 SHARED ${SOURCE_FILES} ${VERSION_SOURCES})
|
||||
install(TARGETS SDL2 RUNTIME DESTINATION . LIBRARY DESTINATION .)
|
||||
if(UNIX)
|
||||
if(APPLE)
|
||||
set_target_properties(SDL2 PROPERTIES MACOSX_RPATH 1)
|
||||
elseif(UNIX AND NOT ANDROID)
|
||||
set_target_properties(SDL2 PROPERTIES
|
||||
VERSION ${LT_VERSION}
|
||||
SOVERSION ${LT_REVISION}
|
||||
@@ -1554,7 +1707,7 @@ if(SDL_SHARED)
|
||||
SOVERSION ${LT_REVISION}
|
||||
OUTPUT_NAME "SDL2")
|
||||
endif()
|
||||
if(MSVC)
|
||||
if(MSVC AND NOT LIBC)
|
||||
# Don't try to link with the default set of libraries.
|
||||
set_target_properties(SDL2 PROPERTIES LINK_FLAGS_RELEASE "/NODEFAULTLIB")
|
||||
set_target_properties(SDL2 PROPERTIES LINK_FLAGS_DEBUG "/NODEFAULTLIB")
|
||||
@@ -1562,15 +1715,21 @@ if(SDL_SHARED)
|
||||
endif()
|
||||
set(_INSTALL_LIBS "SDL2" ${_INSTALL_LIBS})
|
||||
target_link_libraries(SDL2 ${EXTRA_LIBS} ${EXTRA_LDFLAGS})
|
||||
target_include_directories(SDL2 PUBLIC include)
|
||||
target_include_directories(SDL2 PUBLIC $<INSTALL_INTERFACE:include>)
|
||||
endif()
|
||||
|
||||
if(SDL_STATIC)
|
||||
set (BUILD_SHARED_LIBS FALSE)
|
||||
add_library(SDL2-static STATIC ${SOURCE_FILES})
|
||||
set_target_properties(SDL2-static PROPERTIES OUTPUT_NAME "SDL2")
|
||||
if (NOT SDL_SHARED OR NOT WIN32)
|
||||
set_target_properties(SDL2-static PROPERTIES OUTPUT_NAME "SDL2")
|
||||
# Note: Apparently, OUTPUT_NAME must really be unique; even when
|
||||
# CMAKE_IMPORT_LIBRARY_SUFFIX or the like are given. Otherwise
|
||||
# the static build may race with the import lib and one will get
|
||||
# clobbered, when the suffix is realized via subsequent rename.
|
||||
endif()
|
||||
set_target_properties(SDL2-static PROPERTIES POSITION_INDEPENDENT_CODE ${SDL_STATIC_PIC})
|
||||
if(MSVC)
|
||||
if(MSVC AND NOT LIBC)
|
||||
set_target_properties(SDL2-static PROPERTIES LINK_FLAGS_RELEASE "/NODEFAULTLIB")
|
||||
set_target_properties(SDL2-static PROPERTIES LINK_FLAGS_DEBUG "/NODEFAULTLIB")
|
||||
set_target_properties(SDL2-static PROPERTIES STATIC_LIBRARY_FLAGS "/NODEFAULTLIB")
|
||||
@@ -1579,19 +1738,43 @@ if(SDL_STATIC)
|
||||
# libraries - do we need to consider this?
|
||||
set(_INSTALL_LIBS "SDL2-static" ${_INSTALL_LIBS})
|
||||
target_link_libraries(SDL2-static ${EXTRA_LIBS} ${EXTRA_LDFLAGS})
|
||||
target_include_directories(SDL2-static PUBLIC $<INSTALL_INTERFACE:include>)
|
||||
endif()
|
||||
|
||||
##### Installation targets #####
|
||||
|
||||
if(MEGA)
|
||||
return()
|
||||
endif()
|
||||
|
||||
install(TARGETS ${_INSTALL_LIBS}
|
||||
install(TARGETS ${_INSTALL_LIBS} EXPORT SDL2Targets
|
||||
LIBRARY DESTINATION "lib${LIB_SUFFIX}"
|
||||
ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
|
||||
RUNTIME DESTINATION bin)
|
||||
|
||||
##### Export files #####
|
||||
if (APPLE)
|
||||
set(PKG_PREFIX "SDL2.framework/Resources")
|
||||
elseif (WINDOWS)
|
||||
set(PKG_PREFIX "cmake")
|
||||
else ()
|
||||
set(PKG_PREFIX "lib/cmake/SDL2")
|
||||
endif ()
|
||||
|
||||
include(CMakePackageConfigHelpers)
|
||||
write_basic_package_version_file("${CMAKE_BINARY_DIR}/SDL2ConfigVersion.cmake"
|
||||
VERSION ${SDL_VERSION}
|
||||
COMPATIBILITY AnyNewerVersion
|
||||
)
|
||||
|
||||
install(EXPORT SDL2Targets
|
||||
FILE SDL2Targets.cmake
|
||||
NAMESPACE SDL2::
|
||||
DESTINATION ${PKG_PREFIX}
|
||||
)
|
||||
install(
|
||||
FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/SDL2Config.cmake
|
||||
${CMAKE_BINARY_DIR}/SDL2ConfigVersion.cmake
|
||||
DESTINATION ${PKG_PREFIX}
|
||||
COMPONENT Devel
|
||||
)
|
||||
|
||||
file(GLOB INCLUDE_FILES ${SDL2_SOURCE_DIR}/include/*.h)
|
||||
file(GLOB BIN_INCLUDE_FILES ${SDL2_BINARY_DIR}/include/*.h)
|
||||
foreach(_FNAME ${BIN_INCLUDE_FILES})
|
||||
@@ -1627,10 +1810,12 @@ endif()
|
||||
|
||||
##### Uninstall target #####
|
||||
|
||||
configure_file(
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
||||
IMMEDIATE @ONLY)
|
||||
if(NOT TARGET uninstall)
|
||||
configure_file(
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
||||
IMMEDIATE @ONLY)
|
||||
|
||||
add_custom_target(uninstall
|
||||
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
|
||||
add_custom_target(uninstall
|
||||
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
|
||||
endif()
|
||||
|
||||
Reference in New Issue
Block a user