2021-07-10 03:39:05 +08:00
if ( ${ CMAKE_CURRENT_SOURCE_DIR } STREQUAL ${ CMAKE_CURRENT_BINARY_DIR } )
2022-11-26 09:11:32 +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 )
2022-11-22 12:28:58 +08:00
project ( SDL3 C CXX )
2016-01-05 14:25:54 +08:00
2022-07-23 21:29:13 +08:00
if ( CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR )
2022-11-22 12:28:58 +08:00
set ( SDL3_SUBPROJECT OFF )
2022-07-23 21:29:13 +08:00
else ( )
2022-11-22 12:28:58 +08:00
set ( SDL3_SUBPROJECT ON )
2022-07-23 21:29:13 +08:00
endif ( )
2021-08-05 07:22:10 +08:00
if ( HAIKU )
set ( LINKER_LANGUAGE CXX )
endif ( )
2022-07-26 05:06:52 +08:00
set ( EXTRA_LIBS )
set ( EXTRA_LDFLAGS )
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 )
2022-11-24 02:41:43 +08:00
if ( WINDOWS_STORE )
cmake_minimum_required ( VERSION 3.11.0 )
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" )
2022-11-01 23:33:21 +08:00
endif ( )
2022-01-05 06:46:04 +08:00
2022-07-21 20:08:19 +08:00
# CMake 3.0 expands the "if(${A})" in "set(OFF 1);set(A OFF);if(${A})" to "if(1)"
# CMake 3.24+ emits a warning when not set.
unset ( OFF )
unset ( ON )
if ( POLICY CMP0054 )
cmake_policy ( SET CMP0054 NEW )
endif ( )
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
2022-11-22 12:28:58 +08:00
# !!! FIXME: for the SDL shared library (so you get an
2016-01-05 14:25:54 +08:00
# !!! 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 ( CheckIncludeFile )
2022-10-29 09:20:30 +08:00
include ( CheckLanguage )
2015-06-21 23:33:46 +08:00
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 ( CheckStructHasMember )
include ( CMakeDependentOption )
2022-09-27 07:08:04 +08:00
include ( CMakePushCheckState )
2016-10-02 06:11:18 +08:00
include ( GNUInstallDirs )
2022-06-17 08:58:45 +08:00
2022-11-01 20:06:39 +08:00
find_package ( PkgConfig )
2022-11-22 12:28:58 +08:00
list ( APPEND CMAKE_MODULE_PATH "${SDL3_SOURCE_DIR}/cmake" )
include ( ${ SDL3_SOURCE_DIR } /cmake/macros.cmake )
include ( ${ SDL3_SOURCE_DIR } /cmake/sdlchecks.cmake )
include ( ${ SDL3_SOURCE_DIR } /cmake/CheckCPUArchitecture.cmake )
2015-06-21 23:33:46 +08:00
2022-05-26 23:02:15 +08:00
# Enable large file support on 32-bit glibc, so that we can access files
# with large inode numbers
check_symbol_exists ( "__GLIBC__" "stdlib.h" LIBC_IS_GLIBC )
if ( LIBC_IS_GLIBC AND CMAKE_SIZEOF_VOID_P EQUAL 4 )
2022-06-21 01:29:13 +08:00
add_definitions ( -D_FILE_OFFSET_BITS=64 )
2022-05-26 23:02:15 +08:00
endif ( )
2022-05-03 21:09:12 +08:00
# See docs/release_checklist.md
2022-11-22 12:28:58 +08:00
set ( SDL_MAJOR_VERSION 3 )
set ( SDL_MINOR_VERSION 0 )
2022-11-22 08:15:58 +08:00
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]$" )
2022-11-22 12:28:58 +08:00
# Stable branch, 3.24.1 -> libSDL3-3.0.so.0.2400.1
2022-05-04 23:40:11 +08:00
set ( SDL_INTERFACE_AGE ${ SDL_MICRO_VERSION } )
else ( )
2022-11-22 12:28:58 +08:00
# Development branch, 3.23.1 -> libSDL3-3.0.so.0.2301.0
2022-05-04 23:40:11 +08:00
set ( SDL_INTERFACE_AGE 0 )
endif ( )
# Increment this if there is an incompatible change - but if that happens,
2022-11-22 12:28:58 +08:00
# we should rename the library from SDL3 to SDL4, at which point this would
2022-05-04 23:40:11 +08:00
# 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}" )
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}" )
set ( DYLIB_CURRENT_VERSION "${DYLIB_CURRENT_VERSION_MAJOR}.${DYLIB_CURRENT_VERSION_MINOR}.0" )
2022-09-06 02:21:13 +08:00
set ( DYLIB_COMPATIBILITY_VERSION "${DYLIB_CURRENT_VERSION_MAJOR}.0.0" )
2022-05-04 23:40:11 +08:00
2022-11-24 00:33:38 +08:00
#message(STATUS "${LT_VERSION} :: ${LT_AGE} :: ${LT_REVISION} :: ${LT_CURRENT}")
2015-06-21 23:33:46 +08:00
2022-11-25 08:27:44 +08:00
check_cpu_architecture ( x86 SDL_CPU_X86 )
check_cpu_architecture ( x64 SDL_CPU_X64 )
check_cpu_architecture ( arm32 SDL_CPU_ARM32 )
check_cpu_architecture ( arm64 SDL_CPU_ARM64 )
2022-11-25 09:18:16 +08:00
check_cpu_architecture ( loongarch64 SDL_CPU_LOONGARCH64 )
2022-11-25 08:27:44 +08:00
2015-06-21 23:33:46 +08:00
# 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 ( )
2022-11-22 12:28:58 +08:00
set ( LIBNAME SDL3 )
2015-06-21 23:33:46 +08:00
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 )
2022-08-26 08:37:17 +08:00
elseif ( CMAKE_SYSTEM_NAME MATCHES "Solaris.*|SunOS.*" )
2015-06-21 23:33:46 +08:00
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 )
2021-03-30 16:32:39 +08:00
elseif ( NINTENDO_3DS )
set ( N3DS TRUE )
2015-06-21 23:33:46 +08:00
endif ( )
2022-11-25 11:31:25 +08:00
set ( SDL_CHECK_REQUIRED_INCLUDES "" CACHE STRING "Extra includes (for CMAKE_REQUIRED_INCLUDES)" )
set ( SDL_CHECK_REQUIRED_LINK_OPTIONS "" CACHE STRING "Extra link options (for CMAKE_REQUIRED_LINK_OPTIONS)" )
mark_as_advanced ( SDL_CHECK_REQUIRED_INCLUDES SDL_CHECK_REQUIRED_LINK_OPTIONS )
2022-11-25 10:15:23 +08:00
list ( APPEND CMAKE_REQUIRED_INCLUDES ${ SDL_CHECK_REQUIRED_INCLUDES } )
list ( APPEND CMAKE_REQUIRED_LINK_OPTIONS ${ SDL_CHECK_REQUIRED_LINK_OPTIONS } )
2022-11-25 05:38:29 +08:00
2022-11-26 08:00:06 +08:00
# Don't mistake macOS for unix
cmake: disable UNIX_SYS by default for Android
This force disables SDL_OSS, SDL_ALSA, SDL_JACK, SDL_ESD,
SDL_PIPEWIRE, SDL_ARTS, SDL_NAS, SDL_SNDIO, SDL_LIBSAMPLERATE,
SDL_RPATH, SDL_CLOCK_GETTIME and SDL_X11.
2022-06-16 09:27:52 +08:00
if ( UNIX AND NOT ANDROID 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 ( )
2022-06-24 20:41:06 +08:00
if ( UNIX_SYS OR ANDROID )
set ( SDL_CLOCK_GETTIME_ENABLED_BY_DEFAULT ON )
else ( )
set ( SDL_CLOCK_GETTIME_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
2022-11-24 02:41:43 +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 )
2022-11-26 06:06:38 +08:00
set ( SDL_ASSEMBLY_DEFAULT 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 )
2022-11-26 06:06:38 +08:00
set ( SDL_ASSEMBLY_DEFAULT TRUE )
2015-06-21 23:33:46 +08:00
elseif ( MSVC_VERSION GREATER 1400 ) # VisualStudio 8.0+
2022-11-26 06:06:38 +08:00
set ( SDL_ASSEMBLY_DEFAULT TRUE )
2015-06-21 23:33:46 +08:00
#set(CMAKE_C_FLAGS "/ZI /WX- /
else ( )
2022-11-26 06:06:38 +08:00
set ( SDL_ASSEMBLY_DEFAULT FALSE )
2015-06-21 23:33:46 +08:00
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
2022-11-26 08:45:13 +08:00
set ( SDL_LIBC_DEFAULT ON )
2022-11-26 08:53:16 +08:00
set ( SDL_SYSTEM_ICONV_DEFAULT ON )
2022-11-26 08:45:13 +08:00
if ( WINDOWS )
set ( SDL_LIBC_DEFAULT OFF )
2022-11-26 08:53:16 +08:00
set ( SDL_SYSTEM_ICONV_DEFAULT OFF )
2021-03-04 23:40:56 +08:00
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-11-28 05:19:44 +08:00
# Those are used for pkg-config so sdl3.pc is created correctly.
2022-11-22 12:28:58 +08:00
set ( SDL_LIBS "-lSDL3" )
2022-06-15 23:10:31 +08:00
set ( SDL_CFLAGS )
2015-06-21 23:33:46 +08:00
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 ( )
2022-06-15 23:10:31 +08:00
list ( APPEND SDL_CFLAGS "-I/usr/include/mingw" )
2015-06-21 23:33:46 +08:00
endif ( )
# General includes
2021-10-06 00:34:29 +08:00
target_compile_definitions ( sdl-build-options INTERFACE "-DUSING_GENERATED_CONFIG_H" )
2022-11-27 04:25:31 +08:00
target_include_directories ( sdl-build-options
I N T E R F A C E
" $ { S D L 3 _ B I N A R Y _ D I R } / i n c l u d e - c o n f i g - $ < L O W E R _ C A S E : $ < C O N F I G > > "
" $ { S D L 3 _ B I N A R Y _ D I R } / i n c l u d e "
" $ { S D L 3 _ S O U R C E _ D I R } / i n c l u d e "
)
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?
2022-11-22 12:28:58 +08:00
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -idirafter \" ${ SDL3_SOURCE_DIR } /src/video/khronos\ "" )
2017-09-11 01:25:36 +08:00
else ( )
2022-11-22 12:28:58 +08:00
target_include_directories ( sdl-build-options INTERFACE "${SDL3_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.
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.
2022-11-26 06:06:38 +08:00
set ( SDL_ASSEMBLY_DEFAULT FALSE )
2015-06-21 23:33:46 +08:00
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 )
endif ( )
2021-03-30 16:32:39 +08:00
if ( VITA OR PSP OR PS2 OR N3DS )
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.
2022-11-22 12:28:58 +08:00
set_option ( SDL3_DISABLE_SDL3MAIN "Disable building/installation of SDL3main" OFF )
set_option ( SDL3_DISABLE_INSTALL "Disable installation of SDL3" ${ SDL3_SUBPROJECT } )
set_option ( SDL3_DISABLE_UNINSTALL "Disable uninstallation of SDL3" OFF )
2022-01-12 00:34:14 +08:00
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)
2022-11-26 06:06:38 +08:00
set_option ( SDL_ASSEMBLY "Enable assembly routines" ${ SDL_ASSEMBLY_DEFAULT } )
2022-11-25 08:27:44 +08:00
dep_option ( SDL_SSEMATH "Allow GCC to use SSE floating point math" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF )
dep_option ( SDL_SSE "Use SSE assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF )
dep_option ( SDL_SSE2 "Use SSE2 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF )
dep_option ( SDL_SSE3 "Use SSE3 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF )
dep_option ( SDL_MMX "Use MMX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF )
dep_option ( SDL_3DNOW "Use 3Dnow! MMX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF )
dep_option ( SDL_ALTIVEC "Use Altivec assembly routines" ON "SDL_ASSEMBLY" OFF )
dep_option ( SDL_ARMSIMD "Use SIMD assembly blitters on ARM" OFF "SDL_ASSEMBLY;SDL_CPU_ARM32" OFF )
dep_option ( SDL_ARMNEON "Use NEON assembly blitters on ARM" OFF "SDL_ASSEMBLY;SDL_CPU_ARM32" OFF )
2022-11-25 09:18:16 +08:00
dep_option ( SDL_LSX "Use LSX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_LOONGARCH64" OFF )
dep_option ( SDL_LASX "Use LASX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_LOONGARCH64" OFF )
2022-11-25 08:27:44 +08:00
2022-11-26 08:45:13 +08:00
set_option ( SDL_LIBC "Use the system C library" ${ SDL_LIBC_DEFAULT } )
2022-11-26 08:53:16 +08:00
set_option ( SDL_SYSTEM_ICONV "Use iconv() from system-installed libraries" ${ SDL_SYSTEM_ICONV_DEFAULT } )
2021-10-05 22:43:35 +08:00
set_option ( SDL_GCC_ATOMICS "Use gcc builtin atomics" ${ OPT_DEF_GCC_ATOMICS } )
2022-08-26 08:37:57 +08:00
dep_option ( SDL_DBUS "Enable D-Bus support" ON ${ UNIX_SYS } OFF )
2021-10-05 22:43:35 +08:00
set_option ( SDL_DISKAUDIO "Support the disk writer audio driver" ON )
set_option ( SDL_DUMMYAUDIO "Support the dummy audio driver" ON )
set_option ( SDL_DUMMYVIDEO "Use dummy video driver" ON )
2022-08-26 08:38:54 +08:00
dep_option ( SDL_IBUS "Enable IBus support" ON ${ UNIX_SYS } OFF )
2021-10-05 22:43:35 +08:00
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 )
2022-11-23 11:50:20 +08:00
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 )
2021-10-05 22:43:35 +08:00
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 )
2022-11-23 03:04:10 +08:00
set_option ( SDL_SNDIO "Support the sndio audio API" ${ UNIX_SYS } )
dep_option ( SDL_SNDIO_SHARED "Dynamically load the sndio audio API" ON "SDL_SNDIO" OFF )
2021-10-05 22:43:35 +08:00
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 } )
2022-06-24 20:41:06 +08:00
set_option ( SDL_CLOCK_GETTIME "Use clock_gettime() instead of gettimeofday()" ${ SDL_CLOCK_GETTIME_ENABLED_BY_DEFAULT } )
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 )
2022-08-26 07:56:20 +08:00
dep_option ( SDL_WAYLAND_LIBDECOR_SHARED "Dynamically load libdecor support" ON "SDL_WAYLAND_LIBDECOR;SDL_WAYLAND_SHARED" OFF )
2021-10-05 22:43:35 +08:00
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 )
2022-09-16 01:39:35 +08:00
set_option ( SDL_OFFSCREEN "Use offscreen video driver" ON )
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 )
2022-07-26 08:41:43 +08:00
set_option ( SDL_HIDAPI "Enable the HIDAPI subsystem" ON )
dep_option ( SDL_HIDAPI_LIBUSB "Use libusb for low level joystick drivers" OFF SDL_HIDAPI OFF )
dep_option ( SDL_HIDAPI_JOYSTICK "Use HIDAPI for low level joystick drivers" ON SDL_HIDAPI OFF )
dep_option ( SDL_VIRTUAL_JOYSTICK "Enable the virtual-joystick driver" ON SDL_HIDAPI OFF )
2022-11-25 09:57:00 +08:00
set_option ( SDL_LIBUDEV "Enable libudev support" ON )
2021-10-05 22:43:35 +08:00
set_option ( SDL_ASAN "Use AddressSanitizer to detect memory errors" OFF )
2022-10-21 03:02:21 +08:00
option_string ( SDL_VENDOR_INFO "Vendor name and/or version to add to SDL_REVISION" "" )
2022-11-16 02:04:22 +08:00
set_option ( SDL_CCACHE "Use Ccache to speed up build" ON )
2015-06-21 23:33:46 +08:00
2022-10-05 21:14:08 +08:00
option ( SDL_WERROR "Enable -Werror" OFF )
2022-08-30 07:50:44 +08:00
option ( SDL_SHARED "Build a shared version of the library" ${ SDL_SHARED_ENABLED_BY_DEFAULT } )
option ( SDL_STATIC "Build a static version of the library" ${ SDL_STATIC_ENABLED_BY_DEFAULT } )
2022-11-22 12:28:58 +08:00
option ( SDL_TEST "Build the SDL3_test library" ${ SDL_TEST_ENABLED_BY_DEFAULT } )
2015-06-21 23:33:46 +08:00
2022-06-04 09:16:27 +08:00
dep_option ( SDL_STATIC_PIC "Static version of the library should be built with Position Independent Code" "${CMAKE_POSITION_INDEPENDENT_CODE}" "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
2022-06-16 09:30:34 +08:00
set ( HAVE_STATIC_PIC "${SDL_STATIC_PIC}" )
2022-10-05 21:14:08 +08:00
if ( SDL_WERROR )
if ( MSVC )
2022-11-25 05:38:13 +08:00
cmake_push_check_state ( )
2022-10-05 21:14:08 +08:00
check_c_compiler_flag ( /WX HAVE_WX )
if ( HAVE_WX )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /WX" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX" )
endif ( )
2022-11-25 05:38:13 +08:00
cmake_pop_check_state ( )
2022-10-05 21:14:08 +08:00
elseif ( USE_GCC OR USE_CLANG )
2022-11-25 05:38:13 +08:00
cmake_push_check_state ( )
2022-10-05 21:14:08 +08:00
check_c_compiler_flag ( -Werror HAVE_WERROR )
if ( HAVE_WERROR )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -Werror" )
endif ( )
cmake_pop_check_state ( )
endif ( )
endif ( )
2022-07-26 08:51:07 +08:00
if ( SDL_HIDAPI )
if ( HIDAPI_ONLY_LIBUSB )
set ( SDL_HIDAPI_LIBUSB ON CACHE BOOL "" FORCE )
elseif ( HIDAPI_SKIP_LIBUSB )
set ( SDL_HIDAPI_LIBUSB OFF CACHE BOOL "" FORCE )
endif ( )
2022-07-26 08:41:43 +08:00
endif ( )
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
2022-11-22 12:28:58 +08:00
$ { S D L 3 _ S O U R C E _ D I R } / s r c / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / a t o m i c / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / a u d i o / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / c p u i n f o / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / d y n a p i / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / e v e n t s / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / f i l e / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / j o y s t i c k / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / h a p t i c / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / h i d a p i / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / l i b m / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / l o c a l e / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / m i s c / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / p o w e r / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / r e n d e r / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / r e n d e r / * / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / s e n s o r / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / s t d l i b / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / t h r e a d / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / t i m e r / * . c
$ { S D L 3 _ S O U R C E _ D I R } / s r c / v i d e o / * . c
$ { S D L 3 _ 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
2022-06-15 12:17:59 +08:00
set ( SDL_DEFAULT_ASSERT_LEVEL_CONFIGURED 1 )
if ( SDL_ASSERTIONS MATCHES "^(auto|)$" )
2015-06-21 23:33:46 +08:00
# Do nada - use optimization settings to determine the assertion level
2022-06-15 12:17:59 +08:00
set ( SDL_DEFAULT_ASSERT_LEVEL )
set ( SDL_DEFAULT_ASSERT_LEVEL_CONFIGURED 0 )
elseif ( SDL_ASSERTIONS MATCHES "^(disabled|0)$" )
2015-06-21 23:33:46 +08:00
set ( SDL_DEFAULT_ASSERT_LEVEL 0 )
2022-06-15 12:17:59 +08:00
elseif ( SDL_ASSERTIONS MATCHES "^(release|1)$" )
2015-06-21 23:33:46 +08:00
set ( SDL_DEFAULT_ASSERT_LEVEL 1 )
2022-06-15 12:17:59 +08:00
elseif ( SDL_ASSERTIONS MATCHES "^(enabled|2)$" )
2015-06-21 23:33:46 +08:00
set ( SDL_DEFAULT_ASSERT_LEVEL 2 )
2022-06-15 12:17:59 +08:00
elseif ( SDL_ASSERTIONS MATCHES "^(paranoid|3)$" )
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 ( )
2022-09-27 23:33:49 +08:00
check_c_compiler_flag ( -Wdeclaration-after-statement HAVE_GCC_WDECLARATION_AFTER_STATEMENT )
if ( HAVE_GCC_WDECLARATION_AFTER_STATEMENT )
2022-10-05 21:14:08 +08:00
if ( SDL_WERROR )
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 ( )
2016-01-05 11:58:38 +08:00
endif ( )
2022-09-27 23:33:49 +08:00
list ( APPEND EXTRA_CFLAGS "-Wdeclaration-after-statement" )
2016-01-05 11:58:38 +08:00
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-11-25 05:38:13 +08:00
cmake_push_check_state ( )
2022-10-06 06:39:47 +08:00
# FIXME: don't use deprecated declarations
check_c_compiler_flag ( -Wno-error=deprecated-declarations HAVE_WNO_ERROR_DEPRECATED_DECLARATIONS )
if ( HAVE_WNO_ERROR_DEPRECATED_DECLARATIONS )
target_compile_options ( sdl-build-options INTERFACE "-Wno-error=deprecated-declarations" )
endif ( )
cmake_pop_check_state ( )
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,-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 ( )
2022-10-05 08:15:22 +08:00
if ( MINGW )
# See if GCC's -gdwarf-4 is supported
# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101377 for why this is needed on Windows
2022-11-25 05:38:13 +08:00
cmake_push_check_state ( )
2022-10-05 08:15:22 +08:00
check_c_compiler_flag ( "-gdwarf-4" HAVE_GDWARF_4 )
if ( HAVE_GDWARF_4 )
set ( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -gdwarf-4" )
set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -gdwarf-4" )
endif ( )
cmake_pop_check_state ( )
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" )
2022-08-22 03:15:06 +08:00
# CET support was added in VS 16.7
2022-09-05 23:58:49 +08:00
if ( MSVC_VERSION GREATER 1926 AND CMAKE_GENERATOR_PLATFORM MATCHES "Win32|x64" )
2022-08-22 03:15:06 +08:00
list ( APPEND EXTRA_LDFLAGS_BUILD "-CETCOMPAT" )
endif ( )
2022-05-06 22:59:36 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
2022-10-06 08:16:07 +08:00
if ( CMAKE_C_COMPILER_ID STREQUAL "MSVC" )
2022-06-16 02:48:54 +08:00
# Due to a limitation of Microsoft's LTO implementation, LTO must be disabled for memcpy and memset.
2022-07-27 03:47:52 +08:00
# The same applies to various functions normally belonging in the C library (for x86 architecture).
2022-10-06 08:16:07 +08:00
set_property ( SOURCE src/stdlib/SDL_mslibc.c APPEND_STRING PROPERTY COMPILE_FLAGS " /GL-" )
2022-06-16 02:48:54 +08:00
endif ( )
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 ;
2022-11-26 06:22:17 +08:00
} " C P U _ S U P P O R T S _ 3 D N O W )
if ( CPU_SUPPORTS_3DNOW )
set ( HAVE_3DNOW TRUE )
2015-06-21 23:33:46 +08:00
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-11-26 06:07:23 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; } " C P U _ S U P P O R T S _ S S E )
if ( CPU_SUPPORTS_SSE )
set ( HAVE_SSE ON )
2015-06-21 23:33:46 +08:00
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-11-25 08:27:44 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; } " C P U _ S U P P O R T S _ S S E 2 )
if ( CPU_SUPPORTS_SSE2 )
set ( HAVE_SSE2 TRUE )
2015-06-21 23:33:46 +08:00
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-11-25 08:27:44 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; } " C P U _ S U P P O R T S _ S S E 3 )
if ( CPU_SUPPORTS_SSE3 )
set ( HAVE_SSE3 TRUE )
2017-01-23 14:05:44 +08:00
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-11-25 08:27:44 +08:00
i n t main ( int argc, char **argv ) { r e t u r n 0 ; } " C P U _ S U P P O R T S _ A L T I V E C )
2015-06-21 23:33:46 +08:00
set ( CMAKE_REQUIRED_FLAGS ${ ORIG_CMAKE_REQUIRED_FLAGS } )
2022-11-25 08:27:44 +08:00
if ( CPU_SUPPORTS_ALTIVEC OR HAVE_ALTIVEC_H_HDR )
2015-06-21 23:33:46 +08:00
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
2022-11-25 09:18:16 +08:00
if ( SDL_LSX )
cmake_push_check_state ( )
list ( APPEND CMAKE_REQUIRED_FLAGS "-mlsx" )
check_c_source_compiles ( [[
#ifndef __loongarch_sx
#error Assembler CPP flag not enabled
#endif
] ] C P U _ H A S _ L S X )
check_include_file ( "lsxintrin.h" HAVE_LSXINTRIN_H )
cmake_pop_check_state ( )
if ( CPU_HAS_LSX AND HAVE_LSXINTRIN_H )
list ( APPEND EXTRA_CFLAGS "-mlsx" )
set ( HAS_LSX TRUE )
endif ( )
endif ( )
if ( SDL_LASX )
cmake_push_check_state ( )
list ( APPEND CMAKE_REQUIRED_FLAGS "-mlasx" )
check_c_source_compiles ( [[
#ifndef __loongarch_asx
#error Assembler CPP flag not enabled
#endif
] ] C P U _ H A S _ L A S X )
check_include_file ( "lasxintrin.h" HAVE_LASXINTRIN_H )
cmake_pop_check_state ( )
if ( CPU_HAS_LASX AND HAVE_LASXINTRIN_H )
list ( APPEND EXTRA_CFLAGS "-mlasx" )
set ( HAS_LASX TRUE )
endif ( )
endif ( )
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB ARMSIMD_SOURCES ${ SDL3_SOURCE_DIR } /src/video/arm/pixman-arm-simd*.S )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ ARMSIMD_SOURCES } )
2019-10-25 11:17:19 +08:00
set ( WARN_ABOUT_ARM_SIMD_ASM_MIT TRUE )
endif ( )
endif ( )
2021-10-05 22:43:35 +08:00
if ( SDL_ARMNEON )
2022-11-26 07:12:02 +08:00
cmake_push_check_state ( )
2019-10-25 11:17:19 +08:00
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 )
2022-11-26 07:12:02 +08:00
cmake_pop_check_state ( )
2019-10-25 11:17:19 +08:00
if ( ARMNEON_FOUND )
set ( HAVE_ARMNEON TRUE )
set ( SDL_ARM_NEON_BLITTERS 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB ARMNEON_SOURCES ${ SDL3_SOURCE_DIR } /src/video/arm/pixman-arm-neon*.S )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ ARMNEON_SOURCES } )
2019-10-25 11:17:19 +08:00
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
2022-11-26 09:11:32 +08:00
if ( SDL_CPU_X86 )
2022-11-25 08:27:44 +08:00
if ( SDL_MMX )
set ( HAVE_MMX TRUE )
endif ( )
if ( SDL_3DNOW )
set ( HAVE_3DNOW TRUE )
endif ( )
endif ( )
if ( SDL_SSE )
set ( HAVE_SSE TRUE )
endif ( )
if ( SDL_SSE2 )
set ( HAVE_SSE2 TRUE )
endif ( )
if ( SDL_SSE3 )
set ( HAVE_SSE3 TRUE )
2015-06-21 23:33:46 +08:00
endif ( )
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 )
2022-09-05 00:50:29 +08:00
check_include_file ( stdint.h HAVE_STDINT_H )
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
else ( )
set ( HAVE_LIBC TRUE )
2022-11-01 20:08:38 +08:00
set ( headers_to_check
c t y p e . h
f l o a t . h
i c o n v . h
i n t t y p e s . h
l i m i t s . h
m a l l o c . h
m a t h . h
m e m o r y . h
s i g n a l . h
s t d a r g . h
s t d d e f . h
s t d i n t . h
s t d i o . h
s t d l i b . h
s t r i n g . h
s t r i n g s . h
s y s / t y p e s . h
w c h a r . h
)
2022-11-01 20:09:29 +08:00
if ( NOT EMSCRIPTEN )
list ( APPEND headers_to_check libunwind.h )
endif ( )
2022-11-01 20:08:38 +08:00
foreach ( _HEADER ${ headers_to_check } )
2022-11-26 08:56:22 +08:00
string ( TOUPPER "${_HEADER}" HEADER_IDENTIFIER )
string ( REGEX REPLACE "[./]" "_" HEADER_IDENTIFIER "${HEADER_IDENTIFIER}" )
set ( LIBC_HAS_VAR "LIBC_HAS_${HEADER_IDENTIFIER}" )
check_include_file ( "${_HEADER}" "${LIBC_HAS_VAR}" )
set ( HAVE_ ${ HEADER_IDENTIFIER } ${ ${LIBC_HAS_VAR } } )
2015-06-21 23:33:46 +08:00
endforeach ( )
2022-11-12 02:24:17 +08:00
check_include_file ( linux/input.h HAVE_LINUX_INPUT_H )
2015-06-21 23:33:46 +08:00
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" )
2015-06-21 23:33:46 +08:00
# 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
2022-11-21 04:50:10 +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 s t r c a s e s t r
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 )
2022-11-26 08:56:22 +08:00
set ( LIBC_HAS_VAR "LIBC_HAS_${_UPPER}" )
check_symbol_exists ( "${_FN}" "${STDC_HEADER_NAMES}" ${ LIBC_HAS_VAR } )
set ( HAVE_ ${ _UPPER } ${ ${LIBC_HAS_VAR } } )
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 )
2022-11-26 08:56:22 +08:00
set ( LIBC_HASVAR "LIBC_HAS_${_UPPER}" )
check_symbol_exists ( "${_FN}" "math.h" ${ LIBC_HASVAR } )
set ( HAVE_ ${ _UPPER } ${ ${LIBC_HASVAR } } )
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 ( )
2022-10-06 08:37:50 +08:00
if ( SDL_SYSTEM_ICONV )
2022-10-05 23:12:08 +08:00
check_library_exists ( iconv iconv_open "" HAVE_LIBICONV )
if ( HAVE_LIBICONV )
list ( APPEND EXTRA_LIBS iconv )
2021-12-03 06:57:00 +08:00
set ( HAVE_ICONV 1 )
2022-10-06 08:37:50 +08:00
set ( HAVE_SYSTEM_ICONV TRUE )
2022-10-05 23:12:08 +08:00
else ( )
check_library_exists ( c iconv_open "" HAVE_BUILTIN_ICONV )
if ( HAVE_BUILTIN_ICONV )
set ( HAVE_ICONV 1 )
2022-10-06 08:37:50 +08:00
set ( HAVE_SYSTEM_ICONV TRUE )
2022-10-05 23:12:08 +08:00
endif ( )
2021-12-03 06:57:00 +08:00
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 )
2022-09-05 00:50:29 +08:00
check_include_file ( stdint.h HAVE_STDINT_H )
2015-06-21 23:33:46 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB DUMMYAUDIO_SOURCES ${ SDL3_SOURCE_DIR } /src/audio/dummy/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ DUMMYAUDIO_SOURCES } )
2015-06-21 23:33:46 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB DISKAUDIO_SOURCES ${ SDL3_SOURCE_DIR } /src/audio/disk/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ DISKAUDIO_SOURCES } )
2015-06-21 23:33:46 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB DLOPEN_SOURCES ${ SDL3_SOURCE_DIR } /src/loadso/dlopen/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ DLOPEN_SOURCES } )
2021-08-11 01:55:50 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB JOYSTICK_VIRTUAL_SOURCES ${ SDL3_SOURCE_DIR } /src/joystick/virtual/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ JOYSTICK_VIRTUAL_SOURCES } )
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
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB VIDEO_DUMMY_SOURCES ${ SDL3_SOURCE_DIR } /src/video/dummy/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND 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 ( )
endif ( )
2019-07-09 04:46:52 +08:00
# Platform-specific options and settings
2015-12-29 13:57:24 +08:00
if ( ANDROID )
2022-11-22 12:28:58 +08:00
file ( GLOB ANDROID_CORE_SOURCES ${ SDL3_SOURCE_DIR } /src/core/android/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ ANDROID_CORE_SOURCES } ${ ANDROID_NDK } /sources/android/cpufeatures/cpu-features.c )
2022-09-27 23:33:49 +08:00
set_property ( SOURCE "${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-declaration-after-statement" )
2017-06-05 02:25:57 +08:00
2022-01-09 23:00:22 +08:00
if ( SDL_MISC )
2022-11-22 12:28:58 +08:00
file ( GLOB ANDROID_MISC_SOURCES ${ SDL3_SOURCE_DIR } /src/misc/android/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ ANDROID_MISC_SOURCES } )
2022-01-09 23:00:22 +08:00
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
2022-11-25 05:38:13 +08:00
cmake_push_check_state ( )
2022-10-06 06:55:37 +08:00
set ( CMAKE_REQUIRED_FLAGS "-Werror=unused-command-line-argument" )
2017-06-05 02:25:57 +08:00
check_c_compiler_flag ( -marm HAVE_ARM_MODE )
if ( HAVE_ARM_MODE )
2022-11-22 12:28:58 +08:00
set_property ( SOURCE "${SDL3_SOURCE_DIR}/src/atomic/SDL_spinlock.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -marm" )
2017-06-05 02:25:57 +08:00
endif ( )
2022-10-06 06:55:37 +08:00
cmake_pop_check_state ( )
2017-06-05 02:25:57 +08:00
2022-11-22 12:28:58 +08:00
file ( GLOB ANDROID_MAIN_SOURCES ${ SDL3_SOURCE_DIR } /src/main/android/*.c )
2022-06-16 10:14:52 +08:00
list ( APPEND SDLMAIN_SOURCES ${ ANDROID_MAIN_SOURCES } )
2017-06-05 02:25:57 +08:00
2015-12-29 13:57:24 +08:00
if ( SDL_AUDIO )
set ( SDL_AUDIO_DRIVER_ANDROID 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB ANDROID_AUDIO_SOURCES ${ SDL3_SOURCE_DIR } /src/audio/android/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ ANDROID_AUDIO_SOURCES } )
2021-04-16 03:13:17 +08:00
set ( SDL_AUDIO_DRIVER_OPENSLES 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB OPENSLES_AUDIO_SOURCES ${ SDL3_SOURCE_DIR } /src/audio/openslES/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ OPENSLES_AUDIO_SOURCES } )
2021-04-16 03:13:17 +08:00
2022-07-26 05:46:36 +08:00
list ( APPEND EXTRA_LIBS ${ ANDROID_DL_LIBRARY } OpenSLES )
2021-04-16 15:44:07 +08:00
2021-08-11 05:50:43 +08:00
set ( SDL_AUDIO_DRIVER_AAUDIO 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB AAUDIO_AUDIO_SOURCES ${ SDL3_SOURCE_DIR } /src/audio/aaudio/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ AAUDIO_AUDIO_SOURCES } )
2021-04-16 03:13:17 +08:00
2015-12-29 13:57:24 +08:00
set ( HAVE_SDL_AUDIO TRUE )
endif ( )
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_ANDROID 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB ANDROID_FILESYSTEM_SOURCES ${ SDL3_SOURCE_DIR } /src/filesystem/android/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ ANDROID_FILESYSTEM_SOURCES } )
2015-12-29 13:57:24 +08:00
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
2017-08-27 12:17:12 +08:00
if ( SDL_HAPTIC )
set ( SDL_HAPTIC_ANDROID 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB ANDROID_HAPTIC_SOURCES ${ SDL3_SOURCE_DIR } /src/haptic/android/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ ANDROID_HAPTIC_SOURCES } )
2017-08-27 12:17:12 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB ANDROID_JOYSTICK_SOURCES ${ SDL3_SOURCE_DIR } /src/joystick/android/*.c ${ SDL3_SOURCE_DIR } /src/joystick/steam/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ ANDROID_JOYSTICK_SOURCES } )
2015-12-29 13:57:24 +08:00
set ( HAVE_SDL_JOYSTICK TRUE )
endif ( )
2017-06-09 03:07:55 +08:00
if ( SDL_LOADSO )
set ( SDL_LOADSO_DLOPEN 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB LOADSO_SOURCES ${ SDL3_SOURCE_DIR } /src/loadso/dlopen/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ LOADSO_SOURCES } )
2017-06-09 03:07:55 +08:00
set ( HAVE_SDL_LOADSO TRUE )
endif ( )
2015-12-29 13:57:24 +08:00
if ( SDL_POWER )
set ( SDL_POWER_ANDROID 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB ANDROID_POWER_SOURCES ${ SDL3_SOURCE_DIR } /src/power/android/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ ANDROID_POWER_SOURCES } )
2015-12-29 13:57:24 +08:00
set ( HAVE_SDL_POWER TRUE )
endif ( )
2020-05-04 14:27:29 +08:00
if ( SDL_LOCALE )
2022-11-22 12:28:58 +08:00
file ( GLOB ANDROID_LOCALE_SOURCES ${ SDL3_SOURCE_DIR } /src/locale/android/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ ANDROID_LOCALE_SOURCES } )
2020-05-04 14:27:29 +08:00
set ( HAVE_SDL_LOCALE TRUE )
endif ( )
2017-06-09 03:07:55 +08:00
if ( SDL_TIMERS )
set ( SDL_TIMER_UNIX 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB TIMER_SOURCES ${ SDL3_SOURCE_DIR } /src/timer/unix/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ TIMER_SOURCES } )
2017-06-09 03:07:55 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB ANDROID_SENSOR_SOURCES ${ SDL3_SOURCE_DIR } /src/sensor/android/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ ANDROID_SENSOR_SOURCES } )
2018-08-24 02:32:30 +08:00
endif ( )
2015-12-29 13:57:24 +08:00
if ( SDL_VIDEO )
set ( SDL_VIDEO_DRIVER_ANDROID 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB ANDROID_VIDEO_SOURCES ${ SDL3_SOURCE_DIR } /src/video/android/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ ANDROID_VIDEO_SOURCES } )
2015-12-29 13:57:24 +08:00
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
2022-07-26 05:46:36 +08:00
list ( APPEND EXTRA_LIBS dl log android )
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 )
2022-11-23 23:50:02 +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
2022-07-26 05:46:36 +08:00
list ( APPEND EXTRA_LIBS GLESv1_CM GLESv2 )
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 ( )
2022-06-24 20:41:06 +08:00
if ( SDL_CLOCK_GETTIME )
set ( HAVE_CLOCK_GETTIME 1 )
endif ( )
2017-06-09 03:07:55 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB EMSRIPTEN_MISC_SOURCES ${ SDL3_SOURCE_DIR } /src/misc/emscripten/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ EMSRIPTEN_MISC_SOURCES } )
2022-03-16 15:58:52 +08:00
set ( HAVE_SDL_MISC TRUE )
endif ( )
2015-06-21 23:33:46 +08:00
if ( SDL_AUDIO )
set ( SDL_AUDIO_DRIVER_EMSCRIPTEN 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB EM_AUDIO_SOURCES ${ SDL3_SOURCE_DIR } /src/audio/emscripten/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ EM_AUDIO_SOURCES } )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_AUDIO TRUE )
endif ( )
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_EMSCRIPTEN 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB EM_FILESYSTEM_SOURCES ${ SDL3_SOURCE_DIR } /src/filesystem/emscripten/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ EM_FILESYSTEM_SOURCES } )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
if ( SDL_JOYSTICK )
set ( SDL_JOYSTICK_EMSCRIPTEN 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB EM_JOYSTICK_SOURCES ${ SDL3_SOURCE_DIR } /src/joystick/emscripten/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ EM_JOYSTICK_SOURCES } )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_JOYSTICK TRUE )
endif ( )
if ( SDL_POWER )
set ( SDL_POWER_EMSCRIPTEN 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB EM_POWER_SOURCES ${ SDL3_SOURCE_DIR } /src/power/emscripten/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ EM_POWER_SOURCES } )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_POWER TRUE )
endif ( )
2020-05-04 14:27:29 +08:00
if ( SDL_LOCALE )
2022-11-22 12:28:58 +08:00
file ( GLOB LOCALE_SOURCES ${ SDL3_SOURCE_DIR } /src/locale/emscripten/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ LOCALE_SOURCES } )
2020-05-04 14:27:29 +08:00
set ( HAVE_SDL_LOCALE TRUE )
endif ( )
2016-09-13 15:03:40 +08:00
if ( SDL_TIMERS )
set ( SDL_TIMER_UNIX 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB TIMER_SOURCES ${ SDL3_SOURCE_DIR } /src/timer/unix/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ TIMER_SOURCES } )
2016-09-13 15:03:40 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB EM_VIDEO_SOURCES ${ SDL3_SOURCE_DIR } /src/video/emscripten/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ EM_VIDEO_SOURCES } )
2015-06-21 23:33:46 +08:00
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 ( )
2022-11-01 20:09:29 +08:00
if ( HAVE_LIBUNWIND_H )
list ( APPEND EXTRA_TEST_LIBS unwind )
endif ( )
2022-06-24 20:41:06 +08:00
elseif ( UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU )
2015-06-21 23:33:46 +08:00
if ( SDL_AUDIO )
2022-11-23 00:51:56 +08:00
if ( NETBSD )
2017-05-25 07:56:59 +08:00
set ( SDL_AUDIO_DRIVER_NETBSD 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB NETBSD_AUDIO_SOURCES ${ SDL3_SOURCE_DIR } /src/audio/netbsd/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ NETBSD_AUDIO_SOURCES } )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_AUDIO TRUE )
endif ( )
CheckOSS ( )
CheckALSA ( )
2022-11-23 11:50:20 +08:00
CheckJACK ( )
2021-02-14 00:56:05 +08:00
CheckPipewire ( )
2015-06-21 23:33:46 +08:00
CheckPulseAudio ( )
2022-11-23 03:04:10 +08:00
CheckSNDIO ( )
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 ( )
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB CORE_UNIX_SOURCES ${ SDL3_SOURCE_DIR } /src/core/unix/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ CORE_UNIX_SOURCES } )
2017-08-18 03:44:47 +08:00
2022-11-26 21:18:26 +08:00
if ( HAVE_LINUX_INPUT_H )
check_c_source_compiles ( "
#include <linux/input.h>
#ifndef EVIOCGNAME
#error EVIOCGNAME() ioctl not available
#endif
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 )
endif ( )
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-09-13 01:28:00 +08:00
#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
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 )
2022-11-25 09:39:50 +08:00
elseif ( OPENBSD OR NETBSD )
check_c_source_compiles ( "
#include <sys/time.h>
#include <dev/wscons/wsconsio.h>
#include <dev/wscons/wsksymdef.h>
#include <dev/wscons/wsksymvar.h>
#include <sys/ioctl.h>
i n t main ( int argc, char **argv ) {
s t r u c t w s k b d _ m a p _ d a t a d a t a ;
ioctl ( 0, WSKBDIO_GETMAP, &data ) ;
r e t u r n 0 ;
} " H A V E _ I N P U T _ W S C O N S )
2021-05-16 19:16:54 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB HAPTIC_SOURCES ${ SDL3_SOURCE_DIR } /src/haptic/linux/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ HAPTIC_SOURCES } )
2015-06-21 23:33:46 +08:00
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
2022-11-25 09:39:50 +08:00
if ( HAVE_INPUT_WSCONS )
set ( SDL_INPUT_WSCONS 1 )
endif ( )
2022-11-25 09:57:00 +08:00
CheckLibUDev ( )
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 )
2022-08-26 08:37:57 +08:00
if ( SDL_DBUS )
pkg_search_module ( DBUS dbus-1 dbus )
if ( DBUS_FOUND )
set ( HAVE_DBUS_DBUS_H TRUE )
target_include_directories ( sdl-build-options INTERFACE "${DBUS_INCLUDE_DIRS}" )
# Fcitx need only dbus.
set ( HAVE_FCITX TRUE )
set ( HAVE_DBUS TRUE )
endif ( )
2016-10-02 03:48:08 +08:00
endif ( )
2022-08-26 08:38:54 +08:00
if ( SDL_IBUS )
pkg_search_module ( IBUS ibus-1.0 ibus )
find_path ( HAVE_SYS_INOTIFY_H NAMES sys/inotify.h )
if ( IBUS_FOUND AND HAVE_SYS_INOTIFY_H )
set ( HAVE_IBUS_IBUS_H TRUE )
target_include_directories ( sdl-build-options INTERFACE "${IBUS_INCLUDE_DIRS}" )
set ( HAVE_IBUS TRUE )
endif ( )
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 )
2022-05-29 18:38:56 +08:00
# We've already found the header, so link the lib if present.
# NB: This .pc file is not present on FreeBSD where the implicitly
# linked base system libgcc_s includes all libunwind ABI.
pkg_search_module ( UNWIND libunwind )
2022-01-08 03:17:47 +08:00
pkg_search_module ( UNWIND_GENERIC libunwind-generic )
2022-06-14 00:35:32 +08:00
list ( APPEND EXTRA_TEST_LIBS ${ UNWIND_LIBRARIES } ${ UNWIND_GENERIC_LIBRARIES } )
2018-09-29 12:03:39 +08:00
endif ( )
2016-10-02 03:48:08 +08:00
endif ( )
2020-06-27 05:42:30 +08:00
if ( HAVE_DBUS_DBUS_H )
2022-11-22 12:28:58 +08:00
list ( APPEND SOURCE_FILES "${SDL3_SOURCE_DIR}/src/core/linux/SDL_dbus.c" )
2020-06-27 05:42:30 +08:00
endif ( )
if ( SDL_USE_IME )
2022-11-22 12:28:58 +08:00
list ( APPEND SOURCE_FILES "${SDL3_SOURCE_DIR}/src/core/linux/SDL_ime.c" )
2020-06-27 05:42:30 +08:00
endif ( )
if ( HAVE_IBUS_IBUS_H )
2022-11-22 12:28:58 +08:00
list ( APPEND SOURCE_FILES "${SDL3_SOURCE_DIR}/src/core/linux/SDL_ibus.c" )
2020-06-27 05:42:30 +08:00
endif ( )
if ( HAVE_FCITX )
2022-11-22 12:28:58 +08:00
list ( APPEND SOURCE_FILES "${SDL3_SOURCE_DIR}/src/core/linux/SDL_fcitx.c" )
2020-06-27 05:42:30 +08:00
endif ( )
if ( HAVE_LIBUDEV_H )
2022-11-22 12:28:58 +08:00
list ( APPEND SOURCE_FILES "${SDL3_SOURCE_DIR}/src/core/linux/SDL_udev.c" )
2020-06-27 05:42:30 +08:00
endif ( )
if ( HAVE_INPUT_EVENTS )
2022-11-22 12:28:58 +08:00
list ( APPEND SOURCE_FILES "${SDL3_SOURCE_DIR}/src/core/linux/SDL_evdev.c" )
list ( APPEND SOURCE_FILES "${SDL3_SOURCE_DIR}/src/core/linux/SDL_evdev_kbd.c" )
2020-06-27 05:42:30 +08:00
endif ( )
2021-10-31 08:54:20 +08:00
2021-05-16 19:16:54 +08:00
if ( HAVE_INPUT_KBIO )
2022-11-22 12:28:58 +08:00
list ( APPEND SOURCE_FILES "${SDL3_SOURCE_DIR}/src/core/freebsd/SDL_evdev_kbd_freebsd.c" )
2021-05-16 19:16:54 +08:00
endif ( )
2020-06-27 05:42:30 +08:00
# Always compiled for Linux, unconditionally:
2022-11-22 12:28:58 +08:00
list ( APPEND SOURCE_FILES "${SDL3_SOURCE_DIR}/src/core/linux/SDL_evdev_capabilities.c" )
list ( APPEND SOURCE_FILES "${SDL3_SOURCE_DIR}/src/core/linux/SDL_threadprio.c" )
list ( APPEND SOURCE_FILES "${SDL3_SOURCE_DIR}/src/core/linux/SDL_sandbox.c" )
2020-06-27 05:42:30 +08:00
# 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 ( )
2022-11-12 02:24:17 +08:00
if ( LINUX AND HAVE_LINUX_INPUT_H AND NOT ANDROID )
2015-06-21 23:33:46 +08:00
set ( SDL_JOYSTICK_LINUX 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB JOYSTICK_SOURCES ${ SDL3_SOURCE_DIR } /src/joystick/linux/*.c ${ SDL3_SOURCE_DIR } /src/joystick/steam/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ JOYSTICK_SOURCES } )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_JOYSTICK TRUE )
endif ( )
endif ( )
CheckPTHREAD ( )
2021-10-05 22:43:35 +08:00
if ( SDL_CLOCK_GETTIME )
2022-09-27 08:30:43 +08:00
check_library_exists ( rt clock_gettime "" FOUND_CLOCK_GETTIME_LIBRT )
if ( FOUND_CLOCK_GETTIME_LIBRT )
2015-06-21 23:33:46 +08:00
list ( APPEND EXTRA_LIBS rt )
set ( HAVE_CLOCK_GETTIME 1 )
else ( )
2022-09-27 08:30:43 +08:00
check_library_exists ( c clock_gettime "" FOUND_CLOCK_GETTIME_LIBC )
if ( FOUND_CLOCK_GETTIME_LIBC )
2015-06-21 23:33:46 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB MISC_SOURCES ${ SDL3_SOURCE_DIR } /src/misc/unix/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ MISC_SOURCES } )
2022-01-09 23:00:22 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB POWER_SOURCES ${ SDL3_SOURCE_DIR } /src/power/linux/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ POWER_SOURCES } )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_POWER TRUE )
endif ( )
endif ( )
2020-05-04 14:27:29 +08:00
if ( SDL_LOCALE )
2022-11-22 12:28:58 +08:00
file ( GLOB LOCALE_SOURCES ${ SDL3_SOURCE_DIR } /src/locale/unix/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ LOCALE_SOURCES } )
2020-05-04 14:27:29 +08:00
set ( HAVE_SDL_LOCALE TRUE )
endif ( )
2015-06-21 23:33:46 +08:00
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_UNIX 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB FILESYSTEM_SOURCES ${ SDL3_SOURCE_DIR } /src/filesystem/unix/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ FILESYSTEM_SOURCES } )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
if ( SDL_TIMERS )
set ( SDL_TIMER_UNIX 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB TIMER_SOURCES ${ SDL3_SOURCE_DIR } /src/timer/unix/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ TIMER_SOURCES } )
2015-06-21 23:33:46 +08:00
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
2022-11-22 12:28:58 +08:00
file ( GLOB CORE_SOURCES ${ SDL3_SOURCE_DIR } /src/core/windows/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ CORE_SOURCES } )
2015-06-21 23:33:46 +08:00
2022-11-24 02:41:43 +08:00
if ( WINDOWS_STORE )
file ( GLOB WINRT_SOURCE_FILES ${ SDL3_SOURCE_DIR } /src/core/winrt/*.c ${ SDL3_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-11-26 09:11:32 +08:00
if ( SDL_CPU_X86 )
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 )
2022-11-24 02:41:43 +08:00
if ( WINDOWS_STORE )
file ( GLOB MISC_SOURCES ${ SDL3_SOURCE_DIR } /src/misc/winrt/*.cpp )
else ( )
file ( GLOB MISC_SOURCES ${ SDL3_SOURCE_DIR } /src/misc/windows/*.c )
endif ( )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ MISC_SOURCES } )
2022-01-09 23:00:22 +08:00
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 )
2022-06-08 07:11:25 +08:00
check_c_source_compiles ( "
#include <winsdkver.h>
#include <sdkddkver.h>
2022-06-08 13:19:58 +08:00
#include <d3d12.h>
2022-06-19 16:04:24 +08:00
I D 3 D 1 2 D e v i c e 1 * d e v i c e ;
2022-06-08 07:11:25 +08:00
#if WDK_NTDDI_VERSION > 0x0A000008
i n t main ( int argc, char **argv ) { r e t u r n 0 ; }
#endif" HAVE_D3D12_H)
2015-06-21 23:33:46 +08:00
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-11-24 02:41: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 )
2022-06-07 08:42:30 +08:00
if ( HAVE_D3D_H OR HAVE_D3D11_H OR HAVE_D3D12_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 )
2022-06-19 02:51:32 +08:00
check_include_file ( shellscalingapi.h HAVE_SHELLSCALINGAPI_H )
2018-09-28 18:41:04 +08:00
2015-06-21 23:33:46 +08:00
if ( SDL_AUDIO )
2022-11-24 02:41:43 +08:00
if ( HAVE_DSOUND_H AND NOT WINDOWS_STORE )
2015-06-21 23:33:46 +08:00
set ( SDL_AUDIO_DRIVER_DSOUND 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB DSOUND_AUDIO_SOURCES ${ SDL3_SOURCE_DIR } /src/audio/directsound/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND 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 )
2022-11-22 12:28:58 +08:00
file ( GLOB WASAPI_AUDIO_SOURCES ${ SDL3_SOURCE_DIR } /src/audio/wasapi/*.c )
2022-11-24 02:41:43 +08:00
if ( WINDOWS_STORE )
list ( APPEND WASAPI_AUDIO_SOURCES ${ SDL3_SOURCE_DIR } /src/audio/wasapi/SDL_wasapi_winrt.cpp )
endif ( )
2022-06-15 09:03:33 +08:00
list ( APPEND 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 ( )
2022-11-24 02:41:43 +08:00
if ( WINDOWS_STORE )
set ( SDL_VIDEO_DRIVER_WINRT 1 )
file ( GLOB WIN_VIDEO_SOURCES
$ { S D L 3 _ S O U R C E _ D I R } / s r c / v i d e o / w i n r t / * . c
$ { S D L 3 _ 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 3 _ 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 ( )
set ( SDL_VIDEO_DRIVER_WINDOWS 1 )
file ( GLOB WIN_VIDEO_SOURCES ${ SDL3_SOURCE_DIR } /src/video/windows/*.c )
endif ( )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ WIN_VIDEO_SOURCES } )
2015-06-21 23:33:46 +08:00
2022-11-24 02:41:43 +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 ( )
2022-11-24 02:41:43 +08:00
if ( SDL_RENDER_D3D AND HAVE_D3D12_H AND NOT WINDOWS_STORE )
2022-06-07 08:42:30 +08:00
set ( SDL_VIDEO_RENDER_D3D12 1 )
set ( HAVE_RENDER_D3D TRUE )
endif ( )
2015-06-21 23:33:46 +08:00
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 )
2022-06-17 01:59:57 +08:00
list ( APPEND SOURCE_FILES
2022-11-22 12:28:58 +08:00
$ { S D L 3 _ 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
$ { S D L 3 _ 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
$ { S D L 3 _ 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 3 _ 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 3 _ 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
$ { S D L 3 _ 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 ( )
2022-11-24 02:41:43 +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 )
2022-11-22 12:28:58 +08:00
file ( GLOB WINDOWS_SENSOR_SOURCES ${ SDL3_SOURCE_DIR } /src/sensor/windows/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ WINDOWS_SENSOR_SOURCES } )
2020-04-08 23:34:27 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
if ( SDL_POWER )
2022-11-24 02:41:43 +08:00
if ( WINDOWS_STORE )
set ( SDL_POWER_WINRT 1 )
list ( APPEND SOURCE_FILES ${ SDL3_SOURCE_DIR } /src/power/winrt/SDL_syspower.cpp )
else ( )
set ( SDL_POWER_WINDOWS 1 )
list ( APPEND SOURCE_FILES ${ SDL3_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 )
2022-11-24 02:41:43 +08:00
if ( WINDOWS_STORE )
file ( GLOB LOCALE_SOURCES ${ SDL3_SOURCE_DIR } /src/locale/winrt/*.c )
else ( )
file ( GLOB LOCALE_SOURCES ${ SDL3_SOURCE_DIR } /src/locale/windows/*.c )
endif ( )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ LOCALE_SOURCES } )
2020-05-04 14:27:29 +08:00
set ( HAVE_SDL_LOCALE TRUE )
endif ( )
2015-06-21 23:33:46 +08:00
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_WINDOWS 1 )
2022-11-24 02:41:43 +08:00
if ( WINDOWS_STORE )
file ( GLOB FILESYSTEM_SOURCES ${ SDL3_SOURCE_DIR } /src/filesystem/winrt/*.cpp )
else ( )
file ( GLOB FILESYSTEM_SOURCES ${ SDL3_SOURCE_DIR } /src/filesystem/windows/*.c )
endif ( )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ FILESYSTEM_SOURCES } )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
# Libraries for Win32 native and MinGW
2022-11-24 02:41:43 +08:00
if ( NOT WINDOWS_STORE )
list ( APPEND EXTRA_LIBS user32 gdi32 winmm imm32 ole32 oleaut32 version uuid advapi32 setupapi shell32 )
endif ( )
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 ( )
2021-04-08 20:28:45 +08:00
2015-06-21 23:33:46 +08:00
if ( SDL_TIMERS )
set ( SDL_TIMER_WINDOWS 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB TIMER_SOURCES ${ SDL3_SOURCE_DIR } /src/timer/windows/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ TIMER_SOURCES } )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_TIMERS TRUE )
endif ( )
if ( SDL_LOADSO )
set ( SDL_LOADSO_WINDOWS 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB LOADSO_SOURCES ${ SDL3_SOURCE_DIR } /src/loadso/windows/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ LOADSO_SOURCES } )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_LOADSO TRUE )
endif ( )
2022-11-22 12:28:58 +08:00
file ( GLOB CORE_SOURCES ${ SDL3_SOURCE_DIR } /src/core/windows/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ CORE_SOURCES } )
2015-06-21 23:33:46 +08:00
if ( SDL_VIDEO )
2022-11-24 02:41:43 +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 )
2022-11-22 12:28:58 +08:00
file ( GLOB JOYSTICK_SOURCES ${ SDL3_SOURCE_DIR } /src/joystick/windows/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ JOYSTICK_SOURCES } )
2021-11-23 22:04:40 +08:00
2022-11-24 02:41:43 +08:00
if ( NOT WINDOWS_STORE )
set ( SDL_JOYSTICK_RAWINPUT 1 )
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-11-24 02:41:43 +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-11-24 02:41:43 +08:00
if ( ( HAVE_DINPUT_H OR HAVE_XINPUT_H ) AND NOT WINDOWS_STORE )
2022-11-22 12:28:58 +08:00
file ( GLOB HAPTIC_SOURCES ${ SDL3_SOURCE_DIR } /src/haptic/windows/*.c )
2015-06-21 23:33:46 +08:00
if ( HAVE_DINPUT_H )
set ( SDL_HAPTIC_DINPUT 1 )
endif ( )
if ( HAVE_XINPUT_H )
set ( SDL_HAPTIC_XINPUT 1 )
endif ( )
else ( )
2022-11-22 12:28:58 +08:00
file ( GLOB HAPTIC_SOURCES ${ SDL3_SOURCE_DIR } /src/haptic/dummy/*.c )
2015-06-21 23:33:46 +08:00
set ( SDL_HAPTIC_DUMMY 1 )
endif ( )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ HAPTIC_SOURCES } )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_HAPTIC TRUE )
endif ( )
endif ( )
2022-11-22 12:28:58 +08:00
file ( GLOB VERSION_SOURCES ${ SDL3_SOURCE_DIR } /src/main/windows/*.rc )
file ( GLOB SDLMAIN_SOURCES ${ SDL3_SOURCE_DIR } /src/main/windows/*.c )
2015-06-21 23:33:46 +08:00
if ( MINGW OR CYGWIN )
2022-11-22 12:28:58 +08:00
if ( NOT SDL3_DISABLE_SDL3MAIN )
2022-06-15 23:10:31 +08:00
list ( APPEND SDL_CFLAGS "-Dmain=SDL_main" )
2022-11-22 12:28:58 +08:00
list ( INSERT SDL_LIBS 0 "-lSDL3main" )
endif ( NOT SDL3_DISABLE_SDL3MAIN )
2022-07-24 00:05:35 +08:00
list ( INSERT SDL_LIBS 0 "-lmingw32" "-mwindows" )
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 )
2022-11-26 08:00:06 +08:00
# TODO: rework this all for proper macOS, iOS and Darwin support
2017-08-19 08:25:14 +08:00
# 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 )
2022-11-22 12:28:58 +08:00
file ( GLOB EXTRA_SOURCES ${ SDL3_SOURCE_DIR } /src/file/cocoa/*.m )
2022-06-17 01:59:57 +08:00
list ( APPEND SOURCE_FILES ${ EXTRA_SOURCES } )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_FILE TRUE )
endif ( )
2022-01-10 00:00:41 +08:00
if ( IOS OR TVOS )
2022-11-22 12:28:58 +08:00
file ( GLOB SDLMAIN_SOURCES ${ SDL3_SOURCE_DIR } /src/main/uikit/*.c )
2022-01-10 00:00:41 +08:00
endif ( )
2022-01-09 23:00:22 +08:00
if ( SDL_MISC )
if ( IOS OR TVOS )
2022-11-22 12:28:58 +08:00
file ( GLOB MISC_SOURCES ${ SDL3_SOURCE_DIR } /src/misc/ios/*.m )
2022-01-09 23:00:22 +08:00
else ( )
2022-11-26 08:00:06 +08:00
file ( GLOB MISC_SOURCES ${ SDL3_SOURCE_DIR } /src/misc/macos/*.m )
2022-01-09 23:00:22 +08:00
endif ( )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ MISC_SOURCES } )
2022-01-09 23:00:22 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB AUDIO_SOURCES ${ SDL3_SOURCE_DIR } /src/audio/coreaudio/*.m )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ AUDIO_SOURCES } )
2015-06-21 23:33:46 +08:00
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 )
2022-11-26 08:00:06 +08:00
file ( GLOB MFI_JOYSTICK_SOURCES ${ SDL3_SOURCE_DIR } /src/joystick/apple/*.m )
2019-08-28 00:30:20 +08:00
if ( IOS OR TVOS )
2022-11-22 12:28:58 +08:00
file ( GLOB JOYSTICK_SOURCES ${ SDL3_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 ( )
2022-11-22 12:28:58 +08:00
file ( GLOB JOYSTICK_SOURCES ${ SDL3_SOURCE_DIR } /src/joystick/darwin/*.c )
2022-10-06 11:04:51 +08:00
set_property ( SOURCE ${ MFI_JOYSTICK_SOURCES } APPEND_STRING PROPERTY COMPILE_FLAGS " -fobjc-weak" )
2021-11-21 07:05:28 +08:00
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 ( )
2022-06-15 09:03:33 +08:00
list ( APPEND 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 )
2022-11-22 12:28:58 +08:00
file ( GLOB HAPTIC_SOURCES ${ SDL3_SOURCE_DIR } /src/haptic/dummy/*.c )
2016-10-02 03:54:48 +08:00
set ( SDL_HAPTIC_DUMMY 1 )
else ( )
2022-11-22 12:28:58 +08:00
file ( GLOB HAPTIC_SOURCES ${ SDL3_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 ( )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ HAPTIC_SOURCES } )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_HAPTIC TRUE )
endif ( )
if ( SDL_POWER )
2019-08-28 00:30:20 +08:00
if ( IOS OR TVOS )
2022-11-22 12:28:58 +08:00
file ( GLOB POWER_SOURCES ${ SDL3_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 ( )
2022-11-26 08:00:06 +08:00
file ( GLOB POWER_SOURCES ${ SDL3_SOURCE_DIR } /src/power/macos/*.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 ( )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ POWER_SOURCES } )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_POWER TRUE )
endif ( )
2020-05-04 14:27:29 +08:00
if ( SDL_LOCALE )
2022-11-26 08:00:06 +08:00
file ( GLOB LOCALE_SOURCES ${ SDL3_SOURCE_DIR } /src/locale/macos/*.m )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ LOCALE_SOURCES } )
2020-05-04 14:27:29 +08:00
set ( HAVE_SDL_LOCALE TRUE )
endif ( )
2015-06-21 23:33:46 +08:00
if ( SDL_TIMERS )
set ( SDL_TIMER_UNIX 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB TIMER_SOURCES ${ SDL3_SOURCE_DIR } /src/timer/unix/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ TIMER_SOURCES } )
2015-06-21 23:33:46 +08:00
set ( HAVE_SDL_TIMERS TRUE )
endif ( SDL_TIMERS )
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_COCOA 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB FILESYSTEM_SOURCES ${ SDL3_SOURCE_DIR } /src/filesystem/cocoa/*.m )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ FILESYSTEM_SOURCES } )
2015-06-21 23:33:46 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB SENSOR_SOURCES ${ SDL3_SOURCE_DIR } /src/sensor/coremotion/*.m )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ SENSOR_SOURCES } )
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 ( )
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB UIKITVIDEO_SOURCES ${ SDL3_SOURCE_DIR } /src/video/uikit/*.m )
2022-06-15 09:03:33 +08:00
list ( APPEND 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 )
2022-11-23 23:50:02 +08:00
if ( IOS OR TVOS )
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB RENDER_METAL_SOURCES ${ SDL3_SOURCE_DIR } /src/render/metal/*.m )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ RENDER_METAL_SOURCES } )
2022-01-10 22:39:42 +08:00
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 )
2022-07-26 05:06:52 +08:00
list ( APPEND EXTRA_LDFLAGS "-Wl,-framework,CoreVideo" )
2015-06-21 23:33:46 +08:00
endif ( )
if ( SDL_FRAMEWORK_COCOA )
2022-07-26 05:06:52 +08:00
list ( APPEND EXTRA_LDFLAGS "-Wl,-framework,Cocoa" )
2015-06-21 23:33:46 +08:00
endif ( )
if ( SDL_FRAMEWORK_IOKIT )
2022-07-26 05:06:52 +08:00
list ( APPEND EXTRA_LDFLAGS "-Wl,-framework,IOKit" )
2015-06-21 23:33:46 +08:00
endif ( )
if ( SDL_FRAMEWORK_FF )
2022-07-26 05:06:52 +08:00
list ( APPEND EXTRA_LDFLAGS "-Wl,-framework,ForceFeedback" )
2015-06-21 23:33:46 +08:00
endif ( )
if ( SDL_FRAMEWORK_CARBON )
2022-07-26 05:06:52 +08:00
list ( APPEND EXTRA_LDFLAGS "-Wl,-framework,Carbon" )
2015-06-21 23:33:46 +08:00
endif ( )
2016-09-15 23:57:56 +08:00
if ( SDL_FRAMEWORK_COREAUDIO )
2022-07-26 05:06:52 +08:00
list ( APPEND EXTRA_LDFLAGS "-Wl,-framework,CoreAudio" )
2016-09-15 23:57:56 +08:00
endif ( )
if ( SDL_FRAMEWORK_AUDIOTOOLBOX )
2022-07-26 05:06:52 +08:00
list ( APPEND EXTRA_LDFLAGS "-Wl,-framework,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 )
2022-07-26 05:06:52 +08:00
list ( APPEND EXTRA_LDFLAGS "-Wl,-framework,AVFoundation" )
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 ( )
if ( SDL_FRAMEWORK_COREBLUETOOTH )
2022-07-26 05:06:52 +08:00
list ( APPEND EXTRA_LDFLAGS "-Wl,-framework,CoreBluetooth" )
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 ( )
if ( SDL_FRAMEWORK_COREGRAPHICS )
2022-07-26 05:06:52 +08:00
list ( APPEND EXTRA_LDFLAGS "-Wl,-framework,CoreGraphics" )
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 ( )
if ( SDL_FRAMEWORK_COREMOTION )
2022-07-26 05:06:52 +08:00
list ( APPEND EXTRA_LDFLAGS "-Wl,-framework,CoreMotion" )
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 ( )
if ( SDL_FRAMEWORK_FOUNDATION )
2022-07-26 05:06:52 +08:00
list ( APPEND EXTRA_LDFLAGS "-Wl,-framework,Foundation" )
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 ( )
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 )
2022-07-26 05:06:52 +08:00
list ( APPEND EXTRA_LDFLAGS "-Wl,-framework,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 ( )
2022-11-23 23:50:02 +08:00
if ( SDL_FRAMEWORK_OPENGLES )
list ( APPEND EXTRA_LDFLAGS "-Wl,-framework,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 )
2022-07-26 05:06:52 +08:00
list ( APPEND EXTRA_LDFLAGS "-Wl,-framework,QuartzCore" )
2019-08-05 23:35:32 +08:00
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 )
2022-07-26 05:06:52 +08:00
list ( APPEND EXTRA_LDFLAGS "-Wl,-framework,UIKit" )
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 ( )
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB HAIKU_AUDIO_SOURCES ${ SDL3_SOURCE_DIR } /src/audio/haiku/*.cc )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ HAIKU_AUDIO_SOURCES } )
2021-07-24 23:02:27 +08:00
set ( HAVE_SDL_AUDIO TRUE )
endif ( )
if ( SDL_JOYSTICK )
set ( SDL_JOYSTICK_HAIKU 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB HAIKU_JOYSTICK_SOURCES ${ SDL3_SOURCE_DIR } /src/joystick/haiku/*.cc )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ HAIKU_JOYSTICK_SOURCES } )
2021-07-24 23:02:27 +08:00
set ( HAVE_SDL_JOYSTICK TRUE )
endif ( )
2022-01-09 23:00:22 +08:00
if ( SDL_MISC )
2022-11-22 12:28:58 +08:00
file ( GLOB MISC_SOURCES ${ SDL3_SOURCE_DIR } /src/misc/haiku/*.cc )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ MISC_SOURCES } )
2022-01-09 23:00:22 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB HAIKUVIDEO_SOURCES ${ SDL3_SOURCE_DIR } /src/video/haiku/*.cc )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ HAIKUVIDEO_SOURCES } )
2015-06-21 23:33:46 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB FILESYSTEM_SOURCES ${ SDL3_SOURCE_DIR } /src/filesystem/haiku/*.cc )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ FILESYSTEM_SOURCES } )
2021-07-24 23:02:27 +08:00
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
2020-04-24 14:06:53 +08:00
if ( SDL_TIMERS )
set ( SDL_TIMER_HAIKU 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB TIMER_SOURCES ${ SDL3_SOURCE_DIR } /src/timer/haiku/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ TIMER_SOURCES } )
2020-04-24 14:06:53 +08:00
set ( HAVE_SDL_TIMERS TRUE )
endif ( )
2021-07-24 23:02:27 +08:00
if ( SDL_POWER )
set ( SDL_POWER_HAIKU 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB HAIKU_POWER_SOURCES ${ SDL3_SOURCE_DIR } /src/power/haiku/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ HAIKU_POWER_SOURCES } )
2021-07-24 23:02:27 +08:00
set ( HAVE_SDL_POWER TRUE )
endif ( )
2020-05-04 14:27:29 +08:00
if ( SDL_LOCALE )
2022-11-22 12:28:58 +08:00
file ( GLOB LOCALE_SOURCES ${ SDL3_SOURCE_DIR } /src/locale/haiku/*.cc )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ LOCALE_SOURCES } )
2020-05-04 14:27:29 +08:00
set ( HAVE_SDL_LOCALE TRUE )
endif ( )
2022-11-22 12:28:58 +08:00
file ( GLOB MAIN_SOURCES ${ SDL3_SOURCE_DIR } /src/main/haiku/*.cc )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ MAIN_SOURCES } )
2021-07-24 23:02:27 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB MISC_SOURCES ${ SDL3_SOURCE_DIR } /src/misc/riscos/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ MISC_SOURCES } )
2022-01-09 23:00:22 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB RISCOSVIDEO_SOURCES ${ SDL3_SOURCE_DIR } /src/video/riscos/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ RISCOSVIDEO_SOURCES } )
2020-02-14 05:55:08 +08:00
set ( HAVE_SDL_VIDEO TRUE )
endif ( )
2020-02-14 06:32:35 +08:00
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_RISCOS 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB FILESYSTEM_SOURCES ${ SDL3_SOURCE_DIR } /src/filesystem/riscos/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ FILESYSTEM_SOURCES } )
2020-02-14 06:32:35 +08:00
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
2020-02-14 04:50:47 +08:00
if ( SDL_TIMERS )
set ( SDL_TIMER_UNIX 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB TIMER_SOURCES ${ SDL3_SOURCE_DIR } /src/timer/unix/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ TIMER_SOURCES } )
2020-02-14 04:50:47 +08:00
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.
2022-11-25 05:38:13 +08:00
cmake_push_check_state ( )
2022-10-06 06:55:37 +08:00
set ( CMAKE_REQUIRED_FLAGS "-Werror=unused-command-line-argument" )
2020-12-18 21:42:57 +08:00
check_c_compiler_flag ( -marm HAVE_ARM_MODE )
if ( HAVE_ARM_MODE )
2022-11-22 12:28:58 +08:00
set_property ( SOURCE "${SDL3_SOURCE_DIR}/src/atomic/SDL_spinlock.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -marm" )
2020-12-18 21:42:57 +08:00
endif ( )
2022-10-06 06:55:37 +08:00
cmake_pop_check_state ( )
2020-12-18 21:42:57 +08:00
2022-01-09 23:00:22 +08:00
if ( SDL_MISC )
2022-11-22 12:28:58 +08:00
file ( GLOB MISC_SOURCES ${ SDL3_SOURCE_DIR } /src/misc/vita/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ MISC_SOURCES } )
2022-01-09 23:00:22 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB VITA_AUDIO_SOURCES ${ SDL3_SOURCE_DIR } /src/audio/vita/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ VITA_AUDIO_SOURCES } )
2020-12-18 21:42:57 +08:00
set ( HAVE_SDL_AUDIO TRUE )
endif ( )
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_VITA 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB VITA_FILESYSTEM_SOURCES ${ SDL3_SOURCE_DIR } /src/filesystem/vita/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ VITA_FILESYSTEM_SOURCES } )
2020-12-18 21:42:57 +08:00
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
if ( SDL_JOYSTICK )
set ( SDL_JOYSTICK_VITA 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB VITA_JOYSTICK_SOURCES ${ SDL3_SOURCE_DIR } /src/joystick/vita/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ VITA_JOYSTICK_SOURCES } )
2020-12-18 21:42:57 +08:00
set ( HAVE_SDL_JOYSTICK TRUE )
endif ( )
if ( SDL_POWER )
set ( SDL_POWER_VITA 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB VITA_POWER_SOURCES ${ SDL3_SOURCE_DIR } /src/power/vita/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ VITA_POWER_SOURCES } )
2020-12-18 21:42:57 +08:00
set ( HAVE_SDL_POWER TRUE )
endif ( )
if ( SDL_THREADS )
set ( SDL_THREAD_VITA 1 )
2022-06-17 01:59:57 +08:00
list ( APPEND SOURCE_FILES
2022-11-22 12:28:58 +08:00
$ { S D L 3 _ 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 3 _ 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 3 _ 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 3 _ 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 3 _ 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 )
2020-12-18 21:42:57 +08:00
set ( HAVE_SDL_THREADS TRUE )
endif ( )
2022-03-30 05:12:42 +08:00
if ( SDL_LOCALE )
2022-11-22 12:28:58 +08:00
file ( GLOB LOCALE_SOURCES ${ SDL3_SOURCE_DIR } /src/locale/vita/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ LOCALE_SOURCES } )
2022-03-30 05:12:42 +08:00
set ( HAVE_SDL_LOCALE TRUE )
endif ( )
2020-12-18 21:42:57 +08:00
if ( SDL_TIMERS )
set ( SDL_TIMER_VITA 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB TIMER_SOURCES ${ SDL3_SOURCE_DIR } /src/timer/vita/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ TIMER_SOURCES } )
2020-12-18 21:42:57 +08:00
set ( HAVE_SDL_TIMERS TRUE )
endif ( )
if ( SDL_SENSOR )
set ( SDL_SENSOR_VITA 1 )
set ( HAVE_SDL_SENSORS TRUE )
2022-11-22 12:28:58 +08:00
file ( GLOB VITA_SENSOR_SOURCES ${ SDL3_SOURCE_DIR } /src/sensor/vita/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ VITA_SENSOR_SOURCES } )
2020-12-18 21:42:57 +08:00
endif ( )
if ( SDL_VIDEO )
set ( SDL_VIDEO_DRIVER_VITA 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB VITA_VIDEO_SOURCES ${ SDL3_SOURCE_DIR } /src/video/vita/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ VITA_VIDEO_SOURCES } )
2020-12-18 21:42:57 +08:00
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 )
2022-11-23 23:50:02 +08:00
set ( SDL_VIDEO_OPENGL_ES 1 )
set ( SDL_VIDEO_RENDER_OGL_ES 1 )
2021-08-17 00:08:12 +08:00
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
2022-05-09 00:36:22 +08:00
S c e A p p U t i l _ s t u b
2021-03-08 23:39:00 +08:00
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 ( )
2022-07-22 01:30:33 +08:00
set ( HAVE_ARMSIMD TRUE )
2021-12-15 06:20:51 +08:00
# set(SDL_ARM_SIMD_BLITTERS 1)
2022-11-22 12:28:58 +08:00
# file(GLOB ARMSIMD_SOURCES ${SDL3_SOURCE_DIR}/src/video/arm/pixman-arm-simd*.S)
2022-06-15 09:03:33 +08:00
# list(APPEND SOURCE_FILES ${ARMSIMD_SOURCES})
2020-12-18 21:42:57 +08:00
2022-07-22 01:30:33 +08:00
set ( HAVE_ARMNEON TRUE )
2021-12-15 06:20:51 +08:00
# set(SDL_ARM_NEON_BLITTERS 1)
2022-11-22 12:28:58 +08:00
# file(GLOB ARMNEON_SOURCES ${SDL3_SOURCE_DIR}/src/video/arm/pixman-arm-neon*.S)
2022-06-15 09:03:33 +08:00
# list(APPEND SOURCE_FILES ${ARMNEON_SOURCES})
2020-12-18 21:42:57 +08:00
2022-11-22 12:28:58 +08:00
# set_property(SOURCE ${SDL3_SOURCE_DIR}/src/video/arm/pixman-arm-simd-asm.S PROPERTY LANGUAGE C)
# set_property(SOURCE ${SDL3_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__" )
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB PSP_MAIN_SOURCES ${ SDL3_SOURCE_DIR } /src/main/psp/*.c )
2022-06-16 10:14:52 +08:00
list ( APPEND SDLMAIN_SOURCES ${ PSP_MAIN_SOURCES } )
2021-11-30 01:42:13 +08:00
if ( SDL_AUDIO )
set ( SDL_AUDIO_DRIVER_PSP 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB PSP_AUDIO_SOURCES ${ SDL3_SOURCE_DIR } /src/audio/psp/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ PSP_AUDIO_SOURCES } )
2021-11-30 01:42:13 +08:00
set ( HAVE_SDL_AUDIO TRUE )
endif ( )
2022-01-01 23:08:00 +08:00
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_PSP 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB PSP_FILESYSTEM_SOURCES ${ SDL3_SOURCE_DIR } /src/filesystem/psp/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ PSP_FILESYSTEM_SOURCES } )
2022-01-01 23:08:00 +08:00
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
2021-11-30 01:42:13 +08:00
if ( SDL_JOYSTICK )
set ( SDL_JOYSTICK_PSP 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB PSP_JOYSTICK_SOURCES ${ SDL3_SOURCE_DIR } /src/joystick/psp/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ PSP_JOYSTICK_SOURCES } )
2021-11-30 01:42:13 +08:00
set ( HAVE_SDL_JOYSTICK TRUE )
endif ( )
if ( SDL_POWER )
set ( SDL_POWER_PSP 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB PSP_POWER_SOURCES ${ SDL3_SOURCE_DIR } /src/power/psp/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ PSP_POWER_SOURCES } )
2021-11-30 01:42:13 +08:00
set ( HAVE_SDL_POWER TRUE )
endif ( )
if ( SDL_THREADS )
set ( SDL_THREAD_PSP 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB PSP_THREAD_SOURCES ${ SDL3_SOURCE_DIR } /src/thread/generic/SDL_systls.c ${ SDL3_SOURCE_DIR } /src/thread/psp/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ PSP_THREAD_SOURCES } )
2021-11-30 01:42:13 +08:00
set ( HAVE_SDL_THREADS TRUE )
endif ( )
if ( SDL_TIMERS )
set ( SDL_TIMER_PSP 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB PSP_TIMER_SOURCES ${ SDL3_SOURCE_DIR } /src/timer/psp/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ PSP_TIMER_SOURCES } )
2021-11-30 01:42:13 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB PSP_VIDEO_SOURCES ${ SDL3_SOURCE_DIR } /src/video/psp/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ PSP_VIDEO_SOURCES } )
2021-11-30 01:42:13 +08:00
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
G L
2022-10-18 16:34:51 +08:00
p s p v r a m
p s p a u d i o
p s p v f p u
p s p d i s p l a y
p s p g u
p s p g e
p s p h p r m
p s p c t r l
p s p p o w e r
2022-06-16 22:38:58 +08:00
)
2022-11-22 12:28:58 +08:00
if ( NOT SDL3_DISABLE_SDL3MAIN )
list ( INSERT SDL_LIBS 0 "-lSDL3main" )
endif ( NOT SDL3_DISABLE_SDL3MAIN )
2022-01-11 16:33:02 +08:00
2022-06-06 06:02:08 +08:00
elseif ( PS2 )
2022-06-24 06:20:11 +08:00
list ( APPEND EXTRA_CFLAGS "-DPS2" "-D__PS2__" "-I$ENV{PS2SDK}/ports/include" "-I$ENV{PS2DEV}/gsKit/include" )
2022-03-21 02:42:06 +08:00
2022-11-22 12:28:58 +08:00
file ( GLOB PS2_MAIN_SOURCES ${ SDL3_SOURCE_DIR } /src/main/ps2/*.c )
2022-03-21 02:42:06 +08:00
set ( SDLMAIN_SOURCES ${ SDLMAIN_SOURCES } ${ PS2_MAIN_SOURCES } )
2022-06-06 06:02:08 +08:00
2022-06-24 22:43:20 +08:00
if ( SDL_AUDIO )
set ( SDL_AUDIO_DRIVER_PS2 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB PS2_AUDIO_SOURCES ${ SDL3_SOURCE_DIR } /src/audio/ps2/*.c )
2022-06-24 22:43:20 +08:00
set ( SOURCE_FILES ${ SOURCE_FILES } ${ PS2_AUDIO_SOURCES } )
set ( HAVE_SDL_AUDIO TRUE )
endif ( )
2022-06-14 02:59:18 +08:00
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_PS2 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB PS2_FILESYSTEM_SOURCES ${ SDL3_SOURCE_DIR } /src/filesystem/ps2/*.c )
2022-06-17 01:59:57 +08:00
list ( APPEND SOURCE_FILES ${ PS2_FILESYSTEM_SOURCES } )
2022-06-14 02:59:18 +08:00
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
2022-06-18 23:40:53 +08:00
if ( SDL_JOYSTICK )
set ( SDL_JOYSTICK_PS2 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB PS2_JOYSTICK_SOURCES ${ SDL3_SOURCE_DIR } /src/joystick/ps2/*.c )
2022-06-18 23:40:53 +08:00
list ( APPEND SOURCE_FILES ${ PS2_JOYSTICK_SOURCES } )
set ( HAVE_SDL_JOYSTICK TRUE )
endif ( )
2022-06-14 02:58:18 +08:00
if ( SDL_THREADS )
set ( SDL_THREAD_PS2 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB PS2_THREAD_SOURCES ${ SDL3_SOURCE_DIR } /src/thread/generic/SDL_systls.c ${ SDL3_SOURCE_DIR } /src/thread/generic/SDL_sysmutex.c ${ SDL3_SOURCE_DIR } /src/thread/ps2/*.c )
2022-06-17 01:59:57 +08:00
list ( APPEND SOURCE_FILES ${ PS2_THREAD_SOURCES } )
2022-06-14 02:58:18 +08:00
set ( HAVE_SDL_THREADS TRUE )
endif ( )
2022-06-14 02:35:27 +08:00
if ( SDL_TIMERS )
set ( SDL_TIMER_PS2 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB PS2_TIMER_SOURCES ${ SDL3_SOURCE_DIR } /src/timer/ps2/*.c )
2022-06-17 01:59:57 +08:00
list ( APPEND SOURCE_FILES ${ PS2_TIMER_SOURCES } )
2022-06-14 02:35:27 +08:00
set ( HAVE_SDL_TIMERS TRUE )
endif ( )
2022-06-24 06:20:11 +08:00
if ( SDL_VIDEO )
set ( SDL_VIDEO_DRIVER_PS2 1 )
set ( SDL_VIDEO_RENDER_PS2 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB PS2_VIDEO_SOURCES ${ SDL3_SOURCE_DIR } /src/video/ps2/*.c ${ SDL3_SOURCE_DIR } /src/render/ps2/*.c )
2022-06-30 23:57:37 +08:00
list ( APPEND SOURCE_FILES ${ PS2_VIDEO_SOURCES } )
2022-06-24 06:20:11 +08:00
set ( SDL_VIDEO_OPENGL 0 )
set ( HAVE_SDL_VIDEO TRUE )
endif ( )
2022-03-21 02:42:06 +08:00
list ( APPEND EXTRA_LIBS
p a t c h e s
2022-06-24 06:20:11 +08:00
g s k i t
d m a k i t
2022-03-21 02:42:06 +08:00
p s 2 _ d r i v e r s
)
2021-03-30 16:32:39 +08:00
elseif ( N3DS )
2022-11-22 12:28:58 +08:00
file ( GLOB N3DS_MAIN_SOURCES ${ SDL3_SOURCE_DIR } /src/main/n3ds/*.c )
2021-03-30 16:32:39 +08:00
set ( SDLMAIN_SOURCES ${ SDLMAIN_SOURCES } ${ N3DS_MAIN_SOURCES } )
if ( SDL_AUDIO )
set ( SDL_AUDIO_DRIVER_N3DS 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB N3DS_AUDIO_SOURCES ${ SDL3_SOURCE_DIR } /src/audio/n3ds/*.c )
2021-03-30 16:32:39 +08:00
list ( APPEND SOURCE_FILES ${ N3DS_AUDIO_SOURCES } )
set ( HAVE_SDL_AUDIO TRUE )
endif ( )
if ( SDL_FILESYSTEM )
set ( SDL_FILESYSTEM_N3DS 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB N3DS_FILESYSTEM_SOURCES ${ SDL3_SOURCE_DIR } /src/filesystem/n3ds/*.c )
2021-03-30 16:32:39 +08:00
list ( APPEND SOURCE_FILES ${ N3DS_FILESYSTEM_SOURCES } )
set ( HAVE_SDL_FILESYSTEM TRUE )
endif ( )
if ( SDL_JOYSTICK )
set ( SDL_JOYSTICK_N3DS 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB N3DS_JOYSTICK_SOURCES ${ SDL3_SOURCE_DIR } /src/joystick/n3ds/*.c )
2021-03-30 16:32:39 +08:00
list ( APPEND SOURCE_FILES ${ N3DS_JOYSTICK_SOURCES } )
set ( HAVE_SDL_JOYSTICK TRUE )
endif ( )
if ( SDL_POWER )
set ( SDL_POWER_N3DS 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB N3DS_POWER_SOURCES ${ SDL3_SOURCE_DIR } /src/power/n3ds/*.c )
2021-03-30 16:32:39 +08:00
list ( APPEND SOURCE_FILES ${ N3DS_POWER_SOURCES } )
set ( HAVE_SDL_POWER TRUE )
endif ( )
if ( SDL_THREADS )
set ( SDL_THREAD_N3DS 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB N3DS_THREAD_SOURCES ${ SDL3_SOURCE_DIR } /src/thread/n3ds/*.c )
list ( APPEND SOURCE_FILES ${ N3DS_THREAD_SOURCES } ${ SDL3_SOURCE_DIR } /src/thread/generic/SDL_systls.c )
2021-03-30 16:32:39 +08:00
set ( HAVE_SDL_THREADS TRUE )
endif ( )
if ( SDL_TIMERS )
set ( SDL_TIMER_N3DS 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB N3DS_TIMER_SOURCES ${ SDL3_SOURCE_DIR } /src/timer/n3ds/*.c )
2022-09-21 07:53:45 +08:00
list ( APPEND SOURCE_FILES ${ N3DS_TIMER_SOURCES } )
2021-03-30 16:32:39 +08:00
set ( HAVE_SDL_TIMERS TRUE )
endif ( )
2022-09-21 10:45:24 +08:00
if ( SDL_SENSOR )
set ( SDL_SENSOR_N3DS 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB N3DS_SENSOR_SOURCES ${ SDL3_SOURCE_DIR } /src/sensor/n3ds/*.c )
2022-09-21 10:45:24 +08:00
list ( APPEND SOURCE_FILES ${ N3DS_SENSOR_SOURCES } )
set ( HAVE_SDL_SENSORS TRUE )
endif ( )
2021-03-30 16:32:39 +08:00
if ( SDL_VIDEO )
set ( SDL_VIDEO_DRIVER_N3DS 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB N3DS_VIDEO_SOURCES ${ SDL3_SOURCE_DIR } /src/video/n3ds/*.c )
2021-03-30 16:32:39 +08:00
list ( APPEND SOURCE_FILES ${ N3DS_VIDEO_SOURCES } )
set ( HAVE_SDL_VIDEO TRUE )
endif ( )
if ( SDL_LOCALE )
2022-11-22 12:28:58 +08:00
file ( GLOB N3DS_LOCALE_SOURCES ${ SDL3_SOURCE_DIR } /src/locale/n3ds/*.c )
2021-03-30 16:32:39 +08:00
list ( APPEND SOURCE_FILES ${ N3DS_LOCALE_SOURCES } )
set ( HAVE_SDL_LOCALE TRUE )
endif ( )
# Requires the n3ds file implementation
if ( SDL_FILE )
2022-11-22 12:28:58 +08:00
file ( GLOB N3DS_FILE_SOURCES ${ SDL3_SOURCE_DIR } /src/file/n3ds/*.c )
2021-03-30 16:32:39 +08:00
list ( APPEND SOURCE_FILES ${ N3DS_FILE_SOURCES } )
set ( HAVE_SDL_FILE TRUE )
else ( )
message_error ( "SDL_FILE must be enabled to build on N3DS" )
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 ( )
2022-06-17 01:59:57 +08:00
# Platform-independent options
CheckLibSampleRate ( )
2022-11-24 02:55:34 +08:00
if ( SDL_VIDEO )
if ( SDL_OFFSCREEN AND SDL_VIDEO_OPENGL_EGL )
set ( SDL_VIDEO_DRIVER_OFFSCREEN 1 )
file ( GLOB VIDEO_OFFSCREEN_SOURCES ${ SDL3_SOURCE_DIR } /src/video/offscreen/*.c )
list ( APPEND SOURCE_FILES ${ VIDEO_OFFSCREEN_SOURCES } )
set ( HAVE_OFFSCREEN TRUE )
set ( HAVE_SDL_VIDEO TRUE )
endif ( )
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB AUDIO_SOURCES ${ SDL3_SOURCE_DIR } /src/audio/dummy/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ AUDIO_SOURCES } )
2022-01-13 00:21:06 +08:00
endif ( )
if ( NOT HAVE_SDL_VIDEO )
set ( SDL_VIDEO_DRIVER_DUMMY 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB VIDEO_SOURCES ${ SDL3_SOURCE_DIR } /src/video/dummy/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ VIDEO_SOURCES } )
2022-01-13 00:21:06 +08:00
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-11-22 12:28:58 +08:00
file ( GLOB JOYSTICK_SOURCES ${ SDL3_SOURCE_DIR } /src/joystick/dummy/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND 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 )
2022-11-22 12:28:58 +08:00
file ( GLOB HAPTIC_SOURCES ${ SDL3_SOURCE_DIR } /src/haptic/dummy/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ HAPTIC_SOURCES } )
2015-06-21 23:33:46 +08:00
endif ( )
2018-09-29 12:19:27 +08:00
if ( NOT HAVE_SDL_SENSORS )
set ( SDL_SENSOR_DUMMY 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB SENSORS_SOURCES ${ SDL3_SOURCE_DIR } /src/sensor/dummy/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ SENSORS_SOURCES } )
2018-09-29 12:19:27 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB LOADSO_SOURCES ${ SDL3_SOURCE_DIR } /src/loadso/dummy/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ LOADSO_SOURCES } )
2015-06-21 23:33:46 +08:00
endif ( )
if ( NOT HAVE_SDL_FILESYSTEM )
2022-01-11 00:00:32 +08:00
set ( SDL_FILESYSTEM_DUMMY 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB FILESYSTEM_SOURCES ${ SDL3_SOURCE_DIR } /src/filesystem/dummy/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ FILESYSTEM_SOURCES } )
2015-06-21 23:33:46 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB LOCALE_SOURCES ${ SDL3_SOURCE_DIR } /src/locale/dummy/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ LOCALE_SOURCES } )
2020-05-04 14:27:29 +08:00
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 )
2022-11-22 12:28:58 +08:00
file ( GLOB MISC_SOURCES ${ SDL3_SOURCE_DIR } /src/misc/dummy/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND 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 )
2022-08-02 00:51:21 +08:00
# The emscripten platform has been carefully vetted to work without threads
if ( EMSCRIPTEN )
set ( SDL_THREADS_DISABLED 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB THREADS_SOURCES ${ SDL3_SOURCE_DIR } /src/thread/generic/*.c )
2022-08-02 00:51:21 +08:00
list ( APPEND SOURCE_FILES ${ THREADS_SOURCES } )
else ( )
message_error ( "Threads are needed by many SDL subsystems and may not be disabled" )
endif ( )
2015-06-21 23:33:46 +08:00
endif ( )
if ( NOT HAVE_SDL_TIMERS )
2022-01-11 17:45:41 +08:00
set ( SDL_TIMER_DUMMY 1 )
2022-11-22 12:28:58 +08:00
file ( GLOB TIMER_SOURCES ${ SDL3_SOURCE_DIR } /src/timer/dummy/*.c )
2022-06-15 09:03:33 +08:00
list ( APPEND SOURCE_FILES ${ TIMER_SOURCES } )
2015-06-21 23:33:46 +08:00
endif ( )
if ( NOT SDLMAIN_SOURCES )
2022-11-22 12:28:58 +08:00
file ( GLOB SDLMAIN_SOURCES ${ SDL3_SOURCE_DIR } /src/main/dummy/*.c )
2015-06-21 23:33:46 +08:00
endif ( )
# Append the -MMD -MT flags
# if(DEPENDENCY_TRACKING)
# if(COMPILER_IS_GNUCC)
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -MMD -MT \$@")
# endif()
# endif()
2022-11-26 17:41:46 +08:00
# config variables may contain generator expression, so we need to generate SDL_build_config.h in 2 steps:
2022-06-17 01:59:57 +08:00
# 1. replace all `#cmakedefine`'s and `@abc@`
2022-11-26 17:41:46 +08:00
configure_file ( "${SDL3_SOURCE_DIR}/include/build_config/SDL_build_config.h.cmake"
" $ { S D L 3 _ B I N A R Y _ D I R } / S D L _ b u i l d _ c o n f i g . h . i n t e r m e d i a t e " )
2022-06-27 05:34:30 +08:00
# 2. Create the "include-config-${CMAKE_BUILD_TYPE}" folder (fails on older CMake versions when it does not exist)
string ( TOLOWER "${CMAKE_BUILD_TYPE}" lower_build_type )
2022-11-27 04:25:31 +08:00
execute_process ( COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/include-config-${lower_build_type}/build_config" )
2022-11-26 17:41:46 +08:00
# 3. generate SDL_build_config.h in an build_type-dependent folder (which should be first in the include search path)
2022-06-17 01:59:57 +08:00
file ( GENERATE
2022-11-26 17:41:46 +08:00
O U T P U T " $ { S D L 3 _ B I N A R Y _ D I R } / i n c l u d e - c o n f i g - $ < L O W E R _ C A S E : $ < C O N F I G > > / b u i l d _ c o n f i g / S D L _ b u i l d _ c o n f i g . h "
I N P U T " $ { S D L 3 _ B I N A R Y _ D I R } / S D L _ b u i l d _ c o n f i g . h . i n t e r m e d i a t e " )
2015-06-21 23:33:46 +08:00
# 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 } )
2022-11-27 12:43:38 +08:00
file ( GLOB SDL3_INCLUDE_FILES ${ SDL3_SOURCE_DIR } /include/SDL3/*.h )
2022-11-27 04:25:31 +08:00
foreach ( _hdr IN LISTS SDL3_INCLUDE_FILES )
if ( _hdr MATCHES ".*SDL_revision.h" )
list ( REMOVE_ITEM SDL3_INCLUDE_FILES "${_hdr}" )
endif ( )
endforeach ( )
2015-06-21 23:33:46 +08:00
# Compat helpers for the configuration files
build: Expand version info in SDL_REVISION and SDL_GetRevision()
Instead of using a URL and git sha1, this uses `git describe` to
describe the version relative to the nearest previous git tag, which
gives a better indication of whether this is a release, a prerelease,
a slightly patched prerelease, or a long way after the last release
during active development.
This serves two purposes: it makes those APIs more informative, and it
also puts this information into the binary in a form that is easy to
screen-scrape using strings(1). For instance, if the bundled version of
SDL in a game has this, we can see at a glance what version it is.
It's also shorter than using the web address of the origin git
repository and the full git commit sha1.
Also write the computed version into a file ./VERSION in `make dist`
tarballs, so that when we build from a tarball on a system that doesn't
have git available, we still get the version details.
For the Perforce code path in showrev.sh, output the version number
followed by the Perforce revision, in a format reminiscent of
`git describe` (with p instead of g to indicate Perforce).
For the code path with no VCS available at all, put a suffix on the
version number to indicate that this is just a guess (we can't know
whether this SDL version is actually a git snapshot or has been
patched locally or similar).
Resolves: https://github.com/libsdl-org/SDL/issues/6418
Signed-off-by: Simon McVittie <smcv@collabora.com>
2022-10-21 02:54:24 +08:00
2022-11-21 22:57:02 +08:00
if ( EXISTS "${PROJECT_SOURCE_DIR}/VERSION.txt" )
file ( READ "${PROJECT_SOURCE_DIR}/VERSION.txt" SDL_SOURCE_VERSION )
2022-11-21 06:37:05 +08:00
string ( STRIP "${SDL_SOURCE_VERSION}" SDL_SOURCE_VERSION )
build: Expand version info in SDL_REVISION and SDL_GetRevision()
Instead of using a URL and git sha1, this uses `git describe` to
describe the version relative to the nearest previous git tag, which
gives a better indication of whether this is a release, a prerelease,
a slightly patched prerelease, or a long way after the last release
during active development.
This serves two purposes: it makes those APIs more informative, and it
also puts this information into the binary in a form that is easy to
screen-scrape using strings(1). For instance, if the bundled version of
SDL in a game has this, we can see at a glance what version it is.
It's also shorter than using the web address of the origin git
repository and the full git commit sha1.
Also write the computed version into a file ./VERSION in `make dist`
tarballs, so that when we build from a tarball on a system that doesn't
have git available, we still get the version details.
For the Perforce code path in showrev.sh, output the version number
followed by the Perforce revision, in a format reminiscent of
`git describe` (with p instead of g to indicate Perforce).
For the code path with no VCS available at all, put a suffix on the
version number to indicate that this is just a guess (we can't know
whether this SDL version is actually a git snapshot or has been
patched locally or similar).
Resolves: https://github.com/libsdl-org/SDL/issues/6418
Signed-off-by: Simon McVittie <smcv@collabora.com>
2022-10-21 02:54:24 +08:00
endif ( )
2021-09-10 00:59:47 +08:00
find_package ( Git )
if ( Git_FOUND )
execute_process ( COMMAND
build: Expand version info in SDL_REVISION and SDL_GetRevision()
Instead of using a URL and git sha1, this uses `git describe` to
describe the version relative to the nearest previous git tag, which
gives a better indication of whether this is a release, a prerelease,
a slightly patched prerelease, or a long way after the last release
during active development.
This serves two purposes: it makes those APIs more informative, and it
also puts this information into the binary in a form that is easy to
screen-scrape using strings(1). For instance, if the bundled version of
SDL in a game has this, we can see at a glance what version it is.
It's also shorter than using the web address of the origin git
repository and the full git commit sha1.
Also write the computed version into a file ./VERSION in `make dist`
tarballs, so that when we build from a tarball on a system that doesn't
have git available, we still get the version details.
For the Perforce code path in showrev.sh, output the version number
followed by the Perforce revision, in a format reminiscent of
`git describe` (with p instead of g to indicate Perforce).
For the code path with no VCS available at all, put a suffix on the
version number to indicate that this is just a guess (we can't know
whether this SDL version is actually a git snapshot or has been
patched locally or similar).
Resolves: https://github.com/libsdl-org/SDL/issues/6418
Signed-off-by: Simon McVittie <smcv@collabora.com>
2022-10-21 02:54:24 +08:00
" $ { G I T _ E X E C U T A B L E } " d e s c r i b e - - a l w a y s - - t a g s - - l o n g
W O R K I N G _ D I R E C T O R Y " $ { P R O J E C T _ S O U R C E _ D I R } "
2021-09-10 00:59:47 +08:00
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 )
build: Expand version info in SDL_REVISION and SDL_GetRevision()
Instead of using a URL and git sha1, this uses `git describe` to
describe the version relative to the nearest previous git tag, which
gives a better indication of whether this is a release, a prerelease,
a slightly patched prerelease, or a long way after the last release
during active development.
This serves two purposes: it makes those APIs more informative, and it
also puts this information into the binary in a form that is easy to
screen-scrape using strings(1). For instance, if the bundled version of
SDL in a game has this, we can see at a glance what version it is.
It's also shorter than using the web address of the origin git
repository and the full git commit sha1.
Also write the computed version into a file ./VERSION in `make dist`
tarballs, so that when we build from a tarball on a system that doesn't
have git available, we still get the version details.
For the Perforce code path in showrev.sh, output the version number
followed by the Perforce revision, in a format reminiscent of
`git describe` (with p instead of g to indicate Perforce).
For the code path with no VCS available at all, put a suffix on the
version number to indicate that this is just a guess (we can't know
whether this SDL version is actually a git snapshot or has been
patched locally or similar).
Resolves: https://github.com/libsdl-org/SDL/issues/6418
Signed-off-by: Simon McVittie <smcv@collabora.com>
2022-10-21 02:54:24 +08:00
else ( )
set ( GIT_REVISION_STATUS 1 )
set ( GIT_REVISION "" )
endif ( )
2021-09-10 00:59:47 +08:00
build: Expand version info in SDL_REVISION and SDL_GetRevision()
Instead of using a URL and git sha1, this uses `git describe` to
describe the version relative to the nearest previous git tag, which
gives a better indication of whether this is a release, a prerelease,
a slightly patched prerelease, or a long way after the last release
during active development.
This serves two purposes: it makes those APIs more informative, and it
also puts this information into the binary in a form that is easy to
screen-scrape using strings(1). For instance, if the bundled version of
SDL in a game has this, we can see at a glance what version it is.
It's also shorter than using the web address of the origin git
repository and the full git commit sha1.
Also write the computed version into a file ./VERSION in `make dist`
tarballs, so that when we build from a tarball on a system that doesn't
have git available, we still get the version details.
For the Perforce code path in showrev.sh, output the version number
followed by the Perforce revision, in a format reminiscent of
`git describe` (with p instead of g to indicate Perforce).
For the code path with no VCS available at all, put a suffix on the
version number to indicate that this is just a guess (we can't know
whether this SDL version is actually a git snapshot or has been
patched locally or similar).
Resolves: https://github.com/libsdl-org/SDL/issues/6418
Signed-off-by: Simon McVittie <smcv@collabora.com>
2022-10-21 02:54:24 +08:00
if ( SDL_SOURCE_VERSION )
set ( SDL_REVISION "SDL-${SDL_SOURCE_VERSION}" )
elseif ( GIT_REVISION_STATUS EQUAL 0 )
if ( GIT_REVISION MATCHES "^[0-9a-f]+$" )
# Just a truncated sha1, so prefix it with the version number
set ( SDL_REVISION "SDL-${SDL_VERSION}-g${GIT_REVISION}" )
2021-09-10 00:59:47 +08:00
else ( )
build: Expand version info in SDL_REVISION and SDL_GetRevision()
Instead of using a URL and git sha1, this uses `git describe` to
describe the version relative to the nearest previous git tag, which
gives a better indication of whether this is a release, a prerelease,
a slightly patched prerelease, or a long way after the last release
during active development.
This serves two purposes: it makes those APIs more informative, and it
also puts this information into the binary in a form that is easy to
screen-scrape using strings(1). For instance, if the bundled version of
SDL in a game has this, we can see at a glance what version it is.
It's also shorter than using the web address of the origin git
repository and the full git commit sha1.
Also write the computed version into a file ./VERSION in `make dist`
tarballs, so that when we build from a tarball on a system that doesn't
have git available, we still get the version details.
For the Perforce code path in showrev.sh, output the version number
followed by the Perforce revision, in a format reminiscent of
`git describe` (with p instead of g to indicate Perforce).
For the code path with no VCS available at all, put a suffix on the
version number to indicate that this is just a guess (we can't know
whether this SDL version is actually a git snapshot or has been
patched locally or similar).
Resolves: https://github.com/libsdl-org/SDL/issues/6418
Signed-off-by: Simon McVittie <smcv@collabora.com>
2022-10-21 02:54:24 +08:00
# e.g. release-2.24.0-542-g96361fc47
set ( SDL_REVISION "SDL-${GIT_REVISION}" )
2021-09-10 00:59:47 +08:00
endif ( )
else ( )
build: Expand version info in SDL_REVISION and SDL_GetRevision()
Instead of using a URL and git sha1, this uses `git describe` to
describe the version relative to the nearest previous git tag, which
gives a better indication of whether this is a release, a prerelease,
a slightly patched prerelease, or a long way after the last release
during active development.
This serves two purposes: it makes those APIs more informative, and it
also puts this information into the binary in a form that is easy to
screen-scrape using strings(1). For instance, if the bundled version of
SDL in a game has this, we can see at a glance what version it is.
It's also shorter than using the web address of the origin git
repository and the full git commit sha1.
Also write the computed version into a file ./VERSION in `make dist`
tarballs, so that when we build from a tarball on a system that doesn't
have git available, we still get the version details.
For the Perforce code path in showrev.sh, output the version number
followed by the Perforce revision, in a format reminiscent of
`git describe` (with p instead of g to indicate Perforce).
For the code path with no VCS available at all, put a suffix on the
version number to indicate that this is just a guess (we can't know
whether this SDL version is actually a git snapshot or has been
patched locally or similar).
Resolves: https://github.com/libsdl-org/SDL/issues/6418
Signed-off-by: Simon McVittie <smcv@collabora.com>
2022-10-21 02:54:24 +08:00
set ( SDL_REVISION "SDL-${SDL_VERSION}-no-vcs" )
2020-10-13 19:45:10 +08:00
endif ( )
2021-09-10 00:59:47 +08:00
2022-11-27 12:43:38 +08:00
execute_process ( COMMAND "${CMAKE_COMMAND}" -E make_directory "${SDL3_BINARY_DIR}/include/SDL3" )
2022-11-27 04:25:31 +08:00
configure_file ( "${SDL3_SOURCE_DIR}/include/build_config/SDL_revision.h.cmake"
2022-11-27 12:43:38 +08:00
" $ { S D L 3 _ B I N A R Y _ D I R } / i n c l u d e / S D L 3 / S D L _ r e v i s i o n . h " )
2021-09-10 00:59:47 +08:00
2022-11-01 23:33:21 +08:00
if ( CMAKE_STATIC_LIBRARY_PREFIX STREQUAL "" AND CMAKE_STATIC_LIBRARY_SUFFIX STREQUAL ".lib" )
2022-10-05 03:17:10 +08:00
# Avoid conflict between the dll import library and the static library
2022-11-22 12:28:58 +08:00
set ( sdl_static_libname "SDL3-static" )
2022-10-05 03:17:10 +08:00
else ( )
2022-11-22 12:28:58 +08:00
set ( sdl_static_libname "SDL3" )
2022-10-05 03:17:10 +08:00
endif ( )
2020-12-18 21:42:57 +08:00
2022-10-05 03:17:10 +08:00
set ( prefix ${ CMAKE_INSTALL_PREFIX } )
file ( RELATIVE_PATH bin_prefix_relpath "${CMAKE_INSTALL_FULL_BINDIR}" "${CMAKE_INSTALL_PREFIX}" )
2020-12-18 21:42:57 +08:00
2022-10-05 03:17:10 +08:00
set ( exec_prefix "\${prefix}" )
set ( libdir "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}" )
set ( bindir "\${exec_prefix}/${CMAKE_INSTALL_BINDIR}" )
set ( includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}" )
if ( SDL_STATIC )
set ( ENABLE_STATIC_TRUE "" )
set ( ENABLE_STATIC_FALSE "#" )
else ( )
set ( ENABLE_STATIC_TRUE "#" )
set ( ENABLE_STATIC_FALSE "" )
endif ( )
if ( SDL_SHARED )
set ( PKGCONFIG_LIBS_PRIV "
2020-04-12 06:38:34 +08:00
L i b s . p r i v a t e : " )
2022-10-05 03:17:10 +08:00
set ( ENABLE_SHARED_TRUE "" )
set ( ENABLE_SHARED_FALSE "#" )
else ( )
set ( PKGCONFIG_LIBS_PRIV "" )
set ( ENABLE_SHARED_TRUE "#" )
set ( ENABLE_SHARED_FALSE "" )
2015-06-21 23:33:46 +08:00
endif ( )
2022-10-05 03:17:10 +08:00
# Clean up the different lists
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 } )
listtostr ( SDL_CFLAGS _SDL_CFLAGS "" )
set ( SDL_CFLAGS ${ _SDL_CFLAGS } )
2022-11-22 12:28:58 +08:00
string ( REGEX REPLACE "-lSDL3( |$)" "-l${sdl_static_libname} " SDL_STATIC_LIBS "${SDL_STATIC_LIBS}" )
2022-10-05 03:17:10 +08:00
if ( NOT SDL_SHARED )
2022-11-22 12:28:58 +08:00
string ( REGEX REPLACE "-lSDL3( |$)" "-l${sdl_static_libname} " SDL_LIBS "${SDL_LIBS}" )
2022-10-05 03:17:10 +08:00
endif ( )
2022-11-22 12:28:58 +08:00
if ( SDL_STATIC AND SDL_SHARED AND NOT sdl_static_libname STREQUAL "SDL3" )
message ( STATUS "\" pkg-config --static --libs sdl3\ " will return invalid information" )
2022-10-05 03:17:10 +08:00
endif ( )
# MESSAGE(STATUS "SDL_LIBS: ${SDL_LIBS}")
# MESSAGE(STATUS "SDL_STATIC_LIBS: ${SDL_STATIC_LIBS}")
2022-11-22 12:28:58 +08:00
configure_file ( "${SDL3_SOURCE_DIR}/sdl3.pc.in"
" $ { S D L 3 _ B I N A R Y _ D I R } / s d l 3 . p c " @ O N L Y )
2022-10-05 03:17:10 +08:00
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 ( )
2022-11-16 02:04:22 +08:00
if ( SDL_CCACHE )
cmake_minimum_required ( VERSION 3.4 )
find_program ( CCACHE_BINARY ccache )
if ( CCACHE_BINARY )
set ( CMAKE_C_COMPILER_LAUNCHER ${ CCACHE_BINARY } )
set ( CMAKE_CXX_COMPILER_LAUNCHER ${ CCACHE_BINARY } )
set ( CMAKE_OBJC_COMPILER_LAUNCHER ${ CCACHE_BINARY } )
set ( HAVE_CCACHE ON )
else ( )
set ( HAVE_CCACHE OFF )
endif ( )
endif ( )
2022-10-21 21:32:05 +08:00
if ( SDL_TESTS )
set ( HAVE_TESTS ON )
endif ( )
2015-06-21 23:33:46 +08:00
##### Info output #####
message ( STATUS "" )
2022-11-22 12:28:58 +08:00
message ( STATUS "SDL3 was configured with the following options:" )
2015-06-21 23:33:46 +08:00
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
2022-06-17 01:59:57 +08:00
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} ${EXTRA_CFLAGS_BUILD}" )
2015-06-21 23:33:46 +08:00
2022-11-24 02:41:43 +08:00
if ( NOT WINDOWS_STORE AND NOT SDL3_DISABLE_SDL3MAIN )
2022-01-12 00:34:14 +08:00
# Build SDLmain
2022-11-22 12:28:58 +08:00
add_library ( SDL3main STATIC ${ SDLMAIN_SOURCES } )
2021-10-05 23:19:14 +08:00
# alias target for in-tree builds
2022-11-22 12:28:58 +08:00
add_library ( SDL3::SDL3main ALIAS SDL3main )
2022-11-27 04:25:31 +08:00
target_include_directories ( SDL3main
P R I V A T E
" $ < B U I L D _ I N T E R F A C E : $ { S D L 3 _ B I N A R Y _ D I R } / i n c l u d e - c o n f i g - $ < L O W E R _ C A S E : $ < C O N F I G > > > "
P U B L I C
" $ < B U I L D _ I N T E R F A C E : $ { S D L 3 _ B I N A R Y _ D I R } / i n c l u d e > "
" $ < B U I L D _ I N T E R F A C E : $ { S D L 3 _ S O U R C E _ D I R } / i n c l u d e > "
" $ < I N S T A L L _ I N T E R F A C E : $ { C M A K E _ I N S T A L L _ I N C L U D E D I R } > "
)
2022-05-08 22:53:43 +08:00
if ( WIN32 )
2022-11-22 12:28:58 +08:00
target_link_libraries ( SDL3main PRIVATE shell32 )
2022-05-08 22:53:43 +08:00
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 )
2022-11-22 12:28:58 +08:00
target_link_options ( SDL3main PUBLIC "$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:-Wl,--undefined=_WinMain@16>" )
2022-06-04 02:12:52 +08:00
else ( )
2022-11-22 12:28:58 +08:00
target_link_options ( SDL3main PUBLIC "$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:-Wl,--undefined=WinMain>" )
2022-06-04 02:12:52 +08:00
endif ( )
endif ( )
2021-10-05 23:19:14 +08:00
if ( NOT ANDROID )
2022-11-22 12:28:58 +08:00
set_target_properties ( SDL3main PROPERTIES DEBUG_POSTFIX "${SDL_CMAKE_DEBUG_POSTFIX}" )
2021-10-05 23:19:14 +08:00
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 ( )
2022-06-25 02:48:50 +08:00
if ( PS2 )
target_compile_options ( sdl-build-options INTERFACE "-Wno-error=declaration-after-statement" )
endif ( )
2022-09-07 18:21:56 +08:00
if ( APPLE )
foreach ( SOURCE_FILE ${ SOURCE_FILES } )
get_filename_component ( FILE_EXTENSION ${ SOURCE_FILE } EXT )
if ( FILE_EXTENSION STREQUAL "m" )
set_property ( SOURCE ${ SOURCE_FILE } APPEND_STRING PROPERTY COMPILE_FLAGS " -x objective-c" )
endif ( )
endforeach ( )
endif ( )
2015-06-21 23:33:46 +08:00
if ( SDL_SHARED )
2022-11-22 12:28:58 +08:00
add_library ( SDL3 SHARED ${ SOURCE_FILES } ${ VERSION_SOURCES } )
2021-02-10 23:17:02 +08:00
# alias target for in-tree builds
2022-11-22 12:28:58 +08:00
add_library ( SDL3::SDL3 ALIAS SDL3 )
set_target_properties ( SDL3 PROPERTIES POSITION_INDEPENDENT_CODE TRUE )
2022-10-22 00:32:53 +08:00
if ( NOT SDL_LIBC )
2022-11-25 08:27:44 +08:00
if ( SDL_CPU_X86 )
2022-10-22 00:32:53 +08:00
# FIXME: should be added for all architectures (missing symbols for ARM)
2022-11-22 12:28:58 +08:00
target_link_libraries ( SDL3 PRIVATE "-nodefaultlib:MSVCRT" )
2022-10-22 00:32:53 +08:00
endif ( )
endif ( )
2017-08-10 10:43:16 +08:00
if ( APPLE )
2022-09-24 04:56:04 +08:00
# FIXME: Remove SOVERSION in SDL3
2022-11-22 12:28:58 +08:00
set_target_properties ( SDL3 PROPERTIES
2018-08-19 05:23:40 +08:00
M A C O S X _ R P A T H 1
2022-11-24 00:33:38 +08:00
S O V E R S I O N 0 )
2017-08-10 10:43:16 +08:00
elseif ( UNIX AND NOT ANDROID )
2022-11-22 12:28:58 +08:00
set_target_properties ( SDL3 PROPERTIES
2015-06-21 23:33:46 +08:00
V E R S I O N $ { L T _ V E R S I O N }
2022-11-24 00:33:38 +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
else ( )
2020-12-09 17:01:10 +08:00
if ( WINDOWS OR CYGWIN )
2022-11-22 12:28:58 +08:00
set_target_properties ( SDL3 PROPERTIES
2020-12-09 17:01:10 +08:00
D E F I N E _ S Y M B O L D L L _ E X P O R T )
endif ( )
2022-11-22 12:28:58 +08:00
set_target_properties ( SDL3 PROPERTIES
2015-06-21 23:33:46 +08:00
V E R S I O N $ { S D L _ V E R S I O N }
2022-11-24 00:33:38 +08:00
S O V E R S I O N $ { L T _ R E V I S I O N } )
2015-06-21 23:33:46 +08:00
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.
2022-11-24 02:41:43 +08:00
if ( NOT WINDOWS_STORE )
set_target_properties ( SDL3 PROPERTIES LINK_FLAGS_RELEASE "/NODEFAULTLIB" )
set_target_properties ( SDL3 PROPERTIES LINK_FLAGS_DEBUG "/NODEFAULTLIB" )
endif ( )
2022-11-22 12:28:58 +08:00
set_target_properties ( SDL3 PROPERTIES STATIC_LIBRARY_FLAGS "/NODEFAULTLIB" )
2016-01-01 03:26:40 +08:00
endif ( )
2022-06-04 02:12:52 +08:00
# FIXME: if CMAKE_VERSION >= 3.13, use target_link_options for EXTRA_LDFLAGS
2022-11-22 12:28:58 +08:00
target_link_libraries ( SDL3 PRIVATE ${ EXTRA_LIBS } ${ EXTRA_LDFLAGS } ${ EXTRA_LDFLAGS_BUILD } )
2022-11-27 04:25:31 +08:00
target_include_directories ( SDL3
P R I V A T E
2022-11-22 12:28:58 +08:00
" $ < B U I L D _ I N T E R F A C E : $ { S D L 3 _ B I N A R Y _ D I R } / i n c l u d e - c o n f i g - $ < L O W E R _ C A S E : $ < C O N F I G > > > "
2022-11-27 04:25:31 +08:00
P U B L I C
" $ < B U I L D _ I N T E R F A C E : $ { S D L 3 _ B I N A R Y _ D I R } / i n c l u d e > "
" $ < B U I L D _ I N T E R F A C E : $ { S D L 3 _ S O U R C E _ D I R } / i n c l u d e > "
2022-06-21 07:30:50 +08:00
" $ < I N S T A L L _ I N T E R F A C E : $ { C M A K E _ I N S T A L L _ I N C L U D E D I R } > "
2022-11-27 04:25:31 +08:00
)
2021-10-06 00:34:29 +08:00
# This picks up all the compiler options and such we've accumulated up to here.
2022-11-22 12:28:58 +08:00
target_link_libraries ( SDL3 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" )
2022-11-22 12:28:58 +08:00
target_link_options ( SDL3 PRIVATE -static-libgcc )
2022-06-04 02:12:52 +08:00
endif ( )
endif ( )
2021-10-06 00:34:29 +08:00
if ( NOT ANDROID )
2022-11-22 12:28:58 +08:00
set_target_properties ( SDL3 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
2022-11-22 12:28:58 +08:00
set_property ( TARGET SDL3 PROPERTY INTERFACE_SDL3_SHARED TRUE )
set_property ( TARGET SDL3 APPEND PROPERTY COMPATIBLE_INTERFACE_BOOL SDL3_SHARED )
2015-06-21 23:33:46 +08:00
endif ( )
if ( SDL_STATIC )
2022-11-22 12:28:58 +08:00
add_library ( SDL3-static STATIC ${ SOURCE_FILES } )
2021-02-10 23:17:02 +08:00
# alias target for in-tree builds
2022-11-22 12:28:58 +08:00
add_library ( SDL3::SDL3-static ALIAS SDL3-static )
set_target_properties ( SDL3-static PROPERTIES
2022-10-05 03:17:10 +08:00
O U T P U T _ N A M E " $ { s d l _ s t a t i c _ l i b n a m e } "
P O S I T I O N _ I N D E P E N D E N T _ C O D E " $ { S D L _ S T A T I C _ P I C } " )
2022-11-22 12:28:58 +08:00
target_compile_definitions ( SDL3-static PRIVATE SDL_STATIC_LIB )
2015-06-21 23:33:46 +08:00
# TODO: Win32 platforms keep the same suffix .lib for import and static
# libraries - do we need to consider this?
2022-11-22 12:28:58 +08:00
target_link_libraries ( SDL3-static PRIVATE ${ EXTRA_LIBS } ${ EXTRA_LDFLAGS } )
2022-11-27 04:25:31 +08:00
target_include_directories ( SDL3-static
P R I V A T E
2022-11-22 12:28:58 +08:00
" $ < B U I L D _ I N T E R F A C E : $ { S D L 3 _ B I N A R Y _ D I R } / i n c l u d e - c o n f i g - $ < L O W E R _ C A S E : $ < C O N F I G > > > "
2022-11-27 04:25:31 +08:00
P U B L I C
" $ < B U I L D _ I N T E R F A C E : $ { S D L 3 _ B I N A R Y _ D I R } / i n c l u d e > "
" $ < B U I L D _ I N T E R F A C E : $ { S D L 3 _ S O U R C E _ D I R } / i n c l u d e > "
2022-06-21 07:30:50 +08:00
" $ < I N S T A L L _ I N T E R F A C E : $ { C M A K E _ I N S T A L L _ I N C L U D E D I R } > "
2022-11-27 04:25:31 +08:00
)
2021-10-06 00:34:29 +08:00
# This picks up all the compiler options and such we've accumulated up to here.
2022-11-22 12:28:58 +08:00
target_link_libraries ( SDL3-static PRIVATE $< BUILD_INTERFACE:sdl-build-options > )
2021-10-06 00:34:29 +08:00
if ( NOT ANDROID )
2022-11-22 12:28:58 +08:00
set_target_properties ( SDL3-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
2022-11-22 12:28:58 +08:00
set_property ( TARGET SDL3-static PROPERTY INTERFACE_SDL3_SHARED FALSE )
set_property ( TARGET SDL3-static APPEND PROPERTY COMPATIBLE_INTERFACE_BOOL SDL3_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 )
2022-11-22 12:28:58 +08:00
file ( GLOB TEST_SOURCES ${ SDL3_SOURCE_DIR } /src/test/*.c )
add_library ( SDL3_test STATIC ${ TEST_SOURCES } )
add_library ( SDL3::SDL3test ALIAS SDL3_test )
set_target_properties ( SDL3_test PROPERTIES
E X P O R T _ N A M E S D L 3 t e s t )
2022-11-27 04:25:31 +08:00
target_include_directories ( SDL3_test
P R I V A T E
2022-11-22 12:28:58 +08:00
" $ < B U I L D _ I N T E R F A C E : $ { S D L 3 _ B I N A R Y _ D I R } / i n c l u d e - c o n f i g - $ < L O W E R _ C A S E : $ < C O N F I G > > > "
2022-11-27 04:25:31 +08:00
P U B L I C
" $ < B U I L D _ I N T E R F A C E : $ { S D L 3 _ B I N A R Y _ D I R } / i n c l u d e > "
" $ < B U I L D _ I N T E R F A C E : $ { S D L 3 _ S O U R C E _ D I R } / i n c l u d e > "
2022-06-21 07:30:50 +08:00
" $ < I N S T A L L _ I N T E R F A C E : $ { C M A K E _ I N S T A L L _ I N C L U D E D I R } > "
2022-11-27 04:25:31 +08:00
)
2022-11-22 12:28:58 +08:00
target_link_libraries ( SDL3_test PRIVATE ${ EXTRA_TEST_LIBS } )
2018-02-25 00:59:58 +08:00
endif ( )
2015-06-21 23:33:46 +08:00
##### Installation targets #####
2022-11-22 12:28:58 +08:00
if ( NOT SDL3_DISABLE_INSTALL )
2022-04-16 08:50:55 +08:00
if ( SDL_SHARED )
2022-11-22 12:28:58 +08:00
install ( TARGETS SDL3 EXPORT SDL3Targets
2022-04-16 08:50:55 +08:00
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-11-24 02:41:43 +08:00
if ( NOT WINDOWS_STORE AND NOT SDL3_DISABLE_SDL3MAIN )
2022-11-22 12:28:58 +08:00
install ( TARGETS SDL3main EXPORT SDL3mainTargets
2022-04-16 08:50:55 +08:00
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 )
2022-11-22 12:28:58 +08:00
install ( TARGETS SDL3-static EXPORT SDL3staticTargets
2022-04-16 08:50:55 +08:00
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 )
2022-11-22 12:28:58 +08:00
install ( TARGETS SDL3_test EXPORT SDL3testTargets
2022-05-27 07:40:11 +08:00
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 )
2022-10-19 22:03:43 +08:00
set ( SDL_INSTALL_CMAKEDIR_DEFAULT "cmake" )
2022-11-22 12:28:58 +08:00
set ( LICENSES_PREFIX "licenses/SDL3" )
2022-04-16 08:50:55 +08:00
else ( )
2022-11-22 12:28:58 +08:00
set ( SDL_INSTALL_CMAKEDIR_DEFAULT "${CMAKE_INSTALL_LIBDIR}/cmake/SDL3" )
2022-10-05 03:17:10 +08:00
set ( LICENSES_PREFIX "${CMAKE_INSTALL_DATAROOTDIR}/licenses/${PROJECT_NAME}" )
2022-04-16 08:50:55 +08:00
endif ( )
2022-11-22 12:28:58 +08:00
set ( SDL_INSTALL_CMAKEDIR "${SDL_INSTALL_CMAKEDIR_DEFAULT}" CACHE STRING "Location where to install SDL3Config.cmake" )
2022-04-16 08:50:55 +08:00
include ( CMakePackageConfigHelpers )
2022-11-22 12:28:58 +08:00
configure_package_config_file ( SDL3Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/SDL3Config.cmake"
2022-06-04 02:12:52 +08:00
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
2022-10-19 22:03:43 +08:00
I N S T A L L _ D E S T I N A T I O N " $ { S D L _ I N S T A L L _ C M A K E D I R } "
2022-06-04 02:12:52 +08:00
)
2022-11-22 12:28:58 +08:00
write_basic_package_version_file ( "${CMAKE_CURRENT_BINARY_DIR}/SDL3ConfigVersion.cmake"
2022-04-16 08:50:55 +08:00
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 )
2022-11-22 12:28:58 +08:00
install ( EXPORT SDL3Targets
F I L E S D L 3 T a r g e t s . c m a k e
N A M E S P A C E S D L 3 : :
2022-10-19 22:03:43 +08:00
D E S T I N A T I O N " $ { S D L _ I N S T A L L _ C M A K E D I R } "
2022-04-16 08:50:55 +08:00
)
2022-06-16 09:37:05 +08:00
if ( ANDROID AND NOT CMAKE_VERSION VERSION_LESS 3.7 )
2022-11-22 12:28:58 +08:00
install ( EXPORT_ANDROID_MK SDL3Targets
D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ D A T A R O O T D I R } / n d k - m o d u l e s / S D L 3 " )
2022-06-16 09:37:05 +08:00
endif ( )
2022-04-16 08:50:55 +08:00
endif ( )
2017-08-10 10:03:10 +08:00
2022-11-24 02:41:43 +08:00
if ( NOT WINDOWS_STORE AND NOT SDL3_DISABLE_SDL3MAIN )
2022-11-22 12:28:58 +08:00
install ( EXPORT SDL3mainTargets
F I L E S D L 3 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 3 : :
2022-10-19 22:03:43 +08:00
D E S T I N A T I O N " $ { S D L _ I N S T A L L _ C M A K E D I R } "
2022-04-16 08:50:55 +08:00
)
2022-06-16 09:37:05 +08:00
if ( ANDROID AND NOT CMAKE_VERSION VERSION_LESS 3.7 )
2022-11-22 12:28:58 +08:00
install ( EXPORT_ANDROID_MK SDL3mainTargets
D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ D A T A R O O T D I R } / n d k - m o d u l e s / S D L 3 m a i n " )
2022-06-16 09:37:05 +08:00
endif ( )
2022-04-16 08:50:55 +08:00
endif ( )
2022-01-08 03:30:26 +08:00
2022-04-16 08:50:55 +08:00
if ( SDL_STATIC )
2022-11-22 12:28:58 +08:00
install ( EXPORT SDL3staticTargets
F I L E S D L 3 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 3 : :
2022-10-19 22:03:43 +08:00
D E S T I N A T I O N " $ { S D L _ I N S T A L L _ C M A K E D I R } "
2022-04-16 08:50:55 +08:00
)
2022-06-16 09:37:05 +08:00
if ( ANDROID AND NOT CMAKE_VERSION VERSION_LESS 3.7 )
2022-11-22 12:28:58 +08:00
install ( EXPORT_ANDROID_MK SDL3staticTargets
D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ D A T A R O O T D I R } / n d k - m o d u l e s / S D L 3 - s t a t i c " )
2022-06-16 09:37:05 +08:00
endif ( )
2022-04-16 08:50:55 +08:00
endif ( )
2022-01-08 03:30:26 +08:00
2022-05-27 07:40:11 +08:00
if ( SDL_TEST )
2022-11-22 12:28:58 +08:00
install ( EXPORT SDL3testTargets
F I L E S D L 3 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 3 : :
2022-10-19 22:03:43 +08:00
D E S T I N A T I O N " $ { S D L _ I N S T A L L _ C M A K E D I R } "
2022-05-27 07:40:11 +08:00
)
2022-06-16 09:37:05 +08:00
if ( ANDROID AND NOT CMAKE_VERSION VERSION_LESS 3.7 )
2022-11-22 12:28:58 +08:00
install ( EXPORT_ANDROID_MK SDL3testTargets
D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ D A T A R O O T D I R } / n d k - m o d u l e s / S D L 3 t e s t " )
2022-06-16 09:37:05 +08:00
endif ( )
2022-05-27 07:40:11 +08:00
endif ( )
2022-04-16 08:50:55 +08:00
install (
F I L E S
2022-11-22 12:28:58 +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 3 C o n f i g . c m a k e
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / S D L 3 C o n f i g V e r s i o n . c m a k e
2022-10-19 22:03:43 +08:00
D E S T I N A T I O N " $ { S D L _ I N S T A L L _ C M A K E D I R } "
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-06-21 07:30:50 +08:00
install (
F I L E S
2022-11-22 12:28:58 +08:00
$ { S D L 3 _ I N C L U D E _ F I L E S }
2022-11-27 12:43:38 +08:00
" $ { S D L 3 _ B I N A R Y _ D I R } / i n c l u d e / S D L 3 / S D L _ r e v i s i o n . h "
2022-11-22 12:28:58 +08:00
D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ I N C L U D E D I R } / S D L 3 )
2022-04-16 08:50:55 +08:00
2022-10-05 03:17:10 +08:00
install ( FILES "LICENSE.txt" DESTINATION "${LICENSES_PREFIX}" )
if ( FREEBSD )
# FreeBSD uses ${PREFIX}/libdata/pkgconfig
2022-11-22 12:28:58 +08:00
install ( FILES ${ SDL3_BINARY_DIR } /sdl3.pc DESTINATION "libdata/pkgconfig" )
2022-10-05 03:17:10 +08:00
else ( )
2022-11-22 12:28:58 +08:00
install ( FILES ${ SDL3_BINARY_DIR } /sdl3.pc
2022-10-05 03:17:10 +08:00
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 ( )
2015-06-21 23:33:46 +08:00
endif ( )
##### Uninstall target #####
2022-11-22 12:28:58 +08:00
if ( NOT SDL3_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 )
2022-10-21 21:32:05 +08:00
set ( HAVE_TESTS ON )
2022-05-27 07:40:11 +08:00
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}" )
2022-06-15 10:29:14 +08:00
2022-11-22 12:28:58 +08:00
# Make sure SDL3::SDL3 always exists
if ( TARGET SDL3::SDL3-static AND NOT TARGET SDL3::SDL3 )
add_library ( SDL3::SDL3 ALIAS SDL3-static )
2022-06-15 10:29:14 +08:00
endif ( )