Updated Linux joystick code to support hotplug, GUIDs, etc.
This uses libudev for hotplug, but it's optional, so we'll just try to find
some reasonable defaults without it (maybe an older Linux box or under
FreeBSD's Linux emulation?).
1 if(${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")
5 cmake_minimum_required(VERSION 2.6)
7 include(CheckFunctionExists)
8 include(CheckLibraryExists)
9 include(CheckIncludeFiles)
10 include(CheckIncludeFile)
11 include(CheckSymbolExists)
12 include(CheckCSourceRuns)
13 include(CheckCCompilerFlag)
14 include(CheckTypeSize)
15 include(CheckStructHasMember)
16 include(CMakeDependentOption)
17 include(FindPkgConfig)
18 set(CMAKE_MODULE_PATH "${SDL2_SOURCE_DIR}/cmake")
19 include(${SDL2_SOURCE_DIR}/cmake/macros.cmake)
20 include(${SDL2_SOURCE_DIR}/cmake/sdlchecks.cmake)
23 # Edit include/SDL_version.h and change the version, then:
24 # SDL_MICRO_VERSION += 1;
25 # SDL_INTERFACE_AGE += 1;
26 # SDL_BINARY_AGE += 1;
27 # if any functions have been added, set SDL_INTERFACE_AGE to 0.
28 # if backwards compatibility has been broken,
29 # set SDL_BINARY_AGE and SDL_INTERFACE_AGE to 0.
30 set(SDL_MAJOR_VERSION 2)
31 set(SDL_MINOR_VERSION 0)
32 set(SDL_MICRO_VERSION 0)
33 set(SDL_INTERFACE_AGE 0)
35 set(SDL_VERSION "${SDL_MAJOR_VERSION}.${SDL_MINOR_VERSION}.${SDL_MICRO_VERSION}")
37 # Calculate a libtool-like version number
38 math(EXPR LT_CURRENT "${SDL_MICRO_VERSION} - ${SDL_INTERFACE_AGE}")
39 math(EXPR LT_AGE "${SDL_BINARY_AGE} - ${SDL_INTERFACE_AGE}")
40 set(LT_REVISION "${SDL_INTERFACE_AGE}")
42 # General settings & flags
43 set(LIBRARY_OUTPUT_DIRECTORY "build")
44 # Check for 64 or 32 bit
45 set(SIZEOF_VOIDP ${CMAKE_SIZEOF_VOID_P})
46 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
48 set(PROCESSOR_ARCH "x64")
51 set(PROCESSOR_ARCH "x86")
52 endif(CMAKE_SIZEOF_VOID_P EQUAL 8)
63 elseif(UNIX AND NOT APPLE)
64 if(CMAKE_SYSTEM_NAME MATCHES ".*Linux")
66 elseif(CMAKE_SYSTEM_NAME MATCHES "kFreeBSD.*")
68 elseif(CMAKE_SYSTEM_NAME MATCHES "kNetBSD.*|NetBSD.*")
70 elseif(CMAKE_SYSTEM_NAME MATCHES "kOpenBSD.*|OpenBSD.*")
72 elseif(CMAKE_SYSTEM_NAME MATCHES ".*GNU.*")
74 elseif(CMAKE_SYSTEM_NAME MATCHES ".*BSDI.*")
76 elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly.*|FreeBSD")
78 elseif(CMAKE_SYSTEM_NAME MATCHES "SYSV5.*")
80 elseif(CMAKE_SYSTEM_NAME MATCHES "Solaris.*")
82 elseif(CMAKE_SYSTEM_NAME MATCHES "HP-UX.*")
84 elseif(CMAKE_SYSTEM_NAME MATCHES "AIX.*")
86 elseif(CMAKE_SYSTEM_NAME MATCHES "Minix.*")
90 if(CMAKE_SYSTEM_NAME MATCHES ".*Darwin.*")
92 elseif(CMAKE_SYSTEM_NAME MATCHES ".*MacOS.*")
96 elseif(CMAKE_SYSTEM_NAME MATCHES "Haiku.*|BeOS.*")
100 # Don't mistake osx for unix
101 if(UNIX AND NOT APPLE)
105 endif(UNIX AND NOT APPLE)
107 # Default option knobs
109 set(OPT_DEF_SSEMATH ON)
111 if(UNIX OR MINGW OR MSYS)
113 endif(UNIX OR MINGW OR MSYS)
116 if(CMAKE_COMPILER_IS_GNUCC)
118 set(OPT_DEF_ASM TRUE)
119 elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
121 set(OPT_DEF_ASM TRUE)
122 elseif(MSVC_VERSION GREATER 1400) # VisualStudio 8.0+
123 set(OPT_DEF_ASM TRUE)
124 #set(CMAKE_C_FLAGS "/ZI /WX- /
126 set(OPT_DEF_ASM FALSE)
127 endif(CMAKE_COMPILER_IS_GNUCC)
129 # Default flags, if not set otherwise
130 if("$ENV{CFLAGS}" STREQUAL "")
131 if(USE_GCC OR USE_CLANG)
132 set(CMAKE_C_FLAGS "-g -O3")
133 endif(USE_GCC OR USE_CLANG)
134 else("$ENV{CFLAGS}" STREQUAL "")
135 set(CMAKE_C_FLAGS "$ENV{CFLAGS}")
136 list(APPEND EXTRA_CFLAGS "$ENV{CFLAGS}")
137 endif("$ENV{CFLAGS}" STREQUAL "")
138 if(NOT ("$ENV{CFLAGS}" STREQUAL "")) # Hackish, but does the trick on Win32
139 list(APPEND EXTRA_LDFLAGS "$ENV{LDFLAGS}")
140 endif(NOT ("$ENV{CFLAGS}" STREQUAL ""))
142 # Those are used for pkg-config and friends, so that the SDL2.pc, sdl2-config,
143 # etc. are created correctly.
144 set(SDL_LIBS "-lSDL2")
148 # We build SDL on cygwin without the UNIX emulation layer
149 include_directories("-I/usr/include/mingw")
150 set(CMAKE_REQUIRED_FLAGS "-mno-cygwin")
151 check_c_source_compiles("int main(int argc, char **argv) {}"
153 set(CMAKE_REQUIRED_FLAGS)
154 if(HAVE_GCC_NO_CYGWIN)
155 list(APPEND EXTRA_LDFLAGS "-mno-cygwin")
156 list(APPEND SDL_LIBS "-mno-cygwin")
157 endif(HAVE_GCC_NO_CYGWIN)
158 set(SDL_CFLAGS "${SDL_CFLAGS} -I/usr/include/mingw")
161 add_definitions(-DUSING_GENERATED_CONFIG_H)
163 include_directories(${SDL2_BINARY_DIR}/include ${SDL2_SOURCE_DIR}/include)
166 Atomic Audio Video Render Events Joystick Haptic Power Threads Timers
168 foreach(_SUB ${SDL_SUBSYSTEMS})
169 string(TOUPPER ${_SUB} _OPT)
170 option(SDL_${_OPT} "Enable the ${_SUB} subsystem" ON)
173 option_string(ASSERTIONS "Enable internal sanity checks (auto/disabled/release/enabled/paranoid)" "auto")
174 #set_option(DEPENDENCY_TRACKING "Use gcc -MMD -MT dependency tracking" ON)
175 set_option(LIBC "Use the system C library" ${OPT_DEF_LIBC})
176 set_option(GCC_ATOMICS "Use gcc builtin atomics" ${USE_GCC})
177 set_option(ASSEMBLY "Enable assembly routines" ${OPT_DEF_ASM})
178 set_option(SSEMATH "Allow GCC to use SSE floating point math" ${OPT_DEF_SSEMATH})
179 set_option(MMX "Use MMX assembly routines" ${OPT_DEF_ASM})
180 set_option(3DNOW "Use 3Dnow! MMX assembly routines" ${OPT_DEF_ASM})
181 set_option(SSE "Use SSE assembly routines" ${OPT_DEF_ASM})
182 set_option(SSE2 "Use SSE2 assembly routines" ${OPT_DEF_SSEMATH})
183 set_option(ALTIVEC "Use Altivec assembly routines" ${OPT_DEF_ASM})
184 set_option(DISKAUDIO "Support the disk writer audio driver" ON)
185 set_option(DUMMYAUDIO "Support the dummy audio driver" ON)
186 set_option(VIDEO_DIRECTFB "Use DirectFB video driver" OFF)
187 dep_option(DIRECTFB_SHARED "Dynamically load directfb support" ON "VIDEO_DIRECTFB" OFF)
188 set_option(FUSIONSOUND "Use FusionSound audio driver" OFF)
189 dep_option(FUSIONSOUND_SHARED "Dynamically load fusionsound audio support" ON "FUSIONSOUND_SHARED" OFF)
190 set_option(VIDEO_DUMMY "Use dummy video driver" ON)
191 set_option(VIDEO_OPENGL "Include OpenGL support" ON)
192 set_option(VIDEO_OPENGLES "Include OpenGL ES support" ON)
193 set_option(PTHREADS "Use POSIX threads for multi-threading" ${UNIX_SYS})
194 dep_option(PTHREADS_SEM "Use pthread semaphores" ON "PTHREADS" OFF)
195 set_option(SDL_DLOPEN "Use dlopen for shared object loading" ON)
196 set_option(OSS "Support the OSS audio API" ${UNIX_SYS})
197 set_option(ALSA "Support the ALSA audio API" ${UNIX_SYS})
198 dep_option(ALSA_SHARED "Dynamically load ALSA audio support" ON "ALSA" OFF)
199 set_option(ESD "Support the Enlightened Sound Daemon" ${UNIX_SYS})
200 dep_option(ESD_SHARED "Dynamically load ESD audio support" ON "ESD" OFF)
201 set_option(PULSEAUDIO "Use PulseAudio" ${UNIX_SYS})
202 dep_option(PULSEAUDIO_SHARED "Dynamically load PulseAudio support" ON "PULSEAUDIO" OFF)
203 set_option(ARTS "Support the Analog Real Time Synthesizer" ${UNIX_SYS})
204 dep_option(ARTS_SHARED "Dynamically load aRts audio support" ON "ARTS" OFF)
205 set_option(NAS "Support the NAS audio API" ${UNIX_SYS})
206 set_option(RPATH "Use an rpath when linking SDL" ${UNIX_SYS})
207 set_option(CLOCK_GETTIME "Use clock_gettime() instead of gettimeofday()" OFF)
208 set_option(INPUT_TSLIB "Use the Touchscreen library for input" ${UNIX_SYS})
209 set_option(VIDEO_X11 "Use X11 video driver" ${UNIX_SYS})
210 dep_option(X11_SHARED "Dynamically load X11 support" ON "VIDEO_X11" OFF)
211 set(SDL_X11_OPTIONS Xcursor Xinerama XInput Xrandr Xscrnsaver XShape Xvm)
212 foreach(_SUB ${SDL_X11_OPTIONS})
213 string(TOUPPER "VIDEO_X11_${_SUB}" _OPT)
214 dep_option(${_OPT} "Enable ${_SUB} support" ON "VIDEO_X11" OFF)
216 set_option(VIDEO_COCOA "Use Cocoa video driver" ${APPLE})
217 set_option(DIRECTX "Use DirectX for Windows audio/video" ${WINDOWS})
218 set_option(RENDER_D3D "Enable the Direct3D render driver" ${WINDOWS})
220 # TODO: We should (should we?) respect cmake's ${BUILD_SHARED_LIBS} flag here
221 # The options below are for compatibility to configure's default behaviour.
222 set(SDL_SHARED ON CACHE BOOL "Build a shared version of the library")
223 set(SDL_STATIC ON CACHE BOOL "Build a static version of the library")
225 # General source files
226 file(GLOB SOURCE_FILES
227 ${SDL2_SOURCE_DIR}/src/*.c
228 ${SDL2_SOURCE_DIR}/src/atomic/*.c
229 ${SDL2_SOURCE_DIR}/src/audio/*.c
230 ${SDL2_SOURCE_DIR}/src/cpuinfo/*.c
231 ${SDL2_SOURCE_DIR}/src/events/*.c
232 ${SDL2_SOURCE_DIR}/src/file/*.c
233 ${SDL2_SOURCE_DIR}/src/libm/*.c
234 ${SDL2_SOURCE_DIR}/src/render/*.c
235 ${SDL2_SOURCE_DIR}/src/render/*/*.c
236 ${SDL2_SOURCE_DIR}/src/stdlib/*.c
237 ${SDL2_SOURCE_DIR}/src/thread/*.c
238 ${SDL2_SOURCE_DIR}/src/timer/*.c
239 ${SDL2_SOURCE_DIR}/src/video/*.c)
242 if(ASSERTIONS STREQUAL "auto")
243 # Do nada - use optimization settings to determine the assertion level
244 elseif(ASSERTIONS STREQUAL "disabled")
245 set(SDL_DEFAULT_ASSERT_LEVEL 0)
246 elseif(ASSERTIONS STREQUAL "release")
247 set(SDL_DEFAULT_ASSERT_LEVEL 1)
248 elseif(ASSERTIONS STREQUAL "enabled")
249 set(SDL_DEFAULT_ASSERT_LEVEL 2)
250 elseif(ASSERTIONS STREQUAL "paranoid")
251 set(SDL_DEFAULT_ASSERT_LEVEL 3)
253 message_error("unknown assertion level")
254 endif(ASSERTIONS STREQUAL "auto")
255 set(HAVE_ASSERTIONS ${ASSERTIONS})
257 # Compiler option evaluation
259 if(DEPENDENCY_TRACKING)
260 check_c_source_compiles("
261 #if !defined(__GNUC__) || __GNUC__ < 3
262 #error Dependency tracking requires GCC 3.0 or newer
264 int main(int argc, char **argv) { }" HAVE_DEPENDENCY_TRACKING)
265 endif(DEPENDENCY_TRACKING)
268 check_c_source_compiles("int main(int argc, char **argv) {
271 __sync_lock_test_and_set(&a, 4);
272 __sync_lock_test_and_set(&x, y);
273 __sync_fetch_and_add(&a, 1);
274 __sync_bool_compare_and_swap(&a, 5, 10);
275 __sync_bool_compare_and_swap(&x, y, z); }" HAVE_GCC_ATOMICS)
276 if(NOT HAVE_GCC_ATOMICS)
277 check_c_source_compiles("int main(int argc, char **argv) {
279 __sync_lock_test_and_set(&a, 1);
280 __sync_lock_release(&a); }" HAVE_GCC_SYNC_LOCK_TEST_AND_SET)
281 endif(NOT HAVE_GCC_ATOMICS)
284 set(CMAKE_REQUIRED_FLAGS "-mpreferred-stack-boundary=2")
285 check_c_source_compiles("int x = 0; int main(int argc, char **argv) {}"
286 HAVE_GCC_PREFERRED_STACK_BOUNDARY)
287 set(CMAKE_REQUIRED_FLAGS)
289 set(CMAKE_REQUIRED_FLAGS "-fvisibility=hidden -Werror")
290 check_c_source_compiles("
291 #if !defined(__GNUC__) || __GNUC__ < 4
292 #error SDL only uses visibility attributes in GCC 4 or newer
294 int main(int argc, char **argv) {}" HAVE_GCC_FVISIBILITY)
295 if(HAVE_GCC_FVISIBILITY)
296 list(APPEND EXTRA_CFLAGS "-fvisibility=hidden")
297 endif(HAVE_GCC_FVISIBILITY)
298 set(CMAKE_REQUIRED_FLAGS)
300 check_c_compiler_flag(-Wall HAVE_GCC_WALL)
302 if(CMAKE_SYSTEM_NAME MATCHES "Haiku|BeOS")
303 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-multichar")
304 endif(CMAKE_SYSTEM_NAME MATCHES "Haiku|BeOS")
309 if(USE_GCC OR USE_CLANG)
310 set(SDL_ASSEMBLY_ROUTINES 1)
311 # TODO: Those all seem to be quite GCC specific - needs to be
312 # reworked for better compiler support
313 set(HAVE_ASSEMBLY TRUE)
315 set(CMAKE_REQUIRED_FLAGS "-mmmx")
316 check_c_source_compiles("
319 #ifdef __MINGW64_VERSION_MAJOR
322 #include <mmintrin.h>
325 #include <mmintrin.h>
328 #error Assembler CPP flag not enabled
330 int main(int argc, char **argv) { }" HAVE_MMX)
332 list(APPEND EXTRA_CFLAGS "-mmmx")
334 set(CMAKE_REQUIRED_FLAGS)
338 set(CMAKE_REQUIRED_FLAGS "-m3dnow")
339 check_c_source_compiles("
342 #error Assembler CPP flag not enabled
344 int main(int argc, char **argv) {
349 list(APPEND EXTRA_CFLAGS "-m3dnow")
351 set(CMAKE_REQUIRED_FLAGS)
355 set(CMAKE_REQUIRED_FLAGS "-msse")
356 check_c_source_compiles("
359 #ifdef __MINGW64_VERSION_MAJOR
362 #include <xmmintrin.h>
365 #include <xmmintrin.h>
368 #error Assembler CPP flag not enabled
370 int main(int argc, char **argv) { }" HAVE_SSE)
372 list(APPEND EXTRA_CFLAGS "-msse")
374 set(CMAKE_REQUIRED_FLAGS)
378 set(CMAKE_REQUIRED_FLAGS "-msse2")
379 check_c_source_compiles("
382 #ifdef __MINGW64_VERSION_MAJOR
385 #include <emmintrin.h>
388 #include <emmintrin.h>
391 #error Assembler CPP flag not enabled
393 int main(int argc, char **argv) { }" HAVE_SSE2)
395 list(APPEND EXTRA_CFLAGS "-msse2")
397 set(CMAKE_REQUIRED_FLAGS)
403 list(APPEND EXTRA_CFLAGS "-mfpmath=387")
405 set(HAVE_SSEMATH TRUE)
410 set(CMAKE_REQUIRED_FLAGS "-maltivec")
411 check_c_source_compiles("
413 vector unsigned int vzero() {
414 return vec_splat_u32(0);
416 int main(int argc, char **argv) { }" HAVE_ALTIVEC_H_HDR)
417 check_c_source_compiles("
418 vector unsigned int vzero() {
419 return vec_splat_u32(0);
421 int main(int argc, char **argv) { }" HAVE_ALTIVEC)
422 set(CMAKE_REQUIRED_FLAGS)
423 if(HAVE_ALTIVEC OR HAVE_ALTIVEC_H_HDR)
424 set(HAVE_ALTIVEC TRUE) # if only HAVE_ALTIVEC_H_HDR is set
425 list(APPEND EXTRA_CFLAGS "-maltivec")
426 set(SDL_ALTIVEC_BLITTERS 1)
427 if(HAVE_ALTIVEC_H_HDR)
428 set(HAVE_ALTIVEC_H 1)
429 endif(HAVE_ALTIVEC_H_HDR)
430 endif(HAVE_ALTIVEC OR HAVE_ALTIVEC_H_HDR)
432 elseif(MSVC_VERSION GREATER 1500)
433 # TODO: SDL_cpuinfo.h needs to support the user's configuration wish
434 # for MSVC - right now it is always activated
441 set(SDL_ASSEMBLY_ROUTINES 1)
442 endif(USE_GCC OR USE_CLANG)
445 # if(USE_GCC OR USE_CLANG)
446 # list(APPEND EXTRA_CFLAGS "-mno-sse" "-mno-sse2" "-mno-mmx")
447 # endif(USE_GCC OR USE_CLANG)
450 # TODO: Can't deactivate on FreeBSD? w/o LIBC, SDL_stdinc.h can't define
453 if(WINDOWS AND NOT MINGW)
455 foreach(_HEADER stdio.h string.h ctype.h math.h)
456 string(TOUPPER "HAVE_${_HEADER}" _UPPER)
457 string(REPLACE "." "_" _HAVE_H ${_UPPER})
462 malloc calloc realloc free qsort abs memset memcpy memmove memcmp
463 strlen _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa
464 _ultoa strtol strtoul strtoll strtod atoi atof strcmp strncmp
465 _stricmp _strnicmp sscanf atan atan2 ceil copysign cos cosf fabs
466 floor log pow scalbn sin sinf sqrt)
467 string(TOUPPER ${_FN} _UPPER)
468 set(HAVE_${_UPPER} 1)
470 if(NOT CYGWIN AND NOT MINGW)
472 endif(NOT CYGWIN AND NOT MINGW)
474 add_definitions(-D_USE_MATH_DEFINES) # needed for M_PI
476 else(WINDOWS AND NOT MINGW)
478 check_include_file(sys/types.h HAVE_SYS_TYPES_H)
480 stdio.h stdlib.h stddef.h stdarg.h malloc.h memory.h string.h
481 strings.h inttypes.h stdint.h ctype.h math.h iconv.h signal.h)
482 string(TOUPPER "HAVE_${_HEADER}" _UPPER)
483 string(REPLACE "." "_" _HAVE_H ${_UPPER})
484 check_include_file("${_HEADER}" ${_HAVE_H})
487 check_include_files("dlfcn.h;stdint.h;stddef.h;inttypes.h;stdlib.h;strings.h;string.h;float.h" STDC_HEADERS)
488 check_type_size("size_t" SIZEOF_SIZE_T)
489 check_symbol_exists(M_PI math.h HAVE_M_PI)
490 # TODO: refine the mprotect check
491 check_c_source_compiles("#include <sys/types.h>
492 #include <sys/mman.h>
493 int main() { }" HAVE_MPROTECT)
495 strtod malloc calloc realloc free getenv setenv putenv unsetenv
496 qsort abs bcopy memset memcpy memmove memcmp strlen strlcpy strlcat
497 strdup _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa
498 _uitoa _ultoa strtol strtoul _i64toa _ui64toa strtoll strtoull
499 atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp strncasecmp
500 sscanf snprintf vsnprintf fseeko fseeko64 sigaction setjmp
501 nanosleep sysconf sysctlbyname
503 string(TOUPPER ${_FN} _UPPER)
504 set(_HAVEVAR "HAVE_${_UPPER}")
505 check_function_exists("${_FN}" ${_HAVEVAR})
508 check_library_exists(m pow "" HAVE_LIBM)
510 set(CMAKE_REQUIRED_LIBRARIES m)
512 atan atan2 ceil copysign cos cosf fabs floor log pow scalbn sin
514 string(TOUPPER ${_FN} _UPPER)
515 set(_HAVEVAR "HAVE_${_UPPER}")
516 check_function_exists("${_FN}" ${_HAVEVAR})
518 set(CMAKE_REQUIRED_LIBRARIES)
519 list(APPEND EXTRA_LIBS m)
522 check_library_exists(iconv iconv_open "" HAVE_LIBICONV)
524 list(APPEND EXTRA_LIBS iconv)
527 check_struct_has_member("struct sigaction" "sa_sigaction" "signal.h" HAVE_SA_SIGACTION)
528 endif(WINDOWS AND NOT MINGW)
537 # Enable/disable various subsystems of the SDL library
538 foreach(_SUB ${SDL_SUBSYSTEMS})
539 string(TOUPPER ${_SUB} _OPT)
541 set(SDL_${_OPT}_DISABLED 1)
542 endif(NOT SDL_${_OPT})
545 file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/*.c)
546 set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES})
550 # Haptic requires some private functions from the joystick subsystem.
551 message_error("SDL_HAPTIC requires SDL_JOYSTICK, which is not enabled")
552 endif(NOT SDL_JOYSTICK)
553 file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/*.c)
554 set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES})
557 file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/*.c)
558 set(SOURCE_FILES ${SOURCE_FILES} ${POWER_SOURCES})
560 # TODO: in configure.in, the test for LOADSO and SDL_DLOPEN is a bit weird:
561 # if LOADSO is not wanted, SDL_LOADSO_DISABLED is set
562 # If however on Unix or APPLE dlopen() is detected via CheckDLOPEN(),
563 # SDL_LOADSO_DISABLED will not be set, regardless of the LOADSO settings
565 # General SDL subsystem options, valid for all platforms
567 # CheckDummyAudio/CheckDiskAudio - valid for all platforms
569 set(SDL_AUDIO_DRIVER_DUMMY 1)
570 file(GLOB DUMMYAUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/dummy/*.c)
571 set(SOURCE_FILES ${SOURCE_FILES} ${DUMMYAUDIO_SOURCES})
572 set(HAVE_DUMMYAUDIO TRUE)
575 set(SDL_AUDIO_DRIVER_DISK 1)
576 file(GLOB DISKAUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/disk/*.c)
577 set(SOURCE_FILES ${SOURCE_FILES} ${DISKAUDIO_SOURCES})
578 set(HAVE_DISKAUDIO TRUE)
583 # Relevant for Unix/Darwin only
591 set(SDL_VIDEO_DRIVER_DUMMY 1)
592 file(GLOB VIDEO_DUMMY_SOURCES ${SDL2_SOURCE_DIR}/src/video/dummy/*.c)
593 set(SOURCE_FILES ${SOURCE_FILES} ${VIDEO_DUMMY_SOURCES})
594 set(HAVE_VIDEO_DUMMY TRUE)
595 set(HAVE_SDL_VIDEO TRUE)
599 # Platform-specific options and settings
600 if(UNIX AND NOT APPLE)
602 if(SYSV5 OR SOLARIS OR HPUX)
603 set(SDL_AUDIO_DRIVER_SUNAUDIO 1)
604 file(GLOB SUN_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/sun/*.c)
605 set(SOURCE_FILES ${SOURCE_FILES} ${SUN_AUDIO_SOURCES})
606 set(HAVE_SDL_AUDIO TRUE)
607 elseif(NETBSD OR OPENBSD)
608 set(SDL_AUDIO_DRIVER_BSD 1)
609 file(GLOB BSD_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/bsd/*.c)
610 set(SOURCE_FILES ${SOURCE_FILES} ${BSD_AUDIO_SOURCES})
611 set(HAVE_SDL_AUDIO TRUE)
613 set(SDL_AUDIO_DRIVER_PAUDIO 1)
614 file(GLOB AIX_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/paudio/*.c)
615 set(SOURCE_FILES ${SOURCE_FILES} ${AIX_AUDIO_SOURCES})
616 set(HAVE_SDL_AUDIO TRUE)
635 check_c_source_compiles("
636 #include <linux/input.h>
638 #error EVIOCGNAME() ioctl not available
640 int main(int argc, char** argv) {}" HAVE_INPUT_EVENTS)
641 if(HAVE_INPUT_EVENTS)
642 set(SDL_INPUT_LINUXEV 1)
643 endif(HAVE_INPUT_EVENTS)
645 if(SDL_HAPTIC AND HAVE_INPUT_EVENTS)
646 set(SDL_HAPTIC_LINUX 1)
647 file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/linux/*.c)
648 set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES})
649 set(HAVE_SDL_HAPTIC TRUE)
650 endif(SDL_HAPTIC AND HAVE_INPUT_EVENTS)
652 check_include_file("libudev.h" HAVE_LIBUDEV_H)
656 check_c_source_compiles("
658 int main(int argc, char** argv) { }" HAVE_INPUT_TSLIB)
660 set(SDL_INPUT_TSLIB 1)
661 list(APPEND EXTRA_LIBS ts)
662 endif(HAVE_INPUT_TSLIB)
666 CheckUSBHID() # seems to be BSD specific - limit the test to BSD only?
668 set(SDL_JOYSTICK_LINUX 1)
669 file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/linux/*.c)
670 set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES})
671 set(HAVE_SDL_JOYSTICK TRUE)
678 check_library_exists(rt clock_gettime "" FOUND_CLOCK_GETTIME)
679 if(FOUND_CLOCK_GETTIME)
680 list(APPEND EXTRA_LIBS rt)
681 set(HAVE_CLOCK_GETTIME 1)
682 else(FOUND_CLOCK_GETTIME)
683 check_library_exists(c clock_gettime "" FOUND_CLOCK_GETTIME)
684 if(FOUND_CLOCK_GETTIME)
685 set(HAVE_CLOCK_GETTIME 1)
686 endif(FOUND_CLOCK_GETTIME)
687 endif(HAVE_CLOCK_GETTIME)
690 check_include_file(linux/version.h HAVE_LINUX_VERSION_H)
691 if(HAVE_LINUX_VERSION_H)
692 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_LINUX_VERSION_H")
693 endif(HAVE_LINUX_VERSION_H)
697 set(SDL_POWER_LINUX 1)
698 file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/linux/*.c)
699 set(SOURCE_FILES ${SOURCE_FILES} ${POWER_SOURCES})
700 set(HAVE_SDL_POWER TRUE)
705 set(SDL_TIMER_UNIX 1)
706 file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/unix/*.c)
707 set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES})
708 set(HAVE_SDL_TIMERS TRUE)
712 set(SDL_RLD_FLAGS "")
713 if(BSDI OR FREEBSD OR LINUX OR NETBSD)
714 set(SDL_RLD_FLAGS "-Wl,-rpath,\${libdir}")
716 set(SDL_RLD_FLAGS "-R\${libdir}")
718 set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
723 find_program(WINDRES windres)
725 check_c_source_compiles("
727 int main(int argc, char **argv) { }" HAVE_WIN32_CC)
729 file(GLOB WIN_SOURCES ${SDL2_SOURCE_DIR}/src/core/windows/*.c)
730 set(SOURCE_FILES ${SOURCE_FILES} ${WIN_SOURCES})
734 if("$ENV{DXSDK_DIR}" STREQUAL "")
735 message_error("DIRECTX requires the \$DXSDK_DIR environment variable to be set")
736 endif("$ENV{DXSDK_DIR}" STREQUAL "")
737 set(CMAKE_REQUIRED_FLAGS "/I\"$ENV{DXSDK_DIR}\\Include\"")
738 check_include_file(d3d9.h HAVE_D3D_H)
739 check_include_file(ddraw.h HAVE_DDRAW_H)
740 check_include_file(dsound.h HAVE_DSOUND_H)
741 check_include_file(dinput.h HAVE_DINPUT_H)
742 check_include_file(xaudio2.h HAVE_XAUDIO2_H)
743 if(HAVE_D3D_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR HAVE_DINPUT_H OR HAVE_XAUDIO2_H)
744 set(HAVE_DIRECTX TRUE)
745 # TODO: change $ENV{DXSDL_DIR} to get the path from the include checks
746 link_directories($ENV{DXSDK_DIR}\\lib\\${PROCESSOR_ARCH})
747 include_directories($ENV{DXSDK_DIR}\\Include)
749 set(CMAKE_REQUIRED_FLAGS)
753 set(SDL_AUDIO_DRIVER_WINMM 1)
754 file(GLOB WINMM_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/winmm/*.c)
755 set(SOURCE_FILES ${SOURCE_FILES} ${WINMM_AUDIO_SOURCES})
756 set(HAVE_SDL_AUDIO TRUE)
759 set(SDL_AUDIO_DRIVER_DSOUND 1)
760 file(GLOB DSOUND_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/directsound/*.c)
761 set(SOURCE_FILES ${SOURCE_FILES} ${DSOUND_AUDIO_SOURCES})
765 set(SDL_AUDIO_DRIVER_XAUDIO2 1)
766 file(GLOB XAUDIO2_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/xaudio2/*.c)
767 set(SOURCE_FILES ${SOURCE_FILES} ${XAUDIO2_AUDIO_SOURCES})
768 endif(HAVE_XAUDIO2_H)
772 # requires SDL_LOADSO on Windows (IME, DX, etc.)
774 message_error("SDL_VIDEO requires SDL_LOADSO, which is not enabled")
775 endif(NOT SDL_LOADSO)
776 set(SDL_VIDEO_DRIVER_WINDOWS 1)
777 file(GLOB WIN_VIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/windows/*.c)
778 set(SOURCE_FILES ${SOURCE_FILES} ${WIN_VIDEO_SOURCES})
780 if(RENDER_D3D AND HAVE_D3D_H)
781 set(SDL_VIDEO_RENDER_D3D 1)
782 set(HAVE_RENDER_D3D TRUE)
783 endif(RENDER_D3D AND HAVE_D3D_H)
784 set(HAVE_SDL_VIDEO TRUE)
788 set(SDL_THREAD_WINDOWS 1)
789 set(SOURCE_FILES ${SOURCE_FILES}
790 ${SDL2_SOURCE_DIR}/src/thread/windows/SDL_sysmutex.c
791 ${SDL2_SOURCE_DIR}/src/thread/windows/SDL_syssem.c
792 ${SDL2_SOURCE_DIR}/src/thread/windows/SDL_systhread.c
793 ${SDL2_SOURCE_DIR}/src/thread/generic/SDL_syscond.c)
794 set(HAVE_SDL_THREADS TRUE)
798 set(SDL_POWER_WINDOWS 1)
799 set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/power/windows/SDL_syspower.c)
800 set(HAVE_SDL_POWER TRUE)
803 # Libraries for Win32 native and MinGW
804 list(APPEND EXTRA_LIBS user32 gdi32 winmm imm32 ole32 oleaut32 version uuid)
806 # TODO: in configure.in the check for timers is set on
807 # cygwin | mingw32* - does this include mingw32CE?
809 set(SDL_TIMER_WINDOWS 1)
810 file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/windows/*.c)
811 set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES})
812 set(HAVE_SDL_TIMERS TRUE)
816 set(SDL_LOADSO_WINDOWS 1)
817 file(GLOB LOADSO_SOURCES ${SDL2_SOURCE_DIR}/src/loadso/windows/*.c)
818 set(SOURCE_FILES ${SOURCE_FILES} ${LOADSO_SOURCES})
819 set(HAVE_SDL_LOADSO TRUE)
822 file(GLOB CORE_SOURCES ${SDL2_SOURCE_DIR}/src/core/windows/*.c)
823 set(SOURCE_FILES ${SOURCE_FILES} ${CORE_SOURCES})
827 set(SDL_VIDEO_OPENGL 1)
828 set(SDL_VIDEO_OPENGL_WGL 1)
829 set(SDL_VIDEO_RENDER_OGL 1)
830 set(HAVE_VIDEO_OPENGL TRUE)
836 set(SDL_JOYSTICK_DINPUT 1)
837 set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/joystick/windows/SDL_dxjoystick.c)
838 list(APPEND EXTRA_LIBS dinput8 dxguid dxerr)
840 set(SDL_JOYSTICK_WINMM 1)
841 set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/joystick/windows/SDL_mmjoystick.c)
843 set(HAVE_SDL_JOYSTICK TRUE)
846 if(SDL_HAPTIC AND HAVE_DINPUT_H)
847 set(SDL_HAPTIC_DINPUT 1)
848 set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/haptic/windows/SDL_syshaptic.c)
849 set(HAVE_SDL_HAPTIC TRUE)
850 endif(SDL_HAPTIC AND HAVE_DINPUT_H)
852 file(GLOB VERSION_SOURCES ${SDL2_SOURCE_DIR}/src/main/windows/*.rc)
853 file(GLOB SDLMAIN_SOURCES ${SDL2_SOURCE_DIR}/src/main/windows/*.c)
855 list(APPEND EXTRA_LIBS mingw32)
856 list(APPEND EXTRA_LDFLAGS "-mwindows")
857 set(SDL_CFLAGS "${SDL_CFLAGS} -Dmain=SDL_main")
858 list(APPEND SDL_LIBS "-lmingw32" "-lSDL2main" "-mwindows")
859 endif(MINGW OR CYGWIN)
861 # TODO: rework this for proper MacOS X, iOS and Darwin support
863 # Requires the darwin file implementation
865 file(GLOB EXTRA_SOURCES ${PROJECT_SOURCE_DIR}/src/file/cocoa/*.m)
866 set(SOURCE_FILES ${EXTRA_SOURCES} ${SOURCE_FILES})
867 set_source_files_properties(${EXTRA_SOURCES} PROPERTIES LANGUAGE C)
868 set(HAVE_SDL_FILE TRUE)
869 set(SDL_FRAMEWORK_COCOA 1)
871 message_error("SDL_FILE must be enabled to build on MacOS X")
875 set(MACOSX_COREAUDIO 1)
876 file(GLOB AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/coreaudio/*.c)
877 set(SOURCE_FILES ${SOURCE_FILES} ${AUDIO_SOURCES})
878 set(HAVE_SDL_AUDIO TRUE)
879 set(SDL_FRAMEWORK_COREAUDIO 1)
880 set(SDL_FRAMEWORK_AUDIOUNIT 1)
884 set(SDL_JOYSTICK_IOKIT 1)
885 file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/darwin/*.c)
886 set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES})
887 set(HAVE_SDL_JOYSTICK TRUE)
888 set(SDL_FRAMEWORK_IOKIT 1)
889 set(SDL_FRAMEWORK_FF 1)
893 set(SDL_HAPTIC_IOKIT 1)
894 file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/darwin/*.c)
895 set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES})
896 set(HAVE_SDL_HAPTIC TRUE)
897 set(SDL_FRAMEWORK_IOKIT 1)
898 set(SDL_FRAMEWORK_FF 1)
900 message(FATAL_ERROR "SDL_HAPTIC requires SDL_JOYSTICK to be enabled")
905 set(SDL_POWER_MACOSX 1)
906 file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/macosx/*.c)
907 set(SOURCE_FILES ${SOURCE_FILES} ${POWER_SOURCES})
908 set(HAVE_SDL_POWER TRUE)
909 set(SDL_FRAMEWORK_CARBON 1)
910 set(SDL_FRAMEWORK_IOKIT 1)
913 # Actually load the frameworks at the end so we don't duplicate include.
914 if(SDL_FRAMEWORK_COCOA)
915 find_library(COCOA_LIBRARY Cocoa)
916 list(APPEND EXTRA_LIBS ${COCOA_LIBRARY})
918 if(SDL_FRAMEWORK_IOKIT)
919 find_library(IOKIT IOKit)
920 list(APPEND EXTRA_LIBS ${IOKIT})
923 find_library(FORCEFEEDBACK ForceFeedback)
924 list(APPEND EXTRA_LIBS ${FORCEFEEDBACK})
926 if(SDL_FRAMEWORK_CARBON)
927 find_library(CARBON_LIBRARY Carbon)
928 list(APPEND EXTRA_LIBS ${CARBON_LIBRARY})
930 if(SDL_FRAMEWORK_COREAUDIO)
931 find_library(COREAUDIO CoreAudio)
932 list(APPEND EXTRA_LIBS ${COREAUDIO})
934 if(SDL_FRAMEWORK_AUDIOUNIT)
935 find_library(AUDIOUNIT AudioUnit)
936 list(APPEND EXTRA_LIBS ${AUDIOUNIT})
939 # iOS hack needed - http://code.google.com/p/ios-cmake/ ?
943 set(SDL_VIDEO_OPENGL 1)
944 set(SDL_VIDEO_OPENGL_CGL 1)
945 set(SDL_VIDEO_RENDER_OGL 1)
947 find_library(OpenGL_LIBRARY OpenGL)
948 list(APPEND EXTRA_LIBRARIES ${OpenGL_LIBRARY})
950 set(HAVE_VIDEO_OPENGL TRUE)
957 set(SDL_VIDEO_DRIVER_BWINDOW 1)
958 file(GLOB BWINDOW_SOURCES ${SDL2_SOURCE_DIR}/src/video/bwindow/*.c)
959 set(SOURCE_FILES ${SOURCE_FILES} ${BWINDOW_SOURCES})
960 set(HAVE_SDL_VIDEO TRUE)
963 # TODO: Use FIND_PACKAGE(OpenGL) instead
964 set(SDL_VIDEO_OPENGL 1)
965 set(SDL_VIDEO_OPENGL_BGL 1)
966 set(SDL_VIDEO_RENDER_OGL 1)
967 list(APPEND EXTRA_LIBS GL)
968 set(HAVE_VIDEO_OPENGL TRUE)
974 # configure.in does it differently:
976 # if enable_X { SDL_X_DISABLED = 1 }
977 # [add dummy sources]
978 # so it always adds a dummy, without checking, if it was actually requested.
979 # This leads to missing internal references on building, since the
980 # src/X/*.c does not get included.
981 if(NOT HAVE_SDL_JOYSTICK)
982 set(SDL_JOYSTICK_DISABLED 1)
983 if(SDL_JOYSTICK AND NOT APPLE) # results in unresolved symbols on OSX
985 file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/dummy/*.c)
986 set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES})
988 endif(NOT HAVE_SDL_JOYSTICK)
989 if(NOT HAVE_SDL_HAPTIC)
990 set(SDL_HAPTIC_DISABLED 1)
991 file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/dummy/*.c)
992 set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES})
993 endif(NOT HAVE_SDL_HAPTIC)
994 if(NOT HAVE_SDL_LOADSO)
995 set(SDL_LOADSO_DISABLED 1)
996 file(GLOB LOADSO_SOURCES ${SDL2_SOURCE_DIR}/src/loadso/dummy/*.c)
997 set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES})
998 endif(NOT HAVE_SDL_LOADSO)
1000 # We always need to have threads and timers around
1001 if(NOT HAVE_SDL_THREADS)
1002 set(SDL_THREADS_DISABLED 1)
1003 file(GLOB THREADS_SOURCES ${SDL2_SOURCE_DIR}/src/thread/generic/*.c)
1004 set(SOURCE_FILES ${SOURCE_FILES} ${THREADS_SOURCES})
1005 endif(NOT HAVE_SDL_THREADS)
1006 if(NOT HAVE_SDL_TIMERS)
1007 set(SDL_TIMERS_DISABLED 1)
1008 file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/dummy/*.c)
1009 set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES})
1010 endif(NOT HAVE_SDL_TIMERS)
1012 if(NOT SDLMAIN_SOURCES)
1013 file(GLOB SDLMAIN_SOURCES ${SDL2_SOURCE_DIR}/src/main/dummy/*.c)
1014 endif(NOT SDLMAIN_SOURCES)
1016 # Append the -MMD -MT flags
1017 # if(DEPENDENCY_TRACKING)
1018 # if(COMPILER_IS_GNUCC)
1019 # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -MMD -MT \$@")
1020 # endif(COMPILER_IS_GNUCC)
1021 # endif(DEPENDENCY_TRACKING)
1023 configure_file("${SDL2_SOURCE_DIR}/include/SDL_config.h.cmake"
1024 "${SDL2_BINARY_DIR}/include/SDL_config.h")
1026 # Prepare the flags and remove duplicates
1028 list(REMOVE_DUPLICATES EXTRA_LDFLAGS)
1029 endif(EXTRA_LDFLAGS)
1031 list(REMOVE_DUPLICATES EXTRA_LIBS)
1034 list(REMOVE_DUPLICATES EXTRA_CFLAGS)
1036 listtostr(EXTRA_CFLAGS _EXTRA_CFLAGS)
1037 set(EXTRA_CFLAGS ${_EXTRA_CFLAGS})
1039 # Compat helpers for the configuration files
1040 if(NOT WINDOWS OR CYGWIN)
1041 # TODO: we need a Windows script, too
1042 execute_process(COMMAND sh ${SDL2_SOURCE_DIR}/build-scripts/updaterev.sh)
1044 set(prefix ${CMAKE_INSTALL_PREFIX})
1045 set(exec_prefix "\${prefix}")
1046 set(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
1047 set(bindir "\${exec_prefix}/bin")
1048 set(includedir "\${prefix}/include")
1050 set(ENABLE_STATIC_TRUE "")
1051 set(ENABLE_STATIC_FALSE "#")
1053 set(ENABLE_STATIC_TRUE "#")
1054 set(ENABLE_STATIC_FALSE "")
1057 set(ENABLE_SHARED_TRUE "")
1058 set(ENABLE_SHARED_FALSE "#")
1060 set(ENABLE_SHARED_TRUE "#")
1061 set(ENABLE_SHARED_FALSE "")
1064 # Clean up the different lists
1065 listtostr(EXTRA_LIBS _EXTRA_LIBS "-l")
1066 set(SDL_STATIC_LIBS ${SDL_LIBS} ${EXTRA_LDFLAGS} ${_EXTRA_LIBS})
1067 list(REMOVE_DUPLICATES SDL_STATIC_LIBS)
1068 listtostr(SDL_STATIC_LIBS _SDL_STATIC_LIBS)
1069 set(SDL_STATIC_LIBS ${_SDL_STATIC_LIBS})
1070 listtostr(SDL_LIBS _SDL_LIBS)
1071 set(SDL_LIBS ${_SDL_LIBS})
1073 # MESSAGE(STATUS "SDL_LIBS: ${SDL_LIBS}")
1074 # MESSAGE(STATUS "SDL_STATIC_LIBS: ${SDL_STATIC_LIBS}")
1076 configure_file("${SDL2_SOURCE_DIR}/sdl2.pc.in"
1077 "${SDL2_BINARY_DIR}/sdl2.pc" @ONLY)
1078 configure_file("${SDL2_SOURCE_DIR}/sdl2-config.in"
1079 "${SDL2_BINARY_DIR}/sdl2-config")
1080 configure_file("${SDL2_SOURCE_DIR}/sdl2-config.in"
1081 "${SDL2_BINARY_DIR}/sdl2-config" @ONLY)
1082 configure_file("${SDL2_SOURCE_DIR}/SDL2.spec.in"
1083 "${SDL2_BINARY_DIR}/SDL2.spec" @ONLY)
1084 endif(NOT WINDOWS OR CYGWIN)
1086 ##### Info output #####
1088 message(STATUS "SDL2 was configured with the following options:")
1090 message(STATUS "Platform: ${CMAKE_SYSTEM}")
1091 message(STATUS "64-bit: ${ARCH_64}")
1092 message(STATUS "Compiler: ${CMAKE_C_COMPILER}")
1094 message(STATUS "Subsystems:")
1095 foreach(_SUB ${SDL_SUBSYSTEMS})
1096 string(TOUPPER ${_SUB} _OPT)
1097 message_bool_option(${_SUB} SDL_${_OPT})
1100 message(STATUS "Options:")
1101 list(SORT ALLOPTIONS)
1102 foreach(_OPT ${ALLOPTIONS})
1103 # Longest option is VIDEO_X11_XSCREENSAVER = 22 characters
1105 string(LENGTH ${_OPT} _OPTLEN)
1106 math(EXPR _PADLEN "23 - ${_OPTLEN}")
1107 string(RANDOM LENGTH ${_PADLEN} ALPHABET " " _PADDING)
1108 message_tested_option(${_OPT} ${_PADDING})
1111 message(STATUS " CFLAGS: ${CMAKE_C_FLAGS}")
1112 message(STATUS " EXTRA_CFLAGS: ${EXTRA_CFLAGS}")
1113 message(STATUS " EXTRA_LDFLAGS: ${EXTRA_LDFLAGS}")
1114 message(STATUS " EXTRA_LIBS: ${EXTRA_LIBS}")
1116 message(STATUS " Build Shared Library: ${SDL_SHARED}")
1117 message(STATUS " Build Static Library: ${SDL_STATIC}")
1120 message(STATUS "Something was not detected, although your are sure that it")
1121 message(STATUS "has been properly installed? Then make sure, you have set")
1122 message(STATUS "the CFLAGS and LDFLAGS environment variables correctly.")
1126 # Ensure that the extra cflags are used at compile time
1127 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
1129 # Always build SDLmain
1130 add_library(SDL2main STATIC ${SDLMAIN_SOURCES})
1131 set(_INSTALL_LIBS "SDL2main")
1134 add_library(SDL2 SHARED ${SOURCE_FILES})
1135 set_target_properties(SDL2 PROPERTIES
1136 VERSION ${SDL_VERSION}
1137 SOVERSION ${LT_CURRENT})
1138 set(_INSTALL_LIBS "SDL2" ${_INSTALL_LIBS})
1139 target_link_libraries(SDL2 ${EXTRA_LIBS} ${EXTRA_LDFLAGS})
1143 add_library(SDL2-static STATIC ${SOURCE_FILES})
1144 set_target_properties(SDL2-static PROPERTIES OUTPUT_NAME "SDL2")
1145 # TODO: Win32 platforms keep the same suffix .lib for import and static
1146 # libraries - do we need to consider this?
1147 set(_INSTALL_LIBS "SDL2-static" ${_INSTALL_LIBS})
1148 target_link_libraries(SDL2-static ${EXTRA_LIBS} ${EXTRA_LDFLAGS})
1151 ##### Installation targets #####
1152 install(TARGETS ${_INSTALL_LIBS}
1153 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
1154 ARCHIVE DESTINATION "lib${LIB_SUFFIX}")
1156 file(GLOB INCLUDE_FILES ${SDL2_SOURCE_DIR}/include/*.h)
1157 file(GLOB BIN_INCLUDE_FILES ${SDL2_BINARY_DIR}/include/*.h)
1158 foreach(_FNAME ${BIN_INCLUDE_FILES})
1159 get_filename_component(_INCNAME ${_FNAME} NAME)
1160 list(REMOVE_ITEM INCLUDE_FILES ${SDL2_SOURCE_DIR}/include/${_INCNAME})
1162 list(APPEND INCLUDE_FILES ${BIN_INCLUDE_FILES})
1163 install(FILES ${INCLUDE_FILES} DESTINATION include/SDL2)
1165 if(NOT WINDOWS OR CYGWIN)
1167 # FreeBSD uses ${PREFIX}/libdata/pkgconfig
1168 install(FILES ${SDL2_BINARY_DIR}/sdl2.pc DESTINATION "libdata/pkgconfig")
1170 install(FILES ${SDL2_BINARY_DIR}/sdl2.pc
1171 DESTINATION "lib${LIB_SUFFIX}/pkgconfig")
1173 install(PROGRAMS ${SDL2_BINARY_DIR}/sdl2-config DESTINATION bin)
1174 # TODO: what about the .spec file? Is it only needed for RPM creation?
1175 endif(NOT WINDOWS OR CYGWIN)