| | |
| | | message(FATAL_ERROR "Prevented in-tree built. Please create a build directory outside of the SDL source code and call cmake from there") |
| | | endif() |
| | | |
| | | cmake_minimum_required(VERSION 2.8.11) |
| | | cmake_minimum_required(VERSION 3.0.0) |
| | | project(SDL2 C CXX) |
| | | |
| | | if(WINDOWS_STORE) |
| | | enable_language(CXX) |
| | | cmake_minimum_required(VERSION 3.11) |
| | | add_definitions(-DSDL_BUILDING_WINRT=1 -ZW) |
| | | link_libraries( |
| | | -nodefaultlib:vccorlib$<$<CONFIG:Debug>:d> |
| | | -nodefaultlib:msvcrt$<$<CONFIG:Debug>:d> |
| | | vccorlib$<$<CONFIG:Debug>:d>.lib |
| | | msvcrt$<$<CONFIG:Debug>:d>.lib |
| | | ) |
| | | endif() |
| | | |
| | | # !!! FIXME: this should probably do "MACOSX_RPATH ON" as a target property |
| | | # !!! FIXME: for the SDL2 shared library (so you get an |
| | |
| | | # !!! FIXME: properly resolved. |
| | | #cmake_policy(SET CMP0042 OLD) |
| | | |
| | | include(CheckFunctionExists) |
| | | include(CheckLibraryExists) |
| | | include(CheckIncludeFiles) |
| | | include(CheckIncludeFile) |
| | |
| | | # set SDL_BINARY_AGE and SDL_INTERFACE_AGE to 0. |
| | | set(SDL_MAJOR_VERSION 2) |
| | | set(SDL_MINOR_VERSION 0) |
| | | set(SDL_MICRO_VERSION 12) |
| | | set(SDL_MICRO_VERSION 14) |
| | | set(SDL_INTERFACE_AGE 0) |
| | | set(SDL_BINARY_AGE 12) |
| | | set(SDL_BINARY_AGE 14) |
| | | set(SDL_VERSION "${SDL_MAJOR_VERSION}.${SDL_MINOR_VERSION}.${SDL_MICRO_VERSION}") |
| | | # the following should match the versions in Xcode project file: |
| | | set(DYLIB_CURRENT_VERSION 12.0.0) |
| | | set(DYLIB_CURRENT_VERSION 15.0.0) |
| | | set(DYLIB_COMPATIBILITY_VERSION 1.0.0) |
| | | |
| | | # Set defaults preventing destination file conflicts |
| | |
| | | # so we'll just use libusb when it's available. libusb does not support iOS, |
| | | # so we default to yes on iOS. |
| | | # TODO: Windows can support libusb, the hid.c file just depends on Unix APIs |
| | | if(WINDOWS OR IOS OR TVOS OR ANDROID) |
| | | if((WINDOWS AND NOT WINDOWS_STORE) OR IOS OR TVOS OR ANDROID) |
| | | set(HIDAPI_SKIP_LIBUSB TRUE) |
| | | else() |
| | | set(HIDAPI_SKIP_LIBUSB FALSE) |
| | |
| | | # General includes |
| | | include_directories(${SDL2_BINARY_DIR}/include ${SDL2_SOURCE_DIR}/include) |
| | | if(USE_GCC OR USE_CLANG) |
| | | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -idirafter ${SDL2_SOURCE_DIR}/src/video/khronos") |
| | | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -idirafter \"${SDL2_SOURCE_DIR}/src/video/khronos\"") |
| | | else() |
| | | include_directories(${SDL2_SOURCE_DIR}/src/video/khronos) |
| | | endif() |
| | |
| | | |
| | | set(SDL_SUBSYSTEMS |
| | | Atomic Audio Video Render Events Joystick Haptic Power Threads Timers |
| | | File Loadso CPUinfo Filesystem Dlopen Sensor) |
| | | File Loadso CPUinfo Filesystem Dlopen Sensor Locale) |
| | | foreach(_SUB ${SDL_SUBSYSTEMS}) |
| | | string(TOUPPER ${_SUB} _OPT) |
| | | if (NOT DEFINED SDL_${_OPT}_ENABLED_BY_DEFAULT) |
| | |
| | | set_option(SSE2 "Use SSE2 assembly routines" ${OPT_DEF_SSEMATH}) |
| | | set_option(SSE3 "Use SSE3 assembly routines" ${OPT_DEF_SSEMATH}) |
| | | set_option(ALTIVEC "Use Altivec assembly routines" ${OPT_DEF_ASM}) |
| | | set_option(ARMSIMD "use SIMD assembly blitters on ARM" ON) |
| | | set_option(ARMNEON "use NEON assembly blitters on ARM" ON) |
| | | set_option(ARMSIMD "use SIMD assembly blitters on ARM" OFF) |
| | | set_option(ARMNEON "use NEON assembly blitters on ARM" OFF) |
| | | set_option(DISKAUDIO "Support the disk writer audio driver" ON) |
| | | set_option(DUMMYAUDIO "Support the dummy audio driver" ON) |
| | | set_option(VIDEO_DIRECTFB "Use DirectFB video driver" OFF) |
| | |
| | | set_option(NAS "Support the NAS audio API" ${UNIX_SYS}) |
| | | set_option(NAS_SHARED "Dynamically load NAS audio API" ${UNIX_SYS}) |
| | | set_option(SNDIO "Support the sndio audio API" ${UNIX_SYS}) |
| | | dep_option(SNDIO_SHARED "Dynamically load the sndio audio API" ${UNIX_SYS} ON "SNDIO" OFF) |
| | | set_option(FUSIONSOUND "Use FusionSound audio driver" OFF) |
| | | dep_option(FUSIONSOUND_SHARED "Dynamically load fusionsound audio support" ON "FUSIONSOUND" OFF) |
| | | set_option(LIBSAMPLERATE "Use libsamplerate for audio rate conversion" ${UNIX_SYS}) |
| | | dep_option(LIBSAMPLERATE_SHARED "Dynamically load libsamplerate" ON "LIBSAMPLERATE" OFF) |
| | | set_option(RPATH "Use an rpath when linking SDL" ${UNIX_SYS}) |
| | | set_option(CLOCK_GETTIME "Use clock_gettime() instead of gettimeofday()" OFF) |
| | | set_option(INPUT_TSLIB "Use the Touchscreen library for input" ${UNIX_SYS}) |
| | | set_option(VIDEO_X11 "Use X11 video driver" ${UNIX_SYS}) |
| | | set_option(VIDEO_WAYLAND "Use Wayland video driver" ${UNIX_SYS}) |
| | | dep_option(WAYLAND_SHARED "Dynamically load Wayland support" ON "VIDEO_WAYLAND" OFF) |
| | |
| | | option_string(BACKGROUNDING_SIGNAL "number to use for magic backgrounding signal or 'OFF'" "OFF") |
| | | option_string(FOREGROUNDING_SIGNAL "number to use for magic foregrounding signal or 'OFF'" "OFF") |
| | | set_option(HIDAPI "Use HIDAPI for low level joystick drivers" ${OPT_DEF_HIDAPI}) |
| | | set_option(JOYSTICK_VIRTUAL "Enable the virtual-joystick driver" ON) |
| | | |
| | | set(SDL_SHARED ${SDL_SHARED_ENABLED_BY_DEFAULT} CACHE BOOL "Build a shared version of the library") |
| | | set(SDL_STATIC ${SDL_STATIC_ENABLED_BY_DEFAULT} CACHE BOOL "Build a static version of the library") |
| | |
| | | ${SDL2_SOURCE_DIR}/src/dynapi/*.c |
| | | ${SDL2_SOURCE_DIR}/src/events/*.c |
| | | ${SDL2_SOURCE_DIR}/src/file/*.c |
| | | ${SDL2_SOURCE_DIR}/src/haptic/*.c |
| | | ${SDL2_SOURCE_DIR}/src/libm/*.c |
| | | ${SDL2_SOURCE_DIR}/src/locale/*.c |
| | | ${SDL2_SOURCE_DIR}/src/misc/*.c |
| | | ${SDL2_SOURCE_DIR}/src/power/*.c |
| | | ${SDL2_SOURCE_DIR}/src/render/*.c |
| | | ${SDL2_SOURCE_DIR}/src/render/*/*.c |
| | | ${SDL2_SOURCE_DIR}/src/sensor/*.c |
| | | ${SDL2_SOURCE_DIR}/src/stdlib/*.c |
| | | ${SDL2_SOURCE_DIR}/src/thread/*.c |
| | | ${SDL2_SOURCE_DIR}/src/timer/*.c |
| | |
| | | set(HAVE_SIGNAL_H 1) |
| | | foreach(_FN |
| | | malloc calloc realloc free qsort abs memset memcpy memmove memcmp |
| | | wcslen wcslcpy wcslcat wcsdup wcsstr wcscmp wcsncmp |
| | | wcslen wcsdup wcsstr wcscmp wcsncmp _wcsicmp _wcsnicmp |
| | | strlen _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa |
| | | _ultoa strtol strtoul strtoll strtod atoi atof strcmp strncmp |
| | | _stricmp _strnicmp strtok_s sscanf |
| | | acos acosf asin asinf atan atanf atan2 atan2f ceil ceilf |
| | | copysign copysignf cos cosf exp expf fabs fabsf floor floorf fmod fmodf |
| | | log logf log10 log10f pow powf scalbn scalbnf sin sinf sqrt sqrtf tan tanf) |
| | | log logf log10 log10f pow powf scalbn scalbnf sin sinf sqrt sqrtf tan tanf |
| | | trunc truncf) |
| | | string(TOUPPER ${_FN} _UPPER) |
| | | set(HAVE_${_UPPER} 1) |
| | | endforeach() |
| | |
| | | check_include_file("${_HEADER}" ${_HAVE_H}) |
| | | endforeach() |
| | | |
| | | check_include_files("dlfcn.h;stdint.h;stddef.h;inttypes.h;stdlib.h;strings.h;string.h;float.h" STDC_HEADERS) |
| | | set(STDC_HEADER_NAMES "stddef.h;stdarg.h;stdlib.h;string.h;stdio.h;wchar.h;float.h") |
| | | check_include_files("${STDC_HEADER_NAMES}" STDC_HEADERS) |
| | | check_type_size("size_t" SIZEOF_SIZE_T) |
| | | check_symbol_exists(M_PI math.h HAVE_M_PI) |
| | | # TODO: refine the mprotect check |
| | |
| | | _uitoa _ultoa strtol strtoul _i64toa _ui64toa strtoll strtoull |
| | | atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp strncasecmp |
| | | wcscmp wcsdup wcslcat wcslcpy wcslen wcsncmp wcsstr |
| | | sscanf vsscanf vsnprintf fopen64 fseeko fseeko64 sigaction setjmp |
| | | nanosleep sysconf sysctlbyname getauxval poll _Exit |
| | | wcscasecmp _wcsicmp wcsncasecmp _wcsnicmp |
| | | sscanf vsscanf vsnprintf fopen64 fseeko fseeko64 _Exit |
| | | ) |
| | | string(TOUPPER ${_FN} _UPPER) |
| | | set(_HAVEVAR "HAVE_${_UPPER}") |
| | | check_function_exists("${_FN}" ${_HAVEVAR}) |
| | | check_symbol_exists("${_FN}" "${STDC_HEADER_NAMES}" ${_HAVEVAR}) |
| | | endforeach() |
| | | |
| | | check_symbol_exists(sigaction "signal.h" HAVE_SIGACTION) |
| | | check_symbol_exists(setjmp "setjmp.h" HAVE_SETJMP) |
| | | check_symbol_exists(nanosleep "time.h" HAVE_NANOSLEEP) |
| | | check_symbol_exists(sysconf "unistd.h" HAVE_SYSCONF) |
| | | check_symbol_exists(sysctlbyname "sys/types.h;sys/sysctl.h" HAVE_SYSCTLBYNAME) |
| | | check_symbol_exists(getauxval "sys/auxv.h" HAVE_GETAUXVAL) |
| | | check_symbol_exists(elf_aux_info "sys/auxv.h" HAVE_ELF_AUX_INFO) |
| | | check_symbol_exists(poll "poll.h" HAVE_POLL) |
| | | |
| | | check_library_exists(m pow "" HAVE_LIBM) |
| | | if(HAVE_LIBM) |
| | |
| | | atan atan2 atanf atan2f ceil ceilf copysign copysignf cos cosf |
| | | exp expf fabs fabsf floor floorf fmod fmodf log logf log10 log10f |
| | | pow powf scalbn scalbnf sin sinf sqrt sqrtf tan tanf acos acosf |
| | | asin asinf) |
| | | asin asinf trunc truncf) |
| | | string(TOUPPER ${_FN} _UPPER) |
| | | set(_HAVEVAR "HAVE_${_UPPER}") |
| | | check_function_exists("${_FN}" ${_HAVEVAR}) |
| | | check_symbol_exists("${_FN}" "math.h" ${_HAVEVAR}) |
| | | endforeach() |
| | | set(CMAKE_REQUIRED_LIBRARIES) |
| | | list(APPEND EXTRA_LIBS m) |
| | | endif() |
| | | |
| | | check_library_exists(iconv iconv_open "" HAVE_LIBICONV) |
| | | if(HAVE_LIBICONV) |
| | | check_library_exists(c iconv_open "" HAVE_BUILTIN_ICONV) |
| | | if(HAVE_BUILTIN_ICONV) |
| | | set(HAVE_ICONV 1) |
| | | elseif(HAVE_LIBICONV) |
| | | list(APPEND EXTRA_LIBS iconv) |
| | | set(HAVE_ICONV 1) |
| | | endif() |
| | | |
| | | if(NOT APPLE) |
| | | check_include_file(alloca.h HAVE_ALLOCA_H) |
| | | check_function_exists(alloca HAVE_ALLOCA) |
| | | check_symbol_exists(alloca "alloca.h" HAVE_ALLOCA1) |
| | | check_symbol_exists(alloca "stdlib.h" HAVE_ALLOCA2) |
| | | check_symbol_exists(alloca "malloc.h" HAVE_ALLOCA3) |
| | | if(HAVE_ALLOCA1 OR HAVE_ALLOCA2 OR HAVE_ALLOCA3) |
| | | set(HAVE_ALLOCA 1) |
| | | endif() |
| | | else() |
| | | set(HAVE_ALLOCA_H 1) |
| | | set(HAVE_ALLOCA 1) |
| | |
| | | # Haptic requires some private functions from the joystick subsystem. |
| | | message_error("SDL_HAPTIC requires SDL_JOYSTICK, which is not enabled") |
| | | endif() |
| | | file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES}) |
| | | endif() |
| | | if(SDL_SENSOR) |
| | | file(GLOB SENSOR_SOURCES ${SDL2_SOURCE_DIR}/src/sensor/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${SENSOR_SOURCES}) |
| | | endif() |
| | | if(SDL_POWER) |
| | | file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${POWER_SOURCES}) |
| | | endif() |
| | | |
| | | |
| | | # TODO: in configure.ac, the test for LOADSO and SDL_DLOPEN is a bit weird: |
| | | # if LOADSO is not wanted, SDL_LOADSO_DISABLED is set |
| | | # If however on Unix or APPLE dlopen() is detected via CheckDLOPEN(), |
| | |
| | | endif() |
| | | endif() |
| | | |
| | | if(SDL_JOYSTICK) |
| | | if(JOYSTICK_VIRTUAL) |
| | | set(SDL_JOYSTICK_VIRTUAL 1) |
| | | file(GLOB JOYSTICK_VIRTUAL_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/virtual/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_VIRTUAL_SOURCES}) |
| | | endif() |
| | | endif() |
| | | |
| | | if(SDL_VIDEO) |
| | | if(VIDEO_DUMMY) |
| | | set(SDL_VIDEO_DRIVER_DUMMY 1) |
| | |
| | | # Platform-specific options and settings |
| | | if(ANDROID) |
| | | file(GLOB ANDROID_CORE_SOURCES ${SDL2_SOURCE_DIR}/src/core/android/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_CORE_SOURCES}) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_CORE_SOURCES} ${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c) |
| | | |
| | | file(GLOB ANDROID_MISC_SOURCES ${SDL2_SOURCE_DIR}/src/misc/android/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_MISC_SOURCES}) |
| | | set(HAVE_SDL_MISC TRUE) |
| | | |
| | | # SDL_spinlock.c Needs to be compiled in ARM mode. |
| | | # There seems to be no better way currently to set the ARM mode. |
| | |
| | | file(GLOB ANDROID_POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/android/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_POWER_SOURCES}) |
| | | set(HAVE_SDL_POWER TRUE) |
| | | endif() |
| | | if(SDL_LOCALE) |
| | | file(GLOB ANDROID_LOCALE_SOURCES ${SDL2_SOURCE_DIR}/src/locale/android/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_LOCALE_SOURCES}) |
| | | set(HAVE_SDL_LOCALE TRUE) |
| | | endif() |
| | | if(SDL_TIMERS) |
| | | set(SDL_TIMER_UNIX 1) |
| | |
| | | file(GLOB EM_POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/emscripten/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${EM_POWER_SOURCES}) |
| | | set(HAVE_SDL_POWER TRUE) |
| | | endif() |
| | | if(SDL_LOCALE) |
| | | file(GLOB LOCALE_SOURCES ${SDL2_SOURCE_DIR}/src/locale/emscripten/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${LOCALE_SOURCES}) |
| | | set(HAVE_SDL_LOCALE TRUE) |
| | | endif() |
| | | if(SDL_TIMERS) |
| | | set(SDL_TIMER_UNIX 1) |
| | |
| | | ioctl(0, KDGKBENT, &kbe); |
| | | }" HAVE_INPUT_KD) |
| | | |
| | | file(GLOB CORE_LINUX_SOURCES ${SDL2_SOURCE_DIR}/src/core/linux/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${CORE_LINUX_SOURCES}) |
| | | |
| | | if(HAVE_INPUT_EVENTS) |
| | | set(SDL_INPUT_LINUXEV 1) |
| | | endif() |
| | |
| | | endif() |
| | | |
| | | check_include_file("libudev.h" HAVE_LIBUDEV_H) |
| | | check_include_file("sys/inotify.h" HAVE_SYS_INOTIFY_H) |
| | | check_symbol_exists(inotify_init "sys/inotify.h" HAVE_INOTIFY_INIT) |
| | | check_symbol_exists(inotify_init1 "sys/inotify.h" HAVE_INOTIFY_INIT1) |
| | | if(HAVE_SYS_INOTIFY_H AND HAVE_INOTIFY_INIT) |
| | | set(HAVE_INOTIFY 1) |
| | | endif() |
| | | |
| | | if(PKG_CONFIG_FOUND) |
| | | pkg_search_module(DBUS dbus-1 dbus) |
| | |
| | | set(HAVE_DBUS_DBUS_H TRUE) |
| | | include_directories(${DBUS_INCLUDE_DIRS}) |
| | | list(APPEND EXTRA_LIBS ${DBUS_LIBRARIES}) |
| | | # Fcitx need only dbus. |
| | | set(HAVE_FCITX TRUE) |
| | | endif() |
| | | |
| | | pkg_search_module(IBUS ibus-1.0 ibus) |
| | |
| | | set(HAVE_IBUS_IBUS_H TRUE) |
| | | include_directories(${IBUS_INCLUDE_DIRS}) |
| | | list(APPEND EXTRA_LIBS ${IBUS_LIBRARIES}) |
| | | add_definitions(-DSDL_USE_IME) |
| | | endif() |
| | | |
| | | if (HAVE_IBUS_IBUS_H OR HAVE_FCITX) |
| | | set(SDL_USE_IME TRUE) |
| | | add_definitions(-DSDL_USE_IME) # !!! FIXME: why isn't this a definition and not in SDL_config.h.cmake? |
| | | endif() |
| | | if(HAVE_LIBUNWIND_H) |
| | | # We've already found the header, so REQUIRE the lib to be present |
| | |
| | | endif() |
| | | endif() |
| | | |
| | | check_include_file("fcitx/frontend.h" HAVE_FCITX_FRONTEND_H) |
| | | endif() |
| | | |
| | | if(INPUT_TSLIB) |
| | | check_c_source_compiles(" |
| | | #include \"tslib.h\" |
| | | int main(int argc, char** argv) { }" HAVE_INPUT_TSLIB) |
| | | if(HAVE_INPUT_TSLIB) |
| | | set(SDL_INPUT_TSLIB 1) |
| | | list(APPEND EXTRA_LIBS ts) |
| | | if(HAVE_DBUS_DBUS_H) |
| | | set(SOURCE_FILES ${SOURCE_FILES} "${SDL2_SOURCE_DIR}/src/core/linux/SDL_dbus.c") |
| | | endif() |
| | | |
| | | if(SDL_USE_IME) |
| | | set(SOURCE_FILES ${SOURCE_FILES} "${SDL2_SOURCE_DIR}/src/core/linux/SDL_ime.c") |
| | | endif() |
| | | |
| | | if(HAVE_IBUS_IBUS_H) |
| | | set(SOURCE_FILES ${SOURCE_FILES} "${SDL2_SOURCE_DIR}/src/core/linux/SDL_ibus.c") |
| | | endif() |
| | | |
| | | if(HAVE_FCITX) |
| | | set(SOURCE_FILES ${SOURCE_FILES} "${SDL2_SOURCE_DIR}/src/core/linux/SDL_fcitx.c") |
| | | endif() |
| | | |
| | | if(HAVE_LIBUDEV_H) |
| | | set(SOURCE_FILES ${SOURCE_FILES} "${SDL2_SOURCE_DIR}/src/core/linux/SDL_udev.c") |
| | | endif() |
| | | |
| | | if(HAVE_INPUT_EVENTS) |
| | | set(SOURCE_FILES ${SOURCE_FILES} "${SDL2_SOURCE_DIR}/src/core/linux/SDL_evdev.c") |
| | | set(SOURCE_FILES ${SOURCE_FILES} "${SDL2_SOURCE_DIR}/src/core/linux/SDL_evdev_kbd.c") |
| | | endif() |
| | | |
| | | # Always compiled for Linux, unconditionally: |
| | | set(SOURCE_FILES ${SOURCE_FILES} "${SDL2_SOURCE_DIR}/src/core/linux/SDL_evdev_capabilities.c") |
| | | set(SOURCE_FILES ${SOURCE_FILES} "${SDL2_SOURCE_DIR}/src/core/linux/SDL_threadprio.c") |
| | | |
| | | # src/core/unix/*.c is included in a generic if(UNIX) section, elsewhere. |
| | | endif() |
| | | |
| | | if(SDL_JOYSTICK) |
| | |
| | | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_LINUX_VERSION_H") |
| | | endif() |
| | | |
| | | file(GLOB MISC_SOURCES ${SDL2_SOURCE_DIR}/src/misc/unix/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${MISC_SOURCES}) |
| | | set(HAVE_SDL_MISC TRUE) |
| | | |
| | | if(SDL_POWER) |
| | | if(LINUX) |
| | | set(SDL_POWER_LINUX 1) |
| | |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${POWER_SOURCES}) |
| | | set(HAVE_SDL_POWER TRUE) |
| | | endif() |
| | | endif() |
| | | |
| | | if(SDL_LOCALE) |
| | | file(GLOB LOCALE_SOURCES ${SDL2_SOURCE_DIR}/src/locale/unix/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${LOCALE_SOURCES}) |
| | | set(HAVE_SDL_LOCALE TRUE) |
| | | endif() |
| | | |
| | | if(SDL_FILESYSTEM) |
| | |
| | | set(HAVE_SDL_TIMERS TRUE) |
| | | endif() |
| | | |
| | | if(RPATH) |
| | | set(SDL_RLD_FLAGS "") |
| | | set(SDL_RLD_FLAGS "") |
| | | if(RPATH AND SDL_SHARED) |
| | | if(BSDI OR FREEBSD OR LINUX OR NETBSD) |
| | | set(CMAKE_REQUIRED_FLAGS "-Wl,--enable-new-dtags") |
| | | check_c_compiler_flag("" HAVE_ENABLE_NEW_DTAGS) |
| | |
| | | file(GLOB CORE_SOURCES ${SDL2_SOURCE_DIR}/src/core/windows/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${CORE_SOURCES}) |
| | | |
| | | if(WINDOWS_STORE) |
| | | file(GLOB WINRT_SOURCE_FILES ${SDL2_SOURCE_DIR}/src/core/winrt/*.c ${SDL2_SOURCE_DIR}/src/core/winrt/*.cpp) |
| | | list(APPEND SOURCE_FILES ${WINRT_SOURCE_FILES}) |
| | | endif() |
| | | |
| | | if(MSVC) |
| | | # Prevent codegen that would use the VC runtime libraries. |
| | | set_property(DIRECTORY . APPEND PROPERTY COMPILE_OPTIONS "/GS-") |
| | |
| | | set_property(DIRECTORY . APPEND PROPERTY COMPILE_OPTIONS "/arch:SSE") |
| | | endif() |
| | | endif() |
| | | |
| | | file(GLOB MISC_SOURCES ${SDL2_SOURCE_DIR}/src/misc/windows/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${MISC_SOURCES}) |
| | | set(HAVE_SDL_MISC TRUE) |
| | | |
| | | # Check for DirectX |
| | | if(DIRECTX) |
| | |
| | | check_include_file(ddraw.h HAVE_DDRAW_H) |
| | | check_include_file(dsound.h HAVE_DSOUND_H) |
| | | check_include_file(dinput.h HAVE_DINPUT_H) |
| | | if(WINDOWS_STORE OR VCPKG_TARGET_TRIPLET MATCHES "arm-windows") |
| | | set(HAVE_DINPUT_H 0) |
| | | endif() |
| | | check_include_file(dxgi.h HAVE_DXGI_H) |
| | | if(HAVE_D3D_H OR HAVE_D3D11_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR HAVE_DINPUT_H) |
| | | set(HAVE_DIRECTX TRUE) |
| | |
| | | # headers needed elsewhere |
| | | check_include_file(mmdeviceapi.h HAVE_MMDEVICEAPI_H) |
| | | check_include_file(audioclient.h HAVE_AUDIOCLIENT_H) |
| | | check_include_file(sensorsapi.h HAVE_SENSORSAPI_H) |
| | | |
| | | if(SDL_AUDIO) |
| | | if(NOT WINDOWS_STORE) |
| | | set(SDL_AUDIO_DRIVER_WINMM 1) |
| | | file(GLOB WINMM_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/winmm/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${WINMM_AUDIO_SOURCES}) |
| | | endif() |
| | | set(HAVE_SDL_AUDIO TRUE) |
| | | |
| | | if(HAVE_DSOUND_H) |
| | | if(HAVE_DSOUND_H AND NOT WINDOWS_STORE) |
| | | set(SDL_AUDIO_DRIVER_DSOUND 1) |
| | | file(GLOB DSOUND_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/directsound/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${DSOUND_AUDIO_SOURCES}) |
| | | endif() |
| | | |
| | | if(WASAPI AND HAVE_AUDIOCLIENT_H AND HAVE_MMDEVICEAPI_H) |
| | | if(WASAPI AND HAVE_AUDIOCLIENT_H AND HAVE_MMDEVICEAPI_H AND NOT WINDOWS_STORE) |
| | | set(SDL_AUDIO_DRIVER_WASAPI 1) |
| | | file(GLOB WASAPI_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/wasapi/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${WASAPI_AUDIO_SOURCES}) |
| | |
| | | if(NOT SDL_LOADSO) |
| | | message_error("SDL_VIDEO requires SDL_LOADSO, which is not enabled") |
| | | endif() |
| | | if(WINDOWS_STORE) |
| | | set(SDL_VIDEO_DRIVER_WINRT 1) |
| | | file(GLOB WIN_VIDEO_SOURCES |
| | | ${SDL2_SOURCE_DIR}/src/video/winrt/*.c |
| | | ${SDL2_SOURCE_DIR}/src/video/winrt/*.cpp |
| | | ${SDL2_SOURCE_DIR}/src/render/direct3d11/*.cpp |
| | | ) |
| | | else() |
| | | set(SDL_VIDEO_DRIVER_WINDOWS 1) |
| | | file(GLOB WIN_VIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/windows/*.c) |
| | | endif() |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${WIN_VIDEO_SOURCES}) |
| | | |
| | | if(RENDER_D3D AND HAVE_D3D_H) |
| | | if(RENDER_D3D AND HAVE_D3D_H AND NOT WINDOWS_STORE) |
| | | set(SDL_VIDEO_RENDER_D3D 1) |
| | | set(HAVE_RENDER_D3D TRUE) |
| | | endif() |
| | |
| | | set(HAVE_SDL_THREADS TRUE) |
| | | endif() |
| | | |
| | | if(SDL_SENSOR AND HAVE_SENSORSAPI_H) |
| | | set(SDL_SENSOR_WINDOWS 1) |
| | | set(HAVE_SDL_SENSORS TRUE) |
| | | file(GLOB WINDOWS_SENSOR_SOURCES ${SDL2_SOURCE_DIR}/src/sensor/windows/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${WINDOWS_SENSOR_SOURCES}) |
| | | endif() |
| | | |
| | | if(SDL_POWER) |
| | | set(SDL_POWER_WINDOWS 1) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/power/windows/SDL_syspower.c) |
| | | set(HAVE_SDL_POWER TRUE) |
| | | if(WINDOWS_STORE) |
| | | set(SDL_POWER_WINRT 1) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/power/winrt/SDL_syspower.cpp) |
| | | else() |
| | | set(SDL_POWER_WINDOWS 1) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/power/windows/SDL_syspower.c) |
| | | set(HAVE_SDL_POWER TRUE) |
| | | endif() |
| | | endif() |
| | | |
| | | if(SDL_LOCALE) |
| | | file(GLOB LOCALE_SOURCES ${SDL2_SOURCE_DIR}/src/locale/windows/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${LOCALE_SOURCES}) |
| | | set(HAVE_SDL_LOCALE TRUE) |
| | | endif() |
| | | |
| | | if(SDL_FILESYSTEM) |
| | | set(SDL_FILESYSTEM_WINDOWS 1) |
| | | file(GLOB FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/windows/*.c) |
| | | if(WINDOWS_STORE) |
| | | file(GLOB FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/winrt/*.cpp) |
| | | else() |
| | | file(GLOB FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/windows/*.c) |
| | | endif() |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${FILESYSTEM_SOURCES}) |
| | | set(HAVE_SDL_FILESYSTEM TRUE) |
| | | endif() |
| | | |
| | | # Libraries for Win32 native and MinGW |
| | | list(APPEND EXTRA_LIBS user32 gdi32 winmm imm32 ole32 oleaut32 version uuid advapi32 setupapi shell32) |
| | | if(NOT WINDOWS_STORE) |
| | | list(APPEND EXTRA_LIBS user32 gdi32 winmm imm32 ole32 oleaut32 version uuid advapi32 setupapi shell32) |
| | | endif() |
| | | |
| | | # TODO: in configure.ac the check for timers is set on |
| | | # cygwin | mingw32* - does this include mingw32CE? |
| | |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${CORE_SOURCES}) |
| | | |
| | | if(SDL_VIDEO) |
| | | if(VIDEO_OPENGL) |
| | | if(VIDEO_OPENGL AND NOT WINDOWS_STORE) |
| | | set(SDL_VIDEO_OPENGL 1) |
| | | set(SDL_VIDEO_OPENGL_WGL 1) |
| | | set(SDL_VIDEO_RENDER_OGL 1) |
| | |
| | | if(HAVE_DINPUT_H) |
| | | set(SDL_JOYSTICK_DINPUT 1) |
| | | list(APPEND EXTRA_LIBS dinput8) |
| | | if(CMAKE_COMPILER_IS_MINGW) |
| | | list(APPEND EXTRA_LIBS dxerr8) |
| | | elseif (NOT USE_WINSDK_DIRECTX) |
| | | list(APPEND EXTRA_LIBS dxerr) |
| | | endif() |
| | | endif() |
| | | if(HAVE_XINPUT_H) |
| | | set(SDL_JOYSTICK_XINPUT 1) |
| | |
| | | message_error("SDL_FILE must be enabled to build on MacOS X") |
| | | endif() |
| | | |
| | | file(GLOB MISC_SOURCES ${SDL2_SOURCE_DIR}/src/misc/macosx/*.m) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${MISC_SOURCES}) |
| | | set(HAVE_SDL_MISC TRUE) |
| | | |
| | | if(SDL_AUDIO) |
| | | set(SDL_AUDIO_DRIVER_COREAUDIO 1) |
| | | file(GLOB AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/coreaudio/*.m) |
| | |
| | | set(SDL_FRAMEWORK_GAMECONTROLLER 1) |
| | | set(HAVE_SDL_SENSORS 1) |
| | | else() |
| | | file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/darwin/*.c) |
| | | file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/darwin/*.c ${SDL2_SOURCE_DIR}/src/joystick/iphoneos/*.m) |
| | | # FIXME: add checks for SDL_JOYSTICK_MFI??? |
| | | set(SDL_JOYSTICK_IOKIT 1) |
| | | set(SDL_FRAMEWORK_IOKIT 1) |
| | | set(SDL_FRAMEWORK_FF 1) |
| | |
| | | endif() |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${POWER_SOURCES}) |
| | | set(HAVE_SDL_POWER TRUE) |
| | | endif() |
| | | |
| | | if(SDL_LOCALE) |
| | | file(GLOB LOCALE_SOURCES ${SDL2_SOURCE_DIR}/src/locale/macosx/*.m) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${LOCALE_SOURCES}) |
| | | set(HAVE_SDL_LOCALE TRUE) |
| | | endif() |
| | | |
| | | if(SDL_TIMERS) |
| | |
| | | |
| | | if(VIDEO_VULKAN OR VIDEO_METAL OR RENDER_METAL) |
| | | set(ORIG_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) |
| | | set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -x objective-c") |
| | | set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -ObjC") |
| | | check_c_source_compiles(" |
| | | #include <AvailabilityMacros.h> |
| | | #import <Metal/Metal.h> |
| | |
| | | CheckPTHREAD() |
| | | |
| | | elseif(HAIKU) |
| | | file(GLOB MISC_SOURCES ${SDL2_SOURCE_DIR}/src/misc/haiku/*.cc) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${MISC_SOURCES}) |
| | | set(HAVE_SDL_MISC TRUE) |
| | | |
| | | if(SDL_VIDEO) |
| | | set(SDL_VIDEO_DRIVER_HAIKU 1) |
| | | file(GLOB HAIKUVIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/haiku/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${HAIKUVIDEO_SOURCES}) |
| | | set(HAVE_SDL_VIDEO TRUE) |
| | | |
| | | set(SDL_FILESYSTEM_HAIKU 1) |
| | | file(GLOB FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/haiku/*.cc) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${FILESYSTEM_SOURCES}) |
| | | set(HAVE_SDL_FILESYSTEM TRUE) |
| | | |
| | | if(SDL_TIMERS) |
| | | set(SDL_TIMER_HAIKU 1) |
| | | file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/haiku/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES}) |
| | | set(HAVE_SDL_TIMERS TRUE) |
| | | endif(SDL_TIMERS) |
| | | |
| | | if(VIDEO_OPENGL) |
| | | # TODO: Use FIND_PACKAGE(OpenGL) instead |
| | |
| | | endif() |
| | | endif() |
| | | |
| | | set(SDL_FILESYSTEM_HAIKU 1) |
| | | file(GLOB FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/haiku/*.cc) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${FILESYSTEM_SOURCES}) |
| | | set(HAVE_SDL_FILESYSTEM TRUE) |
| | | |
| | | if(SDL_TIMERS) |
| | | set(SDL_TIMER_HAIKU 1) |
| | | file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/haiku/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES}) |
| | | set(HAVE_SDL_TIMERS TRUE) |
| | | endif() |
| | | |
| | | if(SDL_LOCALE) |
| | | file(GLOB LOCALE_SOURCES ${SDL2_SOURCE_DIR}/src/locale/haiku/*.cc) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${LOCALE_SOURCES}) |
| | | set(HAVE_SDL_LOCALE TRUE) |
| | | endif() |
| | | |
| | | CheckPTHREAD() |
| | | |
| | | elseif(RISCOS) |
| | | file(GLOB MISC_SOURCES ${SDL2_SOURCE_DIR}/src/misc/riscos/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${MISC_SOURCES}) |
| | | set(HAVE_SDL_MISC TRUE) |
| | | |
| | | if(SDL_TIMERS) |
| | | set(SDL_TIMER_UNIX 1) |
| | | file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/unix/*.c) |
| | |
| | | if(NOT HAVE_SDL_JOYSTICK) |
| | | set(SDL_JOYSTICK_DUMMY 1) |
| | | if(SDL_JOYSTICK AND NOT APPLE) # results in unresolved symbols on OSX |
| | | |
| | | file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/dummy/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES}) |
| | | endif() |
| | |
| | | set(SDL_FILESYSTEM_DISABLED 1) |
| | | file(GLOB FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/dummy/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${FILESYSTEM_SOURCES}) |
| | | endif() |
| | | if(NOT HAVE_SDL_LOCALE) |
| | | set(SDL_LOCALE_DISABLED 1) |
| | | file(GLOB LOCALE_SOURCES ${SDL2_SOURCE_DIR}/src/locale/dummy/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${LOCALE_SOURCES}) |
| | | endif() |
| | | if(NOT HAVE_SDL_MISC) |
| | | set(SDL_MISC_DISABLED 1) |
| | | file(GLOB LOCALE_SOURCES ${SDL2_SOURCE_DIR}/src/misc/dummy/*.c) |
| | | set(SOURCE_FILES ${SOURCE_FILES} ${LOCALE_SOURCES}) |
| | | endif() |
| | | |
| | | # We always need to have threads and timers around |
| | |
| | | set(EXTRA_CFLAGS ${_EXTRA_CFLAGS}) |
| | | |
| | | # Compat helpers for the configuration files |
| | | if(NOT WINDOWS OR CYGWIN) |
| | | if(NOT CMAKE_HOST_WIN32) |
| | | # TODO: we need a Windows script, too |
| | | execute_process(COMMAND sh ${SDL2_SOURCE_DIR}/build-scripts/updaterev.sh) |
| | | |
| | | execute_process(COMMAND sh ${SDL2_SOURCE_DIR}/build-scripts/updaterev.sh |
| | | WORKING_DIRECTORY ${SDL2_BINARY_DIR}) |
| | | endif() |
| | | if(NOT WINDOWS OR CYGWIN) |
| | | set(prefix ${CMAKE_INSTALL_PREFIX}) |
| | | set(exec_prefix "\${prefix}") |
| | | set(libdir "\${exec_prefix}/lib${LIB_SUFFIX}") |
| | |
| | | set(ENABLE_STATIC_FALSE "") |
| | | endif() |
| | | if(SDL_SHARED) |
| | | set(PKG_CONFIG_LIBS_PRIV " |
| | | Libs.private:") |
| | | set(ENABLE_SHARED_TRUE "") |
| | | set(ENABLE_SHARED_FALSE "#") |
| | | else() |
| | | set(PKG_CONFIG_LIBS_PRIV "") |
| | | set(ENABLE_SHARED_TRUE "#") |
| | | set(ENABLE_SHARED_FALSE "") |
| | | endif() |
| | | |
| | | # Clean up the different lists |
| | | listtostr(EXTRA_LIBS _EXTRA_LIBS "-l") |
| | | set(SDL_STATIC_LIBS ${SDL_LIBS} ${EXTRA_LDFLAGS} ${_EXTRA_LIBS}) |
| | | set(SDL_STATIC_LIBS ${EXTRA_LDFLAGS} ${_EXTRA_LIBS}) |
| | | list(REMOVE_DUPLICATES SDL_STATIC_LIBS) |
| | | listtostr(SDL_STATIC_LIBS _SDL_STATIC_LIBS) |
| | | set(SDL_STATIC_LIBS ${_SDL_STATIC_LIBS}) |
| | |
| | | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") |
| | | |
| | | # Always build SDLmain |
| | | if(NOT WINDOWS_STORE) |
| | | add_library(SDL2main STATIC ${SDLMAIN_SOURCES}) |
| | | target_include_directories(SDL2main PUBLIC "$<BUILD_INTERFACE:${SDL2_SOURCE_DIR}/include>" $<INSTALL_INTERFACE:include> $<INSTALL_INTERFACE:include/SDL2>) |
| | | set(_INSTALL_LIBS "SDL2main") |
| | | if (NOT ANDROID) |
| | | set_target_properties(SDL2main PROPERTIES DEBUG_POSTFIX "${SDL_CMAKE_DEBUG_POSTFIX}") |
| | | endif() |
| | | endif() |
| | | |
| | | if (ANDROID AND HAVE_HIDAPI) |
| | |
| | | SOVERSION ${LT_REVISION} |
| | | OUTPUT_NAME "SDL2-${LT_RELEASE}") |
| | | else() |
| | | if(WINDOWS OR CYGWIN) |
| | | set_target_properties(SDL2 PROPERTIES |
| | | DEFINE_SYMBOL DLL_EXPORT) |
| | | endif() |
| | | set_target_properties(SDL2 PROPERTIES |
| | | VERSION ${SDL_VERSION} |
| | | SOVERSION ${LT_REVISION} |
| | |
| | | set_target_properties(SDL2 PROPERTIES STATIC_LIBRARY_FLAGS "/NODEFAULTLIB") |
| | | endif() |
| | | set(_INSTALL_LIBS "SDL2" ${_INSTALL_LIBS}) |
| | | target_link_libraries(SDL2 ${EXTRA_LIBS} ${EXTRA_LDFLAGS}) |
| | | target_link_libraries(SDL2 PRIVATE ${EXTRA_LIBS} ${EXTRA_LDFLAGS}) |
| | | target_include_directories(SDL2 PUBLIC "$<BUILD_INTERFACE:${SDL2_SOURCE_DIR}/include>" $<INSTALL_INTERFACE:include> $<INSTALL_INTERFACE:include/SDL2>) |
| | | if (NOT ANDROID) |
| | | if(ANDROID) |
| | | target_include_directories(SDL2 PRIVATE ${ANDROID_NDK}/sources/android/cpufeatures) |
| | | else() |
| | | set_target_properties(SDL2 PROPERTIES DEBUG_POSTFIX "${SDL_CMAKE_DEBUG_POSTFIX}") |
| | | endif() |
| | | if(IOS OR TVOS) |
| | |
| | | set(_INSTALL_LIBS "SDL2-static" ${_INSTALL_LIBS}) |
| | | target_link_libraries(SDL2-static ${EXTRA_LIBS} ${EXTRA_LDFLAGS}) |
| | | target_include_directories(SDL2-static PUBLIC "$<BUILD_INTERFACE:${SDL2_SOURCE_DIR}/include>" $<INSTALL_INTERFACE:include> $<INSTALL_INTERFACE:include/SDL2>) |
| | | if (NOT ANDROID) |
| | | if(ANDROID) |
| | | target_include_directories(SDL2-static PRIVATE ${ANDROID_NDK}/sources/android/cpufeatures) |
| | | else() |
| | | set_target_properties(SDL2-static PROPERTIES DEBUG_POSTFIX "${SDL_CMAKE_DEBUG_POSTFIX}") |
| | | endif() |
| | | if(IOS OR TVOS) |