CMakeLists.txt
author Sam Lantinga
Sat, 08 Jun 2019 18:22:18 -0700
changeset 12803 70d338e248c8
parent 12792 4063a5ebe39b
child 12804 1a330416800d
permissions -rw-r--r--
Fixed bug 4294 - Audio: perform more validation on conversion request

janisozaur

There are many cases which are not able to be handled by SDL's audio conversion routines, including too low (negative) rate, too high rate (impossible to allocate).

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