Atlas - CMakeLists.txt

Home / ext / SDL2 Lines: 1 | Size: 64878 bytes [Download] [Show on GitHub] [Search similar files] [Raw] [Raw (proxy)]
[FILE BEGIN]
1if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) 2 message(FATAL_ERROR "Prevented in-tree built. Please create a build directory outside of the SDL source code and call cmake from there") 3endif() 4 5cmake_minimum_required(VERSION 2.8.11) 6project(SDL2 C) 7 8# !!! FIXME: this should probably do "MACOSX_RPATH ON" as a target property 9# !!! FIXME: for the SDL2 shared library (so you get an 10# !!! FIXME: install_name ("soname") of "@rpath/libSDL-whatever.dylib" 11# !!! FIXME: instead of "/usr/local/lib/libSDL-whatever.dylib"), but I'm 12# !!! FIXME: punting for now and leaving the existing behavior. Until this 13# !!! FIXME: properly resolved, this line silences a warning in CMake 3.0+. 14# !!! FIXME: remove it and this comment entirely once the problem is 15# !!! FIXME: properly resolved. 16#cmake_policy(SET CMP0042 OLD) 17 18include(CheckFunctionExists) 19include(CheckLibraryExists) 20include(CheckIncludeFiles) 21include(CheckIncludeFile) 22include(CheckSymbolExists) 23include(CheckCSourceCompiles) 24include(CheckCSourceRuns) 25include(CheckCCompilerFlag) 26include(CheckTypeSize) 27include(CheckStructHasMember) 28include(CMakeDependentOption) 29include(FindPkgConfig) 30include(GNUInstallDirs) 31set(CMAKE_MODULE_PATH "${SDL2_SOURCE_DIR}/cmake") 32include(${SDL2_SOURCE_DIR}/cmake/macros.cmake) 33include(${SDL2_SOURCE_DIR}/cmake/sdlchecks.cmake) 34 35# General settings 36# Edit include/SDL_version.h and change the version, then: 37# SDL_MICRO_VERSION += 1; 38# SDL_INTERFACE_AGE += 1; 39# SDL_BINARY_AGE += 1; 40# if any functions have been added, set SDL_INTERFACE_AGE to 0. 41# if backwards compatibility has been broken, 42# set SDL_BINARY_AGE and SDL_INTERFACE_AGE to 0. 43set(SDL_MAJOR_VERSION 2) 44set(SDL_MINOR_VERSION 0) 45set(SDL_MICRO_VERSION 8) 46set(SDL_INTERFACE_AGE 0) 47set(SDL_BINARY_AGE 8) 48set(SDL_VERSION "${SDL_MAJOR_VERSION}.${SDL_MINOR_VERSION}.${SDL_MICRO_VERSION}") 49 50# Set defaults preventing destination file conflicts 51set(SDL_CMAKE_DEBUG_POSTFIX "d" 52 CACHE STRING "Name suffix for debug builds") 53 54mark_as_advanced(CMAKE_IMPORT_LIBRARY_SUFFIX SDL_CMAKE_DEBUG_POSTFIX) 55 56# Calculate a libtool-like version number 57math(EXPR LT_CURRENT "${SDL_MICRO_VERSION} - ${SDL_INTERFACE_AGE}") 58math(EXPR LT_AGE "${SDL_BINARY_AGE} - ${SDL_INTERFACE_AGE}") 59math(EXPR LT_MAJOR "${LT_CURRENT}- ${LT_AGE}") 60set(LT_REVISION "${SDL_INTERFACE_AGE}") 61set(LT_RELEASE "${SDL_MAJOR_VERSION}.${SDL_MINOR_VERSION}") 62set(LT_VERSION "${LT_MAJOR}.${LT_AGE}.${LT_REVISION}") 63 64message(STATUS "${LT_VERSION} :: ${LT_AGE} :: ${LT_REVISION} :: ${LT_CURRENT} :: ${LT_RELEASE}") 65 66# General settings & flags 67set(LIBRARY_OUTPUT_DIRECTORY "build") 68# Check for 64 or 32 bit 69set(SIZEOF_VOIDP ${CMAKE_SIZEOF_VOID_P}) 70if(CMAKE_SIZEOF_VOID_P EQUAL 8) 71 set(ARCH_64 TRUE) 72 set(PROCESSOR_ARCH "x64") 73else() 74 set(ARCH_64 FALSE) 75 set(PROCESSOR_ARCH "x86") 76endif() 77set(LIBNAME SDL2) 78if(NOT LIBTYPE) 79 set(LIBTYPE SHARED) 80endif() 81 82# Get the platform 83if(WIN32) 84 if(NOT WINDOWS) 85 set(WINDOWS TRUE) 86 endif() 87elseif(UNIX AND NOT APPLE) 88 if(CMAKE_SYSTEM_NAME MATCHES ".*Linux") 89 set(LINUX TRUE) 90 elseif(CMAKE_SYSTEM_NAME MATCHES "kFreeBSD.*") 91 set(FREEBSD TRUE) 92 elseif(CMAKE_SYSTEM_NAME MATCHES "kNetBSD.*|NetBSD.*") 93 set(NETBSD TRUE) 94 elseif(CMAKE_SYSTEM_NAME MATCHES "kOpenBSD.*|OpenBSD.*") 95 set(OPENBSD TRUE) 96 elseif(CMAKE_SYSTEM_NAME MATCHES ".*GNU.*") 97 set(GNU TRUE) 98 elseif(CMAKE_SYSTEM_NAME MATCHES ".*BSDI.*") 99 set(BSDI TRUE) 100 elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly.*|FreeBSD") 101 set(FREEBSD TRUE) 102 elseif(CMAKE_SYSTEM_NAME MATCHES "SYSV5.*") 103 set(SYSV5 TRUE) 104 elseif(CMAKE_SYSTEM_NAME MATCHES "Solaris.*") 105 set(SOLARIS TRUE) 106 elseif(CMAKE_SYSTEM_NAME MATCHES "HP-UX.*") 107 set(HPUX TRUE) 108 elseif(CMAKE_SYSTEM_NAME MATCHES "AIX.*") 109 set(AIX TRUE) 110 elseif(CMAKE_SYSTEM_NAME MATCHES "Minix.*") 111 set(MINIX TRUE) 112 endif() 113elseif(APPLE) 114 if(CMAKE_SYSTEM_NAME MATCHES ".*Darwin.*") 115 set(DARWIN TRUE) 116 elseif(CMAKE_SYSTEM_NAME MATCHES ".*MacOS.*") 117 set(MACOSX TRUE) 118 endif() 119 # TODO: iOS? 120elseif(CMAKE_SYSTEM_NAME MATCHES "BeOS.*") 121 message_error("BeOS support has been removed as of SDL 2.0.2.") 122elseif(CMAKE_SYSTEM_NAME MATCHES "Haiku.*") 123 set(HAIKU TRUE) 124endif() 125 126# Don't mistake osx for unix 127if(UNIX AND NOT APPLE) 128 set(UNIX_SYS ON) 129else() 130 set(UNIX_SYS OFF) 131endif() 132 133if(UNIX OR APPLE) 134 set(UNIX_OR_MAC_SYS ON) 135else() 136 set(UNIX_OR_MAC_SYS OFF) 137endif() 138 139if (UNIX_OR_MAC_SYS AND NOT EMSCRIPTEN) # JavaScript does not yet have threading support, so disable pthreads when building for Emscripten. 140 set(SDL_PTHREADS_ENABLED_BY_DEFAULT ON) 141else() 142 set(SDL_PTHREADS_ENABLED_BY_DEFAULT OFF) 143endif() 144 145# Default option knobs 146if(APPLE OR ARCH_64) 147 if(NOT "${CMAKE_OSX_ARCHITECTURES}" MATCHES "arm") 148 set(OPT_DEF_SSEMATH ON) 149 endif() 150endif() 151if(UNIX OR MINGW OR MSYS) 152 set(OPT_DEF_LIBC ON) 153endif() 154 155# Compiler info 156if(CMAKE_COMPILER_IS_GNUCC) 157 set(USE_GCC TRUE) 158 set(OPT_DEF_ASM TRUE) 159elseif(CMAKE_C_COMPILER_ID MATCHES "Clang") 160 set(USE_CLANG TRUE) 161 set(OPT_DEF_ASM TRUE) 162elseif(MSVC_VERSION GREATER 1400) # VisualStudio 8.0+ 163 set(OPT_DEF_ASM TRUE) 164 #set(CMAKE_C_FLAGS "/ZI /WX- / 165else() 166 set(OPT_DEF_ASM FALSE) 167endif() 168 169if(USE_GCC OR USE_CLANG) 170 set(OPT_DEF_GCC_ATOMICS ON) 171endif() 172 173# Default flags, if not set otherwise 174if("$ENV{CFLAGS}" STREQUAL "") 175 if(CMAKE_BUILD_TYPE STREQUAL "") 176 if(USE_GCC OR USE_CLANG) 177 set(CMAKE_C_FLAGS "-g -O3") 178 endif() 179 endif() 180else() 181 set(CMAKE_C_FLAGS "$ENV{CFLAGS}") 182 list(APPEND EXTRA_CFLAGS "$ENV{CFLAGS}") 183endif() 184if(NOT ("$ENV{CFLAGS}" STREQUAL "")) # Hackish, but does the trick on Win32 185 list(APPEND EXTRA_LDFLAGS "$ENV{LDFLAGS}") 186endif() 187 188if(MSVC) 189 option(FORCE_STATIC_VCRT "Force /MT for static VC runtimes" OFF) 190 if(FORCE_STATIC_VCRT) 191 foreach(flag_var 192 CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE 193 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO) 194 if(${flag_var} MATCHES "/MD") 195 string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") 196 endif() 197 endforeach() 198 endif() 199 200 # Make sure /RTC1 is disabled, otherwise it will use functions from the CRT 201 foreach(flag_var 202 CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE 203 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO) 204 string(REGEX REPLACE "/RTC(su|[1su])" "" ${flag_var} "${${flag_var}}") 205 endforeach(flag_var) 206endif() 207 208# Those are used for pkg-config and friends, so that the SDL2.pc, sdl2-config, 209# etc. are created correctly. 210set(SDL_LIBS "-lSDL2") 211set(SDL_CFLAGS "") 212 213# When building shared lib for Windows with MinGW, 214# avoid the DLL having a "lib" prefix 215if(WINDOWS) 216 set(CMAKE_SHARED_LIBRARY_PREFIX "") 217endif() 218 219# Emscripten toolchain has a nonempty default value for this, and the checks 220# in this file need to change that, so remember the original value, and 221# restore back to that afterwards. For check_function_exists() to work in 222# Emscripten, this value must be at its default value. 223set(ORIG_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) 224 225if(CYGWIN) 226 # We build SDL on cygwin without the UNIX emulation layer 227 include_directories("-I/usr/include/mingw") 228 set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -mno-cygwin") 229 check_c_source_compiles("int main(int argc, char **argv) {}" 230 HAVE_GCC_NO_CYGWIN) 231 set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) 232 if(HAVE_GCC_NO_CYGWIN) 233 list(APPEND EXTRA_LDFLAGS "-mno-cygwin") 234 list(APPEND SDL_LIBS "-mno-cygwin") 235 endif() 236 set(SDL_CFLAGS "${SDL_CFLAGS} -I/usr/include/mingw") 237endif() 238 239add_definitions(-DUSING_GENERATED_CONFIG_H) 240# General includes 241include_directories(${SDL2_BINARY_DIR}/include ${SDL2_SOURCE_DIR}/include) 242if(USE_GCC OR USE_CLANG) 243 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -idirafter ${SDL2_SOURCE_DIR}/src/video/khronos") 244else() 245 include_directories(${SDL2_SOURCE_DIR}/src/video/khronos) 246endif() 247 248# All these ENABLED_BY_DEFAULT vars will default to ON if not specified, so 249# you only need to have a platform override them if they are disabling. 250set(OPT_DEF_ASM TRUE) 251if(EMSCRIPTEN) 252 # Set up default values for the currently supported set of subsystems: 253 # Emscripten/Javascript does not have assembly support, a dynamic library 254 # loading architecture, low-level CPU inspection or multithreading. 255 set(OPT_DEF_ASM FALSE) 256 set(SDL_SHARED_ENABLED_BY_DEFAULT OFF) 257 set(SDL_ATOMIC_ENABLED_BY_DEFAULT OFF) 258 set(SDL_THREADS_ENABLED_BY_DEFAULT OFF) 259 set(SDL_LOADSO_ENABLED_BY_DEFAULT OFF) 260 set(SDL_CPUINFO_ENABLED_BY_DEFAULT OFF) 261 set(SDL_DLOPEN_ENABLED_BY_DEFAULT OFF) 262endif() 263 264if (NOT DEFINED SDL_SHARED_ENABLED_BY_DEFAULT) 265 set(SDL_SHARED_ENABLED_BY_DEFAULT ON) 266endif() 267 268set(SDL_SUBSYSTEMS 269 Atomic Audio Video Render Events Joystick Haptic Power Threads Timers 270 File Loadso CPUinfo Filesystem Dlopen Sensor) 271foreach(_SUB ${SDL_SUBSYSTEMS}) 272 string(TOUPPER ${_SUB} _OPT) 273 if (NOT DEFINED SDL_${_OPT}_ENABLED_BY_DEFAULT) 274 set(SDL_${_OPT}_ENABLED_BY_DEFAULT ON) 275 endif() 276 option(SDL_${_OPT} "Enable the ${_SUB} subsystem" ${SDL_${_OPT}_ENABLED_BY_DEFAULT}) 277endforeach() 278 279option_string(ASSERTIONS "Enable internal sanity checks (auto/disabled/release/enabled/paranoid)" "auto") 280#set_option(DEPENDENCY_TRACKING "Use gcc -MMD -MT dependency tracking" ON) 281set_option(LIBC "Use the system C library" ${OPT_DEF_LIBC}) 282set_option(GCC_ATOMICS "Use gcc builtin atomics" ${OPT_DEF_GCC_ATOMICS}) 283set_option(ASSEMBLY "Enable assembly routines" ${OPT_DEF_ASM}) 284set_option(SSEMATH "Allow GCC to use SSE floating point math" ${OPT_DEF_SSEMATH}) 285set_option(MMX "Use MMX assembly routines" ${OPT_DEF_ASM}) 286set_option(3DNOW "Use 3Dnow! MMX assembly routines" ${OPT_DEF_ASM}) 287set_option(SSE "Use SSE assembly routines" ${OPT_DEF_ASM}) 288set_option(SSE2 "Use SSE2 assembly routines" ${OPT_DEF_SSEMATH}) 289set_option(SSE3 "Use SSE3 assembly routines" ${OPT_DEF_SSEMATH}) 290set_option(ALTIVEC "Use Altivec assembly routines" ${OPT_DEF_ASM}) 291set_option(DISKAUDIO "Support the disk writer audio driver" ON) 292set_option(DUMMYAUDIO "Support the dummy audio driver" ON) 293set_option(VIDEO_DIRECTFB "Use DirectFB video driver" OFF) 294dep_option(DIRECTFB_SHARED "Dynamically load directfb support" ON "VIDEO_DIRECTFB" OFF) 295set_option(VIDEO_DUMMY "Use dummy video driver" ON) 296set_option(VIDEO_OPENGL "Include OpenGL support" ON) 297set_option(VIDEO_OPENGLES "Include OpenGL ES support" ON) 298set_option(PTHREADS "Use POSIX threads for multi-threading" ${SDL_PTHREADS_ENABLED_BY_DEFAULT}) 299dep_option(PTHREADS_SEM "Use pthread semaphores" ON "PTHREADS" OFF) 300set_option(SDL_DLOPEN "Use dlopen for shared object loading" ${SDL_DLOPEN_ENABLED_BY_DEFAULT}) 301set_option(OSS "Support the OSS audio API" ${UNIX_SYS}) 302set_option(ALSA "Support the ALSA audio API" ${UNIX_SYS}) 303dep_option(ALSA_SHARED "Dynamically load ALSA audio support" ON "ALSA" OFF) 304set_option(JACK "Support the JACK audio API" ${UNIX_SYS}) 305dep_option(JACK_SHARED "Dynamically load JACK audio support" ON "JACK" OFF) 306set_option(ESD "Support the Enlightened Sound Daemon" ${UNIX_SYS}) 307dep_option(ESD_SHARED "Dynamically load ESD audio support" ON "ESD" OFF) 308set_option(PULSEAUDIO "Use PulseAudio" ${UNIX_SYS}) 309dep_option(PULSEAUDIO_SHARED "Dynamically load PulseAudio support" ON "PULSEAUDIO" OFF) 310set_option(ARTS "Support the Analog Real Time Synthesizer" ${UNIX_SYS}) 311dep_option(ARTS_SHARED "Dynamically load aRts audio support" ON "ARTS" OFF) 312set_option(NAS "Support the NAS audio API" ${UNIX_SYS}) 313set_option(NAS_SHARED "Dynamically load NAS audio API" ${UNIX_SYS}) 314set_option(SNDIO "Support the sndio audio API" ${UNIX_SYS}) 315set_option(FUSIONSOUND "Use FusionSound audio driver" OFF) 316dep_option(FUSIONSOUND_SHARED "Dynamically load fusionsound audio support" ON "FUSIONSOUND" OFF) 317set_option(LIBSAMPLERATE "Use libsamplerate for audio rate conversion" ${UNIX_SYS}) 318dep_option(LIBSAMPLERATE_SHARED "Dynamically load libsamplerate" ON "LIBSAMPLERATE" OFF) 319set_option(RPATH "Use an rpath when linking SDL" ${UNIX_SYS}) 320set_option(CLOCK_GETTIME "Use clock_gettime() instead of gettimeofday()" OFF) 321set_option(INPUT_TSLIB "Use the Touchscreen library for input" ${UNIX_SYS}) 322set_option(VIDEO_X11 "Use X11 video driver" ${UNIX_SYS}) 323set_option(VIDEO_WAYLAND "Use Wayland video driver" ${UNIX_SYS}) 324dep_option(WAYLAND_SHARED "Dynamically load Wayland support" ON "VIDEO_WAYLAND" OFF) 325dep_option(VIDEO_WAYLAND_QT_TOUCH "QtWayland server support for Wayland video driver" ON "VIDEO_WAYLAND" OFF) 326set_option(VIDEO_MIR "Use Mir video driver" ${UNIX_SYS}) 327dep_option(MIR_SHARED "Dynamically load Mir support" ON "VIDEO_MIR" OFF) 328set_option(VIDEO_RPI "Use Raspberry Pi video driver" ${UNIX_SYS}) 329dep_option(X11_SHARED "Dynamically load X11 support" ON "VIDEO_X11" OFF) 330set(SDL_X11_OPTIONS Xcursor Xinerama XInput Xrandr Xscrnsaver XShape Xvm) 331foreach(_SUB ${SDL_X11_OPTIONS}) 332 string(TOUPPER "VIDEO_X11_${_SUB}" _OPT) 333 dep_option(${_OPT} "Enable ${_SUB} support" ON "VIDEO_X11" OFF) 334endforeach() 335set_option(VIDEO_COCOA "Use Cocoa video driver" ${APPLE}) 336set_option(DIRECTX "Use DirectX for Windows audio/video" ${WINDOWS}) 337dep_option(WASAPI "Use the Windows WASAPI audio driver" ON "DIRECTX" OFF) 338set_option(RENDER_D3D "Enable the Direct3D render driver" ${WINDOWS}) 339set_option(VIDEO_VIVANTE "Use Vivante EGL video driver" ${UNIX_SYS}) 340dep_option(VIDEO_VULKAN "Enable Vulkan support" ON "ANDROID OR APPLE OR LINUX OR WINDOWS" OFF) 341set_option(VIDEO_KMSDRM "Use KMS DRM video driver" ${UNIX_SYS}) 342dep_option(KMSDRM_SHARED "Dynamically load KMS DRM support" ON "VIDEO_KMSDRM" OFF) 343 344# TODO: We should (should we?) respect cmake's ${BUILD_SHARED_LIBS} flag here 345# The options below are for compatibility to configure's default behaviour. 346set(SDL_SHARED ${SDL_SHARED_ENABLED_BY_DEFAULT} CACHE BOOL "Build a shared version of the library") 347set(SDL_STATIC ON CACHE BOOL "Build a static version of the library") 348 349dep_option(SDL_STATIC_PIC "Static version of the library should be built with Position Independent Code" OFF "SDL_STATIC" OFF) 350set_option(SDL_TEST "Build the test directory" OFF) 351 352# General source files 353file(GLOB SOURCE_FILES 354 ${SDL2_SOURCE_DIR}/src/*.c 355 ${SDL2_SOURCE_DIR}/src/atomic/*.c 356 ${SDL2_SOURCE_DIR}/src/audio/*.c 357 ${SDL2_SOURCE_DIR}/src/cpuinfo/*.c 358 ${SDL2_SOURCE_DIR}/src/dynapi/*.c 359 ${SDL2_SOURCE_DIR}/src/events/*.c 360 ${SDL2_SOURCE_DIR}/src/file/*.c 361 ${SDL2_SOURCE_DIR}/src/libm/*.c 362 ${SDL2_SOURCE_DIR}/src/render/*.c 363 ${SDL2_SOURCE_DIR}/src/render/*/*.c 364 ${SDL2_SOURCE_DIR}/src/stdlib/*.c 365 ${SDL2_SOURCE_DIR}/src/thread/*.c 366 ${SDL2_SOURCE_DIR}/src/timer/*.c 367 ${SDL2_SOURCE_DIR}/src/video/*.c 368 ${SDL2_SOURCE_DIR}/src/video/yuv2rgb/*.c) 369 370 371if(ASSERTIONS STREQUAL "auto") 372 # Do nada - use optimization settings to determine the assertion level 373elseif(ASSERTIONS STREQUAL "disabled") 374 set(SDL_DEFAULT_ASSERT_LEVEL 0) 375elseif(ASSERTIONS STREQUAL "release") 376 set(SDL_DEFAULT_ASSERT_LEVEL 1) 377elseif(ASSERTIONS STREQUAL "enabled") 378 set(SDL_DEFAULT_ASSERT_LEVEL 2) 379elseif(ASSERTIONS STREQUAL "paranoid") 380 set(SDL_DEFAULT_ASSERT_LEVEL 3) 381else() 382 message_error("unknown assertion level") 383endif() 384set(HAVE_ASSERTIONS ${ASSERTIONS}) 385 386# Compiler option evaluation 387if(USE_GCC OR USE_CLANG) 388 # Check for -Wall first, so later things can override pieces of it. 389 check_c_compiler_flag(-Wall HAVE_GCC_WALL) 390 if(HAVE_GCC_WALL) 391 list(APPEND EXTRA_CFLAGS "-Wall") 392 if(HAIKU) 393 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-multichar") 394 endif() 395 endif() 396 397 check_c_compiler_flag(-Wdeclaration-after-statement HAVE_GCC_WDECLARATION_AFTER_STATEMENT) 398 if(HAVE_GCC_WDECLARATION_AFTER_STATEMENT) 399 check_c_compiler_flag(-Werror=declaration-after-statement HAVE_GCC_WERROR_DECLARATION_AFTER_STATEMENT) 400 if(HAVE_GCC_WERROR_DECLARATION_AFTER_STATEMENT) 401 list(APPEND EXTRA_CFLAGS "-Werror=declaration-after-statement") 402 endif() 403 list(APPEND EXTRA_CFLAGS "-Wdeclaration-after-statement") 404 endif() 405 406 if(DEPENDENCY_TRACKING) 407 check_c_source_compiles(" 408 #if !defined(__GNUC__) || __GNUC__ < 3 409 #error Dependency tracking requires GCC 3.0 or newer 410 #endif 411 int main(int argc, char **argv) { }" HAVE_DEPENDENCY_TRACKING) 412 endif() 413 414 if(GCC_ATOMICS) 415 check_c_source_compiles("int main(int argc, char **argv) { 416 int a; 417 void *x, *y, *z; 418 __sync_lock_test_and_set(&a, 4); 419 __sync_lock_test_and_set(&x, y); 420 __sync_fetch_and_add(&a, 1); 421 __sync_bool_compare_and_swap(&a, 5, 10); 422 __sync_bool_compare_and_swap(&x, y, z); }" HAVE_GCC_ATOMICS) 423 if(NOT HAVE_GCC_ATOMICS) 424 check_c_source_compiles("int main(int argc, char **argv) { 425 int a; 426 __sync_lock_test_and_set(&a, 1); 427 __sync_lock_release(&a); }" HAVE_GCC_SYNC_LOCK_TEST_AND_SET) 428 endif() 429 endif() 430 431 set(CMAKE_REQUIRED_FLAGS "-mpreferred-stack-boundary=2") 432 check_c_source_compiles("int x = 0; int main(int argc, char **argv) {}" 433 HAVE_GCC_PREFERRED_STACK_BOUNDARY) 434 set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) 435 436 set(CMAKE_REQUIRED_FLAGS "-fvisibility=hidden -Werror") 437 check_c_source_compiles(" 438 #if !defined(__GNUC__) || __GNUC__ < 4 439 #error SDL only uses visibility attributes in GCC 4 or newer 440 #endif 441 int main(int argc, char **argv) {}" HAVE_GCC_FVISIBILITY) 442 if(HAVE_GCC_FVISIBILITY) 443 list(APPEND EXTRA_CFLAGS "-fvisibility=hidden") 444 endif() 445 set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) 446 447 check_c_compiler_flag(-Wshadow HAVE_GCC_WSHADOW) 448 if(HAVE_GCC_WSHADOW) 449 list(APPEND EXTRA_CFLAGS "-Wshadow") 450 endif() 451 452 if(APPLE) 453 list(APPEND EXTRA_LDFLAGS "-Wl,-undefined,error") 454 else() 455 set(CMAKE_REQUIRED_FLAGS "-Wl,--no-undefined") 456 check_c_compiler_flag("" HAVE_NO_UNDEFINED) 457 set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) 458 if(HAVE_NO_UNDEFINED) 459 list(APPEND EXTRA_LDFLAGS "-Wl,--no-undefined") 460 endif() 461 endif() 462endif() 463 464if(ASSEMBLY) 465 if(USE_GCC OR USE_CLANG) 466 set(SDL_ASSEMBLY_ROUTINES 1) 467 # TODO: Those all seem to be quite GCC specific - needs to be 468 # reworked for better compiler support 469 set(HAVE_ASSEMBLY TRUE) 470 if(MMX) 471 set(CMAKE_REQUIRED_FLAGS "-mmmx") 472 check_c_source_compiles(" 473 #ifdef __MINGW32__ 474 #include <_mingw.h> 475 #ifdef __MINGW64_VERSION_MAJOR 476 #include <intrin.h> 477 #else 478 #include <mmintrin.h> 479 #endif 480 #else 481 #include <mmintrin.h> 482 #endif 483 #ifndef __MMX__ 484 #error Assembler CPP flag not enabled 485 #endif 486 int main(int argc, char **argv) { }" HAVE_MMX) 487 if(HAVE_MMX) 488 list(APPEND EXTRA_CFLAGS "-mmmx") 489 endif() 490 set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) 491 endif() 492 493 if(3DNOW) 494 set(CMAKE_REQUIRED_FLAGS "-m3dnow") 495 check_c_source_compiles(" 496 #include <mm3dnow.h> 497 #ifndef __3dNOW__ 498 #error Assembler CPP flag not enabled 499 #endif 500 int main(int argc, char **argv) { 501 void *p = 0; 502 _m_prefetch(p); 503 }" HAVE_3DNOW) 504 if(HAVE_3DNOW) 505 list(APPEND EXTRA_CFLAGS "-m3dnow") 506 endif() 507 set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) 508 endif() 509 510 if(SSE) 511 set(CMAKE_REQUIRED_FLAGS "-msse") 512 check_c_source_compiles(" 513 #ifdef __MINGW32__ 514 #include <_mingw.h> 515 #ifdef __MINGW64_VERSION_MAJOR 516 #include <intrin.h> 517 #else 518 #include <xmmintrin.h> 519 #endif 520 #else 521 #include <xmmintrin.h> 522 #endif 523 #ifndef __SSE__ 524 #error Assembler CPP flag not enabled 525 #endif 526 int main(int argc, char **argv) { }" HAVE_SSE) 527 if(HAVE_SSE) 528 list(APPEND EXTRA_CFLAGS "-msse") 529 endif() 530 set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) 531 endif() 532 533 if(SSE2) 534 set(CMAKE_REQUIRED_FLAGS "-msse2") 535 check_c_source_compiles(" 536 #ifdef __MINGW32__ 537 #include <_mingw.h> 538 #ifdef __MINGW64_VERSION_MAJOR 539 #include <intrin.h> 540 #else 541 #include <emmintrin.h> 542 #endif 543 #else 544 #include <emmintrin.h> 545 #endif 546 #ifndef __SSE2__ 547 #error Assembler CPP flag not enabled 548 #endif 549 int main(int argc, char **argv) { }" HAVE_SSE2) 550 if(HAVE_SSE2) 551 list(APPEND EXTRA_CFLAGS "-msse2") 552 endif() 553 set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) 554 endif() 555 556 if(SSE3) 557 set(CMAKE_REQUIRED_FLAGS "-msse3") 558 check_c_source_compiles(" 559 #ifdef __MINGW32__ 560 #include <_mingw.h> 561 #ifdef __MINGW64_VERSION_MAJOR 562 #include <intrin.h> 563 #else 564 #include <pmmintrin.h> 565 #endif 566 #else 567 #include <pmmintrin.h> 568 #endif 569 #ifndef __SSE3__ 570 #error Assembler CPP flag not enabled 571 #endif 572 int main(int argc, char **argv) { }" HAVE_SSE3) 573 if(HAVE_SSE3) 574 list(APPEND EXTRA_CFLAGS "-msse3") 575 endif() 576 set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) 577 endif() 578 579 if(NOT SSEMATH) 580 if(SSE OR SSE2 OR SSE3) 581 if(USE_GCC) 582 check_c_compiler_flag(-mfpmath=387 HAVE_FP_387) 583 if(HAVE_FP_387) 584 list(APPEND EXTRA_CFLAGS "-mfpmath=387") 585 endif() 586 endif() 587 set(HAVE_SSEMATH TRUE) 588 endif() 589 endif() 590 591 check_include_file("immintrin.h" HAVE_IMMINTRIN_H) 592 593 if(ALTIVEC) 594 set(CMAKE_REQUIRED_FLAGS "-maltivec") 595 check_c_source_compiles(" 596 #include <altivec.h> 597 vector unsigned int vzero() { 598 return vec_splat_u32(0); 599 } 600 int main(int argc, char **argv) { }" HAVE_ALTIVEC_H_HDR) 601 check_c_source_compiles(" 602 vector unsigned int vzero() { 603 return vec_splat_u32(0); 604 } 605 int main(int argc, char **argv) { }" HAVE_ALTIVEC) 606 set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) 607 if(HAVE_ALTIVEC OR HAVE_ALTIVEC_H_HDR) 608 set(HAVE_ALTIVEC TRUE) # if only HAVE_ALTIVEC_H_HDR is set 609 list(APPEND EXTRA_CFLAGS "-maltivec") 610 set(SDL_ALTIVEC_BLITTERS 1) 611 if(HAVE_ALTIVEC_H_HDR) 612 set(HAVE_ALTIVEC_H 1) 613 endif() 614 endif() 615 endif() 616 elseif(MSVC_VERSION GREATER 1500) 617 # TODO: SDL_cpuinfo.h needs to support the user's configuration wish 618 # for MSVC - right now it is always activated 619 if(NOT ARCH_64) 620 set(HAVE_MMX TRUE) 621 set(HAVE_3DNOW TRUE) 622 endif() 623 set(HAVE_SSE TRUE) 624 set(HAVE_SSE2 TRUE) 625 set(HAVE_SSE3 TRUE) 626 set(SDL_ASSEMBLY_ROUTINES 1) 627 endif() 628# TODO: 629#else() 630# if(USE_GCC OR USE_CLANG) 631# list(APPEND EXTRA_CFLAGS "-mno-sse" "-mno-sse2" "-mno-sse3" "-mno-mmx") 632# endif() 633endif() 634 635# TODO: Can't deactivate on FreeBSD? w/o LIBC, SDL_stdinc.h can't define 636# anything. 637if(LIBC) 638 if(WINDOWS AND NOT MINGW) 639 set(HAVE_LIBC TRUE) 640 foreach(_HEADER stdio.h string.h wchar.h ctype.h math.h limits.h) 641 string(TOUPPER "HAVE_${_HEADER}" _UPPER) 642 string(REPLACE "." "_" _HAVE_H ${_UPPER}) 643 set(${_HAVE_H} 1) 644 endforeach() 645 set(HAVE_SIGNAL_H 1) 646 foreach(_FN 647 malloc calloc realloc free qsort abs memset memcpy memmove memcmp 648 wcslen wcscmp 649 strlen _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa 650 _ultoa strtol strtoul strtoll strtod atoi atof strcmp strncmp 651 _stricmp _strnicmp sscanf 652 acos acosf asin asinf atan atanf atan2 atan2f ceil ceilf 653 copysign copysignf cos cosf exp expf fabs fabsf floor floorf fmod fmodf 654 log logf log10 log10f pow powf scalbn scalbnf sin sinf sqrt sqrtf tan tanf) 655 string(TOUPPER ${_FN} _UPPER) 656 set(HAVE_${_UPPER} 1) 657 endforeach() 658 if(NOT CYGWIN AND NOT MINGW) 659 set(HAVE_ALLOCA 1) 660 endif() 661 set(HAVE_M_PI 1) 662 add_definitions(-D_USE_MATH_DEFINES) # needed for M_PI 663 set(STDC_HEADERS 1) 664 else() 665 set(HAVE_LIBC TRUE) 666 check_include_file(sys/types.h HAVE_SYS_TYPES_H) 667 foreach(_HEADER 668 stdio.h stdlib.h stddef.h stdarg.h malloc.h memory.h string.h limits.h 669 strings.h wchar.h inttypes.h stdint.h ctype.h math.h iconv.h signal.h libunwind.h) 670 string(TOUPPER "HAVE_${_HEADER}" _UPPER) 671 string(REPLACE "." "_" _HAVE_H ${_UPPER}) 672 check_include_file("${_HEADER}" ${_HAVE_H}) 673 endforeach() 674 675 check_include_files("dlfcn.h;stdint.h;stddef.h;inttypes.h;stdlib.h;strings.h;string.h;float.h" STDC_HEADERS) 676 check_type_size("size_t" SIZEOF_SIZE_T) 677 check_symbol_exists(M_PI math.h HAVE_M_PI) 678 # TODO: refine the mprotect check 679 check_c_source_compiles("#include <sys/types.h> 680 #include <sys/mman.h> 681 int main() { }" HAVE_MPROTECT) 682 foreach(_FN 683 strtod malloc calloc realloc free getenv setenv putenv unsetenv 684 qsort abs bcopy memset memcpy memmove memcmp strlen strlcpy strlcat 685 _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa 686 _uitoa _ultoa strtol strtoul _i64toa _ui64toa strtoll strtoull 687 atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp strncasecmp 688 vsscanf vsnprintf fopen64 fseeko fseeko64 sigaction setjmp 689 nanosleep sysconf sysctlbyname getauxval poll 690 ) 691 string(TOUPPER ${_FN} _UPPER) 692 set(_HAVEVAR "HAVE_${_UPPER}") 693 check_function_exists("${_FN}" ${_HAVEVAR}) 694 endforeach() 695 696 check_library_exists(m pow "" HAVE_LIBM) 697 if(HAVE_LIBM) 698 set(CMAKE_REQUIRED_LIBRARIES m) 699 foreach(_FN 700 atan atan2 ceil copysign cos cosf fabs floor log pow scalbn sin 701 sinf sqrt sqrtf tan tanf acos asin) 702 string(TOUPPER ${_FN} _UPPER) 703 set(_HAVEVAR "HAVE_${_UPPER}") 704 check_function_exists("${_FN}" ${_HAVEVAR}) 705 endforeach() 706 set(CMAKE_REQUIRED_LIBRARIES) 707 list(APPEND EXTRA_LIBS m) 708 endif() 709 710 check_library_exists(iconv iconv_open "" HAVE_LIBICONV) 711 if(HAVE_LIBICONV) 712 list(APPEND EXTRA_LIBS iconv) 713 set(HAVE_ICONV 1) 714 endif() 715 716 if(NOT APPLE) 717 check_include_file(alloca.h HAVE_ALLOCA_H) 718 check_function_exists(alloca HAVE_ALLOCA) 719 else() 720 set(HAVE_ALLOCA_H 1) 721 set(HAVE_ALLOCA 1) 722 endif() 723 724 check_struct_has_member("struct sigaction" "sa_sigaction" "signal.h" HAVE_SA_SIGACTION) 725 endif() 726else() 727 if(WINDOWS) 728 set(HAVE_STDARG_H 1) 729 set(HAVE_STDDEF_H 1) 730 endif() 731endif() 732 733 734# Enable/disable various subsystems of the SDL library 735foreach(_SUB ${SDL_SUBSYSTEMS}) 736 string(TOUPPER ${_SUB} _OPT) 737 if(NOT SDL_${_OPT}) 738 set(SDL_${_OPT}_DISABLED 1) 739 endif() 740endforeach() 741if(SDL_JOYSTICK) 742 file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/*.c) 743 set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES}) 744endif() 745if(SDL_HAPTIC) 746 if(NOT SDL_JOYSTICK) 747 # Haptic requires some private functions from the joystick subsystem. 748 message_error("SDL_HAPTIC requires SDL_JOYSTICK, which is not enabled") 749 endif() 750 file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/*.c) 751 set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES}) 752endif() 753if(SDL_SENSOR) 754 file(GLOB SENSOR_SOURCES ${SDL2_SOURCE_DIR}/src/sensor/*.c) 755 set(SOURCE_FILES ${SOURCE_FILES} ${SENSOR_SOURCES}) 756endif() 757if(SDL_POWER) 758 file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/*.c) 759 set(SOURCE_FILES ${SOURCE_FILES} ${POWER_SOURCES}) 760endif() 761# TODO: in configure.in, the test for LOADSO and SDL_DLOPEN is a bit weird: 762# if LOADSO is not wanted, SDL_LOADSO_DISABLED is set 763# If however on Unix or APPLE dlopen() is detected via CheckDLOPEN(), 764# SDL_LOADSO_DISABLED will not be set, regardless of the LOADSO settings 765 766# General SDL subsystem options, valid for all platforms 767if(SDL_AUDIO) 768 # CheckDummyAudio/CheckDiskAudio - valid for all platforms 769 if(DUMMYAUDIO) 770 set(SDL_AUDIO_DRIVER_DUMMY 1) 771 file(GLOB DUMMYAUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/dummy/*.c) 772 set(SOURCE_FILES ${SOURCE_FILES} ${DUMMYAUDIO_SOURCES}) 773 set(HAVE_DUMMYAUDIO TRUE) 774 endif() 775 if(DISKAUDIO) 776 set(SDL_AUDIO_DRIVER_DISK 1) 777 file(GLOB DISKAUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/disk/*.c) 778 set(SOURCE_FILES ${SOURCE_FILES} ${DISKAUDIO_SOURCES}) 779 set(HAVE_DISKAUDIO TRUE) 780 endif() 781endif() 782 783if(SDL_DLOPEN) 784 # Relevant for Unix/Darwin only 785 if(UNIX OR APPLE) 786 CheckDLOPEN() 787 endif() 788endif() 789 790if(SDL_VIDEO) 791 if(VIDEO_DUMMY) 792 set(SDL_VIDEO_DRIVER_DUMMY 1) 793 file(GLOB VIDEO_DUMMY_SOURCES ${SDL2_SOURCE_DIR}/src/video/dummy/*.c) 794 set(SOURCE_FILES ${SOURCE_FILES} ${VIDEO_DUMMY_SOURCES}) 795 set(HAVE_VIDEO_DUMMY TRUE) 796 set(HAVE_SDL_VIDEO TRUE) 797 endif() 798endif() 799 800if(ANDROID) 801 file(GLOB ANDROID_CORE_SOURCES ${SDL2_SOURCE_DIR}/src/core/android/*.c) 802 set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_CORE_SOURCES}) 803 804 # SDL_spinlock.c Needs to be compiled in ARM mode. 805 # There seems to be no better way currently to set the ARM mode. 806 # see: https://issuetracker.google.com/issues/62264618 807 # Another option would be to set ARM mode to all compiled files 808 check_c_compiler_flag(-marm HAVE_ARM_MODE) 809 if(HAVE_ARM_MODE) 810 set_source_files_properties(${SDL2_SOURCE_DIR}/src/atomic/SDL_spinlock.c PROPERTIES COMPILE_FLAGS -marm) 811 endif() 812 813 file(GLOB ANDROID_MAIN_SOURCES ${SDL2_SOURCE_DIR}/src/main/android/*.c) 814 set(SDLMAIN_SOURCES ${SDLMAIN_SOURCES} ${ANDROID_MAIN_SOURCES}) 815 816 if(SDL_AUDIO) 817 set(SDL_AUDIO_DRIVER_ANDROID 1) 818 file(GLOB ANDROID_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/android/*.c) 819 set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_AUDIO_SOURCES}) 820 set(HAVE_SDL_AUDIO TRUE) 821 endif() 822 if(SDL_FILESYSTEM) 823 set(SDL_FILESYSTEM_ANDROID 1) 824 file(GLOB ANDROID_FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/android/*.c) 825 set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_FILESYSTEM_SOURCES}) 826 set(HAVE_SDL_FILESYSTEM TRUE) 827 endif() 828 if(SDL_HAPTIC) 829 set(SDL_HAPTIC_ANDROID 1) 830 file(GLOB ANDROID_HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/android/*.c) 831 set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_HAPTIC_SOURCES}) 832 set(HAVE_SDL_HAPTIC TRUE) 833 endif() 834 if(SDL_JOYSTICK) 835 set(SDL_JOYSTICK_ANDROID 1) 836 file(GLOB ANDROID_JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/android/*.c ${SDL2_SOURCE_DIR}/src/joystick/steam/*.c) 837 set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_JOYSTICK_SOURCES}) 838 set(HAVE_SDL_JOYSTICK TRUE) 839 endif() 840 if(SDL_LOADSO) 841 set(SDL_LOADSO_DLOPEN 1) 842 file(GLOB LOADSO_SOURCES ${SDL2_SOURCE_DIR}/src/loadso/dlopen/*.c) 843 set(SOURCE_FILES ${SOURCE_FILES} ${LOADSO_SOURCES}) 844 set(HAVE_SDL_LOADSO TRUE) 845 endif() 846 if(SDL_POWER) 847 set(SDL_POWER_ANDROID 1) 848 file(GLOB ANDROID_POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/android/*.c) 849 set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_POWER_SOURCES}) 850 set(HAVE_SDL_POWER TRUE) 851 endif() 852 if(SDL_TIMERS) 853 set(SDL_TIMER_UNIX 1) 854 file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/unix/*.c) 855 set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES}) 856 set(HAVE_SDL_TIMERS TRUE) 857 endif() 858 if(SDL_SENSOR) 859 set(SDL_SENSOR_ANDROID 1) 860 set(HAVE_SDL_SENSORS TRUE) 861 file(GLOB ANDROID_SENSOR_SOURCES ${SDL2_SOURCE_DIR}/src/sensor/android/*.c) 862 set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_SENSOR_SOURCES}) 863 endif() 864 if(SDL_VIDEO) 865 set(SDL_VIDEO_DRIVER_ANDROID 1) 866 file(GLOB ANDROID_VIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/android/*.c) 867 set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_VIDEO_SOURCES}) 868 set(HAVE_SDL_VIDEO TRUE) 869 870 # Core stuff 871 find_library(ANDROID_DL_LIBRARY dl) 872 find_library(ANDROID_LOG_LIBRARY log) 873 find_library(ANDROID_LIBRARY_LIBRARY android) 874 list(APPEND EXTRA_LIBS ${ANDROID_DL_LIBRARY} ${ANDROID_LOG_LIBRARY} ${ANDROID_LIBRARY_LIBRARY}) 875 add_definitions(-DGL_GLEXT_PROTOTYPES) 876 877 #enable gles 878 if(VIDEO_OPENGLES) 879 set(SDL_VIDEO_OPENGL_EGL 1) 880 set(HAVE_VIDEO_OPENGLES TRUE) 881 set(SDL_VIDEO_OPENGL_ES2 1) 882 set(SDL_VIDEO_RENDER_OGL_ES2 1) 883 884 find_library(OpenGLES1_LIBRARY GLESv1_CM) 885 find_library(OpenGLES2_LIBRARY GLESv2) 886 list(APPEND EXTRA_LIBS ${OpenGLES1_LIBRARY} ${OpenGLES2_LIBRARY}) 887 endif() 888 889 CHECK_C_SOURCE_COMPILES(" 890 #if defined(__ARM_ARCH) && __ARM_ARCH < 7 891 #error Vulkan doesn't work on this configuration 892 #endif 893 int main() 894 { 895 return 0; 896 } 897 " VULKAN_PASSED_ANDROID_CHECKS) 898 if(NOT VULKAN_PASSED_ANDROID_CHECKS) 899 set(VIDEO_VULKAN OFF) 900 message(STATUS "Vulkan doesn't work on this configuration") 901 endif() 902 endif() 903 904 CheckPTHREAD() 905 906endif() 907 908# Platform-specific options and settings 909if(EMSCRIPTEN) 910 # Hide noisy warnings that intend to aid mostly during initial stages of porting a new 911 # project. Uncomment at will for verbose cross-compiling -I/../ path info. 912 add_definitions(-Wno-warn-absolute-paths) 913 if(SDL_AUDIO) 914 set(SDL_AUDIO_DRIVER_EMSCRIPTEN 1) 915 file(GLOB EM_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/emscripten/*.c) 916 set(SOURCE_FILES ${SOURCE_FILES} ${EM_AUDIO_SOURCES}) 917 set(HAVE_SDL_AUDIO TRUE) 918 endif() 919 if(SDL_FILESYSTEM) 920 set(SDL_FILESYSTEM_EMSCRIPTEN 1) 921 file(GLOB EM_FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/emscripten/*.c) 922 set(SOURCE_FILES ${SOURCE_FILES} ${EM_FILESYSTEM_SOURCES}) 923 set(HAVE_SDL_FILESYSTEM TRUE) 924 endif() 925 if(SDL_JOYSTICK) 926 set(SDL_JOYSTICK_EMSCRIPTEN 1) 927 file(GLOB EM_JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/emscripten/*.c) 928 set(SOURCE_FILES ${SOURCE_FILES} ${EM_JOYSTICK_SOURCES}) 929 set(HAVE_SDL_JOYSTICK TRUE) 930 endif() 931 if(SDL_POWER) 932 set(SDL_POWER_EMSCRIPTEN 1) 933 file(GLOB EM_POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/emscripten/*.c) 934 set(SOURCE_FILES ${SOURCE_FILES} ${EM_POWER_SOURCES}) 935 set(HAVE_SDL_POWER TRUE) 936 endif() 937 if(SDL_TIMERS) 938 set(SDL_TIMER_UNIX 1) 939 file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/unix/*.c) 940 set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES}) 941 set(HAVE_SDL_TIMERS TRUE) 942 943 if(CLOCK_GETTIME) 944 set(HAVE_CLOCK_GETTIME 1) 945 endif() 946 endif() 947 if(SDL_VIDEO) 948 set(SDL_VIDEO_DRIVER_EMSCRIPTEN 1) 949 file(GLOB EM_VIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/emscripten/*.c) 950 set(SOURCE_FILES ${SOURCE_FILES} ${EM_VIDEO_SOURCES}) 951 set(HAVE_SDL_VIDEO TRUE) 952 953 #enable gles 954 if(VIDEO_OPENGLES) 955 set(SDL_VIDEO_OPENGL_EGL 1) 956 set(HAVE_VIDEO_OPENGLES TRUE) 957 set(SDL_VIDEO_OPENGL_ES2 1) 958 set(SDL_VIDEO_RENDER_OGL_ES2 1) 959 endif() 960 endif() 961elseif(UNIX AND NOT APPLE AND NOT ANDROID) 962 if(SDL_AUDIO) 963 if(SYSV5 OR SOLARIS OR HPUX) 964 set(SDL_AUDIO_DRIVER_SUNAUDIO 1) 965 file(GLOB SUN_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/sun/*.c) 966 set(SOURCE_FILES ${SOURCE_FILES} ${SUN_AUDIO_SOURCES}) 967 set(HAVE_SDL_AUDIO TRUE) 968 elseif(NETBSD) 969 set(SDL_AUDIO_DRIVER_NETBSD 1) 970 file(GLOB NETBSD_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/netbsd/*.c) 971 set(SOURCE_FILES ${SOURCE_FILES} ${NETBSD_AUDIO_SOURCES}) 972 set(HAVE_SDL_AUDIO TRUE) 973 elseif(AIX) 974 set(SDL_AUDIO_DRIVER_PAUDIO 1) 975 file(GLOB AIX_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/paudio/*.c) 976 set(SOURCE_FILES ${SOURCE_FILES} ${AIX_AUDIO_SOURCES}) 977 set(HAVE_SDL_AUDIO TRUE) 978 endif() 979 CheckOSS() 980 CheckALSA() 981 CheckJACK() 982 CheckPulseAudio() 983 CheckESD() 984 CheckARTS() 985 CheckNAS() 986 CheckSNDIO() 987 CheckFusionSound() 988 CheckLibSampleRate() 989 endif() 990 991 if(SDL_VIDEO) 992 # Need to check for Raspberry PI first and add platform specific compiler flags, otherwise the test for GLES fails! 993 CheckRPI() 994 CheckX11() 995 CheckMir() 996 CheckDirectFB() 997 CheckOpenGLX11() 998 CheckOpenGLESX11() 999 CheckWayland() 1000 CheckVivante() 1001 CheckKMSDRM() 1002 endif() 1003 1004 if(UNIX) 1005 file(GLOB CORE_UNIX_SOURCES ${SDL2_SOURCE_DIR}/src/core/unix/*.c) 1006 set(SOURCE_FILES ${SOURCE_FILES} ${CORE_UNIX_SOURCES}) 1007 endif() 1008 1009 if(LINUX) 1010 check_c_source_compiles(" 1011 #include <linux/input.h> 1012 #ifndef EVIOCGNAME 1013 #error EVIOCGNAME() ioctl not available 1014 #endif 1015 int main(int argc, char** argv) {}" HAVE_INPUT_EVENTS) 1016 1017 check_c_source_compiles(" 1018 #include <linux/kd.h> 1019 #include <linux/keyboard.h> 1020 1021 int main(int argc, char **argv) 1022 { 1023 struct kbentry kbe; 1024 kbe.kb_table = KG_CTRL; 1025 ioctl(0, KDGKBENT, &kbe); 1026 }" HAVE_INPUT_KD) 1027 1028 file(GLOB CORE_LINUX_SOURCES ${SDL2_SOURCE_DIR}/src/core/linux/*.c) 1029 set(SOURCE_FILES ${SOURCE_FILES} ${CORE_LINUX_SOURCES}) 1030 1031 if(HAVE_INPUT_EVENTS) 1032 set(SDL_INPUT_LINUXEV 1) 1033 endif() 1034 1035 if(SDL_HAPTIC AND HAVE_INPUT_EVENTS) 1036 set(SDL_HAPTIC_LINUX 1) 1037 file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/linux/*.c) 1038 set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES}) 1039 set(HAVE_SDL_HAPTIC TRUE) 1040 endif() 1041 1042 if(HAVE_INPUT_KD) 1043 set(SDL_INPUT_LINUXKD 1) 1044 endif() 1045 1046 check_include_file("libudev.h" HAVE_LIBUDEV_H) 1047 1048 if(PKG_CONFIG_FOUND) 1049 pkg_search_module(DBUS dbus-1 dbus) 1050 if(DBUS_FOUND) 1051 set(HAVE_DBUS_DBUS_H TRUE) 1052 include_directories(${DBUS_INCLUDE_DIRS}) 1053 list(APPEND EXTRA_LIBS ${DBUS_LIBRARIES}) 1054 endif() 1055 1056 pkg_search_module(IBUS ibus-1.0 ibus) 1057 if(IBUS_FOUND) 1058 set(HAVE_IBUS_IBUS_H TRUE) 1059 include_directories(${IBUS_INCLUDE_DIRS}) 1060 list(APPEND EXTRA_LIBS ${IBUS_LIBRARIES}) 1061 endif() 1062 endif() 1063 1064 check_include_file("fcitx/frontend.h" HAVE_FCITX_FRONTEND_H) 1065 endif() 1066 1067 if(INPUT_TSLIB) 1068 check_c_source_compiles(" 1069 #include \"tslib.h\" 1070 int main(int argc, char** argv) { }" HAVE_INPUT_TSLIB) 1071 if(HAVE_INPUT_TSLIB) 1072 set(SDL_INPUT_TSLIB 1) 1073 list(APPEND EXTRA_LIBS ts) 1074 endif() 1075 endif() 1076 1077 if(SDL_JOYSTICK) 1078 CheckUSBHID() # seems to be BSD specific - limit the test to BSD only? 1079 if(LINUX AND NOT ANDROID) 1080 set(SDL_JOYSTICK_LINUX 1) 1081 file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/linux/*.c ${SDL2_SOURCE_DIR}/src/joystick/steam/*.c) 1082 set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES}) 1083 set(HAVE_SDL_JOYSTICK TRUE) 1084 endif() 1085 endif() 1086 1087 CheckPTHREAD() 1088 1089 if(CLOCK_GETTIME) 1090 check_library_exists(rt clock_gettime "" FOUND_CLOCK_GETTIME) 1091 if(FOUND_CLOCK_GETTIME) 1092 list(APPEND EXTRA_LIBS rt) 1093 set(HAVE_CLOCK_GETTIME 1) 1094 else() 1095 check_library_exists(c clock_gettime "" FOUND_CLOCK_GETTIME) 1096 if(FOUND_CLOCK_GETTIME) 1097 set(HAVE_CLOCK_GETTIME 1) 1098 endif() 1099 endif() 1100 endif() 1101 1102 check_include_file(linux/version.h HAVE_LINUX_VERSION_H) 1103 if(HAVE_LINUX_VERSION_H) 1104 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_LINUX_VERSION_H") 1105 endif() 1106 1107 if(SDL_POWER) 1108 if(LINUX) 1109 set(SDL_POWER_LINUX 1) 1110 file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/linux/*.c) 1111 set(SOURCE_FILES ${SOURCE_FILES} ${POWER_SOURCES}) 1112 set(HAVE_SDL_POWER TRUE) 1113 endif() 1114 endif() 1115 1116 if(SDL_FILESYSTEM) 1117 set(SDL_FILESYSTEM_UNIX 1) 1118 file(GLOB FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/unix/*.c) 1119 set(SOURCE_FILES ${SOURCE_FILES} ${FILESYSTEM_SOURCES}) 1120 set(HAVE_SDL_FILESYSTEM TRUE) 1121 endif() 1122 1123 if(SDL_TIMERS) 1124 set(SDL_TIMER_UNIX 1) 1125 file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/unix/*.c) 1126 set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES}) 1127 set(HAVE_SDL_TIMERS TRUE) 1128 endif() 1129 1130 if(RPATH) 1131 set(SDL_RLD_FLAGS "") 1132 if(BSDI OR FREEBSD OR LINUX OR NETBSD) 1133 set(CMAKE_REQUIRED_FLAGS "-Wl,--enable-new-dtags") 1134 check_c_compiler_flag("" HAVE_ENABLE_NEW_DTAGS) 1135 set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) 1136 if(HAVE_ENABLE_NEW_DTAGS) 1137 set(SDL_RLD_FLAGS "-Wl,-rpath,\${libdir} -Wl,--enable-new-dtags") 1138 else() 1139 set(SDL_RLD_FLAGS "-Wl,-rpath,\${libdir}") 1140 endif() 1141 elseif(SOLARIS) 1142 set(SDL_RLD_FLAGS "-R\${libdir}") 1143 endif() 1144 set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) 1145 set(HAVE_RPATH TRUE) 1146 endif() 1147 1148elseif(WINDOWS) 1149 find_program(WINDRES windres) 1150 1151 check_c_source_compiles(" 1152 #include <windows.h> 1153 int main(int argc, char **argv) { }" HAVE_WIN32_CC) 1154 1155 file(GLOB CORE_SOURCES ${SDL2_SOURCE_DIR}/src/core/windows/*.c) 1156 set(SOURCE_FILES ${SOURCE_FILES} ${CORE_SOURCES}) 1157 1158 if(MSVC) 1159 # Prevent codegen that would use the VC runtime libraries. 1160 set_property(DIRECTORY . APPEND PROPERTY COMPILE_OPTIONS "/GS-") 1161 if(NOT ARCH_64) 1162 set_property(DIRECTORY . APPEND PROPERTY COMPILE_OPTIONS "/arch:SSE") 1163 endif() 1164 endif() 1165 1166 # Check for DirectX 1167 if(DIRECTX) 1168 if(DEFINED MSVC_VERSION AND NOT ${MSVC_VERSION} LESS 1700) 1169 set(USE_WINSDK_DIRECTX TRUE) 1170 endif() 1171 if(NOT CMAKE_COMPILER_IS_MINGW AND NOT USE_WINSDK_DIRECTX) 1172 if("$ENV{DXSDK_DIR}" STREQUAL "") 1173 message_error("DIRECTX requires the \$DXSDK_DIR environment variable to be set") 1174 endif() 1175 set(CMAKE_REQUIRED_FLAGS "/I\"$ENV{DXSDK_DIR}\\Include\"") 1176 endif() 1177 1178 if(HAVE_WIN32_CC) 1179 # xinput.h may need windows.h, but doesn't include it itself. 1180 check_c_source_compiles(" 1181 #include <windows.h> 1182 #include <xinput.h> 1183 int main(int argc, char **argv) { }" HAVE_XINPUT_H) 1184 check_c_source_compiles(" 1185 #include <windows.h> 1186 #include <xinput.h> 1187 XINPUT_GAMEPAD_EX x1; 1188 int main(int argc, char **argv) { }" HAVE_XINPUT_GAMEPAD_EX) 1189 check_c_source_compiles(" 1190 #include <windows.h> 1191 #include <xinput.h> 1192 XINPUT_STATE_EX s1; 1193 int main(int argc, char **argv) { }" HAVE_XINPUT_STATE_EX) 1194 else() 1195 check_include_file(xinput.h HAVE_XINPUT_H) 1196 endif() 1197 1198 check_include_file(d3d9.h HAVE_D3D_H) 1199 check_include_file(d3d11_1.h HAVE_D3D11_H) 1200 check_include_file(ddraw.h HAVE_DDRAW_H) 1201 check_include_file(dsound.h HAVE_DSOUND_H) 1202 check_include_file(dinput.h HAVE_DINPUT_H) 1203 check_include_file(mmdeviceapi.h HAVE_MMDEVICEAPI_H) 1204 check_include_file(audioclient.h HAVE_AUDIOCLIENT_H) 1205 check_include_file(dxgi.h HAVE_DXGI_H) 1206 if(HAVE_D3D_H OR HAVE_D3D11_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR HAVE_DINPUT_H) 1207 set(HAVE_DIRECTX TRUE) 1208 if(NOT CMAKE_COMPILER_IS_MINGW AND NOT USE_WINSDK_DIRECTX) 1209 # TODO: change $ENV{DXSDL_DIR} to get the path from the include checks 1210 link_directories($ENV{DXSDK_DIR}\\lib\\${PROCESSOR_ARCH}) 1211 include_directories($ENV{DXSDK_DIR}\\Include) 1212 endif() 1213 endif() 1214 set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) 1215 endif() 1216 1217 if(SDL_AUDIO) 1218 set(SDL_AUDIO_DRIVER_WINMM 1) 1219 file(GLOB WINMM_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/winmm/*.c) 1220 set(SOURCE_FILES ${SOURCE_FILES} ${WINMM_AUDIO_SOURCES}) 1221 set(HAVE_SDL_AUDIO TRUE) 1222 1223 if(HAVE_DSOUND_H) 1224 set(SDL_AUDIO_DRIVER_DSOUND 1) 1225 file(GLOB DSOUND_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/directsound/*.c) 1226 set(SOURCE_FILES ${SOURCE_FILES} ${DSOUND_AUDIO_SOURCES}) 1227 endif() 1228 1229 if(WASAPI AND HAVE_AUDIOCLIENT_H AND HAVE_MMDEVICEAPI_H) 1230 set(SDL_AUDIO_DRIVER_WASAPI 1) 1231 file(GLOB WASAPI_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/wasapi/*.c) 1232 set(SOURCE_FILES ${SOURCE_FILES} ${WASAPI_AUDIO_SOURCES}) 1233 endif() 1234 endif() 1235 1236 if(SDL_VIDEO) 1237 # requires SDL_LOADSO on Windows (IME, DX, etc.) 1238 if(NOT SDL_LOADSO) 1239 message_error("SDL_VIDEO requires SDL_LOADSO, which is not enabled") 1240 endif() 1241 set(SDL_VIDEO_DRIVER_WINDOWS 1) 1242 file(GLOB WIN_VIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/windows/*.c) 1243 set(SOURCE_FILES ${SOURCE_FILES} ${WIN_VIDEO_SOURCES}) 1244 1245 if(RENDER_D3D AND HAVE_D3D_H) 1246 set(SDL_VIDEO_RENDER_D3D 1) 1247 set(HAVE_RENDER_D3D TRUE) 1248 endif() 1249 if(RENDER_D3D AND HAVE_D3D11_H) 1250 set(SDL_VIDEO_RENDER_D3D11 1) 1251 set(HAVE_RENDER_D3D TRUE) 1252 endif() 1253 set(HAVE_SDL_VIDEO TRUE) 1254 endif() 1255 1256 if(SDL_THREADS) 1257 set(SDL_THREAD_WINDOWS 1) 1258 set(SOURCE_FILES ${SOURCE_FILES} 1259 ${SDL2_SOURCE_DIR}/src/thread/windows/SDL_sysmutex.c 1260 ${SDL2_SOURCE_DIR}/src/thread/windows/SDL_syssem.c 1261 ${SDL2_SOURCE_DIR}/src/thread/windows/SDL_systhread.c 1262 ${SDL2_SOURCE_DIR}/src/thread/windows/SDL_systls.c 1263 ${SDL2_SOURCE_DIR}/src/thread/generic/SDL_syscond.c) 1264 set(HAVE_SDL_THREADS TRUE) 1265 endif() 1266 1267 if(SDL_POWER) 1268 set(SDL_POWER_WINDOWS 1) 1269 set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/power/windows/SDL_syspower.c) 1270 set(HAVE_SDL_POWER TRUE) 1271 endif() 1272 1273 if(SDL_FILESYSTEM) 1274 set(SDL_FILESYSTEM_WINDOWS 1) 1275 file(GLOB FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/windows/*.c) 1276 set(SOURCE_FILES ${SOURCE_FILES} ${FILESYSTEM_SOURCES}) 1277 set(HAVE_SDL_FILESYSTEM TRUE) 1278 endif() 1279 1280 # Libraries for Win32 native and MinGW 1281 list(APPEND EXTRA_LIBS user32 gdi32 winmm imm32 ole32 oleaut32 version uuid advapi32 shell32) 1282 1283 # TODO: in configure.in the check for timers is set on 1284 # cygwin | mingw32* - does this include mingw32CE? 1285 if(SDL_TIMERS) 1286 set(SDL_TIMER_WINDOWS 1) 1287 file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/windows/*.c) 1288 set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES}) 1289 set(HAVE_SDL_TIMERS TRUE) 1290 endif() 1291 1292 if(SDL_LOADSO) 1293 set(SDL_LOADSO_WINDOWS 1) 1294 file(GLOB LOADSO_SOURCES ${SDL2_SOURCE_DIR}/src/loadso/windows/*.c) 1295 set(SOURCE_FILES ${SOURCE_FILES} ${LOADSO_SOURCES}) 1296 set(HAVE_SDL_LOADSO TRUE) 1297 endif() 1298 1299 file(GLOB CORE_SOURCES ${SDL2_SOURCE_DIR}/src/core/windows/*.c) 1300 set(SOURCE_FILES ${SOURCE_FILES} ${CORE_SOURCES}) 1301 1302 if(SDL_VIDEO) 1303 if(VIDEO_OPENGL) 1304 set(SDL_VIDEO_OPENGL 1) 1305 set(SDL_VIDEO_OPENGL_WGL 1) 1306 set(SDL_VIDEO_RENDER_OGL 1) 1307 set(HAVE_VIDEO_OPENGL TRUE) 1308 endif() 1309 1310 if(VIDEO_OPENGLES) 1311 set(SDL_VIDEO_OPENGL_EGL 1) 1312 set(SDL_VIDEO_OPENGL_ES2 1) 1313 set(SDL_VIDEO_RENDER_OGL_ES2 1) 1314 set(HAVE_VIDEO_OPENGLES TRUE) 1315 endif() 1316 endif() 1317 1318 if(SDL_JOYSTICK) 1319 file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/windows/*.c) 1320 set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES}) 1321 if(HAVE_DINPUT_H) 1322 set(SDL_JOYSTICK_DINPUT 1) 1323 list(APPEND EXTRA_LIBS dinput8) 1324 if(CMAKE_COMPILER_IS_MINGW) 1325 list(APPEND EXTRA_LIBS dxerr8) 1326 elseif (NOT USE_WINSDK_DIRECTX) 1327 list(APPEND EXTRA_LIBS dxerr) 1328 endif() 1329 endif() 1330 if(HAVE_XINPUT_H) 1331 set(SDL_JOYSTICK_XINPUT 1) 1332 endif() 1333 if(NOT HAVE_DINPUT_H AND NOT HAVE_XINPUT_H) 1334 set(SDL_JOYSTICK_WINMM 1) 1335 endif() 1336 set(HAVE_SDL_JOYSTICK TRUE) 1337 1338 if(SDL_HAPTIC) 1339 if(HAVE_DINPUT_H OR HAVE_XINPUT_H) 1340 file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/windows/*.c) 1341 if(HAVE_DINPUT_H) 1342 set(SDL_HAPTIC_DINPUT 1) 1343 endif() 1344 if(HAVE_XINPUT_H) 1345 set(SDL_HAPTIC_XINPUT 1) 1346 endif() 1347 else() 1348 file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/dummy/*.c) 1349 set(SDL_HAPTIC_DUMMY 1) 1350 endif() 1351 set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES}) 1352 set(HAVE_SDL_HAPTIC TRUE) 1353 endif() 1354 endif() 1355 1356 file(GLOB VERSION_SOURCES ${SDL2_SOURCE_DIR}/src/main/windows/*.rc) 1357 file(GLOB SDLMAIN_SOURCES ${SDL2_SOURCE_DIR}/src/main/windows/*.c) 1358 if(MINGW OR CYGWIN) 1359 list(APPEND EXTRA_LIBS mingw32) 1360 list(APPEND EXTRA_LDFLAGS "-mwindows") 1361 set(SDL_CFLAGS "${SDL_CFLAGS} -Dmain=SDL_main") 1362 list(APPEND SDL_LIBS "-lmingw32" "-lSDL2main" "-mwindows") 1363 endif() 1364elseif(APPLE) 1365 # TODO: rework this all for proper MacOS X, iOS and Darwin support 1366 1367 # We always need these libs on macOS at the moment. 1368 # !!! FIXME: we need Carbon for some very old API calls in 1369 # !!! FIXME: src/video/cocoa/SDL_cocoakeyboard.c, but we should figure out 1370 # !!! FIXME: how to dump those. 1371 if(NOT IOS) 1372 set(SDL_FRAMEWORK_COCOA 1) 1373 set(SDL_FRAMEWORK_CARBON 1) 1374 endif() 1375 1376 # Requires the darwin file implementation 1377 if(SDL_FILE) 1378 file(GLOB EXTRA_SOURCES ${SDL2_SOURCE_DIR}/src/file/cocoa/*.m) 1379 set(SOURCE_FILES ${EXTRA_SOURCES} ${SOURCE_FILES}) 1380 # !!! FIXME: modern CMake doesn't need "LANGUAGE C" for Objective-C. 1381 set_source_files_properties(${EXTRA_SOURCES} PROPERTIES LANGUAGE C) 1382 set(HAVE_SDL_FILE TRUE) 1383 # !!! FIXME: why is COREVIDEO inside this if() block? 1384 set(SDL_FRAMEWORK_COREVIDEO 1) 1385 else() 1386 message_error("SDL_FILE must be enabled to build on MacOS X") 1387 endif() 1388 1389 if(SDL_AUDIO) 1390 set(SDL_AUDIO_DRIVER_COREAUDIO 1) 1391 file(GLOB AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/coreaudio/*.m) 1392 # !!! FIXME: modern CMake doesn't need "LANGUAGE C" for Objective-C. 1393 set_source_files_properties(${AUDIO_SOURCES} PROPERTIES LANGUAGE C) 1394 set(SOURCE_FILES ${SOURCE_FILES} ${AUDIO_SOURCES}) 1395 set(HAVE_SDL_AUDIO TRUE) 1396 set(SDL_FRAMEWORK_COREAUDIO 1) 1397 set(SDL_FRAMEWORK_AUDIOTOOLBOX 1) 1398 endif() 1399 1400 if(SDL_JOYSTICK) 1401 set(SDL_JOYSTICK_IOKIT 1) 1402 if (IOS) 1403 file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/iphoneos/*.m ${SDL2_SOURCE_DIR}/src/joystick/steam/*.c) 1404 else() 1405 file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/darwin/*.c) 1406 endif() 1407 set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES}) 1408 set(HAVE_SDL_JOYSTICK TRUE) 1409 set(SDL_FRAMEWORK_IOKIT 1) 1410 set(SDL_FRAMEWORK_FF 1) 1411 endif() 1412 1413 if(SDL_HAPTIC) 1414 set(SDL_HAPTIC_IOKIT 1) 1415 if (IOS) 1416 file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/dummy/*.c) 1417 set(SDL_HAPTIC_DUMMY 1) 1418 else() 1419 file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/darwin/*.c) 1420 endif() 1421 set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES}) 1422 set(HAVE_SDL_HAPTIC TRUE) 1423 set(SDL_FRAMEWORK_IOKIT 1) 1424 set(SDL_FRAMEWORK_FF 1) 1425 if(NOT SDL_JOYSTICK) 1426 message(FATAL_ERROR "SDL_HAPTIC requires SDL_JOYSTICK to be enabled") 1427 endif() 1428 endif() 1429 1430 if(SDL_POWER) 1431 set(SDL_POWER_MACOSX 1) 1432 if (IOS) 1433 file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/uikit/*.m) 1434 else() 1435 file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/macosx/*.c) 1436 endif() 1437 set(SOURCE_FILES ${SOURCE_FILES} ${POWER_SOURCES}) 1438 set(HAVE_SDL_POWER TRUE) 1439 set(SDL_FRAMEWORK_IOKIT 1) 1440 endif() 1441 1442 if(SDL_TIMERS) 1443 set(SDL_TIMER_UNIX 1) 1444 file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/unix/*.c) 1445 set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES}) 1446 set(HAVE_SDL_TIMERS TRUE) 1447 endif(SDL_TIMERS) 1448 1449 if(SDL_FILESYSTEM) 1450 set(SDL_FILESYSTEM_COCOA 1) 1451 file(GLOB FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/cocoa/*.m) 1452 # !!! FIXME: modern CMake doesn't need "LANGUAGE C" for Objective-C. 1453 set_source_files_properties(${FILESYSTEM_SOURCES} PROPERTIES LANGUAGE C) 1454 set(SOURCE_FILES ${SOURCE_FILES} ${FILESYSTEM_SOURCES}) 1455 set(HAVE_SDL_FILESYSTEM TRUE) 1456 endif() 1457 1458 # Actually load the frameworks at the end so we don't duplicate include. 1459 if(SDL_FRAMEWORK_COREVIDEO) 1460 find_library(COREVIDEO CoreVideo) 1461 list(APPEND EXTRA_LIBS ${COREVIDEO}) 1462 endif() 1463 if(SDL_FRAMEWORK_COCOA) 1464 find_library(COCOA_LIBRARY Cocoa) 1465 list(APPEND EXTRA_LIBS ${COCOA_LIBRARY}) 1466 endif() 1467 if(SDL_FRAMEWORK_IOKIT) 1468 find_library(IOKIT IOKit) 1469 list(APPEND EXTRA_LIBS ${IOKIT}) 1470 endif() 1471 if(SDL_FRAMEWORK_FF) 1472 find_library(FORCEFEEDBACK ForceFeedback) 1473 list(APPEND EXTRA_LIBS ${FORCEFEEDBACK}) 1474 endif() 1475 if(SDL_FRAMEWORK_CARBON) 1476 find_library(CARBON_LIBRARY Carbon) 1477 list(APPEND EXTRA_LIBS ${CARBON_LIBRARY}) 1478 endif() 1479 if(SDL_FRAMEWORK_COREAUDIO) 1480 find_library(COREAUDIO CoreAudio) 1481 list(APPEND EXTRA_LIBS ${COREAUDIO}) 1482 endif() 1483 if(SDL_FRAMEWORK_AUDIOTOOLBOX) 1484 find_library(AUDIOTOOLBOX AudioToolbox) 1485 list(APPEND EXTRA_LIBS ${AUDIOTOOLBOX}) 1486 endif() 1487 1488 # iOS hack needed - http://code.google.com/p/ios-cmake/ ? 1489 if(SDL_VIDEO) 1490 if (IOS) 1491 set(SDL_VIDEO_DRIVER_UIKIT 1) 1492 file(GLOB UIKITVIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/uikit/*.m) 1493 set(SOURCE_FILES ${SOURCE_FILES} ${UIKITVIDEO_SOURCES}) 1494 else() 1495 CheckCOCOA() 1496 if(VIDEO_OPENGL) 1497 set(SDL_VIDEO_OPENGL 1) 1498 set(SDL_VIDEO_OPENGL_CGL 1) 1499 set(SDL_VIDEO_RENDER_OGL 1) 1500 set(HAVE_VIDEO_OPENGL TRUE) 1501 endif() 1502 1503 if(VIDEO_OPENGLES) 1504 set(SDL_VIDEO_OPENGL_EGL 1) 1505 set(SDL_VIDEO_OPENGL_ES2 1) 1506 set(SDL_VIDEO_RENDER_OGL_ES2 1) 1507 set(HAVE_VIDEO_OPENGLES TRUE) 1508 endif() 1509 endif() 1510 endif() 1511 1512 CheckPTHREAD() 1513elseif(HAIKU) 1514 if(SDL_VIDEO) 1515 set(SDL_VIDEO_DRIVER_HAIKU 1) 1516 file(GLOB HAIKUVIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/haiku/*.c) 1517 set(SOURCE_FILES ${SOURCE_FILES} ${HAIKUVIDEO_SOURCES}) 1518 set(HAVE_SDL_VIDEO TRUE) 1519 1520 set(SDL_FILESYSTEM_HAIKU 1) 1521 file(GLOB FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/haiku/*.cc) 1522 set(SOURCE_FILES ${SOURCE_FILES} ${FILESYSTEM_SOURCES}) 1523 set(HAVE_SDL_FILESYSTEM TRUE) 1524 1525 if(SDL_TIMERS) 1526 set(SDL_TIMER_HAIKU 1) 1527 file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/haiku/*.c) 1528 set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES}) 1529 set(HAVE_SDL_TIMERS TRUE) 1530 endif(SDL_TIMERS) 1531 1532 if(VIDEO_OPENGL) 1533 # TODO: Use FIND_PACKAGE(OpenGL) instead 1534 set(SDL_VIDEO_OPENGL 1) 1535 set(SDL_VIDEO_OPENGL_BGL 1) 1536 set(SDL_VIDEO_RENDER_OGL 1) 1537 list(APPEND EXTRA_LIBS GL) 1538 set(HAVE_VIDEO_OPENGL TRUE) 1539 endif() 1540 endif() 1541 1542 CheckPTHREAD() 1543endif() 1544 1545if(VIDEO_VULKAN) 1546 set(SDL_VIDEO_VULKAN 1) 1547endif() 1548 1549# Dummies 1550# configure.in does it differently: 1551# if not have X 1552# if enable_X { SDL_X_DISABLED = 1 } 1553# [add dummy sources] 1554# so it always adds a dummy, without checking, if it was actually requested. 1555# This leads to missing internal references on building, since the 1556# src/X/*.c does not get included. 1557if(NOT HAVE_SDL_JOYSTICK) 1558 set(SDL_JOYSTICK_DISABLED 1) 1559 if(SDL_JOYSTICK AND NOT APPLE) # results in unresolved symbols on OSX 1560 1561 file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/dummy/*.c) 1562 set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES}) 1563 endif() 1564endif() 1565if(NOT HAVE_SDL_HAPTIC) 1566 set(SDL_HAPTIC_DISABLED 1) 1567 file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/dummy/*.c) 1568 set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES}) 1569endif() 1570if(NOT HAVE_SDL_LOADSO) 1571 set(SDL_LOADSO_DISABLED 1) 1572 file(GLOB LOADSO_SOURCES ${SDL2_SOURCE_DIR}/src/loadso/dummy/*.c) 1573 set(SOURCE_FILES ${SOURCE_FILES} ${LOADSO_SOURCES}) 1574endif() 1575if(NOT HAVE_SDL_FILESYSTEM) 1576 set(SDL_FILESYSTEM_DISABLED 1) 1577 file(GLOB FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/dummy/*.c) 1578 set(SOURCE_FILES ${SOURCE_FILES} ${FILESYSTEM_SOURCES}) 1579endif() 1580if(NOT HAVE_SDL_SENSORS) 1581 set(SDL_SENSORS_DISABLED 1) 1582 file(GLOB SENSORS_SOURCES ${SDL2_SOURCE_DIR}/src/sensor/dummy/*.c) 1583 set(SOURCE_FILES ${SOURCE_FILES} ${SENSORS_SOURCES}) 1584endif() 1585 1586# We always need to have threads and timers around 1587if(NOT HAVE_SDL_THREADS) 1588 set(SDL_THREADS_DISABLED 1) 1589 file(GLOB THREADS_SOURCES ${SDL2_SOURCE_DIR}/src/thread/generic/*.c) 1590 set(SOURCE_FILES ${SOURCE_FILES} ${THREADS_SOURCES}) 1591endif() 1592if(NOT HAVE_SDL_TIMERS) 1593 set(SDL_TIMERS_DISABLED 1) 1594 file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/dummy/*.c) 1595 set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES}) 1596endif() 1597 1598if(NOT SDLMAIN_SOURCES) 1599 file(GLOB SDLMAIN_SOURCES ${SDL2_SOURCE_DIR}/src/main/dummy/*.c) 1600endif() 1601 1602# Append the -MMD -MT flags 1603# if(DEPENDENCY_TRACKING) 1604# if(COMPILER_IS_GNUCC) 1605# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -MMD -MT \$@") 1606# endif() 1607# endif() 1608 1609configure_file("${SDL2_SOURCE_DIR}/include/SDL_config.h.cmake" 1610 "${SDL2_BINARY_DIR}/include/SDL_config.h") 1611 1612# Prepare the flags and remove duplicates 1613if(EXTRA_LDFLAGS) 1614 list(REMOVE_DUPLICATES EXTRA_LDFLAGS) 1615endif() 1616if(EXTRA_LIBS) 1617 list(REMOVE_DUPLICATES EXTRA_LIBS) 1618endif() 1619if(EXTRA_CFLAGS) 1620 list(REMOVE_DUPLICATES EXTRA_CFLAGS) 1621endif() 1622listtostr(EXTRA_CFLAGS _EXTRA_CFLAGS) 1623set(EXTRA_CFLAGS ${_EXTRA_CFLAGS}) 1624 1625# Compat helpers for the configuration files 1626if(NOT WINDOWS OR CYGWIN) 1627 # TODO: we need a Windows script, too 1628 execute_process(COMMAND sh ${SDL2_SOURCE_DIR}/build-scripts/updaterev.sh) 1629 1630 set(prefix ${CMAKE_INSTALL_PREFIX}) 1631 set(exec_prefix "\${prefix}") 1632 set(libdir "\${exec_prefix}/lib${LIB_SUFFIX}") 1633 set(bindir "\${exec_prefix}/bin") 1634 set(includedir "\${prefix}/include") 1635 if(SDL_STATIC) 1636 set(ENABLE_STATIC_TRUE "") 1637 set(ENABLE_STATIC_FALSE "#") 1638 else() 1639 set(ENABLE_STATIC_TRUE "#") 1640 set(ENABLE_STATIC_FALSE "") 1641 endif() 1642 if(SDL_SHARED) 1643 set(ENABLE_SHARED_TRUE "") 1644 set(ENABLE_SHARED_FALSE "#") 1645 else() 1646 set(ENABLE_SHARED_TRUE "#") 1647 set(ENABLE_SHARED_FALSE "") 1648 endif() 1649 1650 # Clean up the different lists 1651 listtostr(EXTRA_LIBS _EXTRA_LIBS "-l") 1652 set(SDL_STATIC_LIBS ${SDL_LIBS} ${EXTRA_LDFLAGS} ${_EXTRA_LIBS}) 1653 list(REMOVE_DUPLICATES SDL_STATIC_LIBS) 1654 listtostr(SDL_STATIC_LIBS _SDL_STATIC_LIBS) 1655 set(SDL_STATIC_LIBS ${_SDL_STATIC_LIBS}) 1656 listtostr(SDL_LIBS _SDL_LIBS) 1657 set(SDL_LIBS ${_SDL_LIBS}) 1658 1659 # MESSAGE(STATUS "SDL_LIBS: ${SDL_LIBS}") 1660 # MESSAGE(STATUS "SDL_STATIC_LIBS: ${SDL_STATIC_LIBS}") 1661 1662 configure_file("${SDL2_SOURCE_DIR}/sdl2.pc.in" 1663 "${SDL2_BINARY_DIR}/sdl2.pc" @ONLY) 1664 configure_file("${SDL2_SOURCE_DIR}/sdl2-config.in" 1665 "${SDL2_BINARY_DIR}/sdl2-config") 1666 configure_file("${SDL2_SOURCE_DIR}/sdl2-config.in" 1667 "${SDL2_BINARY_DIR}/sdl2-config" @ONLY) 1668 configure_file("${SDL2_SOURCE_DIR}/SDL2.spec.in" 1669 "${SDL2_BINARY_DIR}/SDL2.spec" @ONLY) 1670endif() 1671 1672##### Info output ##### 1673message(STATUS "") 1674message(STATUS "SDL2 was configured with the following options:") 1675message(STATUS "") 1676message(STATUS "Platform: ${CMAKE_SYSTEM}") 1677message(STATUS "64-bit: ${ARCH_64}") 1678message(STATUS "Compiler: ${CMAKE_C_COMPILER}") 1679message(STATUS "") 1680message(STATUS "Subsystems:") 1681foreach(_SUB ${SDL_SUBSYSTEMS}) 1682 string(TOUPPER ${_SUB} _OPT) 1683 message_bool_option(${_SUB} SDL_${_OPT}) 1684endforeach() 1685message(STATUS "") 1686message(STATUS "Options:") 1687list(SORT ALLOPTIONS) 1688foreach(_OPT ${ALLOPTIONS}) 1689 # Longest option is VIDEO_X11_XSCREENSAVER = 22 characters 1690 # Get the padding 1691 string(LENGTH ${_OPT} _OPTLEN) 1692 math(EXPR _PADLEN "23 - ${_OPTLEN}") 1693 string(RANDOM LENGTH ${_PADLEN} ALPHABET " " _PADDING) 1694 message_tested_option(${_OPT} ${_PADDING}) 1695endforeach() 1696message(STATUS "") 1697message(STATUS " CFLAGS: ${CMAKE_C_FLAGS}") 1698message(STATUS " EXTRA_CFLAGS: ${EXTRA_CFLAGS}") 1699message(STATUS " EXTRA_LDFLAGS: ${EXTRA_LDFLAGS}") 1700message(STATUS " EXTRA_LIBS: ${EXTRA_LIBS}") 1701message(STATUS "") 1702message(STATUS " Build Shared Library: ${SDL_SHARED}") 1703message(STATUS " Build Static Library: ${SDL_STATIC}") 1704if(SDL_STATIC) 1705 message(STATUS " Build Static Library with Position Independent Code: ${SDL_STATIC_PIC}") 1706endif() 1707message(STATUS "") 1708if(UNIX) 1709 message(STATUS "If something was not detected, although the libraries") 1710 message(STATUS "were installed, then make sure you have set the") 1711 message(STATUS "CFLAGS and LDFLAGS environment variables correctly.") 1712 message(STATUS "") 1713endif() 1714 1715# Ensure that the extra cflags are used at compile time 1716set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") 1717 1718# Always build SDLmain 1719add_library(SDL2main STATIC ${SDLMAIN_SOURCES}) 1720target_include_directories(SDL2main PUBLIC $<INSTALL_INTERFACE:include/SDL2>) 1721set(_INSTALL_LIBS "SDL2main") 1722if (NOT ANDROID) 1723 set_target_properties(SDL2main PROPERTIES DEBUG_POSTFIX ${SDL_CMAKE_DEBUG_POSTFIX}) 1724endif() 1725 1726if(SDL_SHARED) 1727 add_library(SDL2 SHARED ${SOURCE_FILES} ${VERSION_SOURCES}) 1728 if(APPLE) 1729 set_target_properties(SDL2 PROPERTIES MACOSX_RPATH 1) 1730 elseif(UNIX AND NOT ANDROID) 1731 set_target_properties(SDL2 PROPERTIES 1732 VERSION ${LT_VERSION} 1733 SOVERSION ${LT_REVISION} 1734 OUTPUT_NAME "SDL2-${LT_RELEASE}") 1735 else() 1736 set_target_properties(SDL2 PROPERTIES 1737 VERSION ${SDL_VERSION} 1738 SOVERSION ${LT_REVISION} 1739 OUTPUT_NAME "SDL2") 1740 endif() 1741 if(MSVC AND NOT LIBC) 1742 # Don't try to link with the default set of libraries. 1743 set_target_properties(SDL2 PROPERTIES LINK_FLAGS_RELEASE "/NODEFAULTLIB") 1744 set_target_properties(SDL2 PROPERTIES LINK_FLAGS_DEBUG "/NODEFAULTLIB") 1745 set_target_properties(SDL2 PROPERTIES STATIC_LIBRARY_FLAGS "/NODEFAULTLIB") 1746 endif() 1747 set(_INSTALL_LIBS "SDL2" ${_INSTALL_LIBS}) 1748 target_link_libraries(SDL2 ${EXTRA_LIBS} ${EXTRA_LDFLAGS}) 1749 target_include_directories(SDL2 PUBLIC $<INSTALL_INTERFACE:include/SDL2>) 1750 if (NOT ANDROID) 1751 set_target_properties(SDL2 PROPERTIES DEBUG_POSTFIX ${SDL_CMAKE_DEBUG_POSTFIX}) 1752 endif() 1753endif() 1754 1755if(SDL_STATIC) 1756 set (BUILD_SHARED_LIBS FALSE) 1757 add_library(SDL2-static STATIC ${SOURCE_FILES}) 1758 if (NOT SDL_SHARED OR NOT WIN32) 1759 set_target_properties(SDL2-static PROPERTIES OUTPUT_NAME "SDL2") 1760 # Note: Apparently, OUTPUT_NAME must really be unique; even when 1761 # CMAKE_IMPORT_LIBRARY_SUFFIX or the like are given. Otherwise 1762 # the static build may race with the import lib and one will get 1763 # clobbered, when the suffix is realized via subsequent rename. 1764 endif() 1765 set_target_properties(SDL2-static PROPERTIES POSITION_INDEPENDENT_CODE ${SDL_STATIC_PIC}) 1766 if(MSVC AND NOT LIBC) 1767 set_target_properties(SDL2-static PROPERTIES LINK_FLAGS_RELEASE "/NODEFAULTLIB") 1768 set_target_properties(SDL2-static PROPERTIES LINK_FLAGS_DEBUG "/NODEFAULTLIB") 1769 set_target_properties(SDL2-static PROPERTIES STATIC_LIBRARY_FLAGS "/NODEFAULTLIB") 1770 endif() 1771 # TODO: Win32 platforms keep the same suffix .lib for import and static 1772 # libraries - do we need to consider this? 1773 set(_INSTALL_LIBS "SDL2-static" ${_INSTALL_LIBS}) 1774 target_link_libraries(SDL2-static ${EXTRA_LIBS} ${EXTRA_LDFLAGS}) 1775 target_include_directories(SDL2-static PUBLIC $<INSTALL_INTERFACE:include/SDL2>) 1776 if (NOT ANDROID) 1777 set_target_properties(SDL2-static PROPERTIES DEBUG_POSTFIX ${SDL_CMAKE_DEBUG_POSTFIX}) 1778 endif() 1779endif() 1780 1781##### Tests ##### 1782 1783if(SDL_TEST) 1784 file(GLOB TEST_SOURCES ${SDL2_SOURCE_DIR}/src/test/*.c) 1785 add_library(SDL2_test STATIC ${TEST_SOURCES}) 1786 1787 add_subdirectory(test) 1788endif() 1789 1790##### Installation targets ##### 1791install(TARGETS ${_INSTALL_LIBS} EXPORT SDL2Targets 1792 LIBRARY DESTINATION "lib${LIB_SUFFIX}" 1793 ARCHIVE DESTINATION "lib${LIB_SUFFIX}" 1794 RUNTIME DESTINATION bin) 1795 1796##### Export files ##### 1797if (APPLE) 1798 set(PKG_PREFIX "SDL2.framework/Resources") 1799elseif (WINDOWS) 1800 set(PKG_PREFIX "cmake") 1801else () 1802 set(PKG_PREFIX "lib/cmake/SDL2") 1803endif () 1804 1805include(CMakePackageConfigHelpers) 1806write_basic_package_version_file("${CMAKE_BINARY_DIR}/SDL2ConfigVersion.cmake" 1807 VERSION ${SDL_VERSION} 1808 COMPATIBILITY AnyNewerVersion 1809) 1810 1811install(EXPORT SDL2Targets 1812 FILE SDL2Targets.cmake 1813 NAMESPACE SDL2:: 1814 DESTINATION ${PKG_PREFIX} 1815) 1816install( 1817 FILES 1818 ${CMAKE_CURRENT_SOURCE_DIR}/SDL2Config.cmake 1819 ${CMAKE_BINARY_DIR}/SDL2ConfigVersion.cmake 1820 DESTINATION ${PKG_PREFIX} 1821 COMPONENT Devel 1822) 1823 1824file(GLOB INCLUDE_FILES ${SDL2_SOURCE_DIR}/include/*.h) 1825file(GLOB BIN_INCLUDE_FILES ${SDL2_BINARY_DIR}/include/*.h) 1826foreach(_FNAME ${BIN_INCLUDE_FILES}) 1827 get_filename_component(_INCNAME ${_FNAME} NAME) 1828 list(REMOVE_ITEM INCLUDE_FILES ${SDL2_SOURCE_DIR}/include/${_INCNAME}) 1829endforeach() 1830list(APPEND INCLUDE_FILES ${BIN_INCLUDE_FILES}) 1831install(FILES ${INCLUDE_FILES} DESTINATION include/SDL2) 1832 1833string(TOUPPER "${CMAKE_BUILD_TYPE}" UPPER_BUILD_TYPE) 1834if (UPPER_BUILD_TYPE MATCHES DEBUG) 1835 set(SOPOSTFIX "${SDL_CMAKE_DEBUG_POSTFIX}") 1836else() 1837 set(SOPOSTFIX "") 1838endif() 1839 1840if(NOT (WINDOWS OR CYGWIN)) 1841 if(SDL_SHARED) 1842 if (APPLE) 1843 set(SOEXT "dylib") 1844 else() 1845 set(SOEXT "so") 1846 endif() 1847 if(NOT ANDROID) 1848 install(CODE " 1849 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink 1850 \"libSDL2-2.0${SOPOSTFIX}.${SOEXT}\" \"libSDL2.${SOEXT}\")" 1851 WORKING_DIR "${SDL2_BINARY_DIR}") 1852 install(FILES ${SDL2_BINARY_DIR}/libSDL2.${SOEXT} DESTINATION "lib${LIB_SUFFIX}") 1853 endif() 1854 endif() 1855 if(FREEBSD) 1856 # FreeBSD uses ${PREFIX}/libdata/pkgconfig 1857 install(FILES ${SDL2_BINARY_DIR}/sdl2.pc DESTINATION "libdata/pkgconfig") 1858 else() 1859 install(FILES ${SDL2_BINARY_DIR}/sdl2.pc 1860 DESTINATION "lib${LIB_SUFFIX}/pkgconfig") 1861 endif() 1862 install(PROGRAMS ${SDL2_BINARY_DIR}/sdl2-config DESTINATION bin) 1863 # TODO: what about the .spec file? Is it only needed for RPM creation? 1864 install(FILES "${SDL2_SOURCE_DIR}/sdl2.m4" DESTINATION "${CMAKE_INSTALL_FULL_DATAROOTDIR}/aclocal") 1865endif() 1866 1867##### Uninstall target ##### 1868 1869if(NOT TARGET uninstall) 1870 configure_file( 1871 "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" 1872 "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" 1873 IMMEDIATE @ONLY) 1874 1875 add_custom_target(uninstall 1876 COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) 1877endif() 1878
[FILE END]
(C) 2025 0x4248 (C) 2025 4248 Media and 4248 Systems, All part of 0x4248 See LICENCE files for more information. Not all files are by 0x4248 always check Licencing.