CMakeLists.txt
author Ethan Lee
Wed, 31 Jul 2019 12:20:55 -0400
changeset 12974 0fef4b21fa1d
parent 12971 2fbd3d8432ab
child 12998 b87ba0fad17e
permissions -rw-r--r--
hidapi: Add SDL_hidapi.c, allows support for multiple hidapi backends.

This is currently supported on Linux and macOS. iOS and Android are not
supported at all, Windows support could be added with some changes to the libusb
backend. The Visual Studio and Xcode projects do not use this feature.

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