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}")
41 set(LT_RELEASE "${SDL_MAJOR_VERSION}.${SDL_MINOR_VERSION}")
42 set(LT_VERSION "${LT_CURRENT}.${LT_REVISION}.${LT_AGE}")
44 # General settings & flags
45 set(LIBRARY_OUTPUT_DIRECTORY "build")
46 # Check for 64 or 32 bit
47 set(SIZEOF_VOIDP ${CMAKE_SIZEOF_VOID_P})
48 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
50 set(PROCESSOR_ARCH "x64")
53 set(PROCESSOR_ARCH "x86")
54 endif(CMAKE_SIZEOF_VOID_P EQUAL 8)
65 elseif(UNIX AND NOT APPLE)
66 if(CMAKE_SYSTEM_NAME MATCHES ".*Linux")
68 elseif(CMAKE_SYSTEM_NAME MATCHES "kFreeBSD.*")
70 elseif(CMAKE_SYSTEM_NAME MATCHES "kNetBSD.*|NetBSD.*")
72 elseif(CMAKE_SYSTEM_NAME MATCHES "kOpenBSD.*|OpenBSD.*")
74 elseif(CMAKE_SYSTEM_NAME MATCHES ".*GNU.*")
76 elseif(CMAKE_SYSTEM_NAME MATCHES ".*BSDI.*")
78 elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly.*|FreeBSD")
80 elseif(CMAKE_SYSTEM_NAME MATCHES "SYSV5.*")
82 elseif(CMAKE_SYSTEM_NAME MATCHES "Solaris.*")
84 elseif(CMAKE_SYSTEM_NAME MATCHES "HP-UX.*")
86 elseif(CMAKE_SYSTEM_NAME MATCHES "AIX.*")
88 elseif(CMAKE_SYSTEM_NAME MATCHES "Minix.*")
92 if(CMAKE_SYSTEM_NAME MATCHES ".*Darwin.*")
94 elseif(CMAKE_SYSTEM_NAME MATCHES ".*MacOS.*")
98 elseif(CMAKE_SYSTEM_NAME MATCHES "Haiku.*|BeOS.*")
102 # Don't mistake osx for unix
103 if(UNIX AND NOT APPLE)
107 endif(UNIX AND NOT APPLE)
110 set(UNIX_OR_MAC_SYS ON)
112 set(UNIX_OR_MAC_SYS OFF)
115 # Default option knobs
117 set(OPT_DEF_SSEMATH ON)
119 if(UNIX OR MINGW OR MSYS)
121 endif(UNIX OR MINGW OR MSYS)
124 if(CMAKE_COMPILER_IS_GNUCC)
126 set(OPT_DEF_ASM TRUE)
127 elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
129 set(OPT_DEF_ASM TRUE)
130 elseif(MSVC_VERSION GREATER 1400) # VisualStudio 8.0+
131 set(OPT_DEF_ASM TRUE)
132 #set(CMAKE_C_FLAGS "/ZI /WX- /
134 set(OPT_DEF_ASM FALSE)
135 endif(CMAKE_COMPILER_IS_GNUCC)
137 # Default flags, if not set otherwise
138 if("$ENV{CFLAGS}" STREQUAL "")
139 if(USE_GCC OR USE_CLANG)
140 set(CMAKE_C_FLAGS "-g -O3")
141 endif(USE_GCC OR USE_CLANG)
142 else("$ENV{CFLAGS}" STREQUAL "")
143 set(CMAKE_C_FLAGS "$ENV{CFLAGS}")
144 list(APPEND EXTRA_CFLAGS "$ENV{CFLAGS}")
145 endif("$ENV{CFLAGS}" STREQUAL "")
146 if(NOT ("$ENV{CFLAGS}" STREQUAL "")) # Hackish, but does the trick on Win32
147 list(APPEND EXTRA_LDFLAGS "$ENV{LDFLAGS}")
148 endif(NOT ("$ENV{CFLAGS}" STREQUAL ""))
150 # Those are used for pkg-config and friends, so that the SDL2.pc, sdl2-config,
151 # etc. are created correctly.
152 set(SDL_LIBS "-lSDL2")
156 # We build SDL on cygwin without the UNIX emulation layer
157 include_directories("-I/usr/include/mingw")
158 set(CMAKE_REQUIRED_FLAGS "-mno-cygwin")
159 check_c_source_compiles("int main(int argc, char **argv) {}"
161 set(CMAKE_REQUIRED_FLAGS)
162 if(HAVE_GCC_NO_CYGWIN)
163 list(APPEND EXTRA_LDFLAGS "-mno-cygwin")
164 list(APPEND SDL_LIBS "-mno-cygwin")
165 endif(HAVE_GCC_NO_CYGWIN)
166 set(SDL_CFLAGS "${SDL_CFLAGS} -I/usr/include/mingw")
169 add_definitions(-DUSING_GENERATED_CONFIG_H)
171 include_directories(${SDL2_BINARY_DIR}/include ${SDL2_SOURCE_DIR}/include)
174 Atomic Audio Video Render Events Joystick Haptic Power Threads Timers
176 foreach(_SUB ${SDL_SUBSYSTEMS})
177 string(TOUPPER ${_SUB} _OPT)
178 option(SDL_${_OPT} "Enable the ${_SUB} subsystem" ON)
181 option_string(ASSERTIONS "Enable internal sanity checks (auto/disabled/release/enabled/paranoid)" "auto")
182 #set_option(DEPENDENCY_TRACKING "Use gcc -MMD -MT dependency tracking" ON)
183 set_option(LIBC "Use the system C library" ${OPT_DEF_LIBC})
184 set_option(GCC_ATOMICS "Use gcc builtin atomics" ${USE_GCC})
185 set_option(ASSEMBLY "Enable assembly routines" ${OPT_DEF_ASM})
186 set_option(SSEMATH "Allow GCC to use SSE floating point math" ${OPT_DEF_SSEMATH})
187 set_option(MMX "Use MMX assembly routines" ${OPT_DEF_ASM})
188 set_option(3DNOW "Use 3Dnow! MMX assembly routines" ${OPT_DEF_ASM})
189 set_option(SSE "Use SSE assembly routines" ${OPT_DEF_ASM})
190 set_option(SSE2 "Use SSE2 assembly routines" ${OPT_DEF_SSEMATH})
191 set_option(ALTIVEC "Use Altivec assembly routines" ${OPT_DEF_ASM})
192 set_option(DISKAUDIO "Support the disk writer audio driver" ON)
193 set_option(DUMMYAUDIO "Support the dummy audio driver" ON)
194 set_option(VIDEO_DIRECTFB "Use DirectFB video driver" OFF)
195 dep_option(DIRECTFB_SHARED "Dynamically load directfb support" ON "VIDEO_DIRECTFB" OFF)
196 set_option(FUSIONSOUND "Use FusionSound audio driver" OFF)
197 dep_option(FUSIONSOUND_SHARED "Dynamically load fusionsound audio support" ON "FUSIONSOUND_SHARED" OFF)
198 set_option(VIDEO_DUMMY "Use dummy video driver" ON)
199 set_option(VIDEO_OPENGL "Include OpenGL support" ON)
200 set_option(VIDEO_OPENGLES "Include OpenGL ES support" ON)
201 set_option(PTHREADS "Use POSIX threads for multi-threading" ${UNIX_OR_MAC_SYS})
202 dep_option(PTHREADS_SEM "Use pthread semaphores" ON "PTHREADS" OFF)
203 set_option(SDL_DLOPEN "Use dlopen for shared object loading" ON)
204 set_option(OSS "Support the OSS audio API" ${UNIX_SYS})
205 set_option(ALSA "Support the ALSA audio API" ${UNIX_SYS})
206 dep_option(ALSA_SHARED "Dynamically load ALSA audio support" ON "ALSA" OFF)
207 set_option(ESD "Support the Enlightened Sound Daemon" ${UNIX_SYS})
208 dep_option(ESD_SHARED "Dynamically load ESD audio support" ON "ESD" OFF)
209 set_option(PULSEAUDIO "Use PulseAudio" ${UNIX_SYS})
210 dep_option(PULSEAUDIO_SHARED "Dynamically load PulseAudio support" ON "PULSEAUDIO" OFF)
211 set_option(ARTS "Support the Analog Real Time Synthesizer" ${UNIX_SYS})
212 dep_option(ARTS_SHARED "Dynamically load aRts audio support" ON "ARTS" OFF)
213 set_option(NAS "Support the NAS audio API" ${UNIX_SYS})
214 set_option(SNDIO "Support the sndio audio API" ${UNIX_SYS})
215 set_option(RPATH "Use an rpath when linking SDL" ${UNIX_SYS})
216 set_option(CLOCK_GETTIME "Use clock_gettime() instead of gettimeofday()" OFF)
217 set_option(INPUT_TSLIB "Use the Touchscreen library for input" ${UNIX_SYS})
218 set_option(VIDEO_X11 "Use X11 video driver" ${UNIX_SYS})
219 dep_option(X11_SHARED "Dynamically load X11 support" ON "VIDEO_X11" OFF)
220 set(SDL_X11_OPTIONS Xcursor Xinerama XInput Xrandr Xscrnsaver XShape Xvm)
221 foreach(_SUB ${SDL_X11_OPTIONS})
222 string(TOUPPER "VIDEO_X11_${_SUB}" _OPT)
223 dep_option(${_OPT} "Enable ${_SUB} support" ON "VIDEO_X11" OFF)
225 set_option(VIDEO_COCOA "Use Cocoa video driver" ${APPLE})
226 set_option(DIRECTX "Use DirectX for Windows audio/video" ${WINDOWS})
227 set_option(RENDER_D3D "Enable the Direct3D render driver" ${WINDOWS})
229 # TODO: We should (should we?) respect cmake's ${BUILD_SHARED_LIBS} flag here
230 # The options below are for compatibility to configure's default behaviour.
231 set(SDL_SHARED ON CACHE BOOL "Build a shared version of the library")
232 set(SDL_STATIC ON CACHE BOOL "Build a static version of the library")
234 # General source files
235 file(GLOB SOURCE_FILES
236 ${SDL2_SOURCE_DIR}/src/*.c
237 ${SDL2_SOURCE_DIR}/src/atomic/*.c
238 ${SDL2_SOURCE_DIR}/src/audio/*.c
239 ${SDL2_SOURCE_DIR}/src/cpuinfo/*.c
240 ${SDL2_SOURCE_DIR}/src/events/*.c
241 ${SDL2_SOURCE_DIR}/src/file/*.c
242 ${SDL2_SOURCE_DIR}/src/libm/*.c
243 ${SDL2_SOURCE_DIR}/src/render/*.c
244 ${SDL2_SOURCE_DIR}/src/render/*/*.c
245 ${SDL2_SOURCE_DIR}/src/stdlib/*.c
246 ${SDL2_SOURCE_DIR}/src/thread/*.c
247 ${SDL2_SOURCE_DIR}/src/timer/*.c
248 ${SDL2_SOURCE_DIR}/src/video/*.c)
251 if(ASSERTIONS STREQUAL "auto")
252 # Do nada - use optimization settings to determine the assertion level
253 elseif(ASSERTIONS STREQUAL "disabled")
254 set(SDL_DEFAULT_ASSERT_LEVEL 0)
255 elseif(ASSERTIONS STREQUAL "release")
256 set(SDL_DEFAULT_ASSERT_LEVEL 1)
257 elseif(ASSERTIONS STREQUAL "enabled")
258 set(SDL_DEFAULT_ASSERT_LEVEL 2)
259 elseif(ASSERTIONS STREQUAL "paranoid")
260 set(SDL_DEFAULT_ASSERT_LEVEL 3)
262 message_error("unknown assertion level")
263 endif(ASSERTIONS STREQUAL "auto")
264 set(HAVE_ASSERTIONS ${ASSERTIONS})
266 # Compiler option evaluation
268 if(DEPENDENCY_TRACKING)
269 check_c_source_compiles("
270 #if !defined(__GNUC__) || __GNUC__ < 3
271 #error Dependency tracking requires GCC 3.0 or newer
273 int main(int argc, char **argv) { }" HAVE_DEPENDENCY_TRACKING)
274 endif(DEPENDENCY_TRACKING)
277 check_c_source_compiles("int main(int argc, char **argv) {
280 __sync_lock_test_and_set(&a, 4);
281 __sync_lock_test_and_set(&x, y);
282 __sync_fetch_and_add(&a, 1);
283 __sync_bool_compare_and_swap(&a, 5, 10);
284 __sync_bool_compare_and_swap(&x, y, z); }" HAVE_GCC_ATOMICS)
285 if(NOT HAVE_GCC_ATOMICS)
286 check_c_source_compiles("int main(int argc, char **argv) {
288 __sync_lock_test_and_set(&a, 1);
289 __sync_lock_release(&a); }" HAVE_GCC_SYNC_LOCK_TEST_AND_SET)
290 endif(NOT HAVE_GCC_ATOMICS)
293 set(CMAKE_REQUIRED_FLAGS "-mpreferred-stack-boundary=2")
294 check_c_source_compiles("int x = 0; int main(int argc, char **argv) {}"
295 HAVE_GCC_PREFERRED_STACK_BOUNDARY)
296 set(CMAKE_REQUIRED_FLAGS)
298 set(CMAKE_REQUIRED_FLAGS "-fvisibility=hidden -Werror")
299 check_c_source_compiles("
300 #if !defined(__GNUC__) || __GNUC__ < 4
301 #error SDL only uses visibility attributes in GCC 4 or newer
303 int main(int argc, char **argv) {}" HAVE_GCC_FVISIBILITY)
304 if(HAVE_GCC_FVISIBILITY)
305 list(APPEND EXTRA_CFLAGS "-fvisibility=hidden")
306 endif(HAVE_GCC_FVISIBILITY)
307 set(CMAKE_REQUIRED_FLAGS)
309 check_c_compiler_flag(-Wall HAVE_GCC_WALL)
311 if(CMAKE_SYSTEM_NAME MATCHES "Haiku|BeOS")
312 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-multichar")
313 endif(CMAKE_SYSTEM_NAME MATCHES "Haiku|BeOS")
318 if(USE_GCC OR USE_CLANG)
319 set(SDL_ASSEMBLY_ROUTINES 1)
320 # TODO: Those all seem to be quite GCC specific - needs to be
321 # reworked for better compiler support
322 set(HAVE_ASSEMBLY TRUE)
324 set(CMAKE_REQUIRED_FLAGS "-mmmx")
325 check_c_source_compiles("
328 #ifdef __MINGW64_VERSION_MAJOR
331 #include <mmintrin.h>
334 #include <mmintrin.h>
337 #error Assembler CPP flag not enabled
339 int main(int argc, char **argv) { }" HAVE_MMX)
341 list(APPEND EXTRA_CFLAGS "-mmmx")
343 set(CMAKE_REQUIRED_FLAGS)
347 set(CMAKE_REQUIRED_FLAGS "-m3dnow")
348 check_c_source_compiles("
351 #error Assembler CPP flag not enabled
353 int main(int argc, char **argv) {
358 list(APPEND EXTRA_CFLAGS "-m3dnow")
360 set(CMAKE_REQUIRED_FLAGS)
364 set(CMAKE_REQUIRED_FLAGS "-msse")
365 check_c_source_compiles("
368 #ifdef __MINGW64_VERSION_MAJOR
371 #include <xmmintrin.h>
374 #include <xmmintrin.h>
377 #error Assembler CPP flag not enabled
379 int main(int argc, char **argv) { }" HAVE_SSE)
381 list(APPEND EXTRA_CFLAGS "-msse")
383 set(CMAKE_REQUIRED_FLAGS)
387 set(CMAKE_REQUIRED_FLAGS "-msse2")
388 check_c_source_compiles("
391 #ifdef __MINGW64_VERSION_MAJOR
394 #include <emmintrin.h>
397 #include <emmintrin.h>
400 #error Assembler CPP flag not enabled
402 int main(int argc, char **argv) { }" HAVE_SSE2)
404 list(APPEND EXTRA_CFLAGS "-msse2")
406 set(CMAKE_REQUIRED_FLAGS)
412 list(APPEND EXTRA_CFLAGS "-mfpmath=387")
414 set(HAVE_SSEMATH TRUE)
419 set(CMAKE_REQUIRED_FLAGS "-maltivec")
420 check_c_source_compiles("
422 vector unsigned int vzero() {
423 return vec_splat_u32(0);
425 int main(int argc, char **argv) { }" HAVE_ALTIVEC_H_HDR)
426 check_c_source_compiles("
427 vector unsigned int vzero() {
428 return vec_splat_u32(0);
430 int main(int argc, char **argv) { }" HAVE_ALTIVEC)
431 set(CMAKE_REQUIRED_FLAGS)
432 if(HAVE_ALTIVEC OR HAVE_ALTIVEC_H_HDR)
433 set(HAVE_ALTIVEC TRUE) # if only HAVE_ALTIVEC_H_HDR is set
434 list(APPEND EXTRA_CFLAGS "-maltivec")
435 set(SDL_ALTIVEC_BLITTERS 1)
436 if(HAVE_ALTIVEC_H_HDR)
437 set(HAVE_ALTIVEC_H 1)
438 endif(HAVE_ALTIVEC_H_HDR)
439 endif(HAVE_ALTIVEC OR HAVE_ALTIVEC_H_HDR)
441 elseif(MSVC_VERSION GREATER 1500)
442 # TODO: SDL_cpuinfo.h needs to support the user's configuration wish
443 # for MSVC - right now it is always activated
450 set(SDL_ASSEMBLY_ROUTINES 1)
451 endif(USE_GCC OR USE_CLANG)
454 # if(USE_GCC OR USE_CLANG)
455 # list(APPEND EXTRA_CFLAGS "-mno-sse" "-mno-sse2" "-mno-mmx")
456 # endif(USE_GCC OR USE_CLANG)
459 # TODO: Can't deactivate on FreeBSD? w/o LIBC, SDL_stdinc.h can't define
462 if(WINDOWS AND NOT MINGW)
464 foreach(_HEADER stdio.h string.h ctype.h math.h)
465 string(TOUPPER "HAVE_${_HEADER}" _UPPER)
466 string(REPLACE "." "_" _HAVE_H ${_UPPER})
471 malloc calloc realloc free qsort abs memset memcpy memmove memcmp
472 strlen _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa
473 _ultoa strtol strtoul strtoll strtod atoi atof strcmp strncmp
474 _stricmp _strnicmp sscanf atan atan2 ceil copysign cos cosf fabs
475 floor log pow scalbn sin sinf sqrt)
476 string(TOUPPER ${_FN} _UPPER)
477 set(HAVE_${_UPPER} 1)
479 if(NOT CYGWIN AND NOT MINGW)
481 endif(NOT CYGWIN AND NOT MINGW)
483 add_definitions(-D_USE_MATH_DEFINES) # needed for M_PI
485 else(WINDOWS AND NOT MINGW)
487 check_include_file(sys/types.h HAVE_SYS_TYPES_H)
489 stdio.h stdlib.h stddef.h stdarg.h malloc.h memory.h string.h
490 strings.h inttypes.h stdint.h ctype.h math.h iconv.h signal.h)
491 string(TOUPPER "HAVE_${_HEADER}" _UPPER)
492 string(REPLACE "." "_" _HAVE_H ${_UPPER})
493 check_include_file("${_HEADER}" ${_HAVE_H})
496 check_include_files("dlfcn.h;stdint.h;stddef.h;inttypes.h;stdlib.h;strings.h;string.h;float.h" STDC_HEADERS)
497 check_type_size("size_t" SIZEOF_SIZE_T)
498 check_symbol_exists(M_PI math.h HAVE_M_PI)
499 # TODO: refine the mprotect check
500 check_c_source_compiles("#include <sys/types.h>
501 #include <sys/mman.h>
502 int main() { }" HAVE_MPROTECT)
504 strtod malloc calloc realloc free getenv setenv putenv unsetenv
505 qsort abs bcopy memset memcpy memmove memcmp strlen strlcpy strlcat
506 strdup _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa
507 _uitoa _ultoa strtol strtoul _i64toa _ui64toa strtoll strtoull
508 atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp strncasecmp
509 sscanf snprintf vsnprintf fseeko fseeko64 sigaction setjmp
510 nanosleep sysconf sysctlbyname
512 string(TOUPPER ${_FN} _UPPER)
513 set(_HAVEVAR "HAVE_${_UPPER}")
514 check_function_exists("${_FN}" ${_HAVEVAR})
517 check_library_exists(m pow "" HAVE_LIBM)
519 set(CMAKE_REQUIRED_LIBRARIES m)
521 atan atan2 ceil copysign cos cosf fabs floor log pow scalbn sin
523 string(TOUPPER ${_FN} _UPPER)
524 set(_HAVEVAR "HAVE_${_UPPER}")
525 check_function_exists("${_FN}" ${_HAVEVAR})
527 set(CMAKE_REQUIRED_LIBRARIES)
528 list(APPEND EXTRA_LIBS m)
531 check_library_exists(iconv iconv_open "" HAVE_LIBICONV)
533 list(APPEND EXTRA_LIBS iconv)
536 check_struct_has_member("struct sigaction" "sa_sigaction" "signal.h" HAVE_SA_SIGACTION)
537 endif(WINDOWS AND NOT MINGW)
546 # Enable/disable various subsystems of the SDL library
547 foreach(_SUB ${SDL_SUBSYSTEMS})
548 string(TOUPPER ${_SUB} _OPT)
550 set(SDL_${_OPT}_DISABLED 1)
551 endif(NOT SDL_${_OPT})
554 file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/*.c)
555 set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES})
559 # Haptic requires some private functions from the joystick subsystem.
560 message_error("SDL_HAPTIC requires SDL_JOYSTICK, which is not enabled")
561 endif(NOT SDL_JOYSTICK)
562 file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/*.c)
563 set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES})
566 file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/*.c)
567 set(SOURCE_FILES ${SOURCE_FILES} ${POWER_SOURCES})
569 # TODO: in configure.in, the test for LOADSO and SDL_DLOPEN is a bit weird:
570 # if LOADSO is not wanted, SDL_LOADSO_DISABLED is set
571 # If however on Unix or APPLE dlopen() is detected via CheckDLOPEN(),
572 # SDL_LOADSO_DISABLED will not be set, regardless of the LOADSO settings
574 # General SDL subsystem options, valid for all platforms
576 # CheckDummyAudio/CheckDiskAudio - valid for all platforms
578 set(SDL_AUDIO_DRIVER_DUMMY 1)
579 file(GLOB DUMMYAUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/dummy/*.c)
580 set(SOURCE_FILES ${SOURCE_FILES} ${DUMMYAUDIO_SOURCES})
581 set(HAVE_DUMMYAUDIO TRUE)
584 set(SDL_AUDIO_DRIVER_DISK 1)
585 file(GLOB DISKAUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/disk/*.c)
586 set(SOURCE_FILES ${SOURCE_FILES} ${DISKAUDIO_SOURCES})
587 set(HAVE_DISKAUDIO TRUE)
592 # Relevant for Unix/Darwin only
600 set(SDL_VIDEO_DRIVER_DUMMY 1)
601 file(GLOB VIDEO_DUMMY_SOURCES ${SDL2_SOURCE_DIR}/src/video/dummy/*.c)
602 set(SOURCE_FILES ${SOURCE_FILES} ${VIDEO_DUMMY_SOURCES})
603 set(HAVE_VIDEO_DUMMY TRUE)
604 set(HAVE_SDL_VIDEO TRUE)
608 # Platform-specific options and settings
609 if(UNIX AND NOT APPLE)
611 if(SYSV5 OR SOLARIS OR HPUX)
612 set(SDL_AUDIO_DRIVER_SUNAUDIO 1)
613 file(GLOB SUN_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/sun/*.c)
614 set(SOURCE_FILES ${SOURCE_FILES} ${SUN_AUDIO_SOURCES})
615 set(HAVE_SDL_AUDIO TRUE)
616 elseif(NETBSD OR OPENBSD)
617 set(SDL_AUDIO_DRIVER_BSD 1)
618 file(GLOB BSD_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/bsd/*.c)
619 set(SOURCE_FILES ${SOURCE_FILES} ${BSD_AUDIO_SOURCES})
620 set(HAVE_SDL_AUDIO TRUE)
622 set(SDL_AUDIO_DRIVER_PAUDIO 1)
623 file(GLOB AIX_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/paudio/*.c)
624 set(SOURCE_FILES ${SOURCE_FILES} ${AIX_AUDIO_SOURCES})
625 set(HAVE_SDL_AUDIO TRUE)
645 check_c_source_compiles("
646 #include <linux/input.h>
648 #error EVIOCGNAME() ioctl not available
650 int main(int argc, char** argv) {}" HAVE_INPUT_EVENTS)
651 if(HAVE_INPUT_EVENTS)
652 set(SDL_INPUT_LINUXEV 1)
653 endif(HAVE_INPUT_EVENTS)
655 if(SDL_HAPTIC AND HAVE_INPUT_EVENTS)
656 set(SDL_HAPTIC_LINUX 1)
657 file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/linux/*.c)
658 set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES})
659 set(HAVE_SDL_HAPTIC TRUE)
660 endif(SDL_HAPTIC AND HAVE_INPUT_EVENTS)
662 check_include_file("libudev.h" HAVE_LIBUDEV_H)
664 # !!! FIXME: this needs pkg-config to find the include path, I think.
665 check_include_file("dbus/dbus.h" HAVE_DBUS_DBUS_H)
669 check_c_source_compiles("
671 int main(int argc, char** argv) { }" HAVE_INPUT_TSLIB)
673 set(SDL_INPUT_TSLIB 1)
674 list(APPEND EXTRA_LIBS ts)
675 endif(HAVE_INPUT_TSLIB)
679 CheckUSBHID() # seems to be BSD specific - limit the test to BSD only?
681 set(SDL_JOYSTICK_LINUX 1)
682 file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/linux/*.c)
683 set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES})
684 set(HAVE_SDL_JOYSTICK TRUE)
691 check_library_exists(rt clock_gettime "" FOUND_CLOCK_GETTIME)
692 if(FOUND_CLOCK_GETTIME)
693 list(APPEND EXTRA_LIBS rt)
694 set(HAVE_CLOCK_GETTIME 1)
695 else(FOUND_CLOCK_GETTIME)
696 check_library_exists(c clock_gettime "" FOUND_CLOCK_GETTIME)
697 if(FOUND_CLOCK_GETTIME)
698 set(HAVE_CLOCK_GETTIME 1)
699 endif(FOUND_CLOCK_GETTIME)
700 endif(HAVE_CLOCK_GETTIME)
703 check_include_file(linux/version.h HAVE_LINUX_VERSION_H)
704 if(HAVE_LINUX_VERSION_H)
705 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_LINUX_VERSION_H")
706 endif(HAVE_LINUX_VERSION_H)
710 set(SDL_POWER_LINUX 1)
711 file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/linux/*.c)
712 set(SOURCE_FILES ${SOURCE_FILES} ${POWER_SOURCES})
713 set(HAVE_SDL_POWER TRUE)
718 set(SDL_TIMER_UNIX 1)
719 file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/unix/*.c)
720 set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES})
721 set(HAVE_SDL_TIMERS TRUE)
725 set(SDL_RLD_FLAGS "")
726 if(BSDI OR FREEBSD OR LINUX OR NETBSD)
727 set(SDL_RLD_FLAGS "-Wl,-rpath,\${libdir}")
729 set(SDL_RLD_FLAGS "-R\${libdir}")
731 set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
736 find_program(WINDRES windres)
738 check_c_source_compiles("
740 int main(int argc, char **argv) { }" HAVE_WIN32_CC)
742 file(GLOB WIN_SOURCES ${SDL2_SOURCE_DIR}/src/core/windows/*.c)
743 set(SOURCE_FILES ${SOURCE_FILES} ${WIN_SOURCES})
747 if("$ENV{DXSDK_DIR}" STREQUAL "")
748 message_error("DIRECTX requires the \$DXSDK_DIR environment variable to be set")
749 endif("$ENV{DXSDK_DIR}" STREQUAL "")
750 set(CMAKE_REQUIRED_FLAGS "/I\"$ENV{DXSDK_DIR}\\Include\"")
751 check_include_file(d3d9.h HAVE_D3D_H)
752 check_include_file(ddraw.h HAVE_DDRAW_H)
753 check_include_file(dsound.h HAVE_DSOUND_H)
754 check_include_file(dinput.h HAVE_DINPUT_H)
755 check_include_file(xaudio2.h HAVE_XAUDIO2_H)
756 if(HAVE_D3D_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR HAVE_DINPUT_H OR HAVE_XAUDIO2_H)
757 set(HAVE_DIRECTX TRUE)
758 # TODO: change $ENV{DXSDL_DIR} to get the path from the include checks
759 link_directories($ENV{DXSDK_DIR}\\lib\\${PROCESSOR_ARCH})
760 include_directories($ENV{DXSDK_DIR}\\Include)
762 set(CMAKE_REQUIRED_FLAGS)
766 set(SDL_AUDIO_DRIVER_WINMM 1)
767 file(GLOB WINMM_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/winmm/*.c)
768 set(SOURCE_FILES ${SOURCE_FILES} ${WINMM_AUDIO_SOURCES})
769 set(HAVE_SDL_AUDIO TRUE)
772 set(SDL_AUDIO_DRIVER_DSOUND 1)
773 file(GLOB DSOUND_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/directsound/*.c)
774 set(SOURCE_FILES ${SOURCE_FILES} ${DSOUND_AUDIO_SOURCES})
778 set(SDL_AUDIO_DRIVER_XAUDIO2 1)
779 file(GLOB XAUDIO2_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/xaudio2/*.c)
780 set(SOURCE_FILES ${SOURCE_FILES} ${XAUDIO2_AUDIO_SOURCES})
781 endif(HAVE_XAUDIO2_H)
785 # requires SDL_LOADSO on Windows (IME, DX, etc.)
787 message_error("SDL_VIDEO requires SDL_LOADSO, which is not enabled")
788 endif(NOT SDL_LOADSO)
789 set(SDL_VIDEO_DRIVER_WINDOWS 1)
790 file(GLOB WIN_VIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/windows/*.c)
791 set(SOURCE_FILES ${SOURCE_FILES} ${WIN_VIDEO_SOURCES})
793 if(RENDER_D3D AND HAVE_D3D_H)
794 set(SDL_VIDEO_RENDER_D3D 1)
795 set(HAVE_RENDER_D3D TRUE)
796 endif(RENDER_D3D AND HAVE_D3D_H)
797 set(HAVE_SDL_VIDEO TRUE)
801 set(SDL_THREAD_WINDOWS 1)
802 set(SOURCE_FILES ${SOURCE_FILES}
803 ${SDL2_SOURCE_DIR}/src/thread/windows/SDL_sysmutex.c
804 ${SDL2_SOURCE_DIR}/src/thread/windows/SDL_syssem.c
805 ${SDL2_SOURCE_DIR}/src/thread/windows/SDL_systhread.c
806 ${SDL2_SOURCE_DIR}/src/thread/windows/SDL_systls.c
807 ${SDL2_SOURCE_DIR}/src/thread/generic/SDL_syscond.c)
808 set(HAVE_SDL_THREADS TRUE)
812 set(SDL_POWER_WINDOWS 1)
813 set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/power/windows/SDL_syspower.c)
814 set(HAVE_SDL_POWER TRUE)
817 # Libraries for Win32 native and MinGW
818 list(APPEND EXTRA_LIBS user32 gdi32 winmm imm32 ole32 oleaut32 version uuid)
820 # TODO: in configure.in the check for timers is set on
821 # cygwin | mingw32* - does this include mingw32CE?
823 set(SDL_TIMER_WINDOWS 1)
824 file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/windows/*.c)
825 set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES})
826 set(HAVE_SDL_TIMERS TRUE)
830 set(SDL_LOADSO_WINDOWS 1)
831 file(GLOB LOADSO_SOURCES ${SDL2_SOURCE_DIR}/src/loadso/windows/*.c)
832 set(SOURCE_FILES ${SOURCE_FILES} ${LOADSO_SOURCES})
833 set(HAVE_SDL_LOADSO TRUE)
836 file(GLOB CORE_SOURCES ${SDL2_SOURCE_DIR}/src/core/windows/*.c)
837 set(SOURCE_FILES ${SOURCE_FILES} ${CORE_SOURCES})
841 set(SDL_VIDEO_OPENGL 1)
842 set(SDL_VIDEO_OPENGL_WGL 1)
843 set(SDL_VIDEO_RENDER_OGL 1)
844 set(HAVE_VIDEO_OPENGL TRUE)
850 set(SDL_JOYSTICK_DINPUT 1)
851 set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/joystick/windows/SDL_dxjoystick.c)
852 list(APPEND EXTRA_LIBS dinput8 dxguid dxerr)
854 set(SDL_JOYSTICK_WINMM 1)
855 set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/joystick/windows/SDL_mmjoystick.c)
857 set(HAVE_SDL_JOYSTICK TRUE)
860 if(SDL_HAPTIC AND HAVE_DINPUT_H)
861 set(SDL_HAPTIC_DINPUT 1)
862 set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/haptic/windows/SDL_syshaptic.c)
863 set(HAVE_SDL_HAPTIC TRUE)
864 endif(SDL_HAPTIC AND HAVE_DINPUT_H)
866 file(GLOB VERSION_SOURCES ${SDL2_SOURCE_DIR}/src/main/windows/*.rc)
867 file(GLOB SDLMAIN_SOURCES ${SDL2_SOURCE_DIR}/src/main/windows/*.c)
869 list(APPEND EXTRA_LIBS mingw32)
870 list(APPEND EXTRA_LDFLAGS "-mwindows")
871 set(SDL_CFLAGS "${SDL_CFLAGS} -Dmain=SDL_main")
872 list(APPEND SDL_LIBS "-lmingw32" "-lSDL2main" "-mwindows")
873 endif(MINGW OR CYGWIN)
875 # TODO: rework this for proper MacOS X, iOS and Darwin support
877 # Requires the darwin file implementation
879 file(GLOB EXTRA_SOURCES ${PROJECT_SOURCE_DIR}/src/file/cocoa/*.m)
880 set(SOURCE_FILES ${EXTRA_SOURCES} ${SOURCE_FILES})
881 set_source_files_properties(${EXTRA_SOURCES} PROPERTIES LANGUAGE C)
882 set(HAVE_SDL_FILE TRUE)
883 set(SDL_FRAMEWORK_COCOA 1)
885 message_error("SDL_FILE must be enabled to build on MacOS X")
889 set(MACOSX_COREAUDIO 1)
890 file(GLOB AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/coreaudio/*.c)
891 set(SOURCE_FILES ${SOURCE_FILES} ${AUDIO_SOURCES})
892 set(HAVE_SDL_AUDIO TRUE)
893 set(SDL_FRAMEWORK_COREAUDIO 1)
894 set(SDL_FRAMEWORK_AUDIOUNIT 1)
898 set(SDL_JOYSTICK_IOKIT 1)
899 file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/darwin/*.c)
900 set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES})
901 set(HAVE_SDL_JOYSTICK TRUE)
902 set(SDL_FRAMEWORK_IOKIT 1)
903 set(SDL_FRAMEWORK_FF 1)
907 set(SDL_HAPTIC_IOKIT 1)
908 file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/darwin/*.c)
909 set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES})
910 set(HAVE_SDL_HAPTIC TRUE)
911 set(SDL_FRAMEWORK_IOKIT 1)
912 set(SDL_FRAMEWORK_FF 1)
914 message(FATAL_ERROR "SDL_HAPTIC requires SDL_JOYSTICK to be enabled")
919 set(SDL_POWER_MACOSX 1)
920 file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/macosx/*.c)
921 set(SOURCE_FILES ${SOURCE_FILES} ${POWER_SOURCES})
922 set(HAVE_SDL_POWER TRUE)
923 set(SDL_FRAMEWORK_CARBON 1)
924 set(SDL_FRAMEWORK_IOKIT 1)
927 # Actually load the frameworks at the end so we don't duplicate include.
928 if(SDL_FRAMEWORK_COCOA)
929 find_library(COCOA_LIBRARY Cocoa)
930 list(APPEND EXTRA_LIBS ${COCOA_LIBRARY})
932 if(SDL_FRAMEWORK_IOKIT)
933 find_library(IOKIT IOKit)
934 list(APPEND EXTRA_LIBS ${IOKIT})
937 find_library(FORCEFEEDBACK ForceFeedback)
938 list(APPEND EXTRA_LIBS ${FORCEFEEDBACK})
940 if(SDL_FRAMEWORK_CARBON)
941 find_library(CARBON_LIBRARY Carbon)
942 list(APPEND EXTRA_LIBS ${CARBON_LIBRARY})
944 if(SDL_FRAMEWORK_COREAUDIO)
945 find_library(COREAUDIO CoreAudio)
946 list(APPEND EXTRA_LIBS ${COREAUDIO})
948 if(SDL_FRAMEWORK_AUDIOUNIT)
949 find_library(AUDIOUNIT AudioUnit)
950 list(APPEND EXTRA_LIBS ${AUDIOUNIT})
953 # iOS hack needed - http://code.google.com/p/ios-cmake/ ?
957 set(SDL_VIDEO_OPENGL 1)
958 set(SDL_VIDEO_OPENGL_CGL 1)
959 set(SDL_VIDEO_RENDER_OGL 1)
961 find_library(OpenGL_LIBRARY OpenGL)
962 list(APPEND EXTRA_LIBRARIES ${OpenGL_LIBRARY})
964 set(HAVE_VIDEO_OPENGL TRUE)
971 set(SDL_VIDEO_DRIVER_BWINDOW 1)
972 file(GLOB BWINDOW_SOURCES ${SDL2_SOURCE_DIR}/src/video/bwindow/*.c)
973 set(SOURCE_FILES ${SOURCE_FILES} ${BWINDOW_SOURCES})
974 set(HAVE_SDL_VIDEO TRUE)
977 # TODO: Use FIND_PACKAGE(OpenGL) instead
978 set(SDL_VIDEO_OPENGL 1)
979 set(SDL_VIDEO_OPENGL_BGL 1)
980 set(SDL_VIDEO_RENDER_OGL 1)
981 list(APPEND EXTRA_LIBS GL)
982 set(HAVE_VIDEO_OPENGL TRUE)
988 # configure.in does it differently:
990 # if enable_X { SDL_X_DISABLED = 1 }
991 # [add dummy sources]
992 # so it always adds a dummy, without checking, if it was actually requested.
993 # This leads to missing internal references on building, since the
994 # src/X/*.c does not get included.
995 if(NOT HAVE_SDL_JOYSTICK)
996 set(SDL_JOYSTICK_DISABLED 1)
997 if(SDL_JOYSTICK AND NOT APPLE) # results in unresolved symbols on OSX
999 file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/dummy/*.c)
1000 set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES})
1002 endif(NOT HAVE_SDL_JOYSTICK)
1003 if(NOT HAVE_SDL_HAPTIC)
1004 set(SDL_HAPTIC_DISABLED 1)
1005 file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/dummy/*.c)
1006 set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES})
1007 endif(NOT HAVE_SDL_HAPTIC)
1008 if(NOT HAVE_SDL_LOADSO)
1009 set(SDL_LOADSO_DISABLED 1)
1010 file(GLOB LOADSO_SOURCES ${SDL2_SOURCE_DIR}/src/loadso/dummy/*.c)
1011 set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES})
1012 endif(NOT HAVE_SDL_LOADSO)
1014 # We always need to have threads and timers around
1015 if(NOT HAVE_SDL_THREADS)
1016 set(SDL_THREADS_DISABLED 1)
1017 file(GLOB THREADS_SOURCES ${SDL2_SOURCE_DIR}/src/thread/generic/*.c)
1018 set(SOURCE_FILES ${SOURCE_FILES} ${THREADS_SOURCES})
1019 endif(NOT HAVE_SDL_THREADS)
1020 if(NOT HAVE_SDL_TIMERS)
1021 set(SDL_TIMERS_DISABLED 1)
1022 file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/dummy/*.c)
1023 set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES})
1024 endif(NOT HAVE_SDL_TIMERS)
1026 if(NOT SDLMAIN_SOURCES)
1027 file(GLOB SDLMAIN_SOURCES ${SDL2_SOURCE_DIR}/src/main/dummy/*.c)
1028 endif(NOT SDLMAIN_SOURCES)
1030 # Append the -MMD -MT flags
1031 # if(DEPENDENCY_TRACKING)
1032 # if(COMPILER_IS_GNUCC)
1033 # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -MMD -MT \$@")
1034 # endif(COMPILER_IS_GNUCC)
1035 # endif(DEPENDENCY_TRACKING)
1037 configure_file("${SDL2_SOURCE_DIR}/include/SDL_config.h.cmake"
1038 "${SDL2_BINARY_DIR}/include/SDL_config.h")
1040 # Prepare the flags and remove duplicates
1042 list(REMOVE_DUPLICATES EXTRA_LDFLAGS)
1043 endif(EXTRA_LDFLAGS)
1045 list(REMOVE_DUPLICATES EXTRA_LIBS)
1048 list(REMOVE_DUPLICATES EXTRA_CFLAGS)
1050 listtostr(EXTRA_CFLAGS _EXTRA_CFLAGS)
1051 set(EXTRA_CFLAGS ${_EXTRA_CFLAGS})
1053 # Compat helpers for the configuration files
1054 if(NOT WINDOWS OR CYGWIN)
1055 # TODO: we need a Windows script, too
1056 execute_process(COMMAND sh ${SDL2_SOURCE_DIR}/build-scripts/updaterev.sh)
1058 set(prefix ${CMAKE_INSTALL_PREFIX})
1059 set(exec_prefix "\${prefix}")
1060 set(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
1061 set(bindir "\${exec_prefix}/bin")
1062 set(includedir "\${prefix}/include")
1064 set(ENABLE_STATIC_TRUE "")
1065 set(ENABLE_STATIC_FALSE "#")
1067 set(ENABLE_STATIC_TRUE "#")
1068 set(ENABLE_STATIC_FALSE "")
1071 set(ENABLE_SHARED_TRUE "")
1072 set(ENABLE_SHARED_FALSE "#")
1074 set(ENABLE_SHARED_TRUE "#")
1075 set(ENABLE_SHARED_FALSE "")
1078 # Clean up the different lists
1079 listtostr(EXTRA_LIBS _EXTRA_LIBS "-l")
1080 set(SDL_STATIC_LIBS ${SDL_LIBS} ${EXTRA_LDFLAGS} ${_EXTRA_LIBS})
1081 list(REMOVE_DUPLICATES SDL_STATIC_LIBS)
1082 listtostr(SDL_STATIC_LIBS _SDL_STATIC_LIBS)
1083 set(SDL_STATIC_LIBS ${_SDL_STATIC_LIBS})
1084 listtostr(SDL_LIBS _SDL_LIBS)
1085 set(SDL_LIBS ${_SDL_LIBS})
1087 # MESSAGE(STATUS "SDL_LIBS: ${SDL_LIBS}")
1088 # MESSAGE(STATUS "SDL_STATIC_LIBS: ${SDL_STATIC_LIBS}")
1090 configure_file("${SDL2_SOURCE_DIR}/sdl2.pc.in"
1091 "${SDL2_BINARY_DIR}/sdl2.pc" @ONLY)
1092 configure_file("${SDL2_SOURCE_DIR}/sdl2-config.in"
1093 "${SDL2_BINARY_DIR}/sdl2-config")
1094 configure_file("${SDL2_SOURCE_DIR}/sdl2-config.in"
1095 "${SDL2_BINARY_DIR}/sdl2-config" @ONLY)
1096 configure_file("${SDL2_SOURCE_DIR}/SDL2.spec.in"
1097 "${SDL2_BINARY_DIR}/SDL2.spec" @ONLY)
1098 endif(NOT WINDOWS OR CYGWIN)
1100 ##### Info output #####
1102 message(STATUS "SDL2 was configured with the following options:")
1104 message(STATUS "Platform: ${CMAKE_SYSTEM}")
1105 message(STATUS "64-bit: ${ARCH_64}")
1106 message(STATUS "Compiler: ${CMAKE_C_COMPILER}")
1108 message(STATUS "Subsystems:")
1109 foreach(_SUB ${SDL_SUBSYSTEMS})
1110 string(TOUPPER ${_SUB} _OPT)
1111 message_bool_option(${_SUB} SDL_${_OPT})
1114 message(STATUS "Options:")
1115 list(SORT ALLOPTIONS)
1116 foreach(_OPT ${ALLOPTIONS})
1117 # Longest option is VIDEO_X11_XSCREENSAVER = 22 characters
1119 string(LENGTH ${_OPT} _OPTLEN)
1120 math(EXPR _PADLEN "23 - ${_OPTLEN}")
1121 string(RANDOM LENGTH ${_PADLEN} ALPHABET " " _PADDING)
1122 message_tested_option(${_OPT} ${_PADDING})
1125 message(STATUS " CFLAGS: ${CMAKE_C_FLAGS}")
1126 message(STATUS " EXTRA_CFLAGS: ${EXTRA_CFLAGS}")
1127 message(STATUS " EXTRA_LDFLAGS: ${EXTRA_LDFLAGS}")
1128 message(STATUS " EXTRA_LIBS: ${EXTRA_LIBS}")
1130 message(STATUS " Build Shared Library: ${SDL_SHARED}")
1131 message(STATUS " Build Static Library: ${SDL_STATIC}")
1134 message(STATUS "Something was not detected, although your are sure that it")
1135 message(STATUS "has been properly installed? Then make sure, you have set")
1136 message(STATUS "the CFLAGS and LDFLAGS environment variables correctly.")
1140 # Ensure that the extra cflags are used at compile time
1141 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
1143 # Always build SDLmain
1144 add_library(SDL2main STATIC ${SDLMAIN_SOURCES})
1145 set(_INSTALL_LIBS "SDL2main")
1148 add_library(SDL2 SHARED ${SOURCE_FILES})
1150 set_target_properties(SDL2 PROPERTIES
1151 VERSION ${LT_VERSION}
1152 SOVERSION ${LT_CURRENT}
1153 OUTPUT_NAME "SDL2-${LT_RELEASE}")
1155 set_target_properties(SDL2 PROPERTIES
1156 VERSION ${SDL_VERSION}
1157 SOVERSION ${LT_CURRENT}
1160 set(_INSTALL_LIBS "SDL2" ${_INSTALL_LIBS})
1161 target_link_libraries(SDL2 ${EXTRA_LIBS} ${EXTRA_LDFLAGS})
1165 add_library(SDL2-static STATIC ${SOURCE_FILES})
1166 set_target_properties(SDL2-static PROPERTIES OUTPUT_NAME "SDL2")
1167 # TODO: Win32 platforms keep the same suffix .lib for import and static
1168 # libraries - do we need to consider this?
1169 set(_INSTALL_LIBS "SDL2-static" ${_INSTALL_LIBS})
1170 target_link_libraries(SDL2-static ${EXTRA_LIBS} ${EXTRA_LDFLAGS})
1173 ##### Installation targets #####
1174 install(TARGETS ${_INSTALL_LIBS}
1175 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
1176 ARCHIVE DESTINATION "lib${LIB_SUFFIX}")
1178 file(GLOB INCLUDE_FILES ${SDL2_SOURCE_DIR}/include/*.h)
1179 file(GLOB BIN_INCLUDE_FILES ${SDL2_BINARY_DIR}/include/*.h)
1180 foreach(_FNAME ${BIN_INCLUDE_FILES})
1181 get_filename_component(_INCNAME ${_FNAME} NAME)
1182 list(REMOVE_ITEM INCLUDE_FILES ${SDL2_SOURCE_DIR}/include/${_INCNAME})
1184 list(APPEND INCLUDE_FILES ${BIN_INCLUDE_FILES})
1185 install(FILES ${INCLUDE_FILES} DESTINATION include/SDL2)
1189 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink
1190 \"libSDL2-2.0.so\" \"libSDL2.so\")")
1191 install(FILES ${SDL2_BINARY_DIR}/libSDL2.so DESTINATION "lib${LIB_SUFFIX}")
1194 if(NOT WINDOWS OR CYGWIN)
1196 # FreeBSD uses ${PREFIX}/libdata/pkgconfig
1197 install(FILES ${SDL2_BINARY_DIR}/sdl2.pc DESTINATION "libdata/pkgconfig")
1199 install(FILES ${SDL2_BINARY_DIR}/sdl2.pc
1200 DESTINATION "lib${LIB_SUFFIX}/pkgconfig")
1202 install(PROGRAMS ${SDL2_BINARY_DIR}/sdl2-config DESTINATION bin)
1203 # TODO: what about the .spec file? Is it only needed for RPM creation?
1204 install(FILES "${SDL2_SOURCE_DIR}/sdl2.m4" DESTINATION "share/aclocal")
1205 endif(NOT WINDOWS OR CYGWIN)