CMakeLists.txt
author Sam Lantinga <slouken@libsdl.org>
Mon, 09 Jan 2017 11:58:01 -0800
changeset 10802 6afc9b833867
parent 10777 2883d23b5a28
child 10835 0e9e7a128391
permissions -rw-r--r--
We only need the first few keymaps corresponding to the following constants:
K_NORMTAB, K_SHIFTTAB, K_ALTTAB, K_ALTSHIFTTAB

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