CMakeLists.txt
author Sam Lantinga
Sun, 05 Apr 2020 08:58:47 -0700
changeset 13689 c3055b205671
parent 13621 958bd91f4f4c
child 13710 a1a6885cff94
permissions -rw-r--r--
Fixed bug 5015 - SDL_RenderReadPixels on DirectX 11.1 backend seems to be broken

Konrad

It appears that I cannot use SDL_RenderReadPixels on a bound framebuffer (SDL_Texture set as render target) as it simply results in gibberish data. However, drawing that framebuffer into the default target (window surface) does render it correctly. Other backends (OpenGL, software, Direct3D) do work fine.

It looks to me like D3D11_RenderReadPixels just gets the general backbuffer and not the current render target and its backbuffer.

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