CMakeLists.txt
author Sam Lantinga <slouken@libsdl.org>
Mon, 22 Jun 2015 23:36:06 -0700
changeset 9776 952ff8a5076f
parent 9758 cf4d3ee2b37b
child 9853 3d08cb641cd5
permissions -rw-r--r--
Fixed bug 3030 - SDL_RecreateWindow fails to restore title, icon, etc.

Adam M.

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