CMakeLists.txt
author Steven M. Vascellaro <svascellaro@gmail.com>
Mon, 22 Oct 2018 10:55:18 -0400
changeset 12379 5dc13016cf34
parent 12355 a46837d71c0a
child 12391 ca6e41ade79a
permissions -rw-r--r--
joystick: Add Linux mappings for "Xbox One Wireless Controller (Model 1708)"

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