2021-07-10 03:39:05 +08:00
if ( ${ CMAKE_CURRENT_SOURCE_DIR } STREQUAL ${ CMAKE_CURRENT_BINARY_DIR } )
2021-08-07 03:00:53 +08:00
message ( FATAL_ERROR "Prevented in-tree build. Please create a build directory outside of the SDL source code and run \" cmake -S ${ CMAKE_SOURCE_DIR } -B .\ " from there" )
2015-06-21 23:33:46 +08:00
endif ( )
2021-11-10 00:06:33 +08:00
cmake_minimum_required ( VERSION 3.0.0 )
2019-05-22 08:33:31 +08:00
project ( SDL2 C CXX )
2016-01-05 14:25:54 +08:00
2021-08-05 07:22:10 +08:00
if ( HAIKU )
set ( LINKER_LANGUAGE CXX )
endif ( )
2021-10-06 00:34:29 +08:00
# This is a virtual "library" that just exists to collect up compiler and
# linker options that used to be global to this CMake project. When you
# specify it as part of a real library's target_link_libraries(), that
# library will also gain all those build options too. This is meant to
# modularize old calls to the global add_definitions and include_directories,
# etc. See https://github.com/libsdl-org/SDL/issues/4150
add_library ( sdl-build-options INTERFACE )
if ( WINDOWS_STORE )
2021-11-10 00:06:33 +08:00
cmake_minimum_required ( VERSION 3.11.0 )
2021-10-06 00:34:29 +08:00
target_compile_definitions ( sdl-build-options INTERFACE "-DSDL_BUILDING_WINRT=1" )
target_compile_options ( sdl-build-options INTERFACE "-ZW" )
endif ( )
2022-01-05 06:46:04 +08:00
# Build in parallel under Visual Studio. Not enabled by default.
if ( MSVC )
target_compile_options ( sdl-build-options INTERFACE "/MP" )
endif ( MSVC )
2021-10-06 00:34:29 +08:00
2016-01-05 14:25:54 +08:00
# !!! FIXME: this should probably do "MACOSX_RPATH ON" as a target property
# !!! FIXME: for the SDL2 shared library (so you get an
# !!! FIXME: install_name ("soname") of "@rpath/libSDL-whatever.dylib"
# !!! FIXME: instead of "/usr/local/lib/libSDL-whatever.dylib"), but I'm
# !!! FIXME: punting for now and leaving the existing behavior. Until this
# !!! FIXME: properly resolved, this line silences a warning in CMake 3.0+.
# !!! FIXME: remove it and this comment entirely once the problem is
# !!! FIXME: properly resolved.
2016-01-05 18:44:32 +08:00
#cmake_policy(SET CMP0042 OLD)
2016-01-05 14:25:54 +08:00
2015-06-21 23:33:46 +08:00
include ( CheckLibraryExists )
include ( CheckIncludeFiles )
include ( CheckIncludeFile )
include ( CheckSymbolExists )
2017-08-28 10:15:57 +08:00
include ( CheckCSourceCompiles )
2015-06-21 23:33:46 +08:00
include ( CheckCSourceRuns )
include ( CheckCCompilerFlag )
2021-02-02 12:25:24 +08:00
include ( CheckCXXCompilerFlag )
2015-06-21 23:33:46 +08:00
include ( CheckTypeSize )
include ( CheckStructHasMember )
include ( CMakeDependentOption )
include ( FindPkgConfig )
2016-10-02 06:11:18 +08:00
include ( GNUInstallDirs )
2015-06-21 23:33:46 +08:00
set ( CMAKE_MODULE_PATH "${SDL2_SOURCE_DIR}/cmake" )
include ( ${ SDL2_SOURCE_DIR } /cmake/macros.cmake )
include ( ${ SDL2_SOURCE_DIR } /cmake/sdlchecks.cmake )
2022-05-03 21:09:12 +08:00
# See docs/release_checklist.md
2015-06-21 23:33:46 +08:00
set ( SDL_MAJOR_VERSION 2 )
2022-05-03 22:16:11 +08:00
set ( SDL_MINOR_VERSION 23 )
set ( SDL_MICRO_VERSION 0 )
2015-06-21 23:33:46 +08:00
set ( SDL_VERSION "${SDL_MAJOR_VERSION}.${SDL_MINOR_VERSION}.${SDL_MICRO_VERSION}" )
2017-08-10 10:03:10 +08:00
# Set defaults preventing destination file conflicts
2018-02-26 01:22:47 +08:00
set ( SDL_CMAKE_DEBUG_POSTFIX "d"
2017-08-10 10:03:10 +08:00
C A C H E S T R I N G " N a m e s u f f i x f o r d e b u g b u i l d s " )
2018-02-26 01:22:47 +08:00
mark_as_advanced ( CMAKE_IMPORT_LIBRARY_SUFFIX SDL_CMAKE_DEBUG_POSTFIX )
2017-08-10 10:03:10 +08:00
2015-06-21 23:33:46 +08:00
# Calculate a libtool-like version number
2022-05-04 23:40:11 +08:00
math ( EXPR SDL_BINARY_AGE "${SDL_MINOR_VERSION} * 100 + ${SDL_MICRO_VERSION}" )
if ( SDL_MINOR_VERSION MATCHES "[02468]$" )
# Stable branch, 2.24.1 -> libSDL2-2.0.so.0.2400.1
set ( SDL_INTERFACE_AGE ${ SDL_MICRO_VERSION } )
else ( )
# Development branch, 2.23.1 -> libSDL2-2.0.so.0.2301.0
set ( SDL_INTERFACE_AGE 0 )
endif ( )
# Increment this if there is an incompatible change - but if that happens,
# we should rename the library from SDL2 to SDL3, at which point this would
# reset to 0 anyway.
set ( LT_MAJOR "0" )
2015-06-21 23:33:46 +08:00
math ( EXPR LT_AGE "${SDL_BINARY_AGE} - ${SDL_INTERFACE_AGE}" )
2022-05-04 23:40:11 +08:00
math ( EXPR LT_CURRENT "${LT_MAJOR} + ${LT_AGE}" )
2015-06-21 23:33:46 +08:00
set ( LT_REVISION "${SDL_INTERFACE_AGE}" )
2022-05-03 22:16:11 +08:00
# For historical reasons, the library name redundantly includes the major
# version twice: libSDL2-2.0.so.0.
# TODO: in SDL 3, set the OUTPUT_NAME to plain SDL3, which will simplify
# it to libSDL3.so.0
set ( LT_RELEASE "2.0" )
2015-06-21 23:33:46 +08:00
set ( LT_VERSION "${LT_MAJOR}.${LT_AGE}.${LT_REVISION}" )
2022-05-04 23:40:11 +08:00
# The following should match the versions in the Xcode project file.
# Each version is 1 higher than you might expect, for compatibility
# with libtool: macOS ABI versioning is 1-based, unlike other platforms
# which are normally 0-based.
math ( EXPR DYLIB_CURRENT_VERSION_MAJOR "${LT_MAJOR} + ${LT_AGE} + 1" )
math ( EXPR DYLIB_CURRENT_VERSION_MINOR "${LT_REVISION}" )
math ( EXPR DYLIB_COMPAT_VERSION_MAJOR "${LT_MAJOR} + 1" )
set ( DYLIB_CURRENT_VERSION "${DYLIB_CURRENT_VERSION_MAJOR}.${DYLIB_CURRENT_VERSION_MINOR}.0" )
set ( DYLIB_COMPATIBILITY_VERSION "${DYLIB_COMPAT_VERSION_MAJOR}.0.0" )
2018-12-02 15:43:32 +08:00
#message(STATUS "${LT_VERSION} :: ${LT_AGE} :: ${LT_REVISION} :: ${LT_CURRENT} :: ${LT_RELEASE}")
2015-06-21 23:33:46 +08:00
# General settings & flags
set ( LIBRARY_OUTPUT_DIRECTORY "build" )
# Check for 64 or 32 bit
set ( SIZEOF_VOIDP ${ CMAKE_SIZEOF_VOID_P } )
if ( CMAKE_SIZEOF_VOID_P EQUAL 8 )
set ( ARCH_64 TRUE )
set ( PROCESSOR_ARCH "x64" )
else ( )
set ( ARCH_64 FALSE )
set ( PROCESSOR_ARCH "x86" )
endif ( )
set ( LIBNAME SDL2 )
if ( NOT LIBTYPE )
set ( LIBTYPE SHARED )
endif ( )
# Get the platform
if ( WIN32 )
if ( NOT WINDOWS )
set ( WINDOWS TRUE )
endif ( )
elseif ( UNIX AND NOT APPLE )
if ( CMAKE_SYSTEM_NAME MATCHES ".*Linux" )
set ( LINUX TRUE )
elseif ( CMAKE_SYSTEM_NAME MATCHES "kFreeBSD.*" )
set ( FREEBSD TRUE )
elseif ( CMAKE_SYSTEM_NAME MATCHES "kNetBSD.*|NetBSD.*" )
set ( NETBSD TRUE )
elseif ( CMAKE_SYSTEM_NAME MATCHES "kOpenBSD.*|OpenBSD.*" )
set ( OPENBSD TRUE )
elseif ( CMAKE_SYSTEM_NAME MATCHES ".*GNU.*" )
set ( GNU TRUE )
elseif ( CMAKE_SYSTEM_NAME MATCHES ".*BSDI.*" )
set ( BSDI TRUE )
elseif ( CMAKE_SYSTEM_NAME MATCHES "DragonFly.*|FreeBSD" )
set ( FREEBSD TRUE )
elseif ( CMAKE_SYSTEM_NAME MATCHES "SYSV5.*" )
set ( SYSV5 TRUE )
elseif ( CMAKE_SYSTEM_NAME MATCHES "Solaris.*" )
set ( SOLARIS TRUE )
elseif ( CMAKE_SYSTEM_NAME MATCHES "HP-UX.*" )
set ( HPUX TRUE )
elseif ( CMAKE_SYSTEM_NAME MATCHES "AIX.*" )
set ( AIX TRUE )
elseif ( CMAKE_SYSTEM_NAME MATCHES "Minix.*" )
set ( MINIX TRUE )
endif ( )
elseif ( APPLE )
if ( CMAKE_SYSTEM_NAME MATCHES ".*Darwin.*" )
set ( DARWIN TRUE )
elseif ( CMAKE_SYSTEM_NAME MATCHES ".*MacOS.*" )
set ( MACOSX TRUE )
2019-08-28 00:30:20 +08:00
elseif ( CMAKE_SYSTEM_NAME MATCHES ".*tvOS.*" )
set ( TVOS TRUE )
2021-10-05 23:13:41 +08:00
elseif ( CMAKE_SYSTEM_NAME MATCHES ".*iOS.*" )
# !!! FIXME: remove the version check when we start requiring >= 3.14.0
if ( CMAKE_VERSION VERSION_LESS 3.14 )
set ( IOS TRUE )
endif ( )
2015-06-21 23:33:46 +08:00
endif ( )
elseif ( CMAKE_SYSTEM_NAME MATCHES "BeOS.*" )
message_error ( "BeOS support has been removed as of SDL 2.0.2." )
elseif ( CMAKE_SYSTEM_NAME MATCHES "Haiku.*" )
set ( HAIKU TRUE )
endif ( )
# Don't mistake osx for unix
2020-02-14 04:50:47 +08:00
if ( UNIX AND NOT APPLE AND NOT RISCOS )
2015-06-21 23:33:46 +08:00
set ( UNIX_SYS ON )
else ( )
set ( UNIX_SYS OFF )
endif ( )
if ( UNIX OR APPLE )
set ( UNIX_OR_MAC_SYS ON )
else ( )
set ( UNIX_OR_MAC_SYS OFF )
endif ( )
2021-04-04 12:16:30 +08:00
# Emscripten pthreads work, but you need to have a non-pthread fallback build
# for systems without support. It's not currently enough to not use
# pthread functions in a pthread-build; it won't start up on unsupported
# browsers. As such, you have to explicitly enable it on Emscripten builds
# for the time being. This default with change to ON once this becomes
# commonly supported in browsers or the Emscripten teams makes a single
# binary work everywhere.
if ( UNIX_OR_MAC_SYS AND NOT EMSCRIPTEN )
2015-06-21 23:33:46 +08:00
set ( SDL_PTHREADS_ENABLED_BY_DEFAULT ON )
else ( )
set ( SDL_PTHREADS_ENABLED_BY_DEFAULT OFF )
endif ( )
2019-07-09 04:46:52 +08:00
# The hidraw support doesn't catch Xbox, PS4 and Nintendo controllers,
2019-08-01 00:20:55 +08:00
# so we'll just use libusb when it's available. libusb does not support iOS,
# so we default to yes on iOS.
# TODO: Windows can support libusb, the hid.c file just depends on Unix APIs
2020-12-09 01:04:28 +08:00
if ( ( WINDOWS AND NOT WINDOWS_STORE ) OR IOS OR TVOS OR ANDROID )
2019-07-09 04:46:52 +08:00
set ( HIDAPI_SKIP_LIBUSB TRUE )
else ( )
set ( HIDAPI_SKIP_LIBUSB FALSE )
endif ( )
2019-08-01 00:20:55 +08:00
# On the other hand, *BSD specifically uses libusb only, so we make a special
# case just for them.
if ( FREEBSD OR NETBSD OR OPENBSD OR BSDI )
set ( HIDAPI_ONLY_LIBUSB TRUE )
else ( )
set ( HIDAPI_ONLY_LIBUSB FALSE )
endif ( )
2015-06-21 23:33:46 +08:00
# Compiler info
2021-03-04 23:40:50 +08:00
if ( CMAKE_C_COMPILER_ID MATCHES "Clang" )
2015-06-21 23:33:46 +08:00
set ( USE_CLANG TRUE )
set ( OPT_DEF_ASM TRUE )
2021-11-18 07:04:34 +08:00
# Visual Studio 2019 v16.2 added support for Clang/LLVM.
# Check if a Visual Studio project is being generated with the Clang toolset.
if ( MSVC )
set ( MSVC_CLANG TRUE )
endif ( )
2021-03-04 23:40:50 +08:00
elseif ( CMAKE_COMPILER_IS_GNUCC )
set ( USE_GCC TRUE )
set ( OPT_DEF_ASM TRUE )
2015-06-21 23:33:46 +08:00
elseif ( MSVC_VERSION GREATER 1400 ) # VisualStudio 8.0+
set ( OPT_DEF_ASM TRUE )
#set(CMAKE_C_FLAGS "/ZI /WX- /
else ( )
set ( OPT_DEF_ASM FALSE )
endif ( )
2017-06-09 03:07:55 +08:00
if ( USE_GCC OR USE_CLANG )
set ( OPT_DEF_GCC_ATOMICS ON )
endif ( )
2021-03-04 23:40:56 +08:00
# Default option knobs
2021-11-18 07:04:34 +08:00
if ( APPLE OR ARCH_64 OR MSVC_CLANG )
2021-03-04 23:40:56 +08:00
if ( NOT "${CMAKE_OSX_ARCHITECTURES}" MATCHES "arm" )
set ( OPT_DEF_SSEMATH ON )
endif ( )
endif ( )
2021-11-30 01:42:13 +08:00
if ( UNIX OR MINGW OR MSYS OR ( USE_CLANG AND NOT WINDOWS ) OR VITA OR PSP )
2021-03-04 23:40:56 +08:00
set ( OPT_DEF_LIBC ON )
endif ( )
2021-11-10 00:06:33 +08:00
if ( NOT ( "$ENV{CFLAGS}" STREQUAL "" ) )
if ( CMAKE_VERSION VERSION_LESS 3.11.0 )
message ( WARNING "SDL's CMakeLists.txt no longer checks the CFLAGS environment." )
message ( WARNING "Please use CMake's CMAKE_C_FLAGS and CMAKE_BUILD_TYPE variables directly." )
message ( WARNING "Or upgrade to CMake >= 3.11.0, which respects the CFLAGS environment var." )
endif ( )
endif ( )
2015-06-21 23:33:46 +08:00
if ( MSVC )
2021-10-05 22:43:35 +08:00
option ( SDL_FORCE_STATIC_VCRT "Force /MT for static VC runtimes" OFF )
if ( SDL_FORCE_STATIC_VCRT )
2015-06-21 23:33:46 +08:00
foreach ( flag_var
C M A K E _ C _ F L A G S C M A K E _ C _ F L A G S _ D E B U G C M A K E _ C _ F L A G S _ R E L E A S E
C M A K E _ C _ F L A G S _ M I N S I Z E R E L C M A K E _ C _ F L A G S _ R E L W I T H D E B I N F O )
if ( ${ flag_var } MATCHES "/MD" )
string ( REGEX REPLACE "/MD" "/MT" ${ flag_var } "${${flag_var}}" )
endif ( )
endforeach ( )
endif ( )
2016-01-01 03:26:40 +08:00
2021-11-04 14:02:48 +08:00
if ( NOT SDL_LIBC )
# Make sure /RTC1 is disabled, otherwise it will use functions from the CRT
foreach ( flag_var
C M A K E _ C _ F L A G S C M A K E _ C _ F L A G S _ D E B U G C M A K E _ C _ F L A G S _ R E L E A S E
C M A K E _ C _ F L A G S _ M I N S I Z E R E L C M A K E _ C _ F L A G S _ R E L W I T H D E B I N F O )
string ( REGEX REPLACE "/RTC(su|[1su])" "" ${ flag_var } "${${flag_var}}" )
endforeach ( flag_var )
endif ( )
2021-11-23 23:56:50 +08:00
if ( MSVC_CLANG )
2021-11-27 02:20:50 +08:00
# clang-cl treats /W4 as '-Wall -Wextra' -- we don't need -Wextra
2021-11-23 23:56:50 +08:00
foreach ( flag_var
C M A K E _ C _ F L A G S C M A K E _ C _ F L A G S _ D E B U G C M A K E _ C _ F L A G S _ R E L E A S E
C M A K E _ C _ F L A G S _ M I N S I Z E R E L C M A K E _ C _ F L A G S _ R E L W I T H D E B I N F O )
string ( REGEX REPLACE "/W4" "/W3" ${ flag_var } "${${flag_var}}" )
endforeach ( flag_var )
endif ( )
2015-06-21 23:33:46 +08:00
endif ( )
2022-06-04 02:12:52 +08:00
# Those are used for pkg-config and friends, so that the sdl2.pc, sdl2-config,
2015-06-21 23:33:46 +08:00
# etc. are created correctly.
set ( SDL_LIBS "-lSDL2" )
set ( SDL_CFLAGS "" )
2018-06-29 23:29:17 +08:00
# When building shared lib for Windows with MinGW,
# avoid the DLL having a "lib" prefix
2018-08-03 04:21:43 +08:00
if ( WINDOWS )
2018-06-29 23:29:17 +08:00
set ( CMAKE_SHARED_LIBRARY_PREFIX "" )
endif ( )
2018-04-10 23:03:54 +08:00
# Emscripten toolchain has a nonempty default value for this, and the checks
# in this file need to change that, so remember the original value, and
2015-06-21 23:33:46 +08:00
# restore back to that afterwards. For check_function_exists() to work in
# Emscripten, this value must be at its default value.
set ( ORIG_CMAKE_REQUIRED_FLAGS ${ CMAKE_REQUIRED_FLAGS } )
if ( CYGWIN )
# We build SDL on cygwin without the UNIX emulation layer
2021-10-06 00:34:29 +08:00
target_include_directories ( sdl-build-options INTERFACE "/usr/include/mingw" )
2016-09-13 15:03:50 +08:00
set ( CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -mno-cygwin" )
2022-03-14 00:10:52 +08:00
check_c_source_compiles ( "int main(int argc, char **argv) { return 0; }"
2015-06-21 23:33:46 +08:00
H A V E _ G C C _ N O _ C Y G W I N )
set ( CMAKE_REQUIRED_FLAGS ${ ORIG_CMAKE_REQUIRED_FLAGS } )
if ( HAVE_GCC_NO_CYGWIN )
2022-06-04 02:12:52 +08:00
list ( APPEND EXTRA_LDFLAGS_BUILD "-mno-cygwin" )
2015-06-21 23:33:46 +08:00
list ( APPEND SDL_LIBS "-mno-cygwin" )
endif ( )
set ( SDL_CFLAGS "${SDL_CFLAGS} -I/usr/include/mingw" )
endif ( )
# General includes
2021-10-06 00:34:29 +08:00
target_compile_definitions ( sdl-build-options INTERFACE "-DUSING_GENERATED_CONFIG_H" )
target_include_directories ( sdl-build-options BEFORE INTERFACE "${SDL2_BINARY_DIR}/include" )
target_include_directories ( sdl-build-options INTERFACE "${SDL2_SOURCE_DIR}/include" )
2021-11-18 07:04:34 +08:00
# Note: The clang toolset for Visual Studio does not support the '-idirafter' option.
if ( USE_GCC OR ( USE_CLANG AND NOT MSVC_CLANG ) )
2021-10-06 00:34:29 +08:00
# !!! FIXME: do we _need_ to mess with CMAKE_C_FLAGS here?
2020-12-09 01:16:34 +08:00
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -idirafter \" ${ SDL2_SOURCE_DIR } /src/video/khronos\ "" )
2017-09-11 01:25:36 +08:00
else ( )
2021-10-06 00:34:29 +08:00
target_include_directories ( sdl-build-options INTERFACE "${SDL2_SOURCE_DIR}/src/video/khronos" )
2017-09-11 01:25:36 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
# All these ENABLED_BY_DEFAULT vars will default to ON if not specified, so
# you only need to have a platform override them if they are disabling.
set ( OPT_DEF_ASM TRUE )
if ( EMSCRIPTEN )
# Set up default values for the currently supported set of subsystems:
2018-04-10 23:03:54 +08:00
# Emscripten/Javascript does not have assembly support, a dynamic library
2021-04-04 12:16:30 +08:00
# loading architecture, or low-level CPU inspection.
# SDL_THREADS_ENABLED_BY_DEFAULT now defaults to ON, but pthread support might be disabled by default.
# !!! FIXME: most of these subsystems should default to ON if there are dummy implementations to be used.
2015-06-21 23:33:46 +08:00
set ( OPT_DEF_ASM FALSE )
set ( SDL_SHARED_ENABLED_BY_DEFAULT OFF )
set ( SDL_ATOMIC_ENABLED_BY_DEFAULT OFF )
set ( SDL_LOADSO_ENABLED_BY_DEFAULT OFF )
set ( SDL_CPUINFO_ENABLED_BY_DEFAULT OFF )
2022-05-27 07:40:11 +08:00
set ( SDL_TEST_ENABLED_BY_DEFAULT OFF )
2015-06-21 23:33:46 +08:00
endif ( )
2021-11-30 01:42:13 +08:00
if ( VITA OR PSP )
2020-12-18 21:42:57 +08:00
set ( SDL_SHARED_ENABLED_BY_DEFAULT OFF )
set ( SDL_LOADSO_ENABLED_BY_DEFAULT OFF )
endif ( )
2019-06-09 05:36:03 +08:00
# When defined, respect CMake's BUILD_SHARED_LIBS setting:
set ( SDL_STATIC_ENABLED_BY_DEFAULT ON )
2015-06-21 23:33:46 +08:00
if ( NOT DEFINED SDL_SHARED_ENABLED_BY_DEFAULT )
2019-06-09 05:36:03 +08:00
# ...unless decided already (as for EMSCRIPTEN)
set ( SDL_SHARED_ENABLED_BY_DEFAULT OFF )
if ( NOT DEFINED BUILD_SHARED_LIBS )
# No preference? Build both, just like the AC/AM configure
2015-06-21 23:33:46 +08:00
set ( SDL_SHARED_ENABLED_BY_DEFAULT ON )
2019-06-09 05:36:03 +08:00
elseif ( BUILD_SHARED_LIBS )
# In this case, we assume the user wants a shared lib and don't build
# the static one
set ( SDL_SHARED_ENABLED_BY_DEFAULT ON )
set ( SDL_STATIC_ENABLED_BY_DEFAULT OFF )
endif ( )
2015-06-21 23:33:46 +08:00
endif ( )
2022-05-27 07:40:11 +08:00
if ( NOT DEFINED SDL_TEST_ENABLED_BY_DEFAULT )
set ( SDL_TEST_ENABLED_BY_DEFAULT ON )
endif ( )
2021-10-05 22:54:06 +08:00
set ( LONGESTOPTIONNAME 0 ) # set_option and friends will change this.
2015-06-21 23:33:46 +08:00
set ( SDL_SUBSYSTEMS
2021-11-09 03:25:32 +08:00
A t o m i c A u d i o V i d e o R e n d e r E v e n t s J o y s t i c k H a p t i c H i d a p i P o w e r T h r e a d s T i m e r s
2022-01-15 19:27:25 +08:00
F i l e L o a d s o C P U i n f o F i l e s y s t e m S e n s o r L o c a l e M i s c )
2015-06-21 23:33:46 +08:00
foreach ( _SUB ${ SDL_SUBSYSTEMS } )
string ( TOUPPER ${ _SUB } _OPT )
if ( NOT DEFINED SDL_ ${ _OPT } _ENABLED_BY_DEFAULT )
set ( SDL_ ${ _OPT } _ENABLED_BY_DEFAULT ON )
endif ( )
option ( SDL_ ${ _OPT } "Enable the ${_SUB} subsystem" ${ SDL_${_OPT } _ENABLED_BY_DEFAULT} )
endforeach ( )
2022-01-12 00:34:14 +08:00
# Allow some projects to be built conditionally.
set_option ( SDL2_DISABLE_SDL2MAIN "Disable building/installation of SDL2main" OFF )
2022-04-16 05:11:29 +08:00
set_option ( SDL2_DISABLE_INSTALL "Disable installation of SDL2" OFF )
2022-01-12 00:34:14 +08:00
set_option ( SDL2_DISABLE_UNINSTALL "Disable uninstallation of SDL2" OFF )
2021-10-05 22:43:35 +08:00
option_string ( SDL_ASSERTIONS "Enable internal sanity checks (auto/disabled/release/enabled/paranoid)" "auto" )
#set_option(SDL_DEPENDENCY_TRACKING "Use gcc -MMD -MT dependency tracking" ON)
set_option ( SDL_LIBC "Use the system C library" ${ OPT_DEF_LIBC } )
set_option ( SDL_GCC_ATOMICS "Use gcc builtin atomics" ${ OPT_DEF_GCC_ATOMICS } )
set_option ( SDL_ASSEMBLY "Enable assembly routines" ${ OPT_DEF_ASM } )
set_option ( SDL_SSEMATH "Allow GCC to use SSE floating point math" ${ OPT_DEF_SSEMATH } )
set_option ( SDL_MMX "Use MMX assembly routines" ${ OPT_DEF_ASM } )
set_option ( SDL_3DNOW "Use 3Dnow! MMX assembly routines" ${ OPT_DEF_ASM } )
set_option ( SDL_SSE "Use SSE assembly routines" ${ OPT_DEF_ASM } )
set_option ( SDL_SSE2 "Use SSE2 assembly routines" ${ OPT_DEF_SSEMATH } )
set_option ( SDL_SSE3 "Use SSE3 assembly routines" ${ OPT_DEF_SSEMATH } )
set_option ( SDL_ALTIVEC "Use Altivec assembly routines" ${ OPT_DEF_ASM } )
set_option ( SDL_ARMSIMD "use SIMD assembly blitters on ARM" OFF )
set_option ( SDL_ARMNEON "use NEON assembly blitters on ARM" OFF )
set_option ( SDL_DISKAUDIO "Support the disk writer audio driver" ON )
set_option ( SDL_DUMMYAUDIO "Support the dummy audio driver" ON )
set_option ( SDL_DIRECTFB "Use DirectFB video driver" OFF )
dep_option ( SDL_DIRECTFB_SHARED "Dynamically load directfb support" ON "SDL_DIRECTFB" OFF )
set_option ( SDL_DUMMYVIDEO "Use dummy video driver" ON )
set_option ( SDL_OPENGL "Include OpenGL support" ON )
set_option ( SDL_OPENGLES "Include OpenGL ES support" ON )
set_option ( SDL_PTHREADS "Use POSIX threads for multi-threading" ${ SDL_PTHREADS_ENABLED_BY_DEFAULT } )
dep_option ( SDL_PTHREADS_SEM "Use pthread semaphores" ON "SDL_PTHREADS" OFF )
dep_option ( SDL_OSS "Support the OSS audio API" ON "UNIX_SYS OR RISCOS" OFF )
set_option ( SDL_ALSA "Support the ALSA audio API" ${ UNIX_SYS } )
dep_option ( SDL_ALSA_SHARED "Dynamically load ALSA audio support" ON "SDL_ALSA" OFF )
set_option ( SDL_JACK "Support the JACK audio API" ${ UNIX_SYS } )
dep_option ( SDL_JACK_SHARED "Dynamically load JACK audio support" ON "SDL_JACK" OFF )
set_option ( SDL_ESD "Support the Enlightened Sound Daemon" ${ UNIX_SYS } )
dep_option ( SDL_ESD_SHARED "Dynamically load ESD audio support" ON "SDL_ESD" OFF )
set_option ( SDL_PIPEWIRE "Use Pipewire audio" ${ UNIX_SYS } )
dep_option ( SDL_PIPEWIRE_SHARED "Dynamically load Pipewire support" ON "SDL_PIPEWIRE" OFF )
set_option ( SDL_PULSEAUDIO "Use PulseAudio" ${ UNIX_SYS } )
dep_option ( SDL_PULSEAUDIO_SHARED "Dynamically load PulseAudio support" ON "SDL_PULSEAUDIO" OFF )
set_option ( SDL_ARTS "Support the Analog Real Time Synthesizer" ${ UNIX_SYS } )
dep_option ( SDL_ARTS_SHARED "Dynamically load aRts audio support" ON "SDL_ARTS" OFF )
set_option ( SDL_NAS "Support the NAS audio API" ${ UNIX_SYS } )
dep_option ( SDL_NAS_SHARED "Dynamically load NAS audio support" ON "SDL_NAS" OFF )
set_option ( SDL_SNDIO "Support the sndio audio API" ${ UNIX_SYS } )
dep_option ( SDL_SNDIO_SHARED "Dynamically load the sndio audio API" ${ UNIX_SYS } ON "SDL_SNDIO" OFF )
set_option ( SDL_FUSIONSOUND "Use FusionSound audio driver" OFF )
dep_option ( SDL_FUSIONSOUND_SHARED "Dynamically load fusionsound audio support" ON "SDL_FUSIONSOUND" OFF )
set_option ( SDL_LIBSAMPLERATE "Use libsamplerate for audio rate conversion" ${ UNIX_SYS } )
dep_option ( SDL_LIBSAMPLERATE_SHARED "Dynamically load libsamplerate" ON "SDL_LIBSAMPLERATE" OFF )
set_option ( SDL_RPATH "Use an rpath when linking SDL" ${ UNIX_SYS } )
2021-11-17 07:59:38 +08:00
set_option ( SDL_CLOCK_GETTIME "Use clock_gettime() instead of gettimeofday()" ${ UNIX_SYS } )
2021-10-05 22:43:35 +08:00
set_option ( SDL_X11 "Use X11 video driver" ${ UNIX_SYS } )
dep_option ( SDL_X11_SHARED "Dynamically load X11 support" ON "SDL_X11" OFF )
2022-04-27 04:41:28 +08:00
set ( SDL_X11_OPTIONS Xcursor Xdbe XInput Xfixes Xrandr Xscrnsaver XShape )
2015-06-21 23:33:46 +08:00
foreach ( _SUB ${ SDL_X11_OPTIONS } )
2021-10-05 22:43:35 +08:00
string ( TOUPPER "SDL_X11_${_SUB}" _OPT )
dep_option ( ${ _OPT } "Enable ${_SUB} support" ON "SDL_X11" OFF )
2015-06-21 23:33:46 +08:00
endforeach ( )
2021-10-05 22:43:35 +08:00
set_option ( SDL_WAYLAND "Use Wayland video driver" ${ UNIX_SYS } )
dep_option ( SDL_WAYLAND_SHARED "Dynamically load Wayland support" ON "SDL_WAYLAND" OFF )
2022-01-12 20:05:12 +08:00
dep_option ( SDL_WAYLAND_LIBDECOR "Use client-side window decorations on Wayland" ON "SDL_WAYLAND" OFF )
2021-10-05 22:43:35 +08:00
dep_option ( SDL_WAYLAND_LIBDECOR_SHARED "Dynamically load libdecor support" ON "SDL_WAYLAND_LIBDECOR" OFF )
dep_option ( SDL_WAYLAND_QT_TOUCH "QtWayland server support for Wayland video driver" ON "SDL_WAYLAND" OFF )
set_option ( SDL_RPI "Use Raspberry Pi video driver" ${ UNIX_SYS } )
set_option ( SDL_COCOA "Use Cocoa video driver" ${ APPLE } )
set_option ( SDL_DIRECTX "Use DirectX for Windows audio/video" ${ WINDOWS } )
set_option ( SDL_XINPUT "Use Xinput for Windows" ${ WINDOWS } )
set_option ( SDL_WASAPI "Use the Windows WASAPI audio driver" ${ WINDOWS } )
set_option ( SDL_RENDER_D3D "Enable the Direct3D render driver" ${ WINDOWS } )
set_option ( SDL_RENDER_METAL "Enable the Metal render driver" ${ APPLE } )
set_option ( SDL_VIVANTE "Use Vivante EGL video driver" ${ UNIX_SYS } )
dep_option ( SDL_VULKAN "Enable Vulkan support" ON "ANDROID OR APPLE OR LINUX OR WINDOWS" OFF )
set_option ( SDL_METAL "Enable Metal support" ${ APPLE } )
set_option ( SDL_KMSDRM "Use KMS DRM video driver" ${ UNIX_SYS } )
dep_option ( SDL_KMSDRM_SHARED "Dynamically load KMS DRM support" ON "SDL_KMSDRM" OFF )
set_option ( SDL_OFFSCREEN "Use offscreen video driver" OFF )
2021-11-12 01:16:44 +08:00
option_string ( SDL_BACKGROUNDING_SIGNAL "number to use for magic backgrounding signal or 'OFF'" OFF )
option_string ( SDL_FOREGROUNDING_SIGNAL "number to use for magic foregrounding signal or 'OFF'" OFF )
set_option ( SDL_HIDAPI_JOYSTICK "Use HIDAPI for low level joystick drivers" ON )
2021-10-05 22:43:35 +08:00
set_option ( SDL_VIRTUAL_JOYSTICK "Enable the virtual-joystick driver" ON )
set_option ( SDL_ASAN "Use AddressSanitizer to detect memory errors" OFF )
2015-06-21 23:33:46 +08:00
set ( SDL_SHARED ${ SDL_SHARED_ENABLED_BY_DEFAULT } CACHE BOOL "Build a shared version of the library" )
2019-06-09 05:36:03 +08:00
set ( SDL_STATIC ${ SDL_STATIC_ENABLED_BY_DEFAULT } CACHE BOOL "Build a static version of the library" )
2022-05-27 07:40:11 +08:00
set ( SDL_TEST ${ SDL_TEST_ENABLED_BY_DEFAULT } CACHE BOOL "Build the SDL2_test library" )
2015-06-21 23:33:46 +08:00
2016-01-05 14:26:32 +08:00
dep_option ( SDL_STATIC_PIC "Static version of the library should be built with Position Independent Code" OFF "SDL_STATIC" OFF )
2022-05-27 07:40:11 +08:00
dep_option ( SDL_TESTS "Build the test directory" OFF SDL_TEST OFF )
2020-11-25 21:30:29 +08:00
set_option ( SDL_INSTALL_TESTS "Install test-cases" OFF )
2016-01-05 14:26:32 +08:00
2021-06-10 18:20:39 +08:00
if ( VITA )
2022-03-16 04:10:02 +08:00
set_option ( VIDEO_VITA_PIB "Build with PSVita piglet gles2 support" OFF )
set_option ( VIDEO_VITA_PVR "Build with PSVita PVR gles/gles2 support" OFF )
2021-06-10 18:20:39 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
# General source files
file ( GLOB SOURCE_FILES
$ { S D L 2 _ S O U R C E _ D I R } / s r c / * . c
$ { S D L 2 _ S O U R C E _ D I R } / s r c / a t o m i c / * . c
$ { S D L 2 _ S O U R C E _ D I R } / s r c / a u d i o / * . c
$ { S D L 2 _ S O U R C E _ D I R } / s r c / c p u i n f o / * . c
$ { S D L 2 _ S O U R C E _ D I R } / s r c / d y n a p i / * . c
$ { S D L 2 _ S O U R C E _ D I R } / s r c / e v e n t s / * . c
$ { S D L 2 _ S O U R C E _ D I R } / s r c / f i l e / * . c
2022-02-23 23:10:02 +08:00
$ { S D L 2 _ S O U R C E _ D I R } / s r c / j o y s t i c k / * . c
2020-07-08 23:28:34 +08:00
$ { S D L 2 _ S O U R C E _ D I R } / s r c / h a p t i c / * . c
2021-11-09 01:28:36 +08:00
$ { S D L 2 _ S O U R C E _ D I R } / s r c / h i d a p i / * . c
2015-06-21 23:33:46 +08:00
$ { S D L 2 _ S O U R C E _ D I R } / s r c / l i b m / * . c
2020-05-04 14:27:29 +08:00
$ { S D L 2 _ S O U R C E _ D I R } / s r c / l o c a l e / * . c
2020-10-05 23:30:33 +08:00
$ { S D L 2 _ S O U R C E _ D I R } / s r c / m i s c / * . c
2020-06-27 03:04:57 +08:00
$ { S D L 2 _ S O U R C E _ D I R } / s r c / p o w e r / * . c
2015-06-21 23:33:46 +08:00
$ { S D L 2 _ S O U R C E _ D I R } / s r c / r e n d e r / * . c
$ { S D L 2 _ S O U R C E _ D I R } / s r c / r e n d e r / * / * . c
2020-06-27 04:45:15 +08:00
$ { S D L 2 _ S O U R C E _ D I R } / s r c / s e n s o r / * . c
2015-06-21 23:33:46 +08:00
$ { S D L 2 _ S O U R C E _ D I R } / s r c / s t d l i b / * . c
$ { S D L 2 _ S O U R C E _ D I R } / s r c / t h r e a d / * . c
$ { S D L 2 _ S O U R C E _ D I R } / s r c / t i m e r / * . c
2017-11-20 16:03:23 +08:00
$ { S D L 2 _ S O U R C E _ D I R } / s r c / v i d e o / * . c
2017-11-13 14:51:12 +08:00
$ { S D L 2 _ S O U R C E _ D I R } / s r c / v i d e o / y u v 2 r g b / * . c )
2015-06-21 23:33:46 +08:00
2021-10-05 22:43:35 +08:00
if ( SDL_ASSERTIONS STREQUAL "auto" )
2015-06-21 23:33:46 +08:00
# Do nada - use optimization settings to determine the assertion level
2021-10-05 22:43:35 +08:00
elseif ( SDL_ASSERTIONS STREQUAL "disabled" )
2015-06-21 23:33:46 +08:00
set ( SDL_DEFAULT_ASSERT_LEVEL 0 )
2021-10-05 22:43:35 +08:00
elseif ( SDL_ASSERTIONS STREQUAL "release" )
2015-06-21 23:33:46 +08:00
set ( SDL_DEFAULT_ASSERT_LEVEL 1 )
2021-10-05 22:43:35 +08:00
elseif ( SDL_ASSERTIONS STREQUAL "enabled" )
2015-06-21 23:33:46 +08:00
set ( SDL_DEFAULT_ASSERT_LEVEL 2 )
2021-10-05 22:43:35 +08:00
elseif ( SDL_ASSERTIONS STREQUAL "paranoid" )
2015-06-21 23:33:46 +08:00
set ( SDL_DEFAULT_ASSERT_LEVEL 3 )
else ( )
message_error ( "unknown assertion level" )
endif ( )
2021-10-05 22:43:35 +08:00
set ( HAVE_ASSERTIONS ${ SDL_ASSERTIONS } )
2015-06-21 23:33:46 +08:00
2021-10-05 22:43:35 +08:00
if ( NOT SDL_BACKGROUNDING_SIGNAL STREQUAL "OFF" )
2021-10-06 00:34:29 +08:00
target_compile_definitions ( sdl-build-options INTERFACE "-DSDL_BACKGROUNDING_SIGNAL=${SDL_BACKGROUNDING_SIGNAL}" )
2019-03-16 03:51:05 +08:00
endif ( )
2021-10-05 22:43:35 +08:00
if ( NOT SDL_FOREGROUNDING_SIGNAL STREQUAL "OFF" )
2021-10-06 00:34:29 +08:00
target_compile_definitions ( sdl-build-options INTERFACE "-DSDL_FOREGROUNDING_SIGNAL=${SDL_FOREGROUNDING_SIGNAL}" )
2019-03-16 03:51:05 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
# Compiler option evaluation
if ( USE_GCC OR USE_CLANG )
2016-01-05 11:58:38 +08:00
# Check for -Wall first, so later things can override pieces of it.
2021-11-23 23:56:50 +08:00
# Note: clang-cl treats -Wall as -Weverything (which is very loud),
# /W3 as -Wall, and /W4 as -Wall -Wextra. So: /W3 is enough.
2016-01-05 11:58:38 +08:00
check_c_compiler_flag ( -Wall HAVE_GCC_WALL )
2021-11-23 23:56:50 +08:00
if ( MSVC_CLANG )
list ( APPEND EXTRA_CFLAGS "/W3" )
elseif ( HAVE_GCC_WALL )
2016-01-05 11:58:38 +08:00
list ( APPEND EXTRA_CFLAGS "-Wall" )
if ( HAIKU )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-multichar" )
endif ( )
endif ( )
2019-06-09 09:32:29 +08:00
check_c_compiler_flag ( -fno-strict-aliasing HAVE_GCC_NO_STRICT_ALIASING )
if ( HAVE_GCC_NO_STRICT_ALIASING )
list ( APPEND EXTRA_CFLAGS "-fno-strict-aliasing" )
endif ( )
2016-01-05 11:58:38 +08:00
check_c_compiler_flag ( -Wdeclaration-after-statement HAVE_GCC_WDECLARATION_AFTER_STATEMENT )
if ( HAVE_GCC_WDECLARATION_AFTER_STATEMENT )
check_c_compiler_flag ( -Werror=declaration-after-statement HAVE_GCC_WERROR_DECLARATION_AFTER_STATEMENT )
if ( HAVE_GCC_WERROR_DECLARATION_AFTER_STATEMENT )
list ( APPEND EXTRA_CFLAGS "-Werror=declaration-after-statement" )
endif ( )
list ( APPEND EXTRA_CFLAGS "-Wdeclaration-after-statement" )
endif ( )
2015-06-21 23:33:46 +08:00
if ( DEPENDENCY_TRACKING )
check_c_source_compiles ( "
#if !defined(__GNUC__) || __GNUC__ < 3
#error Dependency tracking requires GCC 3.0 or newer
#endif
2022-03-14 00:10:52 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; } " H A V E _ D E P E N D E N C Y _ T R A C K I N G )
2015-06-21 23:33:46 +08:00
endif ( )
2021-10-05 22:43:35 +08:00
if ( SDL_GCC_ATOMICS )
2015-06-21 23:33:46 +08:00
check_c_source_compiles ( " int main(int argc, char **argv ) {
i n t a ;
v o i d * x , * y , * z ;
__sync_lock_test_and_set ( &a, 4 ) ;
__sync_lock_test_and_set ( &x, y ) ;
__sync_fetch_and_add ( &a, 1 ) ;
__sync_bool_compare_and_swap ( &a, 5, 10 ) ;
2022-03-14 00:10:52 +08:00
__sync_bool_compare_and_swap ( &x, y, z ) ;
r e t u r n 0 ; } " H A V E _ G C C _ A T O M I C S )
2015-06-21 23:33:46 +08:00
if ( NOT HAVE_GCC_ATOMICS )
check_c_source_compiles ( " int main(int argc, char **argv ) {
i n t a ;
__sync_lock_test_and_set ( &a, 1 ) ;
2022-03-14 00:10:52 +08:00
__sync_lock_release ( &a ) ;
r e t u r n 0 ; } " H A V E _ G C C _ S Y N C _ L O C K _ T E S T _ A N D _ S E T )
2015-06-21 23:33:46 +08:00
endif ( )
endif ( )
set ( CMAKE_REQUIRED_FLAGS "-mpreferred-stack-boundary=2" )
2022-03-14 00:10:52 +08:00
check_c_source_compiles ( "int x = 0; int main(int argc, char **argv) { return 0; }"
2015-06-21 23:33:46 +08:00
H A V E _ G C C _ P R E F E R R E D _ S T A C K _ B O U N D A R Y )
set ( CMAKE_REQUIRED_FLAGS ${ ORIG_CMAKE_REQUIRED_FLAGS } )
set ( CMAKE_REQUIRED_FLAGS "-fvisibility=hidden -Werror" )
check_c_source_compiles ( "
#if !defined(__GNUC__) || __GNUC__ < 4
#error SDL only uses visibility attributes in GCC 4 or newer
#endif
2022-03-14 00:10:52 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; } " H A V E _ G C C _ F V I S I B I L I T Y )
2015-06-21 23:33:46 +08:00
if ( HAVE_GCC_FVISIBILITY )
list ( APPEND EXTRA_CFLAGS "-fvisibility=hidden" )
endif ( )
set ( CMAKE_REQUIRED_FLAGS ${ ORIG_CMAKE_REQUIRED_FLAGS } )
check_c_compiler_flag ( -Wshadow HAVE_GCC_WSHADOW )
if ( HAVE_GCC_WSHADOW )
list ( APPEND EXTRA_CFLAGS "-Wshadow" )
endif ( )
2017-08-19 06:52:25 +08:00
if ( APPLE )
2022-06-04 02:12:52 +08:00
# FIXME: use generator expression instead of appending to EXTRA_LDFLAGS_BUILD
list ( APPEND EXTRA_LDFLAGS_BUILD "-Wl,-undefined,error" )
list ( APPEND EXTRA_LDFLAGS_BUILD "-Wl,-compatibility_version,${DYLIB_COMPATIBILITY_VERSION}" )
list ( APPEND EXTRA_LDFLAGS_BUILD "-Wl,-current_version,${DYLIB_CURRENT_VERSION}" )
2020-12-27 10:20:10 +08:00
elseif ( NOT OPENBSD )
2017-08-19 06:52:25 +08:00
set ( CMAKE_REQUIRED_FLAGS "-Wl,--no-undefined" )
check_c_compiler_flag ( "" HAVE_NO_UNDEFINED )
set ( CMAKE_REQUIRED_FLAGS ${ ORIG_CMAKE_REQUIRED_FLAGS } )
2021-03-04 23:44:04 +08:00
if ( HAVE_NO_UNDEFINED AND NOT ( USE_CLANG AND WINDOWS ) )
2022-06-04 02:12:52 +08:00
list ( APPEND EXTRA_LDFLAGS_BUILD "-Wl,--no-undefined" )
2017-08-19 06:52:25 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
endif ( )
2021-08-22 14:40:54 +08:00
# Force color diagnostics when one of these conditions are met
if ( DEFINED ENV{CI} OR DEFINED ENV{USE_CCACHE} OR CMAKE_GENERATOR MATCHES Ninja )
if ( EMSCRIPTEN OR ( USE_GCC AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9 ) )
list ( APPEND EXTRA_CFLAGS -fdiagnostics-color=always )
elseif ( USE_CLANG AND NOT CMAKE_C_COMPILER_ID MATCHES AppleClang )
list ( APPEND EXTRA_CFLAGS -fcolor-diagnostics )
endif ( )
endif ( )
2015-06-21 23:33:46 +08:00
endif ( )
2022-05-06 22:59:36 +08:00
if ( MSVC )
target_compile_definitions ( sdl-build-options INTERFACE "-D_CRT_SECURE_NO_DEPRECATE" )
target_compile_definitions ( sdl-build-options INTERFACE "-D_CRT_NONSTDC_NO_DEPRECATE" )
target_compile_definitions ( sdl-build-options INTERFACE "-D_CRT_SECURE_NO_WARNINGS" )
endif ( )
2015-06-21 23:33:46 +08:00
2021-10-05 22:43:35 +08:00
if ( SDL_ASSEMBLY )
2015-06-21 23:33:46 +08:00
if ( USE_GCC OR USE_CLANG )
# TODO: Those all seem to be quite GCC specific - needs to be
# reworked for better compiler support
set ( HAVE_ASSEMBLY TRUE )
2021-11-22 19:10:02 +08:00
if ( SDL_MMX )
2015-06-21 23:33:46 +08:00
set ( CMAKE_REQUIRED_FLAGS "-mmmx" )
check_c_source_compiles ( "
#ifdef __MINGW32__
#include <_mingw.h>
#ifdef __MINGW64_VERSION_MAJOR
#include <intrin.h>
#else
#include <mmintrin.h>
#endif
#else
#include <mmintrin.h>
#endif
#ifndef __MMX__
#error Assembler CPP flag not enabled
#endif
2022-03-14 00:10:52 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; } " H A V E _ M M X )
2015-06-21 23:33:46 +08:00
if ( HAVE_MMX )
list ( APPEND EXTRA_CFLAGS "-mmmx" )
endif ( )
set ( CMAKE_REQUIRED_FLAGS ${ ORIG_CMAKE_REQUIRED_FLAGS } )
endif ( )
2021-10-05 22:43:35 +08:00
if ( SDL_3DNOW )
2015-06-21 23:33:46 +08:00
set ( CMAKE_REQUIRED_FLAGS "-m3dnow" )
check_c_source_compiles ( "
#include <mm3dnow.h>
#ifndef __3dNOW__
#error Assembler CPP flag not enabled
#endif
i n t main ( int argc, char **argv ) {
v o i d * p = 0 ;
_m_prefetch ( p ) ;
2022-03-14 00:10:52 +08:00
r e t u r n 0 ;
2015-06-21 23:33:46 +08:00
} " H A V E _ 3 D N O W )
if ( HAVE_3DNOW )
list ( APPEND EXTRA_CFLAGS "-m3dnow" )
endif ( )
set ( CMAKE_REQUIRED_FLAGS ${ ORIG_CMAKE_REQUIRED_FLAGS } )
endif ( )
2021-10-05 22:43:35 +08:00
if ( SDL_SSE )
2015-06-21 23:33:46 +08:00
set ( CMAKE_REQUIRED_FLAGS "-msse" )
check_c_source_compiles ( "
#ifdef __MINGW32__
#include <_mingw.h>
#ifdef __MINGW64_VERSION_MAJOR
#include <intrin.h>
#else
#include <xmmintrin.h>
#endif
#else
#include <xmmintrin.h>
#endif
#ifndef __SSE__
#error Assembler CPP flag not enabled
#endif
2022-03-14 00:10:52 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; } " H A V E _ S S E )
2015-06-21 23:33:46 +08:00
if ( HAVE_SSE )
list ( APPEND EXTRA_CFLAGS "-msse" )
endif ( )
set ( CMAKE_REQUIRED_FLAGS ${ ORIG_CMAKE_REQUIRED_FLAGS } )
endif ( )
2021-10-05 22:43:35 +08:00
if ( SDL_SSE2 )
2015-06-21 23:33:46 +08:00
set ( CMAKE_REQUIRED_FLAGS "-msse2" )
check_c_source_compiles ( "
#ifdef __MINGW32__
#include <_mingw.h>
#ifdef __MINGW64_VERSION_MAJOR
#include <intrin.h>
#else
#include <emmintrin.h>
#endif
#else
#include <emmintrin.h>
#endif
#ifndef __SSE2__
#error Assembler CPP flag not enabled
#endif
2022-03-14 00:10:52 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; } " H A V E _ S S E 2 )
2015-06-21 23:33:46 +08:00
if ( HAVE_SSE2 )
list ( APPEND EXTRA_CFLAGS "-msse2" )
endif ( )
set ( CMAKE_REQUIRED_FLAGS ${ ORIG_CMAKE_REQUIRED_FLAGS } )
endif ( )
2021-10-05 22:43:35 +08:00
if ( SDL_SSE3 )
2017-01-23 14:05:44 +08:00
set ( CMAKE_REQUIRED_FLAGS "-msse3" )
check_c_source_compiles ( "
#ifdef __MINGW32__
#include <_mingw.h>
#ifdef __MINGW64_VERSION_MAJOR
#include <intrin.h>
#else
#include <pmmintrin.h>
#endif
#else
#include <pmmintrin.h>
#endif
#ifndef __SSE3__
#error Assembler CPP flag not enabled
#endif
2022-03-14 00:10:52 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; } " H A V E _ S S E 3 )
2017-01-23 14:05:44 +08:00
if ( HAVE_SSE3 )
list ( APPEND EXTRA_CFLAGS "-msse3" )
endif ( )
set ( CMAKE_REQUIRED_FLAGS ${ ORIG_CMAKE_REQUIRED_FLAGS } )
endif ( )
2021-10-05 22:43:35 +08:00
if ( NOT SDL_SSEMATH )
if ( SDL_SSE OR SDL_SSE2 OR SDL_SSE3 )
2015-06-21 23:33:46 +08:00
if ( USE_GCC )
2017-06-05 02:25:57 +08:00
check_c_compiler_flag ( -mfpmath=387 HAVE_FP_387 )
if ( HAVE_FP_387 )
list ( APPEND EXTRA_CFLAGS "-mfpmath=387" )
endif ( )
2015-06-21 23:33:46 +08:00
endif ( )
endif ( )
2021-11-22 19:10:02 +08:00
else ( )
set ( HAVE_SSEMATH TRUE )
2015-06-21 23:33:46 +08:00
endif ( )
2017-12-12 04:00:12 +08:00
check_include_file ( "immintrin.h" HAVE_IMMINTRIN_H )
2021-10-05 22:43:35 +08:00
if ( SDL_ALTIVEC )
2015-06-21 23:33:46 +08:00
set ( CMAKE_REQUIRED_FLAGS "-maltivec" )
check_c_source_compiles ( "
#include <altivec.h>
v e c t o r u n s i g n e d i n t vzero ( ) {
r e t u r n vec_splat_u32 ( 0 ) ;
}
2022-03-14 00:10:52 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; } " H A V E _ A L T I V E C _ H _ H D R )
2015-06-21 23:33:46 +08:00
check_c_source_compiles ( "
v e c t o r u n s i g n e d i n t vzero ( ) {
r e t u r n vec_splat_u32 ( 0 ) ;
}
2022-03-14 00:10:52 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; } " H A V E _ A L T I V E C )
2015-06-21 23:33:46 +08:00
set ( CMAKE_REQUIRED_FLAGS ${ ORIG_CMAKE_REQUIRED_FLAGS } )
if ( HAVE_ALTIVEC OR HAVE_ALTIVEC_H_HDR )
set ( HAVE_ALTIVEC TRUE ) # if only HAVE_ALTIVEC_H_HDR is set
list ( APPEND EXTRA_CFLAGS "-maltivec" )
set ( SDL_ALTIVEC_BLITTERS 1 )
if ( HAVE_ALTIVEC_H_HDR )
set ( HAVE_ALTIVEC_H 1 )
endif ( )
endif ( )
endif ( )
2019-10-25 11:17:19 +08:00
2021-10-05 22:43:35 +08:00
if ( SDL_ARMSIMD )
2019-10-25 11:17:19 +08:00
set ( ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}" )
set ( CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -x assembler-with-cpp" )
check_c_source_compiles ( "
. t e x t
. a r c h a r m v 6
. o b j e c t _ a r c h a r m v 4
. a r m
. a l t m a c r o
#ifndef __ARM_EABI__
#error EABI is required (to be sure that calling conventions are compatible)
#endif
p l d [ r 0 ]
u q a d d 8 r 0 , r 0 , r 0
" A R M S I M D _ F O U N D )
set ( CMAKE_REQUIRED_FLAGS "${ORIG_CMAKE_REQUIRED_FLAGS}" )
if ( ARMSIMD_FOUND )
set ( HAVE_ARMSIMD TRUE )
set ( SDL_ARM_SIMD_BLITTERS 1 )
file ( GLOB ARMSIMD_SOURCES ${ SDL2_SOURCE_DIR } /src/video/arm/pixman-arm-simd*.S )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ ARMSIMD_SOURCES } )
set ( WARN_ABOUT_ARM_SIMD_ASM_MIT TRUE )
endif ( )
endif ( )
2021-10-05 22:43:35 +08:00
if ( SDL_ARMNEON )
2019-10-25 11:17:19 +08:00
set ( ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}" )
set ( CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -x assembler-with-cpp" )
check_c_source_compiles ( "
. t e x t
. f p u n e o n
. a r c h a r m v 7 a
. o b j e c t _ a r c h a r m v 4
. e a b i _ a t t r i b u t e 1 0 , 0
. a r m
. a l t m a c r o
#ifndef __ARM_EABI__
#error EABI is required (to be sure that calling conventions are compatible)
#endif
p l d [ r 0 ]
v m o v n . u 1 6 d 0 , q 0
" A R M N E O N _ F O U N D )
set ( CMAKE_REQUIRED_FLAGS "${ORIG_CMAKE_REQUIRED_FLAGS}" )
if ( ARMNEON_FOUND )
set ( HAVE_ARMNEON TRUE )
set ( SDL_ARM_NEON_BLITTERS 1 )
file ( GLOB ARMNEON_SOURCES ${ SDL2_SOURCE_DIR } /src/video/arm/pixman-arm-neon*.S )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ ARMNEON_SOURCES } )
set ( WARN_ABOUT_ARM_NEON_ASM_MIT TRUE )
endif ( )
endif ( )
2015-06-21 23:33:46 +08:00
elseif ( MSVC_VERSION GREATER 1500 )
# TODO: SDL_cpuinfo.h needs to support the user's configuration wish
# for MSVC - right now it is always activated
if ( NOT ARCH_64 )
set ( HAVE_MMX TRUE )
set ( HAVE_3DNOW TRUE )
endif ( )
set ( HAVE_SSE TRUE )
set ( HAVE_SSE2 TRUE )
2017-01-23 14:05:44 +08:00
set ( HAVE_SSE3 TRUE )
2021-06-12 07:25:40 +08:00
check_include_file ( "immintrin.h" HAVE_IMMINTRIN_H )
2015-06-21 23:33:46 +08:00
endif ( )
endif ( )
# TODO: Can't deactivate on FreeBSD? w/o LIBC, SDL_stdinc.h can't define
# anything.
2021-10-05 22:43:35 +08:00
if ( SDL_LIBC )
2015-06-21 23:33:46 +08:00
if ( WINDOWS AND NOT MINGW )
set ( HAVE_LIBC TRUE )
2017-09-09 23:36:37 +08:00
foreach ( _HEADER stdio.h string.h wchar.h ctype.h math.h limits.h )
2015-06-21 23:33:46 +08:00
string ( TOUPPER "HAVE_${_HEADER}" _UPPER )
string ( REPLACE "." "_" _HAVE_H ${ _UPPER } )
set ( ${ _HAVE_H } 1 )
endforeach ( )
set ( HAVE_SIGNAL_H 1 )
foreach ( _FN
2022-04-26 04:55:50 +08:00
m a l l o c c a l l o c r e a l l o c f r e e b s e a r c h q s o r t a b s m e m s e t m e m c p y m e m m o v e m e m c m p
2021-02-07 05:37:00 +08:00
w c s l e n _ w c s d u p w c s d u p w c s s t r w c s c m p w c s n c m p _ w c s i c m p _ w c s n i c m p
2015-06-21 23:33:46 +08:00
s t r l e n _ s t r r e v _ s t r u p r _ s t r l w r s t r c h r s t r r c h r s t r s t r i t o a _ l t o a
_ u l t o a s t r t o l s t r t o u l s t r t o l l s t r t o d a t o i a t o f s t r c m p s t r n c m p
2020-12-30 06:00:24 +08:00
_ s t r i c m p _ s t r n i c m p s s c a n f
2017-11-05 06:34:14 +08:00
a c o s a c o s f a s i n a s i n f a t a n a t a n f a t a n 2 a t a n 2 f c e i l c e i l f
2018-08-04 23:52:46 +08:00
c o p y s i g n c o p y s i g n f c o s c o s f e x p e x p f f a b s f a b s f f l o o r f l o o r f f m o d f m o d f
2020-12-24 05:47:49 +08:00
l o g l o g f l o g 1 0 l o g 1 0 f l r o u n d l r o u n d f p o w p o w f r o u n d r o u n d f s c a l b n s c a l b n f
s i n s i n f s q r t s q r t f t a n t a n f t r u n c t r u n c f )
2015-06-21 23:33:46 +08:00
string ( TOUPPER ${ _FN } _UPPER )
set ( HAVE_ ${ _UPPER } 1 )
endforeach ( )
2022-01-18 01:56:24 +08:00
set ( HAVE_ALLOCA 1 )
2015-06-21 23:33:46 +08:00
set ( HAVE_M_PI 1 )
2021-10-06 00:34:29 +08:00
target_compile_definitions ( sdl-build-options INTERFACE "-D_USE_MATH_DEFINES" ) # needed for M_PI
2015-06-21 23:33:46 +08:00
set ( STDC_HEADERS 1 )
else ( )
set ( HAVE_LIBC TRUE )
check_include_file ( sys/types.h HAVE_SYS_TYPES_H )
foreach ( _HEADER
2021-11-17 07:59:38 +08:00
s t d i o . h s t d l i b . h s t d d e f . h s t d a r g . h m a l l o c . h m e m o r y . h s t r i n g . h l i m i t s . h f l o a t . h
2017-10-13 04:44:28 +08:00
s t r i n g s . h w c h a r . h i n t t y p e s . h s t d i n t . h c t y p e . h m a t h . h i c o n v . h s i g n a l . h l i b u n w i n d . h )
2015-06-21 23:33:46 +08:00
string ( TOUPPER "HAVE_${_HEADER}" _UPPER )
string ( REPLACE "." "_" _HAVE_H ${ _UPPER } )
check_include_file ( "${_HEADER}" ${ _HAVE_H } )
endforeach ( )
2020-10-12 07:40:00 +08:00
set ( STDC_HEADER_NAMES "stddef.h;stdarg.h;stdlib.h;string.h;stdio.h;wchar.h;float.h" )
2020-04-14 03:22:09 +08:00
check_include_files ( "${STDC_HEADER_NAMES}" STDC_HEADERS )
2015-06-21 23:33:46 +08:00
check_type_size ( "size_t" SIZEOF_SIZE_T )
check_symbol_exists ( M_PI math.h HAVE_M_PI )
# TODO: refine the mprotect check
check_c_source_compiles ( " #include <sys/types.h>
#include <sys/mman.h>
2022-03-16 04:10:02 +08:00
i n t main ( void ) { r e t u r n 0 ; } " H A V E _ M P R O T E C T )
2015-06-21 23:33:46 +08:00
foreach ( _FN
s t r t o d m a l l o c c a l l o c r e a l l o c f r e e g e t e n v s e t e n v p u t e n v u n s e t e n v
2022-04-26 04:55:50 +08:00
b s e a r c h q s o r t a b s b c o p y m e m s e t m e m c p y m e m m o v e m e m c m p s t r l e n s t r l c p y s t r l c a t
2021-02-07 05:37:00 +08:00
_ s t r r e v _ s t r u p r _ s t r l w r i n d e x r i n d e x s t r c h r s t r r c h r s t r s t r s t r t o k _ r
i t o a _ l t o a _ u i t o a _ u l t o a s t r t o l s t r t o u l _ i 6 4 t o a _ u i 6 4 t o a s t r t o l l s t r t o u l l
2015-06-21 23:33:46 +08:00
a t o i a t o f s t r c m p s t r n c m p _ s t r i c m p s t r c a s e c m p _ s t r n i c m p s t r n c a s e c m p
2021-02-07 05:37:00 +08:00
w c s c m p _ w c s d u p w c s d u p w c s l c a t w c s l c p y w c s l e n w c s n c m p w c s s t r
2020-11-25 19:51:56 +08:00
w c s c a s e c m p _ w c s i c m p w c s n c a s e c m p _ w c s n i c m p
2020-04-14 03:22:09 +08:00
s s c a n f v s s c a n f v s n p r i n t f f o p e n 6 4 f s e e k o f s e e k o 6 4 _ E x i t
2015-06-21 23:33:46 +08:00
)
string ( TOUPPER ${ _FN } _UPPER )
set ( _HAVEVAR "HAVE_${_UPPER}" )
2020-04-14 03:22:09 +08:00
check_symbol_exists ( "${_FN}" "${STDC_HEADER_NAMES}" ${ _HAVEVAR } )
2015-06-21 23:33:46 +08:00
endforeach ( )
2020-04-14 03:22:09 +08:00
check_symbol_exists ( sigaction "signal.h" HAVE_SIGACTION )
check_symbol_exists ( setjmp "setjmp.h" HAVE_SETJMP )
check_symbol_exists ( nanosleep "time.h" HAVE_NANOSLEEP )
check_symbol_exists ( sysconf "unistd.h" HAVE_SYSCONF )
check_symbol_exists ( sysctlbyname "sys/types.h;sys/sysctl.h" HAVE_SYSCTLBYNAME )
check_symbol_exists ( getauxval "sys/auxv.h" HAVE_GETAUXVAL )
2020-12-18 13:41:23 +08:00
check_symbol_exists ( elf_aux_info "sys/auxv.h" HAVE_ELF_AUX_INFO )
2020-04-14 03:22:09 +08:00
check_symbol_exists ( poll "poll.h" HAVE_POLL )
2015-06-21 23:33:46 +08:00
check_library_exists ( m pow "" HAVE_LIBM )
if ( HAVE_LIBM )
set ( CMAKE_REQUIRED_LIBRARIES m )
foreach ( _FN
2019-11-21 15:33:56 +08:00
a t a n a t a n 2 a t a n f a t a n 2 f c e i l c e i l f c o p y s i g n c o p y s i g n f c o s c o s f
e x p e x p f f a b s f a b s f f l o o r f l o o r f f m o d f m o d f l o g l o g f l o g 1 0 l o g 1 0 f
2020-12-24 05:47:49 +08:00
l r o u n d l r o u n d f p o w p o w f r o u n d r o u n d f s c a l b n s c a l b n f s i n s i n f s q r t
s q r t f t a n t a n f a c o s a c o s f a s i n a s i n f t r u n c t r u n c f )
2015-06-21 23:33:46 +08:00
string ( TOUPPER ${ _FN } _UPPER )
set ( _HAVEVAR "HAVE_${_UPPER}" )
2020-04-14 03:22:09 +08:00
check_symbol_exists ( "${_FN}" "math.h" ${ _HAVEVAR } )
2015-06-21 23:33:46 +08:00
endforeach ( )
set ( CMAKE_REQUIRED_LIBRARIES )
2020-12-18 21:42:57 +08:00
if ( NOT VITA )
list ( APPEND EXTRA_LIBS m )
endif ( )
2015-06-21 23:33:46 +08:00
endif ( )
check_library_exists ( iconv iconv_open "" HAVE_LIBICONV )
2021-12-03 06:57:00 +08:00
if ( HAVE_LIBICONV )
2015-06-21 23:33:46 +08:00
list ( APPEND EXTRA_LIBS iconv )
set ( HAVE_ICONV 1 )
2021-12-03 06:57:00 +08:00
else ( )
check_library_exists ( c iconv_open "" HAVE_BUILTIN_ICONV )
if ( HAVE_BUILTIN_ICONV )
set ( HAVE_ICONV 1 )
endif ( )
2015-06-21 23:33:46 +08:00
endif ( )
if ( NOT APPLE )
check_include_file ( alloca.h HAVE_ALLOCA_H )
2020-10-13 19:32:15 +08:00
check_symbol_exists ( alloca "alloca.h" HAVE_ALLOCA1 )
check_symbol_exists ( alloca "stdlib.h" HAVE_ALLOCA2 )
check_symbol_exists ( alloca "malloc.h" HAVE_ALLOCA3 )
if ( HAVE_ALLOCA1 OR HAVE_ALLOCA2 OR HAVE_ALLOCA3 )
set ( HAVE_ALLOCA 1 )
endif ( )
2015-06-21 23:33:46 +08:00
else ( )
set ( HAVE_ALLOCA_H 1 )
set ( HAVE_ALLOCA 1 )
endif ( )
check_struct_has_member ( "struct sigaction" "sa_sigaction" "signal.h" HAVE_SA_SIGACTION )
endif ( )
else ( )
if ( WINDOWS )
set ( HAVE_STDARG_H 1 )
set ( HAVE_STDDEF_H 1 )
endif ( )
endif ( )
# Enable/disable various subsystems of the SDL library
foreach ( _SUB ${ SDL_SUBSYSTEMS } )
string ( TOUPPER ${ _SUB } _OPT )
if ( NOT SDL_ ${ _OPT } )
set ( SDL_ ${ _OPT } _DISABLED 1 )
endif ( )
endforeach ( )
if ( SDL_HAPTIC )
if ( NOT SDL_JOYSTICK )
# Haptic requires some private functions from the joystick subsystem.
message_error ( "SDL_HAPTIC requires SDL_JOYSTICK, which is not enabled" )
endif ( )
endif ( )
2020-05-04 14:27:29 +08:00
2015-06-21 23:33:46 +08:00
# General SDL subsystem options, valid for all platforms
if ( SDL_AUDIO )
# CheckDummyAudio/CheckDiskAudio - valid for all platforms
2021-10-05 22:43:35 +08:00
if ( SDL_DUMMYAUDIO )
2015-06-21 23:33:46 +08:00
set ( SDL_AUDIO_DRIVER_DUMMY 1 )
file ( GLOB DUMMYAUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/dummy/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ DUMMYAUDIO_SOURCES } )
set ( HAVE_DUMMYAUDIO TRUE )
2022-01-13 00:17:48 +08:00
set ( HAVE_SDL_AUDIO TRUE )
2015-06-21 23:33:46 +08:00
endif ( )
2021-10-05 22:43:35 +08:00
if ( SDL_DISKAUDIO )
2015-06-21 23:33:46 +08:00
set ( SDL_AUDIO_DRIVER_DISK 1 )
file ( GLOB DISKAUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/disk/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ DISKAUDIO_SOURCES } )
set ( HAVE_DISKAUDIO TRUE )
2022-01-13 00:17:48 +08:00
set ( HAVE_SDL_AUDIO TRUE )
2015-06-21 23:33:46 +08:00
endif ( )
endif ( )
2021-08-11 01:55:50 +08:00
if ( UNIX OR APPLE )
2015-06-21 23:33:46 +08:00
# Relevant for Unix/Darwin only
2021-08-11 01:55:50 +08:00
set ( DYNAPI_NEEDS_DLOPEN 1 )
CheckDLOPEN ( )
if ( SDL_LOADSO AND HAVE_DLOPEN )
set ( SDL_LOADSO_DLOPEN 1 )
file ( GLOB DLOPEN_SOURCES ${ SDL2_SOURCE_DIR } /src/loadso/dlopen/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ DLOPEN_SOURCES } )
set ( HAVE_SDL_LOADSO TRUE )
2015-06-21 23:33:46 +08:00
endif ( )
endif ( )
2021-11-28 00:10:10 +08:00
if ( UNIX OR APPLE OR HAIKU OR RISCOS )
CheckO_CLOEXEC ( )
endif ( )
Fixed bug 5028 - Virtual Joysticks (new joystick backend)
David Ludwig
I have created a new driver for SDL's Joystick and Game-Controller subsystem: a Virtual driver. This driver allows one to create a software-based joystick, which to SDL applications will look and react like a real joystick, but whose state can be set programmatically. A primary use case for this is to help enable developers to add touch-screen joysticks to their apps.
The driver comes with a set of new, public APIs, with functions to attach and detach joysticks, set virtual-joystick state, and to determine if a joystick is a virtual-one.
Use of virtual joysticks goes as such:
1. Attach one or more virtual joysticks by calling SDL_JoystickAttachVirtual. If successful, this returns the virtual-device's joystick-index.
2. Open the virtual joysticks (using indicies returned by SDL_JoystickAttachVirtual).
3. Call any of the SDL_JoystickSetVirtual* functions when joystick-state changes. Please note that virtual-joystick state will only get applied on the next call to SDL_JoystickUpdate, or when pumping or polling for SDL events (via SDL_PumpEvents or SDL_PollEvent).
Here is a listing of the new, public APIs, at present and subject to change:
------------------------------------------------------------
/**
* Attaches a new virtual joystick.
* Returns the joystick's device index, or -1 if an error occurred.
*/
extern DECLSPEC int SDLCALL SDL_JoystickAttachVirtual(SDL_JoystickType type, int naxes, int nballs, int nbuttons, int nhats);
/**
* Detaches a virtual joystick
* Returns 0 on success, or -1 if an error occurred.
*/
extern DECLSPEC int SDLCALL SDL_JoystickDetachVirtual(int device_index);
/**
* Indicates whether or not a virtual-joystick is at a given device index.
*/
extern DECLSPEC SDL_bool SDLCALL SDL_JoystickIsVirtual(int device_index);
/**
* Set values on an opened, virtual-joystick's controls.
* Returns 0 on success, -1 on error.
*/
extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualAxis(SDL_Joystick * joystick, int axis, Sint16 value);
extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualBall(SDL_Joystick * joystick, int ball, Sint16 xrel, Sint16 yrel);
extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualButton(SDL_Joystick * joystick, int button, Uint8 value);
extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualHat(SDL_Joystick * joystick, int hat, Uint8 value);
------------------------------------------------------------
Miscellaneous notes on the initial patch, which are also subject to change:
1. no test code is present in SDL, yet. This should, perhaps, change. Initial development was done with an ImGui-based app, which potentially is too thick for use in SDL-official. If tests are to be added, what kind of tests? Automated? Graphical?
2. virtual game controllers can be created by calling SDL_JoystickAttachVirtual with a joystick-type of SDL_JOYSTICK_TYPE_GAME_CONTROLLER, with naxes (num axes) set to SDL_CONTROLLER_AXIS_MAX, and with nbuttons (num buttons) set to SDL_CONTROLLER_BUTTON_MAX. When updating their state, values of type SDL_GameControllerAxis or SDL_GameControllerButton can be casted to an int and used for the control-index (in calls to SDL_JoystickSetVirtual* functions).
3. virtual joysticks' guids are mostly all-zeros with the exception of the last two bytes, the first of which is a 'v', to indicate that the guid is a virtual one, and the second of which is a SDL_JoystickType that has been converted into a Uint8.
4. virtual joysticks are ONLY turned into virtual game-controllers if and when their joystick-type is set to SDL_JOYSTICK_TYPE_GAMECONTROLLER. This is controlled by having SDL's default list of game-controllers have a single entry for a virtual game controller (of guid, "00000000000000000000000000007601", which is subject to the guid-encoding described above).
5. regarding having to call SDL_JoystickUpdate, either directly or indirectly via SDL_PumpEvents or SDL_PollEvents, before new virtual-joystick state becomes active (as specified via SDL_JoystickSetVirtual* function-calls), this was done to match behavior found in SDL's other joystick drivers, almost all of which will only update SDL-state during SDL_JoystickUpdate.
6. the initial patch is based off of SDL 2.0.12
7. the virtual joystick subsystem is disabled by default. It should be possible to enable it by building with SDL_JOYSTICK_VIRTUAL=1
Questions, comments, suggestions, or bug reports very welcome!
2020-03-14 10:08:45 +08:00
if ( SDL_JOYSTICK )
2021-10-05 22:43:35 +08:00
if ( SDL_VIRTUAL_JOYSTICK )
set ( HAVE_VIRTUAL_JOYSTICK TRUE )
Fixed bug 5028 - Virtual Joysticks (new joystick backend)
David Ludwig
I have created a new driver for SDL's Joystick and Game-Controller subsystem: a Virtual driver. This driver allows one to create a software-based joystick, which to SDL applications will look and react like a real joystick, but whose state can be set programmatically. A primary use case for this is to help enable developers to add touch-screen joysticks to their apps.
The driver comes with a set of new, public APIs, with functions to attach and detach joysticks, set virtual-joystick state, and to determine if a joystick is a virtual-one.
Use of virtual joysticks goes as such:
1. Attach one or more virtual joysticks by calling SDL_JoystickAttachVirtual. If successful, this returns the virtual-device's joystick-index.
2. Open the virtual joysticks (using indicies returned by SDL_JoystickAttachVirtual).
3. Call any of the SDL_JoystickSetVirtual* functions when joystick-state changes. Please note that virtual-joystick state will only get applied on the next call to SDL_JoystickUpdate, or when pumping or polling for SDL events (via SDL_PumpEvents or SDL_PollEvent).
Here is a listing of the new, public APIs, at present and subject to change:
------------------------------------------------------------
/**
* Attaches a new virtual joystick.
* Returns the joystick's device index, or -1 if an error occurred.
*/
extern DECLSPEC int SDLCALL SDL_JoystickAttachVirtual(SDL_JoystickType type, int naxes, int nballs, int nbuttons, int nhats);
/**
* Detaches a virtual joystick
* Returns 0 on success, or -1 if an error occurred.
*/
extern DECLSPEC int SDLCALL SDL_JoystickDetachVirtual(int device_index);
/**
* Indicates whether or not a virtual-joystick is at a given device index.
*/
extern DECLSPEC SDL_bool SDLCALL SDL_JoystickIsVirtual(int device_index);
/**
* Set values on an opened, virtual-joystick's controls.
* Returns 0 on success, -1 on error.
*/
extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualAxis(SDL_Joystick * joystick, int axis, Sint16 value);
extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualBall(SDL_Joystick * joystick, int ball, Sint16 xrel, Sint16 yrel);
extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualButton(SDL_Joystick * joystick, int button, Uint8 value);
extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualHat(SDL_Joystick * joystick, int hat, Uint8 value);
------------------------------------------------------------
Miscellaneous notes on the initial patch, which are also subject to change:
1. no test code is present in SDL, yet. This should, perhaps, change. Initial development was done with an ImGui-based app, which potentially is too thick for use in SDL-official. If tests are to be added, what kind of tests? Automated? Graphical?
2. virtual game controllers can be created by calling SDL_JoystickAttachVirtual with a joystick-type of SDL_JOYSTICK_TYPE_GAME_CONTROLLER, with naxes (num axes) set to SDL_CONTROLLER_AXIS_MAX, and with nbuttons (num buttons) set to SDL_CONTROLLER_BUTTON_MAX. When updating their state, values of type SDL_GameControllerAxis or SDL_GameControllerButton can be casted to an int and used for the control-index (in calls to SDL_JoystickSetVirtual* functions).
3. virtual joysticks' guids are mostly all-zeros with the exception of the last two bytes, the first of which is a 'v', to indicate that the guid is a virtual one, and the second of which is a SDL_JoystickType that has been converted into a Uint8.
4. virtual joysticks are ONLY turned into virtual game-controllers if and when their joystick-type is set to SDL_JOYSTICK_TYPE_GAMECONTROLLER. This is controlled by having SDL's default list of game-controllers have a single entry for a virtual game controller (of guid, "00000000000000000000000000007601", which is subject to the guid-encoding described above).
5. regarding having to call SDL_JoystickUpdate, either directly or indirectly via SDL_PumpEvents or SDL_PollEvents, before new virtual-joystick state becomes active (as specified via SDL_JoystickSetVirtual* function-calls), this was done to match behavior found in SDL's other joystick drivers, almost all of which will only update SDL-state during SDL_JoystickUpdate.
6. the initial patch is based off of SDL 2.0.12
7. the virtual joystick subsystem is disabled by default. It should be possible to enable it by building with SDL_JOYSTICK_VIRTUAL=1
Questions, comments, suggestions, or bug reports very welcome!
2020-03-14 10:08:45 +08:00
set ( SDL_JOYSTICK_VIRTUAL 1 )
file ( GLOB JOYSTICK_VIRTUAL_SOURCES ${ SDL2_SOURCE_DIR } /src/joystick/virtual/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ JOYSTICK_VIRTUAL_SOURCES } )
endif ( )
endif ( )
2015-06-21 23:33:46 +08:00
if ( SDL_VIDEO )
2021-10-05 22:43:35 +08:00
if ( SDL_DUMMYVIDEO )
2015-06-21 23:33:46 +08:00
set ( SDL_VIDEO_DRIVER_DUMMY 1 )
file ( GLOB VIDEO_DUMMY_SOURCES ${ SDL2_SOURCE_DIR } /src/video/dummy/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ VIDEO_DUMMY_SOURCES } )
2021-11-22 19:10:02 +08:00
set ( HAVE_DUMMYVIDEO TRUE )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_VIDEO TRUE )
endif ( )
2021-10-05 22:43:35 +08:00
if ( SDL_OFFSCREEN )
2019-09-25 04:36:48 +08:00
set ( SDL_VIDEO_DRIVER_OFFSCREEN 1 )
file ( GLOB VIDEO_OFFSCREEN_SOURCES ${ SDL2_SOURCE_DIR } /src/video/offscreen/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ VIDEO_OFFSCREEN_SOURCES } )
2021-10-05 22:43:35 +08:00
set ( HAVE_OFFSCREEN TRUE )
2019-09-25 04:36:48 +08:00
set ( HAVE_SDL_VIDEO TRUE )
endif ( )
2015-06-21 23:33:46 +08:00
endif ( )
2019-07-09 04:46:52 +08:00
# Platform-specific options and settings
2015-12-29 13:57:24 +08:00
if ( ANDROID )
file ( GLOB ANDROID_CORE_SOURCES ${ SDL2_SOURCE_DIR } /src/core/android/*.c )
2020-05-16 03:12:23 +08:00
set ( SOURCE_FILES ${ SOURCE_FILES } ${ ANDROID_CORE_SOURCES } ${ ANDROID_NDK } /sources/android/cpufeatures/cpu-features.c )
2017-06-05 02:25:57 +08:00
2022-01-09 23:00:22 +08:00
if ( SDL_MISC )
file ( GLOB ANDROID_MISC_SOURCES ${ SDL2_SOURCE_DIR } /src/misc/android/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ ANDROID_MISC_SOURCES } )
set ( HAVE_SDL_MISC TRUE )
endif ( )
2020-10-05 23:30:33 +08:00
2017-06-05 02:25:57 +08:00
# SDL_spinlock.c Needs to be compiled in ARM mode.
# There seems to be no better way currently to set the ARM mode.
# see: https://issuetracker.google.com/issues/62264618
# Another option would be to set ARM mode to all compiled files
check_c_compiler_flag ( -marm HAVE_ARM_MODE )
if ( HAVE_ARM_MODE )
set_source_files_properties ( ${ SDL2_SOURCE_DIR } /src/atomic/SDL_spinlock.c PROPERTIES COMPILE_FLAGS -marm )
endif ( )
2015-12-29 13:57:24 +08:00
file ( GLOB ANDROID_MAIN_SOURCES ${ SDL2_SOURCE_DIR } /src/main/android/*.c )
2017-06-05 02:25:57 +08:00
set ( SDLMAIN_SOURCES ${ SDLMAIN_SOURCES } ${ ANDROID_MAIN_SOURCES } )
2015-12-29 13:57:24 +08:00
if ( SDL_AUDIO )
set ( SDL_AUDIO_DRIVER_ANDROID 1 )
file ( GLOB ANDROID_AUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/android/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ ANDROID_AUDIO_SOURCES } )
2021-04-16 03:13:17 +08:00
set ( SDL_AUDIO_DRIVER_OPENSLES 1 )
file ( GLOB OPENSLES_AUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/openslES/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ OPENSLES_AUDIO_SOURCES } )
2021-04-16 15:44:07 +08:00
find_library ( ANDROID_OPENSLES_LIBRARY OpenSLES )
list ( APPEND EXTRA_LIBS ${ ANDROID_DL_LIBRARY } ${ ANDROID_OPENSLES_LIBRARY } )
2021-08-11 05:50:43 +08:00
set ( SDL_AUDIO_DRIVER_AAUDIO 1 )
2021-04-16 03:13:17 +08:00
file ( GLOB AAUDIO_AUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/aaudio/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ AAUDIO_AUDIO_SOURCES } )
2015-12-29 13:57:24 +08:00
set ( HAVE_SDL_AUDIO TRUE )
endif ( )
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_ANDROID 1 )
file ( GLOB ANDROID_FILESYSTEM_SOURCES ${ SDL2_SOURCE_DIR } /src/filesystem/android/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ ANDROID_FILESYSTEM_SOURCES } )
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
2017-08-27 12:17:12 +08:00
if ( SDL_HAPTIC )
set ( SDL_HAPTIC_ANDROID 1 )
file ( GLOB ANDROID_HAPTIC_SOURCES ${ SDL2_SOURCE_DIR } /src/haptic/android/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ ANDROID_HAPTIC_SOURCES } )
set ( HAVE_SDL_HAPTIC TRUE )
endif ( )
2021-11-12 01:16:44 +08:00
if ( SDL_HIDAPI )
2019-07-09 04:46:52 +08:00
CheckHIDAPI ( )
2021-11-12 01:16:44 +08:00
endif ( )
if ( SDL_JOYSTICK )
2015-12-29 13:57:24 +08:00
set ( SDL_JOYSTICK_ANDROID 1 )
2017-09-23 07:33:34 +08:00
file ( GLOB ANDROID_JOYSTICK_SOURCES ${ SDL2_SOURCE_DIR } /src/joystick/android/*.c ${ SDL2_SOURCE_DIR } /src/joystick/steam/*.c )
2015-12-29 13:57:24 +08:00
set ( SOURCE_FILES ${ SOURCE_FILES } ${ ANDROID_JOYSTICK_SOURCES } )
set ( HAVE_SDL_JOYSTICK TRUE )
endif ( )
2017-06-09 03:07:55 +08:00
if ( SDL_LOADSO )
set ( SDL_LOADSO_DLOPEN 1 )
file ( GLOB LOADSO_SOURCES ${ SDL2_SOURCE_DIR } /src/loadso/dlopen/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ LOADSO_SOURCES } )
set ( HAVE_SDL_LOADSO TRUE )
endif ( )
2015-12-29 13:57:24 +08:00
if ( SDL_POWER )
set ( SDL_POWER_ANDROID 1 )
file ( GLOB ANDROID_POWER_SOURCES ${ SDL2_SOURCE_DIR } /src/power/android/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ ANDROID_POWER_SOURCES } )
set ( HAVE_SDL_POWER TRUE )
endif ( )
2020-05-04 14:27:29 +08:00
if ( SDL_LOCALE )
file ( GLOB ANDROID_LOCALE_SOURCES ${ SDL2_SOURCE_DIR } /src/locale/android/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ ANDROID_LOCALE_SOURCES } )
set ( HAVE_SDL_LOCALE TRUE )
endif ( )
2017-06-09 03:07:55 +08:00
if ( SDL_TIMERS )
set ( SDL_TIMER_UNIX 1 )
file ( GLOB TIMER_SOURCES ${ SDL2_SOURCE_DIR } /src/timer/unix/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ TIMER_SOURCES } )
set ( HAVE_SDL_TIMERS TRUE )
endif ( )
2018-08-24 02:32:30 +08:00
if ( SDL_SENSOR )
set ( SDL_SENSOR_ANDROID 1 )
set ( HAVE_SDL_SENSORS TRUE )
file ( GLOB ANDROID_SENSOR_SOURCES ${ SDL2_SOURCE_DIR } /src/sensor/android/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ ANDROID_SENSOR_SOURCES } )
endif ( )
2015-12-29 13:57:24 +08:00
if ( SDL_VIDEO )
set ( SDL_VIDEO_DRIVER_ANDROID 1 )
file ( GLOB ANDROID_VIDEO_SOURCES ${ SDL2_SOURCE_DIR } /src/video/android/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ ANDROID_VIDEO_SOURCES } )
set ( HAVE_SDL_VIDEO TRUE )
2017-06-05 02:25:57 +08:00
# Core stuff
2019-08-11 21:23:37 +08:00
# find_library(ANDROID_DL_LIBRARY dl)
# FIXME failing dlopen https://github.com/android-ndk/ndk/issues/929
find_library ( ANDROID_DL_LIBRARY NAMES libdl.so dl )
2017-06-05 02:25:57 +08:00
find_library ( ANDROID_LOG_LIBRARY log )
find_library ( ANDROID_LIBRARY_LIBRARY android )
list ( APPEND EXTRA_LIBS ${ ANDROID_DL_LIBRARY } ${ ANDROID_LOG_LIBRARY } ${ ANDROID_LIBRARY_LIBRARY } )
2021-10-06 00:34:29 +08:00
target_compile_definitions ( sdl-build-options INTERFACE "-DGL_GLEXT_PROTOTYPES" )
2017-06-05 02:25:57 +08:00
2015-12-29 13:57:24 +08:00
#enable gles
2021-10-05 22:43:35 +08:00
if ( SDL_OPENGLES )
2015-12-29 13:57:24 +08:00
set ( SDL_VIDEO_OPENGL_EGL 1 )
2021-10-05 22:43:35 +08:00
set ( HAVE_OPENGLES TRUE )
2019-06-22 13:01:27 +08:00
set ( SDL_VIDEO_OPENGL_ES 1 )
set ( SDL_VIDEO_RENDER_OGL_ES 1 )
2015-12-29 13:57:24 +08:00
set ( SDL_VIDEO_OPENGL_ES2 1 )
set ( SDL_VIDEO_RENDER_OGL_ES2 1 )
2017-06-05 02:25:57 +08:00
find_library ( OpenGLES1_LIBRARY GLESv1_CM )
find_library ( OpenGLES2_LIBRARY GLESv2 )
list ( APPEND EXTRA_LIBS ${ OpenGLES1_LIBRARY } ${ OpenGLES2_LIBRARY } )
2015-12-29 13:57:24 +08:00
endif ( )
2017-08-28 10:15:57 +08:00
2022-01-10 22:39:42 +08:00
if ( SDL_VULKAN )
CHECK_C_SOURCE_COMPILES ( "
#if defined(__ARM_ARCH) && __ARM_ARCH < 7
#error Vulkan doesn't work on this configuration
#endif
2022-03-14 00:10:52 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; }
2022-01-10 22:39:42 +08:00
" V U L K A N _ P A S S E D _ A N D R O I D _ C H E C K S )
if ( VULKAN_PASSED_ANDROID_CHECKS )
set ( SDL_VIDEO_VULKAN 1 )
set ( HAVE_VULKAN TRUE )
endif ( )
2017-08-28 10:15:57 +08:00
endif ( )
2015-12-29 13:57:24 +08:00
endif ( )
2017-06-09 03:07:55 +08:00
CheckPTHREAD ( )
2019-07-09 04:46:52 +08:00
elseif ( EMSCRIPTEN )
2015-06-21 23:33:46 +08:00
# Hide noisy warnings that intend to aid mostly during initial stages of porting a new
# project. Uncomment at will for verbose cross-compiling -I/../ path info.
2021-10-06 00:34:29 +08:00
target_compile_options ( sdl-build-options INTERFACE "-Wno-warn-absolute-paths" )
2022-01-22 21:31:11 +08:00
2022-03-16 15:58:52 +08:00
if ( SDL_MISC )
file ( GLOB EMSRIPTEN_MISC_SOURCES ${ SDL2_SOURCE_DIR } /src/misc/emscripten/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ EMSRIPTEN_MISC_SOURCES } )
set ( HAVE_SDL_MISC TRUE )
endif ( )
2015-06-21 23:33:46 +08:00
if ( SDL_AUDIO )
set ( SDL_AUDIO_DRIVER_EMSCRIPTEN 1 )
file ( GLOB EM_AUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/emscripten/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ EM_AUDIO_SOURCES } )
set ( HAVE_SDL_AUDIO TRUE )
endif ( )
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_EMSCRIPTEN 1 )
file ( GLOB EM_FILESYSTEM_SOURCES ${ SDL2_SOURCE_DIR } /src/filesystem/emscripten/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ EM_FILESYSTEM_SOURCES } )
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
if ( SDL_JOYSTICK )
set ( SDL_JOYSTICK_EMSCRIPTEN 1 )
file ( GLOB EM_JOYSTICK_SOURCES ${ SDL2_SOURCE_DIR } /src/joystick/emscripten/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ EM_JOYSTICK_SOURCES } )
set ( HAVE_SDL_JOYSTICK TRUE )
endif ( )
if ( SDL_POWER )
set ( SDL_POWER_EMSCRIPTEN 1 )
file ( GLOB EM_POWER_SOURCES ${ SDL2_SOURCE_DIR } /src/power/emscripten/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ EM_POWER_SOURCES } )
set ( HAVE_SDL_POWER TRUE )
endif ( )
2020-05-04 14:27:29 +08:00
if ( SDL_LOCALE )
file ( GLOB LOCALE_SOURCES ${ SDL2_SOURCE_DIR } /src/locale/emscripten/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ LOCALE_SOURCES } )
set ( HAVE_SDL_LOCALE TRUE )
endif ( )
2016-09-13 15:03:40 +08:00
if ( SDL_TIMERS )
set ( SDL_TIMER_UNIX 1 )
file ( GLOB TIMER_SOURCES ${ SDL2_SOURCE_DIR } /src/timer/unix/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ TIMER_SOURCES } )
set ( HAVE_SDL_TIMERS TRUE )
2021-10-05 22:43:35 +08:00
if ( SDL_CLOCK_GETTIME )
2016-09-13 15:03:40 +08:00
set ( HAVE_CLOCK_GETTIME 1 )
endif ( )
endif ( )
2015-06-21 23:33:46 +08:00
if ( SDL_VIDEO )
set ( SDL_VIDEO_DRIVER_EMSCRIPTEN 1 )
file ( GLOB EM_VIDEO_SOURCES ${ SDL2_SOURCE_DIR } /src/video/emscripten/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ EM_VIDEO_SOURCES } )
set ( HAVE_SDL_VIDEO TRUE )
#enable gles
2021-10-05 22:43:35 +08:00
if ( SDL_OPENGLES )
2015-06-21 23:33:46 +08:00
set ( SDL_VIDEO_OPENGL_EGL 1 )
2021-10-05 22:43:35 +08:00
set ( HAVE_OPENGLES TRUE )
2015-06-21 23:33:46 +08:00
set ( SDL_VIDEO_OPENGL_ES2 1 )
set ( SDL_VIDEO_RENDER_OGL_ES2 1 )
endif ( )
endif ( )
2019-07-09 04:46:52 +08:00
2021-04-04 12:16:30 +08:00
CheckPTHREAD ( )
2021-07-24 23:02:27 +08:00
elseif ( UNIX AND NOT APPLE AND NOT ANDROID AND NOT RISCOS AND NOT HAIKU )
2015-06-21 23:33:46 +08:00
if ( SDL_AUDIO )
if ( SYSV5 OR SOLARIS OR HPUX )
set ( SDL_AUDIO_DRIVER_SUNAUDIO 1 )
file ( GLOB SUN_AUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/sun/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ SUN_AUDIO_SOURCES } )
set ( HAVE_SDL_AUDIO TRUE )
2017-05-25 07:56:59 +08:00
elseif ( NETBSD )
set ( SDL_AUDIO_DRIVER_NETBSD 1 )
file ( GLOB NETBSD_AUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/netbsd/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ NETBSD_AUDIO_SOURCES } )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_AUDIO TRUE )
elseif ( AIX )
set ( SDL_AUDIO_DRIVER_PAUDIO 1 )
file ( GLOB AIX_AUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/paudio/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ AIX_AUDIO_SOURCES } )
set ( HAVE_SDL_AUDIO TRUE )
endif ( )
CheckOSS ( )
CheckALSA ( )
2017-06-09 01:27:58 +08:00
CheckJACK ( )
2021-02-14 00:56:05 +08:00
CheckPipewire ( )
2015-06-21 23:33:46 +08:00
CheckPulseAudio ( )
CheckESD ( )
CheckARTS ( )
CheckNAS ( )
CheckSNDIO ( )
CheckFusionSound ( )
2017-01-07 12:43:53 +08:00
CheckLibSampleRate ( )
2015-06-21 23:33:46 +08:00
endif ( )
if ( SDL_VIDEO )
# Need to check for Raspberry PI first and add platform specific compiler flags, otherwise the test for GLES fails!
CheckRPI ( )
CheckX11 ( )
CheckDirectFB ( )
2021-05-06 21:43:16 +08:00
# Need to check for EGL first because KMSDRM and Wayland depends on it.
CheckEGL ( )
CheckKMSDRM ( )
CheckGLX ( )
CheckOpenGL ( )
CheckOpenGLES ( )
2015-06-21 23:33:46 +08:00
CheckWayland ( )
CheckVivante ( )
2022-01-10 22:39:42 +08:00
# FIXME: implement CheckVulkan()
if ( SDL_VULKAN )
set ( SDL_VIDEO_VULKAN 1 )
set ( HAVE_VULKAN TRUE )
endif ( )
2015-06-21 23:33:46 +08:00
endif ( )
2017-08-18 03:44:47 +08:00
if ( UNIX )
file ( GLOB CORE_UNIX_SOURCES ${ SDL2_SOURCE_DIR } /src/core/unix/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ CORE_UNIX_SOURCES } )
2015-06-21 23:33:46 +08:00
check_c_source_compiles ( "
#include <linux/input.h>
#ifndef EVIOCGNAME
#error EVIOCGNAME() ioctl not available
#endif
2022-03-14 00:10:52 +08:00
i n t main ( int argc, char** argv ) { r e t u r n 0 ; } " H A V E _ I N P U T _ E V E N T S )
2015-06-21 23:33:46 +08:00
2021-05-16 19:16:54 +08:00
if ( LINUX )
check_c_source_compiles ( "
#include <linux/kd.h>
#include <linux/keyboard.h>
2022-03-16 04:10:02 +08:00
i n t main ( int argc, char **argv ) {
2021-05-16 19:16:54 +08:00
s t r u c t k b e n t r y k b e ;
k b e . k b _ t a b l e = K G _ C T R L ;
ioctl ( 0, KDGKBENT, &kbe ) ;
2022-03-14 00:10:52 +08:00
r e t u r n 0 ;
2021-05-16 19:16:54 +08:00
} " H A V E _ I N P U T _ K D )
elseif ( FREEBSD )
check_c_source_compiles ( "
#include <sys/kbio.h>
#include <sys/ioctl.h>
2022-03-16 04:10:02 +08:00
i n t main ( int argc, char **argv ) {
2021-05-16 19:16:54 +08:00
a c c e n t m a p _ t a c c T a b l e ;
ioctl ( 0, KDENABIO, 1 ) ;
2022-03-14 00:10:52 +08:00
r e t u r n 0 ;
2021-05-16 19:16:54 +08:00
} " H A V E _ I N P U T _ K B I O )
endif ( )
2015-06-21 23:33:46 +08:00
if ( HAVE_INPUT_EVENTS )
set ( SDL_INPUT_LINUXEV 1 )
endif ( )
if ( SDL_HAPTIC AND HAVE_INPUT_EVENTS )
set ( SDL_HAPTIC_LINUX 1 )
file ( GLOB HAPTIC_SOURCES ${ SDL2_SOURCE_DIR } /src/haptic/linux/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ HAPTIC_SOURCES } )
set ( HAVE_SDL_HAPTIC TRUE )
endif ( )
if ( HAVE_INPUT_KD )
set ( SDL_INPUT_LINUXKD 1 )
endif ( )
2021-10-31 08:54:20 +08:00
2021-05-16 19:16:54 +08:00
if ( HAVE_INPUT_KBIO )
set ( SDL_INPUT_FBSDKBIO 1 )
endif ( )
2015-06-21 23:33:46 +08:00
check_include_file ( "libudev.h" HAVE_LIBUDEV_H )
2020-12-13 20:32:24 +08:00
check_include_file ( "sys/inotify.h" HAVE_SYS_INOTIFY_H )
check_symbol_exists ( inotify_init "sys/inotify.h" HAVE_INOTIFY_INIT )
check_symbol_exists ( inotify_init1 "sys/inotify.h" HAVE_INOTIFY_INIT1 )
2021-10-31 08:54:20 +08:00
2020-12-13 20:32:24 +08:00
if ( HAVE_SYS_INOTIFY_H AND HAVE_INOTIFY_INIT )
set ( HAVE_INOTIFY 1 )
endif ( )
2015-06-21 23:33:46 +08:00
2016-10-02 03:48:08 +08:00
if ( PKG_CONFIG_FOUND )
pkg_search_module ( DBUS dbus-1 dbus )
if ( DBUS_FOUND )
set ( HAVE_DBUS_DBUS_H TRUE )
2021-10-06 00:34:29 +08:00
target_include_directories ( sdl-build-options INTERFACE "${DBUS_INCLUDE_DIRS}" )
2016-10-02 03:48:08 +08:00
list ( APPEND EXTRA_LIBS ${ DBUS_LIBRARIES } )
2020-05-12 05:31:04 +08:00
# Fcitx need only dbus.
set ( HAVE_FCITX TRUE )
2016-10-02 03:48:08 +08:00
endif ( )
pkg_search_module ( IBUS ibus-1.0 ibus )
if ( IBUS_FOUND )
set ( HAVE_IBUS_IBUS_H TRUE )
2021-10-06 00:34:29 +08:00
target_include_directories ( sdl-build-options INTERFACE "${IBUS_INCLUDE_DIRS}" )
2016-10-02 03:48:08 +08:00
list ( APPEND EXTRA_LIBS ${ IBUS_LIBRARIES } )
2020-05-12 05:31:04 +08:00
endif ( )
if ( HAVE_IBUS_IBUS_H OR HAVE_FCITX )
2021-11-17 07:59:38 +08:00
set ( SDL_USE_IME 1 )
2016-10-02 03:48:08 +08:00
endif ( )
2021-10-31 08:54:20 +08:00
2021-05-16 19:16:54 +08:00
if ( FREEBSD AND NOT HAVE_INOTIFY )
pkg_search_module ( INOTIFY libinotify )
if ( INOTIFY_FOUND )
set ( HAVE_INOTIFY 1 )
2021-10-06 00:34:29 +08:00
target_include_directories ( sdl-build-options INTERFACE "${INOTIFY_INCLUDE_DIRS}" )
2021-05-16 19:16:54 +08:00
list ( APPEND EXTRA_LIBS ${ INOTIFY_LIBRARIES } )
endif ( )
endif ( )
2018-09-29 12:03:39 +08:00
if ( HAVE_LIBUNWIND_H )
# We've already found the header, so REQUIRE the lib to be present
pkg_search_module ( UNWIND REQUIRED libunwind )
2022-01-08 03:17:47 +08:00
pkg_search_module ( UNWIND_GENERIC libunwind-generic )
2018-09-29 12:03:39 +08:00
list ( APPEND EXTRA_LIBS ${ UNWIND_LIBRARIES } ${ UNWIND_GENERIC_LIBRARIES } )
endif ( )
2016-10-02 03:48:08 +08:00
endif ( )
2020-06-27 05:42:30 +08:00
if ( HAVE_DBUS_DBUS_H )
set ( SOURCE_FILES ${ SOURCE_FILES } "${SDL2_SOURCE_DIR}/src/core/linux/SDL_dbus.c" )
endif ( )
if ( SDL_USE_IME )
set ( SOURCE_FILES ${ SOURCE_FILES } "${SDL2_SOURCE_DIR}/src/core/linux/SDL_ime.c" )
endif ( )
if ( HAVE_IBUS_IBUS_H )
set ( SOURCE_FILES ${ SOURCE_FILES } "${SDL2_SOURCE_DIR}/src/core/linux/SDL_ibus.c" )
endif ( )
if ( HAVE_FCITX )
set ( SOURCE_FILES ${ SOURCE_FILES } "${SDL2_SOURCE_DIR}/src/core/linux/SDL_fcitx.c" )
endif ( )
if ( HAVE_LIBUDEV_H )
set ( SOURCE_FILES ${ SOURCE_FILES } "${SDL2_SOURCE_DIR}/src/core/linux/SDL_udev.c" )
endif ( )
if ( HAVE_INPUT_EVENTS )
set ( SOURCE_FILES ${ SOURCE_FILES } "${SDL2_SOURCE_DIR}/src/core/linux/SDL_evdev.c" )
set ( SOURCE_FILES ${ SOURCE_FILES } "${SDL2_SOURCE_DIR}/src/core/linux/SDL_evdev_kbd.c" )
endif ( )
2021-10-31 08:54:20 +08:00
2021-05-16 19:16:54 +08:00
if ( HAVE_INPUT_KBIO )
set ( SOURCE_FILES ${ SOURCE_FILES } "${SDL2_SOURCE_DIR}/src/core/freebsd/SDL_evdev_kbd_freebsd.c" )
endif ( )
2020-06-27 05:42:30 +08:00
# Always compiled for Linux, unconditionally:
2020-11-12 11:14:34 +08:00
set ( SOURCE_FILES ${ SOURCE_FILES } "${SDL2_SOURCE_DIR}/src/core/linux/SDL_evdev_capabilities.c" )
2020-06-27 05:42:30 +08:00
set ( SOURCE_FILES ${ SOURCE_FILES } "${SDL2_SOURCE_DIR}/src/core/linux/SDL_threadprio.c" )
# src/core/unix/*.c is included in a generic if(UNIX) section, elsewhere.
2015-06-21 23:33:46 +08:00
endif ( )
2021-11-12 01:16:44 +08:00
if ( SDL_HIDAPI )
CheckHIDAPI ( )
endif ( )
2015-06-21 23:33:46 +08:00
if ( SDL_JOYSTICK )
2019-08-01 00:34:00 +08:00
if ( FREEBSD OR NETBSD OR OPENBSD OR BSDI )
CheckUSBHID ( )
endif ( )
2015-12-29 13:24:37 +08:00
if ( LINUX AND NOT ANDROID )
2015-06-21 23:33:46 +08:00
set ( SDL_JOYSTICK_LINUX 1 )
2017-09-23 07:33:34 +08:00
file ( GLOB JOYSTICK_SOURCES ${ SDL2_SOURCE_DIR } /src/joystick/linux/*.c ${ SDL2_SOURCE_DIR } /src/joystick/steam/*.c )
2015-06-21 23:33:46 +08:00
set ( SOURCE_FILES ${ SOURCE_FILES } ${ JOYSTICK_SOURCES } )
set ( HAVE_SDL_JOYSTICK TRUE )
endif ( )
endif ( )
CheckPTHREAD ( )
2021-10-05 22:43:35 +08:00
if ( SDL_CLOCK_GETTIME )
2015-06-21 23:33:46 +08:00
check_library_exists ( rt clock_gettime "" FOUND_CLOCK_GETTIME )
if ( FOUND_CLOCK_GETTIME )
list ( APPEND EXTRA_LIBS rt )
set ( HAVE_CLOCK_GETTIME 1 )
else ( )
check_library_exists ( c clock_gettime "" FOUND_CLOCK_GETTIME )
if ( FOUND_CLOCK_GETTIME )
set ( HAVE_CLOCK_GETTIME 1 )
endif ( )
endif ( )
endif ( )
check_include_file ( linux/version.h HAVE_LINUX_VERSION_H )
if ( HAVE_LINUX_VERSION_H )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_LINUX_VERSION_H" )
endif ( )
2022-01-09 23:00:22 +08:00
if ( SDL_MISC )
file ( GLOB MISC_SOURCES ${ SDL2_SOURCE_DIR } /src/misc/unix/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ MISC_SOURCES } )
set ( HAVE_SDL_MISC TRUE )
endif ( )
2020-10-05 23:30:33 +08:00
2015-06-21 23:33:46 +08:00
if ( SDL_POWER )
if ( LINUX )
set ( SDL_POWER_LINUX 1 )
file ( GLOB POWER_SOURCES ${ SDL2_SOURCE_DIR } /src/power/linux/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ POWER_SOURCES } )
set ( HAVE_SDL_POWER TRUE )
endif ( )
endif ( )
2020-05-04 14:27:29 +08:00
if ( SDL_LOCALE )
file ( GLOB LOCALE_SOURCES ${ SDL2_SOURCE_DIR } /src/locale/unix/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ LOCALE_SOURCES } )
set ( HAVE_SDL_LOCALE TRUE )
endif ( )
2015-06-21 23:33:46 +08:00
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_UNIX 1 )
file ( GLOB FILESYSTEM_SOURCES ${ SDL2_SOURCE_DIR } /src/filesystem/unix/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ FILESYSTEM_SOURCES } )
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
if ( SDL_TIMERS )
set ( SDL_TIMER_UNIX 1 )
file ( GLOB TIMER_SOURCES ${ SDL2_SOURCE_DIR } /src/timer/unix/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ TIMER_SOURCES } )
set ( HAVE_SDL_TIMERS TRUE )
endif ( )
2020-04-12 06:38:34 +08:00
set ( SDL_RLD_FLAGS "" )
2021-10-05 22:43:35 +08:00
if ( SDL_RPATH AND SDL_SHARED )
2015-06-21 23:33:46 +08:00
if ( BSDI OR FREEBSD OR LINUX OR NETBSD )
2016-01-08 08:42:30 +08:00
set ( CMAKE_REQUIRED_FLAGS "-Wl,--enable-new-dtags" )
check_c_compiler_flag ( "" HAVE_ENABLE_NEW_DTAGS )
set ( CMAKE_REQUIRED_FLAGS ${ ORIG_CMAKE_REQUIRED_FLAGS } )
if ( HAVE_ENABLE_NEW_DTAGS )
2016-01-08 09:21:50 +08:00
set ( SDL_RLD_FLAGS "-Wl,-rpath,\${libdir} -Wl,--enable-new-dtags" )
else ( )
set ( SDL_RLD_FLAGS "-Wl,-rpath,\${libdir}" )
2016-01-08 08:42:30 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
elseif ( SOLARIS )
set ( SDL_RLD_FLAGS "-R\${libdir}" )
endif ( )
set ( CMAKE_BUILD_WITH_INSTALL_RPATH TRUE )
set ( HAVE_RPATH TRUE )
endif ( )
elseif ( WINDOWS )
find_program ( WINDRES windres )
check_c_source_compiles ( "
#include <windows.h>
2022-03-14 00:10:52 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; } " H A V E _ W I N 3 2 _ C C )
2015-06-21 23:33:46 +08:00
file ( GLOB CORE_SOURCES ${ SDL2_SOURCE_DIR } /src/core/windows/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ CORE_SOURCES } )
2020-12-09 01:13:08 +08:00
if ( WINDOWS_STORE )
file ( GLOB WINRT_SOURCE_FILES ${ SDL2_SOURCE_DIR } /src/core/winrt/*.c ${ SDL2_SOURCE_DIR } /src/core/winrt/*.cpp )
list ( APPEND SOURCE_FILES ${ WINRT_SOURCE_FILES } )
endif ( )
2021-11-04 14:02:48 +08:00
if ( MSVC AND NOT SDL_LIBC )
2016-01-01 03:26:40 +08:00
# Prevent codegen that would use the VC runtime libraries.
2017-08-10 10:03:10 +08:00
set_property ( DIRECTORY . APPEND PROPERTY COMPILE_OPTIONS "/GS-" )
2022-05-08 22:53:43 +08:00
if ( NOT ARCH_64 AND NOT CMAKE_GENERATOR_PLATFORM STREQUAL "ARM" )
2017-08-10 10:03:10 +08:00
set_property ( DIRECTORY . APPEND PROPERTY COMPILE_OPTIONS "/arch:SSE" )
2016-01-01 03:26:40 +08:00
endif ( )
endif ( )
2022-01-09 23:00:22 +08:00
if ( SDL_MISC )
if ( WINDOWS_STORE )
file ( GLOB MISC_SOURCES ${ SDL2_SOURCE_DIR } /src/misc/winrt/*.cpp )
else ( )
file ( GLOB MISC_SOURCES ${ SDL2_SOURCE_DIR } /src/misc/windows/*.c )
endif ( )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ MISC_SOURCES } )
set ( HAVE_SDL_MISC TRUE )
2021-01-15 06:53:34 +08:00
endif ( )
2020-10-05 23:30:33 +08:00
2015-06-21 23:33:46 +08:00
# Check for DirectX
2021-10-05 22:43:35 +08:00
if ( SDL_DIRECTX )
2015-12-29 13:02:43 +08:00
if ( DEFINED MSVC_VERSION AND NOT ${ MSVC_VERSION } LESS 1700 )
set ( USE_WINSDK_DIRECTX TRUE )
endif ( )
2021-11-24 23:10:00 +08:00
if ( NOT MINGW AND NOT USE_WINSDK_DIRECTX )
2015-06-21 23:33:46 +08:00
if ( "$ENV{DXSDK_DIR}" STREQUAL "" )
message_error ( "DIRECTX requires the \$DXSDK_DIR environment variable to be set" )
endif ( )
set ( CMAKE_REQUIRED_FLAGS "/I\" $ENV{ DXSDK_DIR } \\Include\"")
endif ( )
2015-08-29 06:05:24 +08:00
2015-06-21 23:33:46 +08:00
check_include_file ( d3d9.h HAVE_D3D_H )
check_include_file ( d3d11_1.h HAVE_D3D11_H )
check_include_file ( ddraw.h HAVE_DDRAW_H )
check_include_file ( dsound.h HAVE_DSOUND_H )
check_include_file ( dinput.h HAVE_DINPUT_H )
2022-05-08 22:53:43 +08:00
if ( WINDOWS_STORE OR CMAKE_GENERATOR_PLATFORM STREQUAL "ARM" )
2020-12-09 01:13:08 +08:00
set ( HAVE_DINPUT_H 0 )
endif ( )
2015-06-21 23:33:46 +08:00
check_include_file ( dxgi.h HAVE_DXGI_H )
2017-12-07 01:24:32 +08:00
if ( HAVE_D3D_H OR HAVE_D3D11_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR HAVE_DINPUT_H )
2015-06-21 23:33:46 +08:00
set ( HAVE_DIRECTX TRUE )
2021-11-24 23:10:00 +08:00
if ( NOT MINGW AND NOT USE_WINSDK_DIRECTX )
2015-06-21 23:33:46 +08:00
# TODO: change $ENV{DXSDL_DIR} to get the path from the include checks
2021-10-06 00:34:29 +08:00
target_link_directories ( sdl-build-options INTERFACE "$$ENV{DXSDK_DIR}\\lib\\${PROCESSOR_ARCH}" )
target_include_directories ( sdl-build-options INTERFACE "$ENV{DXSDK_DIR}\\Include" )
2015-06-21 23:33:46 +08:00
endif ( )
endif ( )
set ( CMAKE_REQUIRED_FLAGS ${ ORIG_CMAKE_REQUIRED_FLAGS } )
endif ( )
2021-10-05 22:43:35 +08:00
if ( SDL_XINPUT )
2021-01-17 10:00:50 +08:00
# xinput.h may need windows.h, but does not include it itself.
check_c_source_compiles ( "
#include <windows.h>
#include <xinput.h>
2022-03-14 00:10:52 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; } " H A V E _ X I N P U T _ H )
2021-01-17 10:00:50 +08:00
check_c_source_compiles ( "
#include <windows.h>
#include <xinput.h>
X I N P U T _ G A M E P A D _ E X x 1 ;
2022-03-14 00:10:52 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; } " H A V E _ X I N P U T _ G A M E P A D _ E X )
2021-01-17 10:00:50 +08:00
check_c_source_compiles ( "
#include <windows.h>
#include <xinput.h>
X I N P U T _ S T A T E _ E X s 1 ;
2022-03-14 00:10:52 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; } " H A V E _ X I N P U T _ S T A T E _ E X )
2021-12-20 05:07:37 +08:00
check_c_source_compiles ( "
#define COBJMACROS
#include <windows.gaming.input.h>
_ _ x _ A B I _ C W i n d o w s _ C G a m i n g _ C I n p u t _ C I G a m e p a d S t a t i c s 2 * s 2 ;
2022-03-14 00:10:52 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; } " H A V E _ W I N D O W S _ G A M I N G _ I N P U T _ H )
2021-01-17 10:00:50 +08:00
endif ( )
2019-10-01 19:00:02 +08:00
# headers needed elsewhere
2022-01-07 03:24:00 +08:00
check_include_file ( tpcshrd.h HAVE_TPCSHRD_H )
2022-04-02 07:50:02 +08:00
check_include_file ( roapi.h HAVE_ROAPI_H )
2018-09-28 18:41:04 +08:00
check_include_file ( mmdeviceapi.h HAVE_MMDEVICEAPI_H )
check_include_file ( audioclient.h HAVE_AUDIOCLIENT_H )
2020-10-12 06:02:28 +08:00
check_include_file ( sensorsapi.h HAVE_SENSORSAPI_H )
2018-09-28 18:41:04 +08:00
2015-06-21 23:33:46 +08:00
if ( SDL_AUDIO )
2020-12-09 01:13:08 +08:00
if ( NOT WINDOWS_STORE )
2022-01-12 23:31:00 +08:00
set ( SDL_AUDIO_DRIVER_WINMM 1 )
file ( GLOB WINMM_AUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/winmm/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ WINMM_AUDIO_SOURCES } )
set ( HAVE_SDL_AUDIO TRUE )
2020-12-09 01:13:08 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
2020-12-09 01:13:08 +08:00
if ( HAVE_DSOUND_H AND NOT WINDOWS_STORE )
2015-06-21 23:33:46 +08:00
set ( SDL_AUDIO_DRIVER_DSOUND 1 )
file ( GLOB DSOUND_AUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/directsound/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ DSOUND_AUDIO_SOURCES } )
2022-01-12 23:31:00 +08:00
set ( HAVE_SDL_AUDIO TRUE )
2015-06-21 23:33:46 +08:00
endif ( )
2021-10-05 22:43:35 +08:00
if ( SDL_WASAPI AND HAVE_AUDIOCLIENT_H AND HAVE_MMDEVICEAPI_H )
2017-02-24 11:38:04 +08:00
set ( SDL_AUDIO_DRIVER_WASAPI 1 )
2021-11-22 19:10:02 +08:00
set ( HAVE_WASAPI TRUE )
2017-02-24 11:38:04 +08:00
file ( GLOB WASAPI_AUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/wasapi/*.c )
2021-04-03 21:21:35 +08:00
if ( WINDOWS_STORE )
list ( APPEND WASAPI_AUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/wasapi/SDL_wasapi_winrt.cpp )
endif ( )
2017-02-24 11:38:04 +08:00
set ( SOURCE_FILES ${ SOURCE_FILES } ${ WASAPI_AUDIO_SOURCES } )
2022-01-12 23:31:00 +08:00
set ( HAVE_SDL_AUDIO TRUE )
2017-02-24 11:38:04 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
endif ( )
if ( SDL_VIDEO )
# requires SDL_LOADSO on Windows (IME, DX, etc.)
if ( NOT SDL_LOADSO )
message_error ( "SDL_VIDEO requires SDL_LOADSO, which is not enabled" )
endif ( )
2020-12-09 01:13:08 +08:00
if ( WINDOWS_STORE )
set ( SDL_VIDEO_DRIVER_WINRT 1 )
file ( GLOB WIN_VIDEO_SOURCES
2021-10-31 08:54:20 +08:00
$ { S D L 2 _ S O U R C E _ D I R } / s r c / v i d e o / w i n r t / * . c
2020-12-09 01:13:08 +08:00
$ { S D L 2 _ S O U R C E _ D I R } / s r c / v i d e o / w i n r t / * . c p p
$ { S D L 2 _ S O U R C E _ D I R } / s r c / r e n d e r / d i r e c t 3 d 1 1 / * . c p p
)
else ( )
2022-01-12 23:31:00 +08:00
set ( SDL_VIDEO_DRIVER_WINDOWS 1 )
file ( GLOB WIN_VIDEO_SOURCES ${ SDL2_SOURCE_DIR } /src/video/windows/*.c )
2020-12-09 01:13:08 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
set ( SOURCE_FILES ${ SOURCE_FILES } ${ WIN_VIDEO_SOURCES } )
2021-10-05 22:43:35 +08:00
if ( SDL_RENDER_D3D AND HAVE_D3D_H AND NOT WINDOWS_STORE )
2015-06-21 23:33:46 +08:00
set ( SDL_VIDEO_RENDER_D3D 1 )
set ( HAVE_RENDER_D3D TRUE )
endif ( )
2021-10-05 22:43:35 +08:00
if ( SDL_RENDER_D3D AND HAVE_D3D11_H )
2015-06-21 23:33:46 +08:00
set ( SDL_VIDEO_RENDER_D3D11 1 )
set ( HAVE_RENDER_D3D TRUE )
endif ( )
set ( HAVE_SDL_VIDEO TRUE )
endif ( )
if ( SDL_THREADS )
2020-12-29 03:42:49 +08:00
set ( SDL_THREAD_GENERIC_COND_SUFFIX 1 )
2015-06-21 23:33:46 +08:00
set ( SDL_THREAD_WINDOWS 1 )
set ( SOURCE_FILES ${ SOURCE_FILES }
2020-12-29 03:42:49 +08:00
$ { S D L 2 _ S O U R C E _ D I R } / s r c / t h r e a d / g e n e r i c / S D L _ s y s c o n d . c
2021-08-24 09:16:58 +08:00
$ { S D L 2 _ S O U R C E _ D I R } / s r c / t h r e a d / w i n d o w s / S D L _ s y s c o n d _ c v . c
2015-06-21 23:33:46 +08:00
$ { S D L 2 _ S O U R C E _ D I R } / s r c / t h r e a d / w i n d o w s / S D L _ s y s m u t e x . c
$ { S D L 2 _ S O U R C E _ D I R } / s r c / t h r e a d / w i n d o w s / S D L _ s y s s e m . c
$ { S D L 2 _ S O U R C E _ D I R } / s r c / t h r e a d / w i n d o w s / S D L _ s y s t h r e a d . c
2020-12-29 03:42:49 +08:00
$ { S D L 2 _ S O U R C E _ D I R } / s r c / t h r e a d / w i n d o w s / S D L _ s y s t l s . c )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_THREADS TRUE )
endif ( )
2021-01-15 06:53:34 +08:00
if ( SDL_SENSOR AND HAVE_SENSORSAPI_H AND NOT WINDOWS_STORE )
2020-04-08 23:34:27 +08:00
set ( SDL_SENSOR_WINDOWS 1 )
set ( HAVE_SDL_SENSORS TRUE )
file ( GLOB WINDOWS_SENSOR_SOURCES ${ SDL2_SOURCE_DIR } /src/sensor/windows/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ WINDOWS_SENSOR_SOURCES } )
endif ( )
2015-06-21 23:33:46 +08:00
if ( SDL_POWER )
2020-12-09 01:13:08 +08:00
if ( WINDOWS_STORE )
set ( SDL_POWER_WINRT 1 )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ SDL2_SOURCE_DIR } /src/power/winrt/SDL_syspower.cpp )
else ( )
set ( SDL_POWER_WINDOWS 1 )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ SDL2_SOURCE_DIR } /src/power/windows/SDL_syspower.c )
set ( HAVE_SDL_POWER TRUE )
endif ( )
2015-06-21 23:33:46 +08:00
endif ( )
2020-05-04 14:27:29 +08:00
if ( SDL_LOCALE )
2021-04-08 20:28:45 +08:00
if ( WINDOWS_STORE )
file ( GLOB LOCALE_SOURCES ${ SDL2_SOURCE_DIR } /src/locale/winrt/*.c )
else ( )
file ( GLOB LOCALE_SOURCES ${ SDL2_SOURCE_DIR } /src/locale/windows/*.c )
endif ( )
2020-05-04 14:27:29 +08:00
set ( SOURCE_FILES ${ SOURCE_FILES } ${ LOCALE_SOURCES } )
set ( HAVE_SDL_LOCALE TRUE )
endif ( )
2015-06-21 23:33:46 +08:00
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_WINDOWS 1 )
2020-12-09 01:13:08 +08:00
if ( WINDOWS_STORE )
file ( GLOB FILESYSTEM_SOURCES ${ SDL2_SOURCE_DIR } /src/filesystem/winrt/*.cpp )
else ( )
file ( GLOB FILESYSTEM_SOURCES ${ SDL2_SOURCE_DIR } /src/filesystem/windows/*.c )
endif ( )
2015-06-21 23:33:46 +08:00
set ( SOURCE_FILES ${ SOURCE_FILES } ${ FILESYSTEM_SOURCES } )
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
# Libraries for Win32 native and MinGW
2020-12-09 01:13:08 +08:00
if ( NOT WINDOWS_STORE )
list ( APPEND EXTRA_LIBS user32 gdi32 winmm imm32 ole32 oleaut32 version uuid advapi32 setupapi shell32 )
endif ( )
2015-06-21 23:33:46 +08:00
2021-04-08 20:28:45 +08:00
if ( WINDOWS_STORE )
list ( APPEND EXTRA_LIBS
- n o d e f a u l t l i b : v c c o r l i b $ < $ < C O N F I G : D e b u g > : d >
- n o d e f a u l t l i b : m s v c r t $ < $ < C O N F I G : D e b u g > : d >
v c c o r l i b $ < $ < C O N F I G : D e b u g > : d > . l i b
m s v c r t $ < $ < C O N F I G : D e b u g > : d > . l i b
)
endif ( )
2015-06-21 23:33:46 +08:00
if ( SDL_TIMERS )
set ( SDL_TIMER_WINDOWS 1 )
file ( GLOB TIMER_SOURCES ${ SDL2_SOURCE_DIR } /src/timer/windows/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ TIMER_SOURCES } )
set ( HAVE_SDL_TIMERS TRUE )
endif ( )
if ( SDL_LOADSO )
set ( SDL_LOADSO_WINDOWS 1 )
file ( GLOB LOADSO_SOURCES ${ SDL2_SOURCE_DIR } /src/loadso/windows/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ LOADSO_SOURCES } )
set ( HAVE_SDL_LOADSO TRUE )
endif ( )
file ( GLOB CORE_SOURCES ${ SDL2_SOURCE_DIR } /src/core/windows/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ CORE_SOURCES } )
if ( SDL_VIDEO )
2021-10-05 22:43:35 +08:00
if ( SDL_OPENGL AND NOT WINDOWS_STORE )
2015-06-21 23:33:46 +08:00
set ( SDL_VIDEO_OPENGL 1 )
set ( SDL_VIDEO_OPENGL_WGL 1 )
set ( SDL_VIDEO_RENDER_OGL 1 )
2021-10-05 22:43:35 +08:00
set ( HAVE_OPENGL TRUE )
2015-06-21 23:33:46 +08:00
endif ( )
2015-08-29 06:10:46 +08:00
2021-10-05 22:43:35 +08:00
if ( SDL_OPENGLES )
2015-08-29 06:10:46 +08:00
set ( SDL_VIDEO_OPENGL_EGL 1 )
set ( SDL_VIDEO_OPENGL_ES2 1 )
set ( SDL_VIDEO_RENDER_OGL_ES2 1 )
2021-10-05 22:43:35 +08:00
set ( HAVE_OPENGLES TRUE )
2015-08-29 06:10:46 +08:00
endif ( )
2022-01-10 22:39:42 +08:00
if ( SDL_VULKAN )
set ( SDL_VIDEO_VULKAN 1 )
set ( HAVE_VULKAN TRUE )
endif ( )
2015-06-21 23:33:46 +08:00
endif ( )
2021-11-12 01:16:44 +08:00
if ( SDL_HIDAPI )
2019-07-09 04:46:52 +08:00
CheckHIDAPI ( )
2021-11-12 01:16:44 +08:00
endif ( )
if ( SDL_JOYSTICK )
2021-11-23 22:04:40 +08:00
file ( GLOB JOYSTICK_SOURCES ${ SDL2_SOURCE_DIR } /src/joystick/windows/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ JOYSTICK_SOURCES } )
2021-07-10 15:05:40 +08:00
if ( NOT WINDOWS_STORE )
2021-07-10 15:01:40 +08:00
set ( SDL_JOYSTICK_RAWINPUT 1 )
2021-07-10 15:05:40 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
if ( HAVE_DINPUT_H )
set ( SDL_JOYSTICK_DINPUT 1 )
2016-03-19 09:15:53 +08:00
list ( APPEND EXTRA_LIBS dinput8 )
2015-06-21 23:33:46 +08:00
endif ( )
if ( HAVE_XINPUT_H )
2022-02-05 01:05:14 +08:00
if ( NOT WINDOWS_STORE )
set ( SDL_JOYSTICK_XINPUT 1 )
set ( HAVE_XINPUT TRUE )
endif ( )
2021-10-31 22:31:25 +08:00
if ( HAVE_WINDOWS_GAMING_INPUT_H )
2021-10-31 08:54:20 +08:00
set ( SDL_JOYSTICK_WGI 1 )
endif ( )
2015-06-21 23:33:46 +08:00
endif ( )
set ( HAVE_SDL_JOYSTICK TRUE )
if ( SDL_HAPTIC )
2022-02-05 01:05:14 +08:00
if ( ( HAVE_DINPUT_H OR HAVE_XINPUT_H ) AND NOT WINDOWS_STORE )
2015-06-21 23:33:46 +08:00
file ( GLOB HAPTIC_SOURCES ${ SDL2_SOURCE_DIR } /src/haptic/windows/*.c )
if ( HAVE_DINPUT_H )
set ( SDL_HAPTIC_DINPUT 1 )
endif ( )
if ( HAVE_XINPUT_H )
set ( SDL_HAPTIC_XINPUT 1 )
endif ( )
else ( )
file ( GLOB HAPTIC_SOURCES ${ SDL2_SOURCE_DIR } /src/haptic/dummy/*.c )
set ( SDL_HAPTIC_DUMMY 1 )
endif ( )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ HAPTIC_SOURCES } )
set ( HAVE_SDL_HAPTIC TRUE )
endif ( )
endif ( )
file ( GLOB VERSION_SOURCES ${ SDL2_SOURCE_DIR } /src/main/windows/*.rc )
file ( GLOB SDLMAIN_SOURCES ${ SDL2_SOURCE_DIR } /src/main/windows/*.c )
if ( MINGW OR CYGWIN )
2022-01-12 00:34:14 +08:00
list ( APPEND SDL_LIBS "-lmingw32" "-mwindows" )
if ( NOT SDL2_DISABLE_SDL2MAIN )
set ( SDL_CFLAGS "${SDL_CFLAGS} -Dmain=SDL_main" )
list ( APPEND SDL_LIBS "-lSDL2main" )
endif ( NOT SDL2_DISABLE_SDL2MAIN )
2015-06-21 23:33:46 +08:00
endif ( )
2019-07-09 04:46:52 +08:00
2015-06-21 23:33:46 +08:00
elseif ( APPLE )
2017-08-19 08:25:14 +08:00
# TODO: rework this all for proper MacOS X, iOS and Darwin support
# We always need these libs on macOS at the moment.
# !!! FIXME: we need Carbon for some very old API calls in
# !!! FIXME: src/video/cocoa/SDL_cocoakeyboard.c, but we should figure out
# !!! FIXME: how to dump those.
2019-08-28 00:30:20 +08:00
if ( DARWIN OR MACOSX )
2017-08-19 08:25:14 +08:00
set ( SDL_FRAMEWORK_COCOA 1 )
set ( SDL_FRAMEWORK_CARBON 1 )
endif ( )
CMake: iOS support added
When using a recent version of CMake (3.14+), this should make it possible to:
- build SDL for iOS, both static and dynamic
- build SDL test apps (as iOS .app bundles)
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
To use, set the following CMake variables when running CMake's configuration stage:
- CMAKE_SYSTEM_NAME=iOS
- CMAKE_OSX_SYSROOT=<SDK> (examples: iphoneos, iphonesimulator, iphoneos12.4, /full/path/to/iPhoneOS.sdk, etc.)
- CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures> (example: "arm64;armv7s")
Examples:
- for Simulator, using the latest, installed SDK:
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
- for Device, using the latest, installed SDK, 64-bit only
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64
- for Device, using the latest, installed SDK, mixed 32/64 bit
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"
- for Device, using a specific SDK revision (iOS 12.4, in this example):
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64
- for Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
cmake path/to/SDL -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
2019-08-27 23:07:43 +08:00
set ( SDL_FRAMEWORK_FOUNDATION 1 )
2021-11-22 19:10:02 +08:00
set ( SDL_FRAMEWORK_COREVIDEO 1 )
2015-06-21 23:33:46 +08:00
# Requires the darwin file implementation
if ( SDL_FILE )
2015-12-29 13:57:24 +08:00
file ( GLOB EXTRA_SOURCES ${ SDL2_SOURCE_DIR } /src/file/cocoa/*.m )
2015-06-21 23:33:46 +08:00
set ( SOURCE_FILES ${ EXTRA_SOURCES } ${ SOURCE_FILES } )
set ( HAVE_SDL_FILE TRUE )
endif ( )
2022-01-10 00:00:41 +08:00
if ( IOS OR TVOS )
file ( GLOB SDLMAIN_SOURCES ${ SDL2_SOURCE_DIR } /src/main/uikit/*.c )
endif ( )
2022-01-09 23:00:22 +08:00
if ( SDL_MISC )
if ( IOS OR TVOS )
file ( GLOB MISC_SOURCES ${ SDL2_SOURCE_DIR } /src/misc/ios/*.m )
else ( )
file ( GLOB MISC_SOURCES ${ SDL2_SOURCE_DIR } /src/misc/macosx/*.m )
endif ( )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ MISC_SOURCES } )
set ( HAVE_SDL_MISC TRUE )
2020-12-27 19:00:30 +08:00
endif ( )
2020-10-05 23:30:33 +08:00
2015-06-21 23:33:46 +08:00
if ( SDL_AUDIO )
set ( SDL_AUDIO_DRIVER_COREAUDIO 1 )
2016-09-15 23:46:14 +08:00
file ( GLOB AUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/coreaudio/*.m )
2015-06-21 23:33:46 +08:00
set ( SOURCE_FILES ${ SOURCE_FILES } ${ AUDIO_SOURCES } )
set ( HAVE_SDL_AUDIO TRUE )
2016-09-15 23:57:56 +08:00
set ( SDL_FRAMEWORK_COREAUDIO 1 )
set ( SDL_FRAMEWORK_AUDIOTOOLBOX 1 )
CMake: iOS support added
When using a recent version of CMake (3.14+), this should make it possible to:
- build SDL for iOS, both static and dynamic
- build SDL test apps (as iOS .app bundles)
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
To use, set the following CMake variables when running CMake's configuration stage:
- CMAKE_SYSTEM_NAME=iOS
- CMAKE_OSX_SYSROOT=<SDK> (examples: iphoneos, iphonesimulator, iphoneos12.4, /full/path/to/iPhoneOS.sdk, etc.)
- CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures> (example: "arm64;armv7s")
Examples:
- for Simulator, using the latest, installed SDK:
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
- for Device, using the latest, installed SDK, 64-bit only
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64
- for Device, using the latest, installed SDK, mixed 32/64 bit
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"
- for Device, using a specific SDK revision (iOS 12.4, in this example):
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64
- for Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
cmake path/to/SDL -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
2019-08-27 23:07:43 +08:00
set ( SDL_FRAMEWORK_AVFOUNDATION 1 )
2015-06-21 23:33:46 +08:00
endif ( )
2021-11-12 01:16:44 +08:00
if ( SDL_HIDAPI )
2019-07-09 04:46:52 +08:00
CheckHIDAPI ( )
2021-11-12 01:16:44 +08:00
endif ( )
if ( SDL_JOYSTICK )
2021-11-21 07:05:28 +08:00
file ( GLOB MFI_JOYSTICK_SOURCES ${ SDL2_SOURCE_DIR } /src/joystick/iphoneos/*.m )
2019-08-28 00:30:20 +08:00
if ( IOS OR TVOS )
2021-11-21 07:05:28 +08:00
file ( GLOB JOYSTICK_SOURCES ${ SDL2_SOURCE_DIR } /src/joystick/steam/*.c )
CMake: iOS support added
When using a recent version of CMake (3.14+), this should make it possible to:
- build SDL for iOS, both static and dynamic
- build SDL test apps (as iOS .app bundles)
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
To use, set the following CMake variables when running CMake's configuration stage:
- CMAKE_SYSTEM_NAME=iOS
- CMAKE_OSX_SYSROOT=<SDK> (examples: iphoneos, iphonesimulator, iphoneos12.4, /full/path/to/iPhoneOS.sdk, etc.)
- CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures> (example: "arm64;armv7s")
Examples:
- for Simulator, using the latest, installed SDK:
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
- for Device, using the latest, installed SDK, 64-bit only
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64
- for Device, using the latest, installed SDK, mixed 32/64 bit
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"
- for Device, using a specific SDK revision (iOS 12.4, in this example):
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64
- for Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
cmake path/to/SDL -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
2019-08-27 23:07:43 +08:00
set ( SDL_JOYSTICK_MFI 1 )
2019-08-28 00:30:20 +08:00
if ( IOS )
set ( SDL_FRAMEWORK_COREMOTION 1 )
endif ( )
CMake: iOS support added
When using a recent version of CMake (3.14+), this should make it possible to:
- build SDL for iOS, both static and dynamic
- build SDL test apps (as iOS .app bundles)
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
To use, set the following CMake variables when running CMake's configuration stage:
- CMAKE_SYSTEM_NAME=iOS
- CMAKE_OSX_SYSROOT=<SDK> (examples: iphoneos, iphonesimulator, iphoneos12.4, /full/path/to/iPhoneOS.sdk, etc.)
- CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures> (example: "arm64;armv7s")
Examples:
- for Simulator, using the latest, installed SDK:
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
- for Device, using the latest, installed SDK, 64-bit only
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64
- for Device, using the latest, installed SDK, mixed 32/64 bit
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"
- for Device, using a specific SDK revision (iOS 12.4, in this example):
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64
- for Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
cmake path/to/SDL -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
2019-08-27 23:07:43 +08:00
set ( SDL_FRAMEWORK_GAMECONTROLLER 1 )
2021-04-11 18:29:01 +08:00
set ( SDL_FRAMEWORK_COREHAPTICS 1 )
2016-10-02 03:54:48 +08:00
else ( )
2021-11-21 07:05:28 +08:00
file ( GLOB JOYSTICK_SOURCES ${ SDL2_SOURCE_DIR } /src/joystick/darwin/*.c )
set_source_files_properties ( ${ MFI_JOYSTICK_SOURCES } PROPERTIES COMPILE_FLAGS -fobjc-weak )
check_objc_source_compiles ( "
#include <AvailabilityMacros.h>
#include <TargetConditionals.h>
#import <Foundation/Foundation.h>
#import <GameController/GameController.h>
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1080
#error GameController framework doesn't work on this configuration
#endif
#if TARGET_CPU_X86
#error GameController framework doesn't work on this configuration
#endif
2022-03-14 00:10:52 +08:00
i n t main ( ) { r e t u r n 0 ; } " H A V E _ F R A M E W O R K _ G A M E C O N T R O L L E R )
2021-11-21 07:05:28 +08:00
check_objc_source_compiles ( "
#include <AvailabilityMacros.h>
#include <TargetConditionals.h>
#import <Foundation/Foundation.h>
#import <CoreHaptics/CoreHaptics.h>
2022-03-14 00:10:52 +08:00
i n t main ( ) { r e t u r n 0 ; } " H A V E _ F R A M E W O R K _ C O R E H A P T I C S )
2021-11-21 07:05:28 +08:00
if ( HAVE_FRAMEWORK_GAMECONTROLLER AND HAVE_FRAMEWORK_COREHAPTICS )
# Only enable MFI if we also have CoreHaptics to ensure rumble works
set ( SDL_JOYSTICK_MFI 1 )
set ( SDL_FRAMEWORK_GAMECONTROLLER 1 )
set ( SDL_FRAMEWORK_COREHAPTICS 1 )
endif ( )
CMake: iOS support added
When using a recent version of CMake (3.14+), this should make it possible to:
- build SDL for iOS, both static and dynamic
- build SDL test apps (as iOS .app bundles)
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
To use, set the following CMake variables when running CMake's configuration stage:
- CMAKE_SYSTEM_NAME=iOS
- CMAKE_OSX_SYSROOT=<SDK> (examples: iphoneos, iphonesimulator, iphoneos12.4, /full/path/to/iPhoneOS.sdk, etc.)
- CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures> (example: "arm64;armv7s")
Examples:
- for Simulator, using the latest, installed SDK:
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
- for Device, using the latest, installed SDK, 64-bit only
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64
- for Device, using the latest, installed SDK, mixed 32/64 bit
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"
- for Device, using a specific SDK revision (iOS 12.4, in this example):
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64
- for Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
cmake path/to/SDL -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
2019-08-27 23:07:43 +08:00
set ( SDL_JOYSTICK_IOKIT 1 )
set ( SDL_FRAMEWORK_IOKIT 1 )
set ( SDL_FRAMEWORK_FF 1 )
2016-10-02 03:54:48 +08:00
endif ( )
2021-11-21 07:05:28 +08:00
set ( SOURCE_FILES ${ SOURCE_FILES } ${ JOYSTICK_SOURCES } ${ MFI_JOYSTICK_SOURCES } )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_JOYSTICK TRUE )
endif ( )
if ( SDL_HAPTIC )
2019-08-28 00:30:20 +08:00
if ( IOS OR TVOS )
2017-06-13 07:35:34 +08:00
file ( GLOB HAPTIC_SOURCES ${ SDL2_SOURCE_DIR } /src/haptic/dummy/*.c )
2016-10-02 03:54:48 +08:00
set ( SDL_HAPTIC_DUMMY 1 )
else ( )
file ( GLOB HAPTIC_SOURCES ${ SDL2_SOURCE_DIR } /src/haptic/darwin/*.c )
CMake: iOS support added
When using a recent version of CMake (3.14+), this should make it possible to:
- build SDL for iOS, both static and dynamic
- build SDL test apps (as iOS .app bundles)
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
To use, set the following CMake variables when running CMake's configuration stage:
- CMAKE_SYSTEM_NAME=iOS
- CMAKE_OSX_SYSROOT=<SDK> (examples: iphoneos, iphonesimulator, iphoneos12.4, /full/path/to/iPhoneOS.sdk, etc.)
- CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures> (example: "arm64;armv7s")
Examples:
- for Simulator, using the latest, installed SDK:
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
- for Device, using the latest, installed SDK, 64-bit only
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64
- for Device, using the latest, installed SDK, mixed 32/64 bit
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"
- for Device, using a specific SDK revision (iOS 12.4, in this example):
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64
- for Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
cmake path/to/SDL -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
2019-08-27 23:07:43 +08:00
set ( SDL_HAPTIC_IOKIT 1 )
set ( SDL_FRAMEWORK_IOKIT 1 )
set ( SDL_FRAMEWORK_FF 1 )
2016-10-02 03:54:48 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
set ( SOURCE_FILES ${ SOURCE_FILES } ${ HAPTIC_SOURCES } )
set ( HAVE_SDL_HAPTIC TRUE )
endif ( )
if ( SDL_POWER )
2019-08-28 00:30:20 +08:00
if ( IOS OR TVOS )
2016-10-02 03:54:48 +08:00
file ( GLOB POWER_SOURCES ${ SDL2_SOURCE_DIR } /src/power/uikit/*.m )
CMake: iOS support added
When using a recent version of CMake (3.14+), this should make it possible to:
- build SDL for iOS, both static and dynamic
- build SDL test apps (as iOS .app bundles)
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
To use, set the following CMake variables when running CMake's configuration stage:
- CMAKE_SYSTEM_NAME=iOS
- CMAKE_OSX_SYSROOT=<SDK> (examples: iphoneos, iphonesimulator, iphoneos12.4, /full/path/to/iPhoneOS.sdk, etc.)
- CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures> (example: "arm64;armv7s")
Examples:
- for Simulator, using the latest, installed SDK:
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
- for Device, using the latest, installed SDK, 64-bit only
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64
- for Device, using the latest, installed SDK, mixed 32/64 bit
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"
- for Device, using a specific SDK revision (iOS 12.4, in this example):
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64
- for Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
cmake path/to/SDL -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
2019-08-27 23:07:43 +08:00
set ( SDL_POWER_UIKIT 1 )
2016-10-02 03:54:48 +08:00
else ( )
file ( GLOB POWER_SOURCES ${ SDL2_SOURCE_DIR } /src/power/macosx/*.c )
CMake: iOS support added
When using a recent version of CMake (3.14+), this should make it possible to:
- build SDL for iOS, both static and dynamic
- build SDL test apps (as iOS .app bundles)
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
To use, set the following CMake variables when running CMake's configuration stage:
- CMAKE_SYSTEM_NAME=iOS
- CMAKE_OSX_SYSROOT=<SDK> (examples: iphoneos, iphonesimulator, iphoneos12.4, /full/path/to/iPhoneOS.sdk, etc.)
- CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures> (example: "arm64;armv7s")
Examples:
- for Simulator, using the latest, installed SDK:
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
- for Device, using the latest, installed SDK, 64-bit only
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64
- for Device, using the latest, installed SDK, mixed 32/64 bit
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"
- for Device, using a specific SDK revision (iOS 12.4, in this example):
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64
- for Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
cmake path/to/SDL -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
2019-08-27 23:07:43 +08:00
set ( SDL_POWER_MACOSX 1 )
2019-09-24 06:24:03 +08:00
set ( SDL_FRAMEWORK_IOKIT 1 )
2016-10-02 03:54:48 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
set ( SOURCE_FILES ${ SOURCE_FILES } ${ POWER_SOURCES } )
set ( HAVE_SDL_POWER TRUE )
endif ( )
2020-05-04 14:27:29 +08:00
if ( SDL_LOCALE )
file ( GLOB LOCALE_SOURCES ${ SDL2_SOURCE_DIR } /src/locale/macosx/*.m )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ LOCALE_SOURCES } )
set ( HAVE_SDL_LOCALE TRUE )
endif ( )
2015-06-21 23:33:46 +08:00
if ( SDL_TIMERS )
set ( SDL_TIMER_UNIX 1 )
file ( GLOB TIMER_SOURCES ${ SDL2_SOURCE_DIR } /src/timer/unix/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ TIMER_SOURCES } )
set ( HAVE_SDL_TIMERS TRUE )
endif ( SDL_TIMERS )
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_COCOA 1 )
file ( GLOB FILESYSTEM_SOURCES ${ SDL2_SOURCE_DIR } /src/filesystem/cocoa/*.m )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ FILESYSTEM_SOURCES } )
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
CMake: iOS support added
When using a recent version of CMake (3.14+), this should make it possible to:
- build SDL for iOS, both static and dynamic
- build SDL test apps (as iOS .app bundles)
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
To use, set the following CMake variables when running CMake's configuration stage:
- CMAKE_SYSTEM_NAME=iOS
- CMAKE_OSX_SYSROOT=<SDK> (examples: iphoneos, iphonesimulator, iphoneos12.4, /full/path/to/iPhoneOS.sdk, etc.)
- CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures> (example: "arm64;armv7s")
Examples:
- for Simulator, using the latest, installed SDK:
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
- for Device, using the latest, installed SDK, 64-bit only
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64
- for Device, using the latest, installed SDK, mixed 32/64 bit
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"
- for Device, using a specific SDK revision (iOS 12.4, in this example):
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64
- for Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
cmake path/to/SDL -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
2019-08-27 23:07:43 +08:00
if ( SDL_SENSOR )
if ( IOS )
set ( SDL_SENSOR_COREMOTION 1 )
set ( HAVE_SDL_SENSORS TRUE )
file ( GLOB SENSOR_SOURCES ${ SDL2_SOURCE_DIR } /src/sensor/coremotion/*.m )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ SENSOR_SOURCES } )
endif ( )
endif ( )
2019-08-05 23:35:32 +08:00
# iOS hack needed - http://code.google.com/p/ios-cmake/ ?
if ( SDL_VIDEO )
2019-08-28 00:30:20 +08:00
if ( IOS OR TVOS )
2019-08-05 23:35:32 +08:00
set ( SDL_VIDEO_DRIVER_UIKIT 1 )
CMake: iOS support added
When using a recent version of CMake (3.14+), this should make it possible to:
- build SDL for iOS, both static and dynamic
- build SDL test apps (as iOS .app bundles)
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
To use, set the following CMake variables when running CMake's configuration stage:
- CMAKE_SYSTEM_NAME=iOS
- CMAKE_OSX_SYSROOT=<SDK> (examples: iphoneos, iphonesimulator, iphoneos12.4, /full/path/to/iPhoneOS.sdk, etc.)
- CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures> (example: "arm64;armv7s")
Examples:
- for Simulator, using the latest, installed SDK:
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
- for Device, using the latest, installed SDK, 64-bit only
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64
- for Device, using the latest, installed SDK, mixed 32/64 bit
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"
- for Device, using a specific SDK revision (iOS 12.4, in this example):
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64
- for Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
cmake path/to/SDL -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
2019-08-27 23:07:43 +08:00
set ( SDL_FRAMEWORK_COREGRAPHICS 1 )
set ( SDL_FRAMEWORK_QUARTZCORE 1 )
set ( SDL_FRAMEWORK_UIKIT 1 )
set ( SDL_IPHONE_KEYBOARD 1 )
set ( SDL_IPHONE_LAUNCHSCREEN 1 )
2019-08-05 23:35:32 +08:00
file ( GLOB UIKITVIDEO_SOURCES ${ SDL2_SOURCE_DIR } /src/video/uikit/*.m )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ UIKITVIDEO_SOURCES } )
2022-01-13 00:18:37 +08:00
set ( HAVE_SDL_VIDEO TRUE )
2019-08-05 23:35:32 +08:00
else ( )
CheckCOCOA ( )
2021-10-05 22:43:35 +08:00
if ( SDL_OPENGL )
2019-08-05 23:35:32 +08:00
set ( SDL_VIDEO_OPENGL 1 )
set ( SDL_VIDEO_OPENGL_CGL 1 )
set ( SDL_VIDEO_RENDER_OGL 1 )
2021-10-05 22:43:35 +08:00
set ( HAVE_OPENGL TRUE )
2019-08-05 23:35:32 +08:00
endif ( )
CMake: iOS support added
When using a recent version of CMake (3.14+), this should make it possible to:
- build SDL for iOS, both static and dynamic
- build SDL test apps (as iOS .app bundles)
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
To use, set the following CMake variables when running CMake's configuration stage:
- CMAKE_SYSTEM_NAME=iOS
- CMAKE_OSX_SYSROOT=<SDK> (examples: iphoneos, iphonesimulator, iphoneos12.4, /full/path/to/iPhoneOS.sdk, etc.)
- CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures> (example: "arm64;armv7s")
Examples:
- for Simulator, using the latest, installed SDK:
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
- for Device, using the latest, installed SDK, 64-bit only
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64
- for Device, using the latest, installed SDK, mixed 32/64 bit
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"
- for Device, using a specific SDK revision (iOS 12.4, in this example):
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64
- for Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
cmake path/to/SDL -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
2019-08-27 23:07:43 +08:00
endif ( )
2019-08-05 23:35:32 +08:00
2021-10-05 22:43:35 +08:00
if ( SDL_OPENGLES )
2019-08-28 00:30:20 +08:00
if ( IOS OR TVOS )
CMake: iOS support added
When using a recent version of CMake (3.14+), this should make it possible to:
- build SDL for iOS, both static and dynamic
- build SDL test apps (as iOS .app bundles)
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
To use, set the following CMake variables when running CMake's configuration stage:
- CMAKE_SYSTEM_NAME=iOS
- CMAKE_OSX_SYSROOT=<SDK> (examples: iphoneos, iphonesimulator, iphoneos12.4, /full/path/to/iPhoneOS.sdk, etc.)
- CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures> (example: "arm64;armv7s")
Examples:
- for Simulator, using the latest, installed SDK:
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
- for Device, using the latest, installed SDK, 64-bit only
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64
- for Device, using the latest, installed SDK, mixed 32/64 bit
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"
- for Device, using a specific SDK revision (iOS 12.4, in this example):
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64
- for Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
cmake path/to/SDL -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
2019-08-27 23:07:43 +08:00
set ( SDL_FRAMEWORK_OPENGLES 1 )
set ( SDL_VIDEO_OPENGL_ES 1 )
set ( SDL_VIDEO_RENDER_OGL_ES 1 )
else ( )
2019-08-05 23:35:32 +08:00
set ( SDL_VIDEO_OPENGL_EGL 1 )
endif ( )
CMake: iOS support added
When using a recent version of CMake (3.14+), this should make it possible to:
- build SDL for iOS, both static and dynamic
- build SDL test apps (as iOS .app bundles)
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
To use, set the following CMake variables when running CMake's configuration stage:
- CMAKE_SYSTEM_NAME=iOS
- CMAKE_OSX_SYSROOT=<SDK> (examples: iphoneos, iphonesimulator, iphoneos12.4, /full/path/to/iPhoneOS.sdk, etc.)
- CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures> (example: "arm64;armv7s")
Examples:
- for Simulator, using the latest, installed SDK:
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
- for Device, using the latest, installed SDK, 64-bit only
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64
- for Device, using the latest, installed SDK, mixed 32/64 bit
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"
- for Device, using a specific SDK revision (iOS 12.4, in this example):
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64
- for Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
cmake path/to/SDL -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
2019-08-27 23:07:43 +08:00
set ( SDL_VIDEO_OPENGL_ES2 1 )
set ( SDL_VIDEO_RENDER_OGL_ES2 1 )
2021-10-05 22:43:35 +08:00
set ( HAVE_OPENGLES TRUE )
2019-08-05 23:35:32 +08:00
endif ( )
CMake: iOS support added
When using a recent version of CMake (3.14+), this should make it possible to:
- build SDL for iOS, both static and dynamic
- build SDL test apps (as iOS .app bundles)
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
To use, set the following CMake variables when running CMake's configuration stage:
- CMAKE_SYSTEM_NAME=iOS
- CMAKE_OSX_SYSROOT=<SDK> (examples: iphoneos, iphonesimulator, iphoneos12.4, /full/path/to/iPhoneOS.sdk, etc.)
- CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures> (example: "arm64;armv7s")
Examples:
- for Simulator, using the latest, installed SDK:
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
- for Device, using the latest, installed SDK, 64-bit only
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64
- for Device, using the latest, installed SDK, mixed 32/64 bit
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"
- for Device, using a specific SDK revision (iOS 12.4, in this example):
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64
- for Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
cmake path/to/SDL -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
2019-08-27 23:07:43 +08:00
2021-10-05 22:43:35 +08:00
if ( SDL_VULKAN OR SDL_METAL OR SDL_RENDER_METAL )
2021-11-27 09:27:34 +08:00
check_objc_source_compiles ( "
2019-08-05 23:35:32 +08:00
#include <AvailabilityMacros.h>
#import <Metal/Metal.h>
#import <QuartzCore/CAMetalLayer.h>
2021-07-09 02:20:02 +08:00
#if (!TARGET_CPU_X86_64 && !TARGET_CPU_ARM64)
2019-08-05 23:35:32 +08:00
#error Metal doesn't work on this configuration
#endif
2022-03-14 00:10:52 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; } " H A V E _ F R A M E W O R K _ M E T A L )
2019-08-05 23:35:32 +08:00
if ( HAVE_FRAMEWORK_METAL )
set ( SDL_FRAMEWORK_METAL 1 )
set ( SDL_FRAMEWORK_QUARTZCORE 1 )
2022-01-10 22:39:42 +08:00
if ( SDL_VULKAN )
set ( SDL_VIDEO_VULKAN 1 )
set ( HAVE_VULKAN TRUE )
endif ( )
if ( SDL_METAL )
set ( SDL_VIDEO_METAL 1 )
set ( HAVE_METAL TRUE )
endif ( )
if ( SDL_RENDER_METAL )
file ( GLOB RENDER_METAL_SOURCES ${ SDL2_SOURCE_DIR } /src/render/metal/*.m )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ RENDER_METAL_SOURCES } )
set ( SDL_VIDEO_RENDER_METAL 1 )
set ( HAVE_RENDER_METAL TRUE )
endif ( )
2019-08-05 23:35:32 +08:00
endif ( )
endif ( )
endif ( )
2015-06-21 23:33:46 +08:00
# Actually load the frameworks at the end so we don't duplicate include.
if ( SDL_FRAMEWORK_COREVIDEO )
find_library ( COREVIDEO CoreVideo )
list ( APPEND EXTRA_LIBS ${ COREVIDEO } )
endif ( )
if ( SDL_FRAMEWORK_COCOA )
find_library ( COCOA_LIBRARY Cocoa )
list ( APPEND EXTRA_LIBS ${ COCOA_LIBRARY } )
endif ( )
if ( SDL_FRAMEWORK_IOKIT )
find_library ( IOKIT IOKit )
list ( APPEND EXTRA_LIBS ${ IOKIT } )
endif ( )
if ( SDL_FRAMEWORK_FF )
find_library ( FORCEFEEDBACK ForceFeedback )
list ( APPEND EXTRA_LIBS ${ FORCEFEEDBACK } )
endif ( )
if ( SDL_FRAMEWORK_CARBON )
find_library ( CARBON_LIBRARY Carbon )
list ( APPEND EXTRA_LIBS ${ CARBON_LIBRARY } )
endif ( )
2016-09-15 23:57:56 +08:00
if ( SDL_FRAMEWORK_COREAUDIO )
find_library ( COREAUDIO CoreAudio )
list ( APPEND EXTRA_LIBS ${ COREAUDIO } )
endif ( )
if ( SDL_FRAMEWORK_AUDIOTOOLBOX )
find_library ( AUDIOTOOLBOX AudioToolbox )
list ( APPEND EXTRA_LIBS ${ AUDIOTOOLBOX } )
2016-09-04 13:42:46 +08:00
endif ( )
CMake: iOS support added
When using a recent version of CMake (3.14+), this should make it possible to:
- build SDL for iOS, both static and dynamic
- build SDL test apps (as iOS .app bundles)
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
To use, set the following CMake variables when running CMake's configuration stage:
- CMAKE_SYSTEM_NAME=iOS
- CMAKE_OSX_SYSROOT=<SDK> (examples: iphoneos, iphonesimulator, iphoneos12.4, /full/path/to/iPhoneOS.sdk, etc.)
- CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures> (example: "arm64;armv7s")
Examples:
- for Simulator, using the latest, installed SDK:
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
- for Device, using the latest, installed SDK, 64-bit only
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64
- for Device, using the latest, installed SDK, mixed 32/64 bit
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"
- for Device, using a specific SDK revision (iOS 12.4, in this example):
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64
- for Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
cmake path/to/SDL -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
2019-08-27 23:07:43 +08:00
if ( SDL_FRAMEWORK_AVFOUNDATION )
find_library ( AVFOUNDATION AVFoundation )
list ( APPEND EXTRA_LIBS ${ AVFOUNDATION } )
endif ( )
if ( SDL_FRAMEWORK_COREBLUETOOTH )
find_library ( COREBLUETOOTH CoreBluetooth )
list ( APPEND EXTRA_LIBS ${ COREBLUETOOTH } )
endif ( )
if ( SDL_FRAMEWORK_COREGRAPHICS )
find_library ( COREGRAPHICS CoreGraphics )
list ( APPEND EXTRA_LIBS ${ COREGRAPHICS } )
endif ( )
if ( SDL_FRAMEWORK_COREMOTION )
find_library ( COREMOTION CoreMotion )
list ( APPEND EXTRA_LIBS ${ COREMOTION } )
endif ( )
if ( SDL_FRAMEWORK_FOUNDATION )
find_library ( FOUNDATION Foundation )
list ( APPEND EXTRA_LIBS ${ FOUNDATION } )
endif ( )
if ( SDL_FRAMEWORK_GAMECONTROLLER )
find_library ( GAMECONTROLLER GameController )
2021-11-25 04:34:45 +08:00
if ( GAMECONTROLLER )
list ( APPEND EXTRA_LDFLAGS "-Wl,-weak_framework,GameController" )
endif ( )
CMake: iOS support added
When using a recent version of CMake (3.14+), this should make it possible to:
- build SDL for iOS, both static and dynamic
- build SDL test apps (as iOS .app bundles)
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
To use, set the following CMake variables when running CMake's configuration stage:
- CMAKE_SYSTEM_NAME=iOS
- CMAKE_OSX_SYSROOT=<SDK> (examples: iphoneos, iphonesimulator, iphoneos12.4, /full/path/to/iPhoneOS.sdk, etc.)
- CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures> (example: "arm64;armv7s")
Examples:
- for Simulator, using the latest, installed SDK:
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
- for Device, using the latest, installed SDK, 64-bit only
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64
- for Device, using the latest, installed SDK, mixed 32/64 bit
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"
- for Device, using a specific SDK revision (iOS 12.4, in this example):
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64
- for Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
cmake path/to/SDL -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
2019-08-27 23:07:43 +08:00
endif ( )
2019-08-05 23:35:32 +08:00
if ( SDL_FRAMEWORK_METAL )
2019-08-28 00:30:20 +08:00
if ( IOS OR TVOS )
2019-08-05 23:35:32 +08:00
find_library ( METAL Metal )
list ( APPEND EXTRA_LIBS ${ METAL } )
2016-10-02 03:54:48 +08:00
else ( )
2019-08-05 23:35:32 +08:00
list ( APPEND EXTRA_LDFLAGS "-Wl,-weak_framework,Metal" )
endif ( )
endif ( )
CMake: iOS support added
When using a recent version of CMake (3.14+), this should make it possible to:
- build SDL for iOS, both static and dynamic
- build SDL test apps (as iOS .app bundles)
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
To use, set the following CMake variables when running CMake's configuration stage:
- CMAKE_SYSTEM_NAME=iOS
- CMAKE_OSX_SYSROOT=<SDK> (examples: iphoneos, iphonesimulator, iphoneos12.4, /full/path/to/iPhoneOS.sdk, etc.)
- CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures> (example: "arm64;armv7s")
Examples:
- for Simulator, using the latest, installed SDK:
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
- for Device, using the latest, installed SDK, 64-bit only
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64
- for Device, using the latest, installed SDK, mixed 32/64 bit
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"
- for Device, using a specific SDK revision (iOS 12.4, in this example):
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64
- for Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
cmake path/to/SDL -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
2019-08-27 23:07:43 +08:00
if ( SDL_FRAMEWORK_OPENGLES )
find_library ( OPENGLES OpenGLES )
list ( APPEND EXTRA_LIBS ${ OPENGLES } )
endif ( )
2019-08-05 23:35:32 +08:00
if ( SDL_FRAMEWORK_QUARTZCORE )
2019-08-28 00:30:20 +08:00
if ( IOS OR TVOS )
2019-08-05 23:35:32 +08:00
find_library ( QUARTZCORE QuartzCore )
list ( APPEND EXTRA_LIBS ${ QUARTZCORE } )
else ( )
list ( APPEND EXTRA_LDFLAGS "-Wl,-weak_framework,QuartzCore" )
2015-06-21 23:33:46 +08:00
endif ( )
endif ( )
CMake: iOS support added
When using a recent version of CMake (3.14+), this should make it possible to:
- build SDL for iOS, both static and dynamic
- build SDL test apps (as iOS .app bundles)
- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
To use, set the following CMake variables when running CMake's configuration stage:
- CMAKE_SYSTEM_NAME=iOS
- CMAKE_OSX_SYSROOT=<SDK> (examples: iphoneos, iphonesimulator, iphoneos12.4, /full/path/to/iPhoneOS.sdk, etc.)
- CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures> (example: "arm64;armv7s")
Examples:
- for Simulator, using the latest, installed SDK:
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
- for Device, using the latest, installed SDK, 64-bit only
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64
- for Device, using the latest, installed SDK, mixed 32/64 bit
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"
- for Device, using a specific SDK revision (iOS 12.4, in this example):
cmake path/to/SDL -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64
- for Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
cmake path/to/SDL -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64
2019-08-27 23:07:43 +08:00
if ( SDL_FRAMEWORK_UIKIT )
find_library ( UIKIT UIKit )
list ( APPEND EXTRA_LIBS ${ UIKIT } )
endif ( )
2021-04-11 18:29:01 +08:00
if ( SDL_FRAMEWORK_COREHAPTICS )
find_library ( COREHAPTICS CoreHaptics )
if ( COREHAPTICS )
list ( APPEND EXTRA_LDFLAGS "-Wl,-weak_framework,CoreHaptics" )
endif ( )
endif ( )
2015-06-21 23:33:46 +08:00
CheckPTHREAD ( )
2019-07-09 04:46:52 +08:00
2015-06-21 23:33:46 +08:00
elseif ( HAIKU )
2021-07-24 23:02:27 +08:00
if ( SDL_AUDIO )
set ( SDL_AUDIO_DRIVER_HAIKU 1 )
file ( GLOB HAIKU_AUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/haiku/*.cc )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ HAIKU_AUDIO_SOURCES } )
set ( HAVE_SDL_AUDIO TRUE )
endif ( )
if ( SDL_JOYSTICK )
set ( SDL_JOYSTICK_HAIKU 1 )
file ( GLOB HAIKU_JOYSTICK_SOURCES ${ SDL2_SOURCE_DIR } /src/joystick/haiku/*.cc )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ HAIKU_JOYSTICK_SOURCES } )
set ( HAVE_SDL_JOYSTICK TRUE )
endif ( )
2022-01-09 23:00:22 +08:00
if ( SDL_MISC )
file ( GLOB MISC_SOURCES ${ SDL2_SOURCE_DIR } /src/misc/haiku/*.cc )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ MISC_SOURCES } )
set ( HAVE_SDL_MISC TRUE )
endif ( )
2020-10-05 23:30:33 +08:00
2015-06-21 23:33:46 +08:00
if ( SDL_VIDEO )
set ( SDL_VIDEO_DRIVER_HAIKU 1 )
2021-07-24 23:02:27 +08:00
file ( GLOB HAIKUVIDEO_SOURCES ${ SDL2_SOURCE_DIR } /src/video/haiku/*.cc )
2015-06-21 23:33:46 +08:00
set ( SOURCE_FILES ${ SOURCE_FILES } ${ HAIKUVIDEO_SOURCES } )
set ( HAVE_SDL_VIDEO TRUE )
2021-10-05 22:43:35 +08:00
if ( SDL_OPENGL )
2015-06-21 23:33:46 +08:00
# TODO: Use FIND_PACKAGE(OpenGL) instead
set ( SDL_VIDEO_OPENGL 1 )
2021-07-24 23:02:27 +08:00
set ( SDL_VIDEO_OPENGL_HAIKU 1 )
2015-06-21 23:33:46 +08:00
set ( SDL_VIDEO_RENDER_OGL 1 )
list ( APPEND EXTRA_LIBS GL )
2021-10-05 22:43:35 +08:00
set ( HAVE_OPENGL TRUE )
2015-06-21 23:33:46 +08:00
endif ( )
endif ( )
2021-07-24 23:02:27 +08:00
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_HAIKU 1 )
file ( GLOB FILESYSTEM_SOURCES ${ SDL2_SOURCE_DIR } /src/filesystem/haiku/*.cc )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ FILESYSTEM_SOURCES } )
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
2020-04-24 14:06:53 +08:00
if ( SDL_TIMERS )
set ( SDL_TIMER_HAIKU 1 )
file ( GLOB TIMER_SOURCES ${ SDL2_SOURCE_DIR } /src/timer/haiku/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ TIMER_SOURCES } )
set ( HAVE_SDL_TIMERS TRUE )
endif ( )
2021-07-24 23:02:27 +08:00
if ( SDL_POWER )
set ( SDL_POWER_HAIKU 1 )
file ( GLOB HAIKU_POWER_SOURCES ${ SDL2_SOURCE_DIR } /src/power/haiku/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ HAIKU_POWER_SOURCES } )
set ( HAVE_SDL_POWER TRUE )
endif ( )
2020-05-04 14:27:29 +08:00
if ( SDL_LOCALE )
file ( GLOB LOCALE_SOURCES ${ SDL2_SOURCE_DIR } /src/locale/haiku/*.cc )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ LOCALE_SOURCES } )
set ( HAVE_SDL_LOCALE TRUE )
endif ( )
2021-07-24 23:02:27 +08:00
file ( GLOB MAIN_SOURCES ${ SDL2_SOURCE_DIR } /src/main/haiku/*.cc )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ MAIN_SOURCES } )
2015-06-21 23:33:46 +08:00
CheckPTHREAD ( )
2021-07-24 23:02:27 +08:00
list ( APPEND EXTRA_LIBS root be media game device textencoding )
2020-02-14 04:50:47 +08:00
elseif ( RISCOS )
2022-01-09 23:00:22 +08:00
if ( SDL_MISC )
file ( GLOB MISC_SOURCES ${ SDL2_SOURCE_DIR } /src/misc/riscos/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ MISC_SOURCES } )
set ( HAVE_SDL_MISC TRUE )
endif ( )
2020-10-12 00:32:32 +08:00
2020-02-14 05:55:08 +08:00
if ( SDL_VIDEO )
set ( SDL_VIDEO_DRIVER_RISCOS 1 )
file ( GLOB RISCOSVIDEO_SOURCES ${ SDL2_SOURCE_DIR } /src/video/riscos/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ RISCOSVIDEO_SOURCES } )
set ( HAVE_SDL_VIDEO TRUE )
endif ( )
2020-02-14 06:32:35 +08:00
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_RISCOS 1 )
file ( GLOB FILESYSTEM_SOURCES ${ SDL2_SOURCE_DIR } /src/filesystem/riscos/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ FILESYSTEM_SOURCES } )
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
2020-02-14 04:50:47 +08:00
if ( SDL_TIMERS )
set ( SDL_TIMER_UNIX 1 )
file ( GLOB TIMER_SOURCES ${ SDL2_SOURCE_DIR } /src/timer/unix/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ TIMER_SOURCES } )
set ( HAVE_SDL_TIMERS TRUE )
2021-10-05 22:43:35 +08:00
if ( SDL_CLOCK_GETTIME )
2020-02-14 04:50:47 +08:00
set ( HAVE_CLOCK_GETTIME 1 )
endif ( )
endif ( )
CheckPTHREAD ( )
if ( SDL_AUDIO )
CheckOSS ( )
endif ( )
2021-12-07 19:24:32 +08:00
2020-12-18 21:42:57 +08:00
elseif ( VITA )
# SDL_spinlock.c Needs to be compiled in ARM mode.
check_c_compiler_flag ( -marm HAVE_ARM_MODE )
if ( HAVE_ARM_MODE )
set_source_files_properties ( ${ SDL2_SOURCE_DIR } /src/atomic/SDL_spinlock.c PROPERTIES COMPILE_FLAGS -marm )
endif ( )
2022-01-09 23:00:22 +08:00
if ( SDL_MISC )
file ( GLOB MISC_SOURCES ${ SDL2_SOURCE_DIR } /src/misc/vita/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ MISC_SOURCES } )
set ( HAVE_SDL_MISC TRUE )
endif ( )
2021-01-29 15:26:13 +08:00
2020-12-18 21:42:57 +08:00
if ( SDL_AUDIO )
set ( SDL_AUDIO_DRIVER_VITA 1 )
file ( GLOB VITA_AUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/vita/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ VITA_AUDIO_SOURCES } )
set ( HAVE_SDL_AUDIO TRUE )
endif ( )
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_VITA 1 )
file ( GLOB VITA_FILESYSTEM_SOURCES ${ SDL2_SOURCE_DIR } /src/filesystem/vita/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ VITA_FILESYSTEM_SOURCES } )
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
if ( SDL_JOYSTICK )
set ( SDL_JOYSTICK_VITA 1 )
file ( GLOB VITA_JOYSTICK_SOURCES ${ SDL2_SOURCE_DIR } /src/joystick/vita/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ VITA_JOYSTICK_SOURCES } )
set ( HAVE_SDL_JOYSTICK TRUE )
endif ( )
if ( SDL_POWER )
set ( SDL_POWER_VITA 1 )
file ( GLOB VITA_POWER_SOURCES ${ SDL2_SOURCE_DIR } /src/power/vita/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ VITA_POWER_SOURCES } )
set ( HAVE_SDL_POWER TRUE )
endif ( )
if ( SDL_THREADS )
set ( SDL_THREAD_VITA 1 )
set ( SOURCE_FILES ${ SOURCE_FILES }
$ { S D L 2 _ S O U R C E _ D I R } / s r c / t h r e a d / v i t a / S D L _ s y s m u t e x . c
$ { S D L 2 _ S O U R C E _ D I R } / s r c / t h r e a d / v i t a / S D L _ s y s s e m . c
$ { S D L 2 _ S O U R C E _ D I R } / s r c / t h r e a d / v i t a / S D L _ s y s t h r e a d . c
$ { S D L 2 _ S O U R C E _ D I R } / s r c / t h r e a d / v i t a / S D L _ s y s c o n d . c
$ { S D L 2 _ S O U R C E _ D I R } / s r c / t h r e a d / g e n e r i c / S D L _ s y s t l s . c )
set ( HAVE_SDL_THREADS TRUE )
endif ( )
2022-03-30 05:12:42 +08:00
if ( SDL_LOCALE )
file ( GLOB LOCALE_SOURCES ${ SDL2_SOURCE_DIR } /src/locale/vita/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ LOCALE_SOURCES } )
set ( HAVE_SDL_LOCALE TRUE )
endif ( )
2020-12-18 21:42:57 +08:00
if ( SDL_TIMERS )
set ( SDL_TIMER_VITA 1 )
file ( GLOB TIMER_SOURCES ${ SDL2_SOURCE_DIR } /src/timer/vita/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ TIMER_SOURCES } )
set ( HAVE_SDL_TIMERS TRUE )
endif ( )
if ( SDL_SENSOR )
set ( SDL_SENSOR_VITA 1 )
set ( HAVE_SDL_SENSORS TRUE )
file ( GLOB VITA_SENSOR_SOURCES ${ SDL2_SOURCE_DIR } /src/sensor/vita/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ VITA_SENSOR_SOURCES } )
endif ( )
if ( SDL_VIDEO )
set ( SDL_VIDEO_DRIVER_VITA 1 )
file ( GLOB VITA_VIDEO_SOURCES ${ SDL2_SOURCE_DIR } /src/video/vita/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ VITA_VIDEO_SOURCES } )
set ( HAVE_SDL_VIDEO TRUE )
2021-06-10 18:20:39 +08:00
if ( VIDEO_VITA_PIB )
check_include_file ( pib.h HAVE_PIGS_IN_BLANKET_H )
2021-03-08 23:39:00 +08:00
2021-06-10 18:20:39 +08:00
if ( HAVE_PIGS_IN_BLANKET_H )
set ( SDL_VIDEO_OPENGL_ES2 1 )
list ( APPEND EXTRA_LIBS
p i b
)
2022-04-12 04:31:09 +08:00
set ( HAVE_VIDEO_VITA_PIB ON )
2021-06-10 18:20:39 +08:00
set ( SDL_VIDEO_VITA_PIB 1 )
else ( )
2022-04-12 04:31:09 +08:00
set ( HAVE_VIDEO_VITA_PIB OFF )
2021-06-10 18:20:39 +08:00
endif ( )
2020-12-18 21:42:57 +08:00
endif ( )
2021-06-10 18:20:39 +08:00
2021-08-17 00:08:12 +08:00
if ( VIDEO_VITA_PVR )
check_include_file ( gpu_es4/psp2_pvr_hint.h HAVE_PVR_H )
if ( HAVE_PVR_H )
2021-10-06 00:34:29 +08:00
target_compile_definitions ( sdl-build-options INTERFACE "-D__psp2__" )
2022-03-30 08:08:56 +08:00
check_include_file ( gl4esinit.h HAVE_GL4ES_H )
2021-08-17 00:08:12 +08:00
set ( SDL_VIDEO_OPENGL_EGL 1 )
2021-10-05 22:43:35 +08:00
set ( HAVE_OPENGLES TRUE )
2021-08-17 00:08:12 +08:00
set ( SDL_VIDEO_OPENGL_ES 1 )
set ( SDL_VIDEO_RENDER_OGL_ES 1 )
set ( SDL_VIDEO_OPENGL_ES2 1 )
set ( SDL_VIDEO_RENDER_OGL_ES2 1 )
list ( APPEND EXTRA_LIBS
l i b g p u _ e s 4 _ e x t _ s t u b _ w e a k
l i b I M G E G L _ s t u b _ w e a k
)
2022-03-30 08:08:56 +08:00
2022-04-12 04:31:09 +08:00
set ( HAVE_VIDEO_VITA_PVR ON )
2021-08-17 00:08:12 +08:00
set ( SDL_VIDEO_VITA_PVR 1 )
2022-03-30 08:08:56 +08:00
if ( HAVE_GL4ES_H )
set ( HAVE_OPENGL TRUE )
set ( SDL_VIDEO_OPENGL 1 )
set ( SDL_VIDEO_RENDER_OGL 1 )
list ( APPEND EXTRA_LIBS libGL_stub )
set ( SDL_VIDEO_VITA_PVR_OGL 1 )
endif ( )
2021-08-17 00:08:12 +08:00
else ( )
2022-04-12 04:31:09 +08:00
set ( HAVE_VIDEO_VITA_PVR OFF )
2021-08-17 00:08:12 +08:00
endif ( )
endif ( )
2021-03-08 23:39:00 +08:00
set ( SDL_VIDEO_RENDER_VITA_GXM 1 )
list ( APPEND EXTRA_LIBS
S c e G x m _ s t u b
S c e D i s p l a y _ s t u b
S c e C t r l _ s t u b
S c e A p p M g r _ s t u b
S c e A u d i o _ s t u b
2022-03-30 04:48:08 +08:00
S c e A u d i o I n _ s t u b
2021-03-08 23:39:00 +08:00
S c e S y s m o d u l e _ s t u b
S c e D i s p l a y _ s t u b
S c e C t r l _ s t u b
S c e I o f i l e m g r _ s t u b
S c e C o m m o n D i a l o g _ s t u b
S c e T o u c h _ s t u b
S c e H i d _ s t u b
S c e M o t i o n _ s t u b
2021-06-21 20:03:31 +08:00
S c e P o w e r _ s t u b
2021-09-16 17:48:39 +08:00
S c e P r o c e s s m g r _ s t u b
2021-03-08 23:39:00 +08:00
m
)
2021-10-05 22:43:35 +08:00
if ( HAVE_VITA_PIB )
2021-06-15 02:27:09 +08:00
list ( PREPEND EXTRA_LIBS
p i b
l i b S c e P i g l e t _ s t u b
S c e S h a c c C g _ s t u b
t a i h e n _ s t u b
)
endif ( )
2021-12-15 06:20:51 +08:00
if ( HAVE_VITA_PVR )
list ( PREPEND EXTRA_LIBS
S c e I m e _ s t u b
)
endif ( )
2020-12-18 21:42:57 +08:00
endif ( )
2021-12-15 06:20:51 +08:00
# set(HAVE_ARMSIMD TRUE)
# set(SDL_ARM_SIMD_BLITTERS 1)
# file(GLOB ARMSIMD_SOURCES ${SDL2_SOURCE_DIR}/src/video/arm/pixman-arm-simd*.S)
# set(SOURCE_FILES ${SOURCE_FILES} ${ARMSIMD_SOURCES})
2020-12-18 21:42:57 +08:00
2021-12-15 06:20:51 +08:00
# set(HAVE_ARMNEON TRUE)
# set(SDL_ARM_NEON_BLITTERS 1)
# file(GLOB ARMNEON_SOURCES ${SDL2_SOURCE_DIR}/src/video/arm/pixman-arm-neon*.S)
# set(SOURCE_FILES ${SOURCE_FILES} ${ARMNEON_SOURCES})
2020-12-18 21:42:57 +08:00
2021-12-15 06:20:51 +08:00
# set_property(SOURCE ${SDL2_SOURCE_DIR}/src/video/arm/pixman-arm-simd-asm.S PROPERTY LANGUAGE C)
# set_property(SOURCE ${SDL2_SOURCE_DIR}/src/video/arm/pixman-arm-neon-asm.S PROPERTY LANGUAGE C)
2020-12-18 21:42:57 +08:00
2021-10-06 00:34:29 +08:00
target_compile_definitions ( sdl-build-options INTERFACE "-D__VITA__" )
target_compile_definitions ( sdl-build-options INTERFACE "-Dmemcpy=sceClibMemcpy" )
target_compile_definitions ( sdl-build-options INTERFACE "-Dmemset=sceClibMemset" )
target_compile_definitions ( sdl-build-options INTERFACE "-Dmemmove=sceClibMemmove" )
target_compile_definitions ( sdl-build-options INTERFACE "-Dmemcmp=sceClibMemcmp" )
2020-12-18 21:42:57 +08:00
2021-01-21 04:33:05 +08:00
# CheckPTHREAD()
2020-12-18 21:42:57 +08:00
2021-11-30 01:42:13 +08:00
elseif ( PSP )
file ( GLOB PSP_MAIN_SOURCES ${ SDL2_SOURCE_DIR } /src/main/psp/*.c )
set ( SDLMAIN_SOURCES ${ SDLMAIN_SOURCES } ${ PSP_MAIN_SOURCES } )
if ( SDL_AUDIO )
set ( SDL_AUDIO_DRIVER_PSP 1 )
file ( GLOB PSP_AUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/psp/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ PSP_AUDIO_SOURCES } )
set ( HAVE_SDL_AUDIO TRUE )
endif ( )
2022-01-01 23:08:00 +08:00
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_PSP 1 )
file ( GLOB PSP_FILESYSTEM_SOURCES ${ SDL2_SOURCE_DIR } /src/filesystem/psp/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ PSP_FILESYSTEM_SOURCES } )
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
2021-11-30 01:42:13 +08:00
if ( SDL_JOYSTICK )
set ( SDL_JOYSTICK_PSP 1 )
file ( GLOB PSP_JOYSTICK_SOURCES ${ SDL2_SOURCE_DIR } /src/joystick/psp/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ PSP_JOYSTICK_SOURCES } )
set ( HAVE_SDL_JOYSTICK TRUE )
endif ( )
if ( SDL_POWER )
set ( SDL_POWER_PSP 1 )
file ( GLOB PSP_POWER_SOURCES ${ SDL2_SOURCE_DIR } /src/power/psp/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ PSP_POWER_SOURCES } )
set ( HAVE_SDL_POWER TRUE )
endif ( )
if ( SDL_THREADS )
set ( SDL_THREAD_PSP 1 )
file ( GLOB PSP_THREAD_SOURCES ${ SDL2_SOURCE_DIR } /src/thread/generic/SDL_systls.c ${ SDL2_SOURCE_DIR } /src/thread/psp/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ PSP_THREAD_SOURCES } )
set ( HAVE_SDL_THREADS TRUE )
endif ( )
if ( SDL_TIMERS )
set ( SDL_TIMER_PSP 1 )
file ( GLOB PSP_TIMER_SOURCES ${ SDL2_SOURCE_DIR } /src/timer/psp/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ PSP_TIMER_SOURCES } )
set ( HAVE_SDL_TIMERS TRUE )
endif ( )
if ( SDL_VIDEO )
set ( SDL_VIDEO_DRIVER_PSP 1 )
2021-12-07 17:24:46 +08:00
set ( SDL_VIDEO_RENDER_PSP 1 )
2021-11-30 01:42:13 +08:00
file ( GLOB PSP_VIDEO_SOURCES ${ SDL2_SOURCE_DIR } /src/video/psp/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ PSP_VIDEO_SOURCES } )
set ( SDL_VIDEO_OPENGL 1 )
2021-12-07 17:24:46 +08:00
set ( HAVE_SDL_VIDEO TRUE )
2021-11-30 01:42:13 +08:00
endif ( )
list ( APPEND EXTRA_LIBS
2022-01-04 01:41:02 +08:00
p s p p o w e r
2021-11-30 01:42:13 +08:00
p s p c t r l
p s p h p r m
p s p g e
p s p g u
p s p d i s p l a y
p s p v f p u
p s p a u d i o
p s p v r a m
G L
)
2022-01-11 16:33:02 +08:00
elseif ( OS2 )
list ( APPEND EXTRA_CFLAGS "-DOS2EMX_PLAIN_CHAR" )
file ( GLOB CORE_SOURCES ${ SDL2_SOURCE_DIR } /src/core/os2/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ CORE_SOURCES } )
if ( NOT ( HAVE_ICONV AND HAVE_ICONV_H ) )
file ( GLOB CORE_SOURCES ${ SDL2_SOURCE_DIR } /src/core/os2/geniconv/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ CORE_SOURCES } )
endif ( )
if ( SDL_THREADS )
set ( SDL_THREAD_OS2 1 )
file ( GLOB OS2_THREAD_SOURCES ${ SDL2_SOURCE_DIR } /src/thread/os2/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ OS2_THREAD_SOURCES } )
set ( HAVE_SDL_THREADS TRUE )
endif ( )
if ( SDL_TIMERS )
set ( SDL_TIMER_UNIX 1 )
file ( GLOB OS2_TIMER_SOURCES ${ SDL2_SOURCE_DIR } /src/timer/os2/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ OS2_TIMER_SOURCES } )
set ( HAVE_SDL_TIMERS TRUE )
endif ( )
if ( SDL_LOADSO )
set ( SDL_LOADSO_OS2 1 )
file ( GLOB OS2_LOADSO_SOURCES ${ SDL2_SOURCE_DIR } /src/loadso/os2/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ OS2_LOADSO_SOURCES } )
set ( HAVE_SDL_LOADSO TRUE )
endif ( )
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_OS2 1 )
file ( GLOB FILESYSTEM_SOURCES ${ SDL2_SOURCE_DIR } /src/filesystem/os2/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ FILESYSTEM_SOURCES } )
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
if ( SDL_LOCALE )
file ( GLOB LOCALE_SOURCES ${ SDL2_SOURCE_DIR } /src/locale/unix/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ LOCALE_SOURCES } )
set ( HAVE_SDL_LOCALE TRUE )
endif ( )
if ( SDL_VIDEO )
set ( SDL_VIDEO_DRIVER_OS2 1 )
file ( GLOB OS2_VIDEO_SOURCES ${ SDL2_SOURCE_DIR } /src/video/os2/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ OS2_VIDEO_SOURCES } )
set ( HAVE_SDL_VIDEO TRUE )
endif ( )
if ( SDL_AUDIO )
set ( SDL_AUDIO_DRIVER_OS2 1 )
file ( GLOB OS2_AUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/os2/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ OS2_AUDIO_SOURCES } )
set ( HAVE_SDL_AUDIO TRUE )
list ( APPEND EXTRA_LIBS mmpm2 )
endif ( )
if ( SDL_JOYSTICK )
set ( SDL_JOYSTICK_OS2 1 )
file ( GLOB OS2_JOYSTICK_SOURCES ${ SDL2_SOURCE_DIR } /src/joystick/os2/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ OS2_JOYSTICK_SOURCES } )
set ( HAVE_SDL_JOYSTICK TRUE )
endif ( )
if ( SDL_HIDAPI )
CheckHIDAPI ( )
endif ( )
2015-06-21 23:33:46 +08:00
endif ( )
2022-01-10 22:39:42 +08:00
if ( HAVE_VULKAN AND NOT SDL_LOADSO )
2021-08-24 11:58:54 +08:00
message ( STATUS "Vulkan support is available, but disabled because there's no loadso." )
2022-01-10 22:39:42 +08:00
set ( HAVE_VULKAN FALSE )
set ( SDL_VIDEO_VULKAN 0 )
2017-08-28 10:15:57 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
# Dummies
2019-03-25 20:01:32 +08:00
# configure.ac does it differently:
2015-06-21 23:33:46 +08:00
# if not have X
# if enable_X { SDL_X_DISABLED = 1 }
# [add dummy sources]
# so it always adds a dummy, without checking, if it was actually requested.
# This leads to missing internal references on building, since the
# src/X/*.c does not get included.
2022-01-13 00:21:06 +08:00
if ( NOT HAVE_SDL_AUDIO )
set ( SDL_AUDIO_DRIVER_DUMMY 1 )
file ( GLOB AUDIO_SOURCES ${ SDL2_SOURCE_DIR } /src/audio/dummy/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ AUDIO_SOURCES } )
endif ( )
if ( NOT HAVE_SDL_VIDEO )
set ( SDL_VIDEO_DRIVER_DUMMY 1 )
file ( GLOB VIDEO_SOURCES ${ SDL2_SOURCE_DIR } /src/video/dummy/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ VIDEO_SOURCES } )
endif ( )
2015-06-21 23:33:46 +08:00
if ( NOT HAVE_SDL_JOYSTICK )
2018-09-29 12:19:27 +08:00
set ( SDL_JOYSTICK_DUMMY 1 )
2022-02-23 23:10:02 +08:00
file ( GLOB JOYSTICK_SOURCES ${ SDL2_SOURCE_DIR } /src/joystick/dummy/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ JOYSTICK_SOURCES } )
2015-06-21 23:33:46 +08:00
endif ( )
if ( NOT HAVE_SDL_HAPTIC )
2018-09-29 12:19:27 +08:00
set ( SDL_HAPTIC_DUMMY 1 )
2015-06-21 23:33:46 +08:00
file ( GLOB HAPTIC_SOURCES ${ SDL2_SOURCE_DIR } /src/haptic/dummy/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ HAPTIC_SOURCES } )
endif ( )
2018-09-29 12:19:27 +08:00
if ( NOT HAVE_SDL_SENSORS )
set ( SDL_SENSOR_DUMMY 1 )
file ( GLOB SENSORS_SOURCES ${ SDL2_SOURCE_DIR } /src/sensor/dummy/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ SENSORS_SOURCES } )
endif ( )
2015-06-21 23:33:46 +08:00
if ( NOT HAVE_SDL_LOADSO )
2022-01-11 17:45:41 +08:00
set ( SDL_LOADSO_DUMMY 1 )
2015-06-21 23:33:46 +08:00
file ( GLOB LOADSO_SOURCES ${ SDL2_SOURCE_DIR } /src/loadso/dummy/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ LOADSO_SOURCES } )
endif ( )
if ( NOT HAVE_SDL_FILESYSTEM )
2022-01-11 00:00:32 +08:00
set ( SDL_FILESYSTEM_DUMMY 1 )
2015-06-21 23:33:46 +08:00
file ( GLOB FILESYSTEM_SOURCES ${ SDL2_SOURCE_DIR } /src/filesystem/dummy/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ FILESYSTEM_SOURCES } )
endif ( )
2020-05-04 14:27:29 +08:00
if ( NOT HAVE_SDL_LOCALE )
2022-01-11 00:00:32 +08:00
set ( SDL_LOCALE_DUMMY 1 )
2020-05-04 14:27:29 +08:00
file ( GLOB LOCALE_SOURCES ${ SDL2_SOURCE_DIR } /src/locale/dummy/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ LOCALE_SOURCES } )
endif ( )
2020-10-05 23:30:33 +08:00
if ( NOT HAVE_SDL_MISC )
2022-01-11 00:00:32 +08:00
set ( SDL_MISC_DUMMY 1 )
file ( GLOB MISC_SOURCES ${ SDL2_SOURCE_DIR } /src/misc/dummy/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ MISC_SOURCES } )
2020-10-05 23:30:33 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
# We always need to have threads and timers around
if ( NOT HAVE_SDL_THREADS )
set ( SDL_THREADS_DISABLED 1 )
file ( GLOB THREADS_SOURCES ${ SDL2_SOURCE_DIR } /src/thread/generic/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ THREADS_SOURCES } )
endif ( )
if ( NOT HAVE_SDL_TIMERS )
2022-01-11 17:45:41 +08:00
set ( SDL_TIMER_DUMMY 1 )
2015-06-21 23:33:46 +08:00
file ( GLOB TIMER_SOURCES ${ SDL2_SOURCE_DIR } /src/timer/dummy/*.c )
set ( SOURCE_FILES ${ SOURCE_FILES } ${ TIMER_SOURCES } )
endif ( )
if ( NOT SDLMAIN_SOURCES )
file ( GLOB SDLMAIN_SOURCES ${ SDL2_SOURCE_DIR } /src/main/dummy/*.c )
endif ( )
# Append the -MMD -MT flags
# if(DEPENDENCY_TRACKING)
# if(COMPILER_IS_GNUCC)
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -MMD -MT \$@")
# endif()
# endif()
configure_file ( "${SDL2_SOURCE_DIR}/include/SDL_config.h.cmake"
" $ { S D L 2 _ B I N A R Y _ D I R } / i n c l u d e / S D L _ c o n f i g . h " )
# Prepare the flags and remove duplicates
if ( EXTRA_LDFLAGS )
list ( REMOVE_DUPLICATES EXTRA_LDFLAGS )
endif ( )
if ( EXTRA_LIBS )
list ( REMOVE_DUPLICATES EXTRA_LIBS )
endif ( )
if ( EXTRA_CFLAGS )
list ( REMOVE_DUPLICATES EXTRA_CFLAGS )
endif ( )
listtostr ( EXTRA_CFLAGS _EXTRA_CFLAGS )
set ( EXTRA_CFLAGS ${ _EXTRA_CFLAGS } )
# Compat helpers for the configuration files
2021-09-10 00:59:47 +08:00
find_package ( Git )
if ( Git_FOUND )
execute_process ( COMMAND
" $ { G I T _ E X E C U T A B L E } " r e m o t e g e t - u r l o r i g i n
W O R K I N G _ D I R E C T O R Y " $ { C M A K E _ S O U R C E _ D I R } "
R E S U L T _ V A R I A B L E G I T _ U R L _ S T A T U S
O U T P U T _ V A R I A B L E G I T _ U R L
E R R O R _ Q U I E T O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
execute_process ( COMMAND
" $ { G I T _ E X E C U T A B L E } " r e v - l i s t - - m a x - c o u n t = 1 H E A D ~ . .
W O R K I N G _ D I R E C T O R Y " $ { C M A K E _ S O U R C E _ D I R } "
R E S U L T _ V A R I A B L E G I T _ R E V I S I O N _ S T A T U S
O U T P U T _ V A R I A B L E G I T _ R E V I S I O N
E R R O R _ Q U I E T O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
if ( GIT_URL_STATUS EQUAL 0 OR GIT_REVISION_STATUS EQUAL 0 )
set ( SDL_REVISION "${GIT_URL}@${GIT_REVISION}" )
else ( )
set ( SDL_REVISION "" )
endif ( )
else ( )
set ( SDL_REVISION "" )
2020-10-13 19:45:10 +08:00
endif ( )
2021-09-10 00:59:47 +08:00
configure_file ( "${SDL2_SOURCE_DIR}/include/SDL_revision.h.cmake"
" $ { S D L 2 _ B I N A R Y _ D I R } / i n c l u d e / S D L _ r e v i s i o n . h " )
2021-07-08 07:18:01 +08:00
if ( NOT WINDOWS OR CYGWIN OR MINGW )
2020-12-18 21:42:57 +08:00
2021-02-14 16:52:43 +08:00
set ( prefix ${ CMAKE_INSTALL_PREFIX } )
2020-12-18 21:42:57 +08:00
2015-06-21 23:33:46 +08:00
set ( exec_prefix "\${prefix}" )
2022-05-22 05:33:31 +08:00
set ( libdir "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}" )
set ( bindir "\${exec_prefix}/${CMAKE_INSTALL_BINDIR}" )
set ( includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}" )
2015-06-21 23:33:46 +08:00
if ( SDL_STATIC )
set ( ENABLE_STATIC_TRUE "" )
set ( ENABLE_STATIC_FALSE "#" )
else ( )
set ( ENABLE_STATIC_TRUE "#" )
set ( ENABLE_STATIC_FALSE "" )
endif ( )
if ( SDL_SHARED )
2021-04-15 02:40:50 +08:00
set ( PKGCONFIG_LIBS_PRIV "
2020-04-12 06:38:34 +08:00
L i b s . p r i v a t e : " )
2015-06-21 23:33:46 +08:00
set ( ENABLE_SHARED_TRUE "" )
set ( ENABLE_SHARED_FALSE "#" )
else ( )
2021-04-15 02:40:50 +08:00
set ( PKGCONFIG_LIBS_PRIV "" )
2015-06-21 23:33:46 +08:00
set ( ENABLE_SHARED_TRUE "#" )
set ( ENABLE_SHARED_FALSE "" )
endif ( )
# Clean up the different lists
2020-12-18 21:42:57 +08:00
if ( VITA )
listtostrrev ( EXTRA_LIBS _EXTRA_LIBS "-l" )
set ( SDL_STATIC_LIBS ${ SDL_LIBS } ${ EXTRA_LDFLAGS } ${ _EXTRA_LIBS } )
list ( REMOVE_DUPLICATES SDL_STATIC_LIBS )
listtostrrev ( SDL_STATIC_LIBS _SDL_STATIC_LIBS )
set ( SDL_STATIC_LIBS ${ _SDL_STATIC_LIBS } )
listtostrrev ( SDL_LIBS _SDL_LIBS )
set ( SDL_LIBS ${ _SDL_LIBS } )
else ( )
listtostr ( EXTRA_LIBS _EXTRA_LIBS "-l" )
set ( SDL_STATIC_LIBS ${ SDL_LIBS } ${ EXTRA_LDFLAGS } ${ _EXTRA_LIBS } )
list ( REMOVE_DUPLICATES SDL_STATIC_LIBS )
listtostr ( SDL_STATIC_LIBS _SDL_STATIC_LIBS )
set ( SDL_STATIC_LIBS ${ _SDL_STATIC_LIBS } )
listtostr ( SDL_LIBS _SDL_LIBS )
set ( SDL_LIBS ${ _SDL_LIBS } )
endif ( )
2015-06-21 23:33:46 +08:00
# MESSAGE(STATUS "SDL_LIBS: ${SDL_LIBS}")
# MESSAGE(STATUS "SDL_STATIC_LIBS: ${SDL_STATIC_LIBS}")
configure_file ( "${SDL2_SOURCE_DIR}/sdl2.pc.in"
" $ { S D L 2 _ B I N A R Y _ D I R } / s d l 2 . p c " @ O N L Y )
configure_file ( "${SDL2_SOURCE_DIR}/sdl2-config.in"
" $ { S D L 2 _ B I N A R Y _ D I R } / s d l 2 - c o n f i g " )
configure_file ( "${SDL2_SOURCE_DIR}/sdl2-config.in"
" $ { S D L 2 _ B I N A R Y _ D I R } / s d l 2 - c o n f i g " @ O N L Y )
configure_file ( "${SDL2_SOURCE_DIR}/SDL2.spec.in"
" $ { S D L 2 _ B I N A R Y _ D I R } / S D L 2 . s p e c " @ O N L Y )
endif ( )
2021-04-12 06:05:58 +08:00
macro ( check_add_debug_flag FLAG SUFFIX )
check_c_compiler_flag ( ${ FLAG } HAS_C_FLAG_ ${ SUFFIX } )
if ( HAS_C_FLAG_ ${ SUFFIX } )
set ( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${FLAG}" )
endif ( )
check_cxx_compiler_flag ( ${ FLAG } HAS_CXX_ ${ SUFFIX } )
if ( HAS_CXX_ ${ SUFFIX } )
set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${FLAG}" )
endif ( )
endmacro ( )
macro ( asan_check_add_debug_flag ASAN_FLAG )
check_add_debug_flag ( "-fsanitize=${ASAN_FLAG}" "${ASAN_FLAG}" )
2021-04-12 06:10:28 +08:00
if ( HAS_C_ ${ ASAN_FLAG } OR HAS_CXX_ ${ ASAN_FLAG } )
set ( HAVE_ASAN ON )
endif ( )
2021-04-12 06:05:58 +08:00
endmacro ( )
macro ( asan_check_add_debug_flag2 ASAN_FLAG )
# for some sanitize flags we have to manipulate the CMAKE_REQUIRED_LIBRARIES:
# http://cmake.3232098.n2.nabble.com/CHECK-CXX-COMPILER-FLAG-doesn-t-give-correct-result-for-fsanitize-address-tp7600216p7600217.html
set ( FLAG "-fsanitize=${ASAN_FLAG}" )
set ( STORED_REQLIBS ${ CMAKE_REQUIRED_LIBRARIES } )
set ( CMAKE_REQUIRED_LIBRARIES "${FLAG};asan" )
check_c_compiler_flag ( ${ FLAG } HAS_C_FLAG_ ${ ASAN_FLAG } )
check_cxx_compiler_flag ( ${ FLAG } HAS_CXX_FLAG_ ${ ASAN_FLAG } )
set ( CMAKE_REQUIRED_LIBRARIES ${ STORED_REQLIBS } )
if ( HAS_C_FLAG_ ${ ASAN_FLAG } )
set ( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${FLAG}" )
endif ( )
if ( HAS_CXX_ ${ ASAN_FLAG } )
set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${FLAG}" )
endif ( )
2021-04-12 06:10:28 +08:00
if ( HAS_C_ ${ ASAN_FLAG } OR HAS_CXX_ ${ ASAN_FLAG } )
set ( HAVE_ASAN ON )
endif ( )
2021-04-12 06:05:58 +08:00
endmacro ( )
# enable AddressSanitizer if supported
2021-10-05 22:43:35 +08:00
if ( SDL_ASAN )
2021-04-12 06:05:58 +08:00
asan_check_add_debug_flag2 ( "address" )
asan_check_add_debug_flag ( "bool" )
asan_check_add_debug_flag ( "bounds" )
asan_check_add_debug_flag ( "enum" )
asan_check_add_debug_flag ( "float-cast-overflow" )
asan_check_add_debug_flag ( "float-divide-by-zero" )
asan_check_add_debug_flag ( "nonnull-attribute" )
asan_check_add_debug_flag ( "returns-nonnull-attribute" )
asan_check_add_debug_flag ( "signed-integer-overflow" )
asan_check_add_debug_flag ( "undefined" )
asan_check_add_debug_flag ( "vla-bound" )
asan_check_add_debug_flag ( "leak" )
# The object size sanitizer has no effect on unoptimized builds on Clang,
# but causes warnings.
2021-12-18 11:14:34 +08:00
if ( ( NOT USE_CLANG ) OR ( "${CMAKE_BUILD_TYPE}" STREQUAL "" ) )
2021-04-12 06:05:58 +08:00
asan_check_add_debug_flag ( "object-size" )
endif ( )
endif ( )
2015-06-21 23:33:46 +08:00
##### Info output #####
message ( STATUS "" )
message ( STATUS "SDL2 was configured with the following options:" )
message ( STATUS "" )
message ( STATUS "Platform: ${CMAKE_SYSTEM}" )
message ( STATUS "64-bit: ${ARCH_64}" )
message ( STATUS "Compiler: ${CMAKE_C_COMPILER}" )
2021-09-10 00:59:47 +08:00
message ( STATUS "Revision: ${SDL_REVISION}" )
2015-06-21 23:33:46 +08:00
message ( STATUS "" )
message ( STATUS "Subsystems:" )
foreach ( _SUB ${ SDL_SUBSYSTEMS } )
string ( TOUPPER ${ _SUB } _OPT )
message_bool_option ( ${ _SUB } SDL_ ${ _OPT } )
endforeach ( )
message ( STATUS "" )
message ( STATUS "Options:" )
list ( SORT ALLOPTIONS )
foreach ( _OPT ${ ALLOPTIONS } )
# Get the padding
string ( LENGTH ${ _OPT } _OPTLEN )
2021-10-05 22:54:06 +08:00
math ( EXPR _PADLEN "(${LONGESTOPTIONNAME} + 1) - ${_OPTLEN}" )
2015-06-21 23:33:46 +08:00
string ( RANDOM LENGTH ${ _PADLEN } ALPHABET " " _PADDING )
message_tested_option ( ${ _OPT } ${ _PADDING } )
endforeach ( )
2021-12-18 11:14:34 +08:00
if ( "${CMAKE_BUILD_TYPE}" STREQUAL "Debug" )
2021-04-12 06:08:14 +08:00
message ( STATUS "" )
message ( STATUS " CMAKE_C_FLAGS_DEBUG: ${CMAKE_C_FLAGS_DEBUG}" )
message ( STATUS " CMAKE_CXX_FLAGS_DEBUG: ${CMAKE_CXX_FLAGS_DEBUG}" )
endif ( )
2015-06-21 23:33:46 +08:00
message ( STATUS "" )
message ( STATUS " CFLAGS: ${CMAKE_C_FLAGS}" )
message ( STATUS " EXTRA_CFLAGS: ${EXTRA_CFLAGS}" )
2022-06-04 02:12:52 +08:00
message ( STATUS " EXTRA_LDFLAGS: ${EXTRA_LDFLAGS} ${EXTRA_LDFLAGS_BUILD}" )
2015-06-21 23:33:46 +08:00
message ( STATUS " EXTRA_LIBS: ${EXTRA_LIBS}" )
message ( STATUS "" )
message ( STATUS " Build Shared Library: ${SDL_SHARED}" )
message ( STATUS " Build Static Library: ${SDL_STATIC}" )
2016-01-05 14:26:32 +08:00
if ( SDL_STATIC )
message ( STATUS " Build Static Library with Position Independent Code: ${SDL_STATIC_PIC}" )
endif ( )
2015-06-21 23:33:46 +08:00
message ( STATUS "" )
if ( UNIX )
message ( STATUS "If something was not detected, although the libraries" )
message ( STATUS "were installed, then make sure you have set the" )
message ( STATUS "CFLAGS and LDFLAGS environment variables correctly." )
message ( STATUS "" )
endif ( )
2019-10-25 11:17:19 +08:00
if ( WARN_ABOUT_ARM_SIMD_ASM_MIT )
message ( STATUS "" )
message ( STATUS "SDL is being built with ARM SIMD optimizations, which" )
message ( STATUS "uses code licensed under the MIT license. If this is a" )
message ( STATUS "problem, please disable that code by rerunning CMake with:" )
message ( STATUS "" )
2021-10-05 22:43:35 +08:00
message ( STATUS " -DSDL_ARMSIMD=OFF" )
2019-10-25 11:17:19 +08:00
endif ( )
if ( WARN_ABOUT_ARM_NEON_ASM_MIT )
message ( STATUS "" )
message ( STATUS "SDL is being built with ARM NEON optimizations, which" )
message ( STATUS "uses code licensed under the MIT license. If this is a" )
message ( STATUS "problem, please disable that code by rerunning CMake with:" )
message ( STATUS "" )
2021-10-05 22:43:35 +08:00
message ( STATUS " -DSDL_ARMNEON=OFF" )
2019-10-25 11:17:19 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
# Ensure that the extra cflags are used at compile time
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}" )
2022-01-12 00:34:14 +08:00
if ( NOT WINDOWS_STORE AND NOT SDL2_DISABLE_SDL2MAIN )
# Build SDLmain
2021-10-05 23:19:14 +08:00
add_library ( SDL2main STATIC ${ SDLMAIN_SOURCES } )
# alias target for in-tree builds
add_library ( SDL2::SDL2main ALIAS SDL2main )
2021-11-10 00:13:52 +08:00
target_include_directories ( SDL2main BEFORE PRIVATE "${SDL2_BINARY_DIR}/include" )
2021-10-05 23:19:14 +08:00
target_include_directories ( SDL2main PUBLIC "$<BUILD_INTERFACE:${SDL2_SOURCE_DIR}/include>" $< INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} > $< INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/SDL2 > )
2022-05-08 22:53:43 +08:00
if ( WIN32 )
target_link_libraries ( SDL2main PRIVATE shell32 )
endif ( )
2022-06-04 02:12:52 +08:00
if ( MINGW OR CYGWIN )
cmake_minimum_required ( VERSION 3.13 )
if ( CMAKE_SIZEOF_VOID_P EQUAL 4 )
target_link_options ( SDL2main PUBLIC "-Wl,--undefined=_WinMain@16" )
else ( )
target_link_options ( SDL2main PUBLIC "-Wl,--undefined=WinMain" )
endif ( )
endif ( )
2021-10-05 23:19:14 +08:00
if ( NOT ANDROID )
set_target_properties ( SDL2main PROPERTIES DEBUG_POSTFIX "${SDL_CMAKE_DEBUG_POSTFIX}" )
endif ( )
2020-12-09 01:13:08 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
2021-10-06 00:34:29 +08:00
if ( ANDROID )
target_include_directories ( sdl-build-options INTERFACE "${ANDROID_NDK}/sources/android/cpufeatures" )
endif ( )
2022-05-08 08:57:23 +08:00
if ( APPLE )
2021-10-06 00:34:29 +08:00
target_compile_options ( sdl-build-options INTERFACE "-fobjc-arc" )
endif ( )
2015-06-21 23:33:46 +08:00
if ( SDL_SHARED )
2016-10-03 18:42:10 +08:00
add_library ( SDL2 SHARED ${ SOURCE_FILES } ${ VERSION_SOURCES } )
2021-02-10 23:17:02 +08:00
# alias target for in-tree builds
add_library ( SDL2::SDL2 ALIAS SDL2 )
2017-08-10 10:43:16 +08:00
if ( APPLE )
2018-08-19 05:23:40 +08:00
set_target_properties ( SDL2 PROPERTIES
M A C O S X _ R P A T H 1
O U T P U T _ N A M E " S D L 2 - $ { L T _ R E L E A S E } " )
2017-08-10 10:43:16 +08:00
elseif ( UNIX AND NOT ANDROID )
2015-06-21 23:33:46 +08:00
set_target_properties ( SDL2 PROPERTIES
V E R S I O N $ { L T _ V E R S I O N }
2021-05-16 12:33:29 +08:00
S O V E R S I O N $ { L T _ M A J O R }
2015-06-21 23:33:46 +08:00
O U T P U T _ N A M E " S D L 2 - $ { L T _ R E L E A S E } " )
else ( )
2020-12-09 17:01:10 +08:00
if ( WINDOWS OR CYGWIN )
set_target_properties ( SDL2 PROPERTIES
D E F I N E _ S Y M B O L D L L _ E X P O R T )
2022-01-13 01:32:00 +08:00
elseif ( OS2 )
set_target_properties ( SDL2 PROPERTIES
D E F I N E _ S Y M B O L B U I L D _ S D L )
2020-12-09 17:01:10 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
set_target_properties ( SDL2 PROPERTIES
V E R S I O N $ { S D L _ V E R S I O N }
S O V E R S I O N $ { L T _ R E V I S I O N }
O U T P U T _ N A M E " S D L 2 " )
endif ( )
2021-11-18 07:04:34 +08:00
# Note: The clang toolset for Visual Studio does not support /NODEFAULTLIB.
2022-05-08 22:53:43 +08:00
if ( MSVC AND NOT SDL_LIBC AND NOT MSVC_CLANG AND NOT CMAKE_GENERATOR_PLATFORM STREQUAL "ARM" )
2016-01-01 03:26:40 +08:00
# Don't try to link with the default set of libraries.
2021-04-08 20:28:45 +08:00
if ( NOT WINDOWS_STORE )
set_target_properties ( SDL2 PROPERTIES LINK_FLAGS_RELEASE "/NODEFAULTLIB" )
set_target_properties ( SDL2 PROPERTIES LINK_FLAGS_DEBUG "/NODEFAULTLIB" )
endif ( )
2016-01-01 03:26:40 +08:00
set_target_properties ( SDL2 PROPERTIES STATIC_LIBRARY_FLAGS "/NODEFAULTLIB" )
endif ( )
2022-06-04 02:12:52 +08:00
# FIXME: if CMAKE_VERSION >= 3.13, use target_link_options for EXTRA_LDFLAGS
target_link_libraries ( SDL2 PRIVATE ${ EXTRA_LIBS } ${ EXTRA_LDFLAGS } ${ EXTRA_LDFLAGS_BUILD } )
2021-10-06 00:34:29 +08:00
target_include_directories ( SDL2 BEFORE PRIVATE "${SDL2_BINARY_DIR}/include" )
target_include_directories ( SDL2 PUBLIC "$<BUILD_INTERFACE:${SDL2_SOURCE_DIR}/include>;$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>;$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/SDL2>" )
# This picks up all the compiler options and such we've accumulated up to here.
target_link_libraries ( SDL2 PRIVATE $< BUILD_INTERFACE:sdl-build-options > )
2022-06-04 02:12:52 +08:00
if ( MINGW OR CYGWIN )
if ( NOT CMAKE_VERSION VERSION_LESS "3.13" )
target_link_options ( SDL2 PRIVATE -static-libgcc )
endif ( )
endif ( )
2021-10-06 00:34:29 +08:00
if ( NOT ANDROID )
2019-12-03 15:42:53 +08:00
set_target_properties ( SDL2 PROPERTIES DEBUG_POSTFIX "${SDL_CMAKE_DEBUG_POSTFIX}" )
2018-02-26 01:22:47 +08:00
endif ( )
2022-05-30 06:46:00 +08:00
# Use `Compatible Interface Properties` to allow consumers to enforce a shared/static library
set_property ( TARGET SDL2 PROPERTY INTERFACE_SDL2_SHARED TRUE )
set_property ( TARGET SDL2 APPEND PROPERTY COMPATIBLE_INTERFACE_BOOL SDL2_SHARED )
2015-06-21 23:33:46 +08:00
endif ( )
if ( SDL_STATIC )
set ( BUILD_SHARED_LIBS FALSE )
add_library ( SDL2-static STATIC ${ SOURCE_FILES } )
2021-02-10 23:17:02 +08:00
# alias target for in-tree builds
add_library ( SDL2::SDL2-static ALIAS SDL2-static )
2022-06-04 02:12:52 +08:00
if ( MSVC OR ( WATCOM AND ( WIN32 OR OS2 ) ) )
# Avoid conflict between the dll import library and the static library
set_target_properties ( SDL2-static PROPERTIES OUTPUT_NAME "SDL2-static" )
else ( )
2017-08-10 10:03:10 +08:00
set_target_properties ( SDL2-static PROPERTIES OUTPUT_NAME "SDL2" )
endif ( )
2016-01-05 14:26:32 +08:00
set_target_properties ( SDL2-static PROPERTIES POSITION_INDEPENDENT_CODE ${ SDL_STATIC_PIC } )
2021-11-18 07:04:34 +08:00
# Note: The clang toolset for Visual Studio does not support /NODEFAULTLIB.
2022-05-08 22:53:43 +08:00
if ( MSVC AND NOT SDL_LIBC AND NOT MSVC_CLANG AND NOT CMAKE_GENERATOR_PLATFORM STREQUAL "ARM" )
2015-06-21 23:33:46 +08:00
set_target_properties ( SDL2-static PROPERTIES LINK_FLAGS_RELEASE "/NODEFAULTLIB" )
set_target_properties ( SDL2-static PROPERTIES LINK_FLAGS_DEBUG "/NODEFAULTLIB" )
set_target_properties ( SDL2-static PROPERTIES STATIC_LIBRARY_FLAGS "/NODEFAULTLIB" )
endif ( )
# TODO: Win32 platforms keep the same suffix .lib for import and static
# libraries - do we need to consider this?
2022-06-04 02:12:52 +08:00
target_link_libraries ( SDL2-static PRIVATE ${ EXTRA_LIBS } ${ EXTRA_LDFLAGS } ${ EXTRA_LDFLAGS_BUILD } )
2021-10-06 00:34:29 +08:00
target_include_directories ( SDL2-static BEFORE PRIVATE "${SDL2_BINARY_DIR}/include" )
2020-02-16 16:08:36 +08:00
target_include_directories ( SDL2-static PUBLIC "$<BUILD_INTERFACE:${SDL2_SOURCE_DIR}/include>" $< INSTALL_INTERFACE:include > $< INSTALL_INTERFACE:include/SDL2 > )
2021-10-06 00:34:29 +08:00
# This picks up all the compiler options and such we've accumulated up to here.
target_link_libraries ( SDL2-static PRIVATE $< BUILD_INTERFACE:sdl-build-options > )
if ( NOT ANDROID )
2019-12-03 15:42:53 +08:00
set_target_properties ( SDL2-static PROPERTIES DEBUG_POSTFIX "${SDL_CMAKE_DEBUG_POSTFIX}" )
2018-02-26 01:22:47 +08:00
endif ( )
2022-05-30 06:46:00 +08:00
# Use `Compatible Interface Properties` to allow consumers to enforce a shared/static library
set_property ( TARGET SDL2-static PROPERTY INTERFACE_SDL2_SHARED FALSE )
set_property ( TARGET SDL2-static APPEND PROPERTY COMPATIBLE_INTERFACE_BOOL SDL2_SHARED )
2015-06-21 23:33:46 +08:00
endif ( )
2022-05-03 21:39:00 +08:00
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSDL_BUILD_MAJOR_VERSION=${SDL_MAJOR_VERSION}" )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSDL_BUILD_MINOR_VERSION=${SDL_MINOR_VERSION}" )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSDL_BUILD_MICRO_VERSION=${SDL_MICRO_VERSION}" )
2018-02-25 00:59:58 +08:00
##### Tests #####
if ( SDL_TEST )
2021-10-31 01:06:58 +08:00
include_directories ( BEFORE "${SDL2_BINARY_DIR}/include" )
include_directories ( AFTER "${SDL2_SOURCE_DIR}/include" )
2018-02-25 00:59:58 +08:00
file ( GLOB TEST_SOURCES ${ SDL2_SOURCE_DIR } /src/test/*.c )
add_library ( SDL2_test STATIC ${ TEST_SOURCES } )
2022-05-27 07:40:11 +08:00
add_library ( SDL2::SDL2test ALIAS SDL2_test )
set_target_properties ( SDL2_test PROPERTIES
E X P O R T _ N A M E S D L 2 t e s t )
target_include_directories ( SDL2_test PUBLIC "$<BUILD_INTERFACE:${SDL2_SOURCE_DIR}/include>" $< INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} > $< INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/SDL2 > )
2018-02-25 00:59:58 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
##### Installation targets #####
2022-04-16 05:11:29 +08:00
if ( NOT SDL2_DISABLE_INSTALL )
2022-04-16 08:50:55 +08:00
if ( SDL_SHARED )
install ( TARGETS SDL2 EXPORT SDL2Targets
L I B R A R Y D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ L I B D I R } "
A R C H I V E D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ L I B D I R } "
R U N T I M E D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ B I N D I R } " )
endif ( )
2022-01-08 03:30:26 +08:00
2022-04-16 08:50:55 +08:00
if ( NOT WINDOWS_STORE AND NOT SDL2_DISABLE_SDL2MAIN )
install ( TARGETS SDL2main EXPORT SDL2mainTargets
L I B R A R Y D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ L I B D I R } "
A R C H I V E D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ L I B D I R } "
R U N T I M E D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ B I N D I R } " )
endif ( )
2015-06-21 23:33:46 +08:00
2022-04-16 08:50:55 +08:00
if ( SDL_STATIC )
install ( TARGETS SDL2-static EXPORT SDL2staticTargets
L I B R A R Y D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ L I B D I R } "
A R C H I V E D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ L I B D I R } "
R U N T I M E D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ B I N D I R } " )
endif ( )
2022-05-27 07:40:11 +08:00
if ( SDL_TEST )
install ( TARGETS SDL2_test EXPORT SDL2testTargets
L I B R A R Y D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ L I B D I R } "
A R C H I V E D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ L I B D I R } "
R U N T I M E D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ B I N D I R } " )
endif ( )
2022-04-16 08:50:55 +08:00
##### Export files #####
if ( WINDOWS AND NOT MINGW )
set ( PKG_PREFIX "cmake" )
else ( )
set ( PKG_PREFIX "${CMAKE_INSTALL_LIBDIR}/cmake/SDL2" )
endif ( )
include ( CMakePackageConfigHelpers )
2022-06-04 02:12:52 +08:00
configure_package_config_file ( SDL2Config.cmake.in "${CMAKE_BINARY_DIR}/SDL2Config.cmake"
P A T H _ V A R S C M A K E _ I N S T A L L _ P R E F I X C M A K E _ I N S T A L L _ F U L L _ B I N D I R C M A K E _ I N S T A L L _ F U L L _ I N C L U D E D I R C M A K E _ I N S T A L L _ F U L L _ L I B D I R
I N S T A L L _ D E S T I N A T I O N $ { P K G _ P R E F I X }
)
2022-04-16 08:50:55 +08:00
write_basic_package_version_file ( "${CMAKE_BINARY_DIR}/SDL2ConfigVersion.cmake"
V E R S I O N $ { S D L _ V E R S I O N }
C O M P A T I B I L I T Y A n y N e w e r V e r s i o n
)
2017-08-10 10:03:10 +08:00
2022-04-16 08:50:55 +08:00
if ( SDL_SHARED )
install ( EXPORT SDL2Targets
F I L E S D L 2 T a r g e t s . c m a k e
N A M E S P A C E S D L 2 : :
D E S T I N A T I O N $ { P K G _ P R E F I X }
)
endif ( )
2017-08-10 10:03:10 +08:00
2022-04-16 08:50:55 +08:00
if ( NOT WINDOWS_STORE AND NOT SDL2_DISABLE_SDL2MAIN )
install ( EXPORT SDL2mainTargets
F I L E S D L 2 m a i n T a r g e t s . c m a k e
N A M E S P A C E S D L 2 : :
D E S T I N A T I O N $ { P K G _ P R E F I X }
)
endif ( )
2022-01-08 03:30:26 +08:00
2022-04-16 08:50:55 +08:00
if ( SDL_STATIC )
install ( EXPORT SDL2staticTargets
F I L E S D L 2 s t a t i c T a r g e t s . c m a k e
N A M E S P A C E S D L 2 : :
D E S T I N A T I O N $ { P K G _ P R E F I X }
)
endif ( )
2022-01-08 03:30:26 +08:00
2022-05-27 07:40:11 +08:00
if ( SDL_TEST )
install ( EXPORT SDL2testTargets
F I L E S D L 2 t e s t T a r g e t s . c m a k e
N A M E S P A C E S D L 2 : :
D E S T I N A T I O N $ { P K G _ P R E F I X }
)
endif ( )
2022-04-16 08:50:55 +08:00
install (
F I L E S
2022-06-04 02:12:52 +08:00
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / S D L 2 C o n f i g . c m a k e
2022-04-16 08:50:55 +08:00
$ { C M A K E _ B I N A R Y _ D I R } / S D L 2 C o n f i g V e r s i o n . c m a k e
2022-01-08 03:30:26 +08:00
D E S T I N A T I O N $ { P K G _ P R E F I X }
2022-04-16 08:50:55 +08:00
C O M P O N E N T D e v e l
2022-01-08 03:30:26 +08:00
)
2015-06-21 23:33:46 +08:00
2022-04-16 08:50:55 +08:00
file ( GLOB INCLUDE_FILES ${ SDL2_SOURCE_DIR } /include/*.h )
file ( GLOB BIN_INCLUDE_FILES ${ SDL2_BINARY_DIR } /include/*.h )
foreach ( _FNAME ${ BIN_INCLUDE_FILES } )
get_filename_component ( _INCNAME ${ _FNAME } NAME )
list ( REMOVE_ITEM INCLUDE_FILES ${ SDL2_SOURCE_DIR } /include/ ${ _INCNAME } )
endforeach ( )
list ( APPEND INCLUDE_FILES ${ BIN_INCLUDE_FILES } )
install ( FILES ${ INCLUDE_FILES } DESTINATION ${ CMAKE_INSTALL_INCLUDEDIR } /SDL2 )
string ( TOUPPER "${CMAKE_BUILD_TYPE}" UPPER_BUILD_TYPE )
if ( UPPER_BUILD_TYPE MATCHES DEBUG )
set ( SOPOSTFIX "${SDL_CMAKE_DEBUG_POSTFIX}" )
2015-06-21 23:33:46 +08:00
else ( )
2022-04-16 08:50:55 +08:00
set ( SOPOSTFIX "" )
endif ( )
if ( NOT ( WINDOWS OR CYGWIN ) OR MINGW )
if ( SDL_SHARED )
set ( SOEXT ${ CMAKE_SHARED_LIBRARY_SUFFIX } ) # ".so", ".dylib", etc.
get_target_property ( SONAME SDL2 OUTPUT_NAME )
if ( NOT ANDROID AND NOT MINGW AND NOT OS2 )
install ( CODE "
execute_process ( COMMAND ${ CMAKE_COMMAND } -E create_symlink
\ " l i b $ { S O N A M E } $ { S O P O S T F I X } $ { S O E X T } \ " \ " l i b S D L 2 $ { S O P O S T F I X } $ { S O E X T } \ "
W O R K I N G _ D I R E C T O R Y \ " $ { S D L 2 _ B I N A R Y _ D I R } \ " ) " )
install ( FILES ${ SDL2_BINARY_DIR } /libSDL2 ${ SOPOSTFIX } ${ SOEXT } DESTINATION "${CMAKE_INSTALL_LIBDIR}" )
endif ( )
endif ( )
if ( FREEBSD )
# FreeBSD uses ${PREFIX}/libdata/pkgconfig
install ( FILES ${ SDL2_BINARY_DIR } /sdl2.pc DESTINATION "libdata/pkgconfig" )
else ( )
install ( FILES ${ SDL2_BINARY_DIR } /sdl2.pc
D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ L I B D I R } / p k g c o n f i g " )
endif ( )
install ( PROGRAMS ${ SDL2_BINARY_DIR } /sdl2-config DESTINATION "${CMAKE_INSTALL_BINDIR}" )
# TODO: what about the .spec file? Is it only needed for RPM creation?
install ( FILES "${SDL2_SOURCE_DIR}/sdl2.m4" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/aclocal" )
2015-06-21 23:33:46 +08:00
endif ( )
endif ( )
##### Uninstall target #####
2022-01-12 00:34:14 +08:00
if ( NOT SDL2_DISABLE_UNINSTALL )
2022-04-16 08:50:55 +08:00
if ( NOT TARGET uninstall )
configure_file (
" $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / c m a k e _ u n i n s t a l l . c m a k e . i n "
" $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / c m a k e _ u n i n s t a l l . c m a k e "
I M M E D I A T E @ O N L Y )
2017-10-12 23:47:02 +08:00
2022-04-16 08:50:55 +08:00
add_custom_target ( uninstall
C O M M A N D $ { C M A K E _ C O M M A N D } - P $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / c m a k e _ u n i n s t a l l . c m a k e )
endif ( )
2017-10-12 23:47:02 +08:00
endif ( )
2022-04-16 08:50:55 +08:00
2022-05-04 03:37:03 +08:00
##### Tests subproject (must appear after the install/uninstall targets) #####
2022-05-27 07:40:11 +08:00
if ( SDL_TESTS )
enable_testing ( )
2022-05-04 03:37:03 +08:00
add_subdirectory ( test )
endif ( )
2022-05-22 04:51:21 +08:00
##### Fix Objective C builds #####
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} ${CMAKE_C_FLAGS}" )