CMakeLists.txt
author Sam Lantinga <slouken@libsdl.org>
Sat, 26 Aug 2017 21:17:12 -0700
changeset 11353 598839965877
parent 11337 d9f24e95e8ba
child 11365 a9bd2625fa01
permissions -rw-r--r--
Fixed bug 3774 - Cmake build fails for Android

sfalexrog

Android haptic code was not added to CMakeLists.txt, leading to build failures when targeting Android platform.

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