CMakeLists.txt
author Sam Lantinga <slouken@libsdl.org>
Wed, 02 Aug 2017 10:22:48 -0700
changeset 11175 cbc6a8a5b701
parent 11138 c936a84f05ba
child 11207 4ed2e42b7497
permissions -rw-r--r--
Fixed bug 3690 - SDL2 KMS/DRM render context support

Manuel

The attached patch adds support for KMS/DRM context graphics.

It builds with no problem on X86_64 GNU/Linux systems, provided the needed libraries are present, and on ARM GNU/Linux systems that have KMS/DRM support and a GLES2 implementation.
Tested on Raspberry Pi: KMS/DRM is what the Raspberry Pi will use as default in the near future, once the propietary DispmanX API by Broadcom is overtaken by open graphics stack, it's possible to boot current Raspbian system in KMS mode by adding "dtoverlay=vc4-kms-v3d" to config.txt on Raspbian's boot partition.
X86 systems use KMS right away in every current GNU/Linux system.

Simple build instructions:

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