8ec576ddab tray, windows: fix logic error from commit 1167cf54e1572 748f0b3201 Improved Steam Controller detection on iOS ba1a980535 wayland: Only apply the toplevel bounds when initially mapping the window 28389f1c38 wayland: Apply toplevel bounds to windows ef52a4d4df Fixed warning C4389: '==': signed/unsigned mismatch 8d8649b33f Fixed error: returning 'SDL_TrayEntry **' from a function with incompatible return type 'const SDL_TrayEntry **' f8b13dadd7 Enabled warning level 4 on Visual Studio 1167cf54e1 Fixed warning C4706: assignment within conditional expression 8a9b7ae8d1 Switched nEntries to int, to avoid signed/unsigned comparison warnings fb4ec07119 Fixed warning C4701: potentially uninitialized local variable 'previous_context' used b674b715f5 fix integer overflow ub in testautomation_sdltest 1e1442ed4a README-migration.md: Note the GL/EGL library environment variable removals. d8c7006a42 README-migration.md: Removed obsolete documentation. 6473de59b7 SDL_keyboard.h: Note that SDL_GetKeyName() returns uppercase letters. c7584df999 Sync SDL3 wiki -> header 1f54b228ff video: Convert some EGL environment variables to SDL hints. 7c9f6c6313 Remove debug logging 19ddb29d2d Sync SDL3 wiki -> header d16f76e3d4 wasapi: Don't crash/hang if transitioning to/from a Remote Desktop Connection. 742f2a2fad SDL_render.h: Improve SDL_ConvertEventToRenderCoordinates documentation. 2b375d9704 wayland: Don't enable the text-input protocol when using Fcitx dcc645e413 Fix HTML examples template tabs ece6a6ed8f Sync SDL3 wiki -> header 7f9ee31024 include: Fill in more category documentation. 16ad3e5af6 cmake: consider X11 as not available when xext.h is not found 0ae57f1d90 tray: unix: Shutdown the GTK thread when not in use 6a0405b933 testautomation: Added a test to stdlib_swprintf that previously would fail. 9f2186ad52 Removed outdated comment in AndroidManifest.xml 181995b44f stdlib: Reworked SDL_vswprintf to be more efficient and return correct values. 8509041a09 video: Fix SDL_GL_GetAttribute depth/stencil size when 0 344e394bf4 camera: Favor v4l2 over pipewire, for now. d8c679416b Sync SDL3 wiki -> header b6dc44b133 Support dark theme for tray menus on Windows 7673b84f52 Make SDL_GetTrayEntires() NULL-terminated a58bc3eaf4 [GPU] Fix crash in nvidia user-mode win32 driver when game window is minimized during swapchain resize (#11848) 0a5d2f3da2 Handle pen eraser button as a second button 3519ef3b3b SDL_asyncio.h: Fixed various datatype's `\since` documentation. 56d7cc7a02 SDL_video.h: Added a note about platform quirks to SDL_DestroyWindow docs. 04f3bdb118 Sync SDL3 wiki -> header 18c6958cae SDL_vulkan.h: Improve SDL_Vulkan_LoadLibrary/SDL_Vulkan_UnloadLibrary docs. 522682cd6e Add detailed documentation on building with MinGW64 (#11780) a4cd17cce5 Fixed building on macOS with the dialog subsystem disabled efba42a67b tests: avoid undefined signed overflow 156b3b4a8c Fixed language detection on iOS 53aaf8c26b cmake: custom generate-XXX targets must depend on outputs 9b40d43b1f Sync SDL3 wiki -> header 85851459d6 docs: Note that using the Wayland display scaling mode can have imprecision when positioning due to unit conversion and rounding db97da4ccb ci: bump FreeBSD to 14.2 5579010b6a wayland: Adjust the scaled popup position even if the dimensions didn't change 2d37903323 pen: implement pen support for Windows. ef21ccf080 Create a separate metal shader for NV12 textures 49663bfb58 Make Windows dialogs DPI aware a8c41135aa Enable themed Windows dialogs when building with Visual Studio 8b83a57847 Check that dll's built by MinGW do not link to unwanted runtime libraries e484182765 testcamera: Log the camera backend in use. 011454b237 Sync SDL3 wiki -> header efc390d7e2 Don't log SDL errors by default c077b7a918 Fixed the version availability of SDL_HINT_JOYSTICK_ENHANCED_REPORTS 0b520cd4b4 Sync SDL3 wiki -> header 9f7b2c3595 Fixed incorrect error message when a joystick can't be opened 2c0a8363a5 Added SDL_HINT_JOYSTICK_ENHANCED_REPORTS 95d44f11c7 Sync SDL3 wiki -> header 16dfaca728 Sync SDL3 wiki -> header 32ab09ba21 Sync SDL3 wiki -> header 1461f893c3 video: Correct the window position property documentation a63052db96 Sync SDL3 wiki -> header dd6b484359 Document platform gamepad hotplug requirements ecf8dd054d Show the display content scale in SDLTest_CommonDrawWindowInfo() 4797970bfa Enable SDL_HINT_JOYSTICK_THREAD by default 6b4b9b5f2b Improved XInput controller detection 8ea4b326b3 video: Fix focus when non-focused popup windows are hidden 67ea67f191 Fix mip generation for 2x1 textures on D3D12 c6b5c21aaf clipboard: Ensure SDL_ClearClipboardData clears data even when no data has been set f8f8d87bfa ci: always create binary packages if build succeeded b713e7581b stdlib: fix SDL_strtol of "0" with base 0 54752f8d1c SDL_malloc.c: replace FORCEINLINE usage with SDL_FORCE_INLINE 3842384a38 dynapi: trigger a breakpoint on a fatal error when SDL is built in debug mode 6cf6b160cd SDL_hashtable: don't use assert from libc 62bc2c4c92 SDL_malloc: don't define FORCEINLINE 4fccfb142e cmake: avoid security cookies in SDL_uclibc when building with -DSDL_LIBC=ON 4fbf59ac3a Implement __chkstk for arm64 578ac0ef52 SDL_malloc: disable malloc stats 31a4c92ee5 When building with libc enabled, we don't need to provide __chkstk ourselves 02e85a153f Use the expected plane size when capturing Android camera frames 9955e1dc0d Updated the Android gradle plugin to version 8.7.3 0281071243 Lock joysticks when they are connected/disconnected on emscripten c68ed04a06 Sync SDL3 wiki -> header 2b1d809b21 video: Fix positioning and focusing popups parented to child toplevel windows 6d554a9ea3 Sync SDL3 wiki -> header 9fbc767d4f Fixed formatting of SDL_storage documentation e43aa12b49 Updated copyright for 2025 c0e5901c42 Reverted accidentally committed work in progress f2074d7af3 Updated copyright for 2025 3197e27b59 testcamera: fixed return codes f18e023317 Added testclipboard 54d4e48539 Get the initial clipboard state at startup 6575b8157b Synchronize clipboard mime types with external clipboard updates 30a22d3fed Allow a NULL size parameter to retrieve null terminated text d666c2d189 Use a consistent error message when video isn't initialized 196e2c6662 Fixed crash if num_mime_types is NULL b902b0527b Renamed n_mime_types to num_mime_types a767952617 Fixed spacing 54c555e394 Send supported mime types for external clipboard contents on Windows 8b155708ff Fixed clipboard memory leak on shutdown 1d417ab27f win32: Set the WS_THICKFRAME style on popup windows 643281d022 Revert "win32: Use the size in the WINDOWPOS data while handling popup windows in the WM_WINDOWPOSCHANGED message" 2be89f0dd1 Clarify migration for GetWindowData and SetWindowData a37f993a07 Sync SDL3 wiki -> header 65e0fed5b3 gpu: Document why VertexID/InstanceID builtins are unreliable dd83908109 keyboard: Check for both caps lock and shift when looking up a keycode by name 99ad53ec3f Sync SDL3 wiki -> header df97ccf283 win32: Return 0 from WM_WINDOWPOSCHANGING if a resize is expected 4f0a056b95 win32: Use the size in the WINDOWPOS data while handling popup windows in the WM_WINDOWPOSCHANGED message 18fc13c20d Sync SDL3 wiki -> header 6d20b65a9e Sync SDL3 wiki -> header 3cd3c9317e storage: Add error messages when ReadIO/WriteIO lengths mismatch 6ca2a48595 Sync SDL3 wiki -> header fa9c3331d5 main: Adjust how SDL_HINT_MAIN_CALLBACK_RATE works. cd1bd0ac2e storage: Remove an outdated FIXME. 0be5b8070d Update SDL_asyncio.c 1c04ebe423 Renamed SDL_ASYNCIO_CANCELLED to SDL_ASYNCIO_CANCELED d4d5faedab Added SDL_EVENT_FINGER_CANCELED 8704ab8422 Wait for a display resize event before sending orientation changes 60deaf5f0f Send display mode change events when the orientation changes 5340f2e3fe Updated to the latest version of gradle, with support for Android SDK 35 e91c37f4dd Added support for inset handling on Android 15 f3cbd04a81 Fix C99 trailing enum comma warning. 5f25691c85 Fix C23 empty initializer warning. 8cc4735d74 wayland: Don't override the min/max values when scaling to the screen 2d91f096ca Remove libc function from Windows tray 78c1dc3e2c Sync SDL3 wiki -> header 0410328b15 Fixed warning: ordered comparison of pointer with integer zero d5f08b8f4b stdinc: use __has_include to detect <stdbool.h> 543f244965 tests: include SDL_build_config.h when HAVE_BUILD_CONFIG is defined c2121dd9a2 testcamera: fix MSVC build failure due to C4244 warning. 5c84d38822 testcamera: don't pick a frame size larger than the maximum texture size 6e1177ac03 Include tray function prototypes c030e6f782 examples/pen/01-drawing-lines: Match render target size to renderer output. 0ad3a18937 uikit: reworked Apple Pencil code. f6143da617 uikit: Patched to compile, added to Xcode project. 774e38d073 uikit: Initial Apple Pencil support. 5acd7fe208 wayland: Prevent popup configure events from overwriting the current size with old data c714b1a38b Fixed public header inclusion in the Xcode project cf439d5c63 Fix dib-to-bmp logic in SDL_windowsclipboard.c ec29d3fd66 Define NDEBUG in release Xcode builds 92b7054870 Add SDL_tray.h to the public framework headers 1a466b5548 Sync SDL3 wiki -> header ec8a780ad4 tray, unix: fix -Wformat warnings cc723c9e4b ci: run emscripten on Ubuntu 22.04 0cb4a94c88 cmake: really disable xrandr by default on Solaris 4ffcb8ebab Sync SDL3 wiki -> header 49153ebfc4 audio: Add NULL check to SDL_UnbindAudioStreams 1b99467c71 audio: Make SDL_Bind/UnbindAudioStreams take const arrays 0be6dc5734 cmake: disable xrandr by default on Solaris 4fbd6cba60 cmake: Solaris' SunPro has alternative way to link to pthread libraries e25cc7a88f cmake: cocoa video backend needs IOKit framework 38dd6bcd32 docs: gradle needs package identifier + change example Activity class path f1232de3d2 cmake: add_dependencies must have at least 2 arguments 2664d36faf cmake: avoid parallel generation of headers through intermediate target 609b147432 Sync SDL3 wiki -> header cc24518c41 render: Update GPU backend to use the new present workflow a0e537b9c0 examples: Fix dead links in app metadata df1f1c2e12 cmake: don't create relocatable packages by default with non-MSVC toolchains af3d97dcac Update build-scripts/build-release.py bc448fa445 win32: Use the nearest monitor size for calculating maximized window dimensions 599b4ef254 win32: Fix maximizing borderless windows 1c52e290a3 video: Don't overwrite pending size values when setting the window min/max 9a4d29699d Don't use connection state from the Nintendo Switch Pro report 75a24116b5 testcontroller: show gamepad connection state 22f6eed1d9 Use the NVIDIA Shield home button as the guide button c148837546 Added a Bluetooth mapping for the NVIDIA Shield Controller on Linux 82a1e9f6df Fixed the guide button for the NVIDIA Shield Controller on Linux ba5cf2b152 x11: Don't overwrite popup window coordinates when changing the size 567b828e18 wayland: Use the proper popup coordinates if the position is set while the window is hidden 1701208f32 Sync SDL3 wiki -> header 622c3ebb94 Updated Xcode project with new tray files 0461180e25 SDL_EVENT_QUIT when no window nor tray ff139fe71b Sync SDL3 wiki -> header e9290eeedf Use `pthread_setname_np` also on Android 578509c326 windows/SDL_tray.c, video/windows/SDL_surface_utils.h: use SDL_windows.h 05932e05da tray, windows: replace ZeroMemory() with SDL_zero() e2323c1367 Refactor Android input handling and add pen support f5fbdf7ed5 Make onNativePen available for Android a5e8fc21b2 Add SDL_androidpen 80c39f2ff4 Expose SDL_GetPenStatus for Android pen buttons e3c99e3bd3 misc: Fixed typo in iOS error message. 1413bfb185 Don't overwrite non-CRC gamepad mapping with a new mapping that specifies a CRC 948b16533c testcamera: use the first available cameras cd1bb6247b video/windows/SDL_surface_utils.c: replace ZeroMemory() with SDL_zero() a773558517 Sync SDL3 wiki -> header 50fbae9302 tray, windows: define NOTIFYICON_VERSION_4 and NIF_SHOWTIP, if missing. c744c8fc0b Document how to check for gamepad capabilities a8d585aac3 Don't try to enumerate possible texture failure reasons. ca17d19f90 Updated iOS file path documentation 7bbe6025be misc: Make SDL_OpenURL work with VisionOS, tvOS, etc. ffed1c50c0 misc: Fix SDL_OpenURL on newer iOS releases. 1a6e139dde win32: Only recalculate the position on show for popup windows cf220ea4f1 win32: Fix popup positioning 17ef0c1237 SDL_video.c: replace strlcpy with memcpy in SDL_ShowMessageBox() 8fde28813e SDL_tray.h: Filled in doxygen for a few minor missing things. 17df3fe836 Sync SDL3 wiki -> header eb1be89e70 Cleaned up thread state handling and added thread object validation 7647f16ae1 Sync SDL3 wiki -> header eadc64973a Reset text field content on text input stop b2c2a483e8 GPU: Rename HDR10_ST2048 to HDR10_ST2084 fe39509b85 GPU: Doc touch ups b8036bdd41 Sync SDL3 wiki -> header ca4f5dd40d Added SDL_GetThreadState b7dac5072b correct termination of windows openfiledialog filters 0becdad392 Add missing includes to SDL_tray.h 5bf742daa6 Fix documentation for SDL_sinf bed16f77d1 cmake: define HAVE_MALLOC_H when malloc.h is found b2178857dc Corrected CoreAudio surround sound channel layouts f40a530fd9 subclass the builtin system message class instead cf946e32ba Fix memory management for Windows dialog title 4c70aa33ae Sync SDL3 wiki -> header 76920a230f Fixed Xcode build 01b9b0edb7 Add system tray support (#10873) 17a029502a Sync SDL3 wiki -> header a27c139b12 GPU: Explicitly check Metal hardware support on device creation aa817a67d1 GPU: Document system requirements for each driver 8653a5821b Fixed mingw64 Windows build 60dce94583 Fixed building with older Windows SDKs 440d5754f8 build_configs: remove unused symbols_to_check, added Windows ones 052cb5773e build_configs: remove `HAVE_LIBUNWIND_H` 42c67756cc build_configs: fix spacing 286cc2ebd0 build_config: change unnecessary replacement variables to 1 c2508d5d99 Fix various `#if defined`s f2b7495adc SDL_camera_pipewire: use `SDL_CAMERA_DRIVER_PIPEWIRE_DYNAMIC` ade829d7ca build_config: fix `SDL_DEFAULT_ASSERT_LEVEL` e73d98ad72 build_config: add missing macros 7f1c9c9053 build_config: move unconditionally defined macros 6f462e244f build_config: remove unused `SIZEOF_VOIDP` ddd7d0f927 build_configs: remove unused macros 483e79bf82 Fixed mouse click count for relative mode and multiple mice ed75d9d22a Document that the mouse ID is only valid in mouse relative mode 024e5da6fb Mouse events only get a mouse ID in relative mode 8a0f649363 windows: fix BITMAPINFOHEADER values when getting bitmap from Clipboard af2dbbcb53 Merge SDL_wasapi_win32 into SDL_wasapi 4d301b88d6 Sync SDL3 wiki -> header 5a2eb60389 Only save the pending flags we will restore when hiding a window 969f03d9f0 Added SDL_PROP_RENDERER_GPU_DEVICE_POINTER 7a22076a7c Sync SDL3 wiki -> header 3a1810f9a9 Fixed the Linux mapping for the NVIDIA Controller v1.03 49610fd1e8 Leave mouse relative mode when losing focus 62124e2c28 GPU: Enable Metal validation in debug mode (#11691) 18115ef6bd Sync SDL3 wiki -> header 8691408baf Clarify that you shouldn't make any assumptions about the an SDL_FingerID value. 37b87f79fb Fixed Bluetooth Steam Controller detection on iOS and Android 9a43c08146 Allow rendering during the modal resize loop on macOS 225c0e2ad9 Removed unused function declaration 4add7e2005 Round the window size values when using fixed aspect ratio 3ac28bae6a Removed references to non-existent method SDL_GetAsyncIOTaskResult da37e1541b Sync SDL3 wiki -> header ecea3471f6 Sync SDL3 wiki -> header f8d8bf8066 SDL_GetNumAllocations returns -1 when allocation counting is disabled a33144fbc9 SDL_test: disable memory tracking if SDL does not count allocations 2e4dc9c109 Disable tracking memory allocation counts by default 80c1b1e1a0 Fix testautomation pixels_saveLoadBMP big endian issue 478ac0b9bf Sync SDL3 wiki -> header 03d6e4b69e Sync SDL3 wiki -> header ca4ffc8a00 Fix missing parens in preprocessor defined op 8475c496b4 Fix typo 56cf8d8dc9 Sync SDL3 wiki -> header f0fad41f2c include: Filled in all remaining missing documentation! 4d8f5758cf Sync SDL3 wiki -> header c080bb8417 GPU: Fix non-triangle D3D12 primitive topology types 33442701ca Use the monitor as the client rect for maximized borderless windows 7e298f50fe Make windows resizable if we're about to maximize them programmatically 34974d4d2b Don't remove the resizable style for borderless windows cadeec9cc9 SDL_SoftStretch() doesn't handle large pixel formats f37eef948c Removed raw mouse events d07bb0e679 Removed raw key events c44fa5bb07 Updated raw input events to match SDL style 1025087c2e Sync SDL3 wiki -> header a47b62d1fe Removed PS2 compiler definition f3c194f39a Remove EXTRA_CFLAGS. 7e8576fd19 gpu: Xbox fixes for swapchain presentation f7580374a1 include: Always declare SDL_GDKSuspendComplete. 232c2970d3 Sync SDL3 wiki -> header 5ec5f23fff tests: Print accurate enabled/disabled relative mode status in testrelative b815123cf2 Sync SDL3 wiki -> header 819e1cc95b SDL_stdinc.h: A couple wikiheaders fixes. b2eb23a617 SDL_filesystem.h: Fill in missing documentation. 0b401137d2 SDL_stdinc.h: Document more stuff. b83dd793fd SDL_stdinc.h: Tons of documentation updates. a0864799f2 GDK: Fix compile_shaders_xbox.bat build events 5d9ccb6296 gpu: Add explicit casts to D3D12 staging descriptor changes e992522cb2 Xbox buildfixes for WarpCursor jitter fix, dark mode b2c15a8c2a Sync SDL3 wiki -> header 0f9e86fe1c tests: Fix GPU tests crashing when window is minimized c9e22d4672 Sync SDL3 wiki -> header ff366fba87 include: Move SDL_HAS_BUILTIN to SDL_begin_code.h, document it. e46d8756e5 tests: Update GPU tests to use new swapchain best practice 401c8f8e4e SDL_timer.h: Fixed doxygen typo. 2f9a45af60 Sync SDL3 wiki -> header 0c42891826 include: Filled in more documentation gaps. 3ce68f80bc wayland: Clean up the relative pointer if the seat capability is removed 7c8171da92 wayland: Handle the relative pointer manager appearing after the seat has been initialized 4bfc8f84f7 tests: Add a raw event mode to testrelative 8c849ecc6c wayland: Add support for the MOUSE_RAW_* events fce922b66c wayland: Add support for the SDL_MOUSE_RELATIVE_SYSTEM_SCALE hint d6a95ae198 Sync SDL3 wiki -> header 42de2ac6a9 Fixed typo e08f34c3be Removed SDL_HINT_MOUSE_RELATIVE_MODE_WARP 6e0df0af24 Reduce the possibility of SDL_LockMutex getting called on a destroyed mutex after SDL_StopEventLoop 519923ea80 Sync SDL3 wiki -> header 624a4d5f26 include: Documented important SDL_begin_code symbols. 5c0f8dc179 add alternate raw mouse motion events with windows implementation (#10042) 345cab1e36 streamline cursor clipping logic on windows (#11237) 35a9d156a6 render: convert tmotion vectors to render basis 3739749404 Improve Win32 darkmode and fix title bar's context menu (#11543) 10f868abf4 Sync SDL3 wiki -> header f81472d767 Document that you should read from processes before waiting for them to exit. 3001c61de0 x11: Use the master pointer device for absolute motion 835b6e0c1a Enable high refresh rates on iOS da80b9bce5 Fixed an inaccuracy in the documentation for SDL_ConvertPixelsAndColorspace 2ce21d1fed Fixed an inaccuracy in the documentation for SDL_CancelGPUCommandBuffer 0ca8027205 Fixed an inaccuracy in the documentation for SDL_PenProximityEvent and SDL_PenMotionEvent 4d9e7a2a68 Sync SDL3 wiki -> header b5eea03d1e GPU: Clarify presentation concerns in SDL_gpu.h 7dd523fbb1 Sync SDL3 wiki -> header 48a0adb2ac Sync SDL3 wiki -> header 4d4a2786bb render: Updates to format-string versions of SDL_RenderDebugText. 6abebca943 Fix format string in debug-text example 1d0e28a5b3 Add SDL_RenderDebugTextF & SDL_RenderDebugTextV 5608bf5866 Sync SDL3 wiki -> header 0fbcd0d586 GPU: Optimize usage of D3D12 staging descriptors (#11657) e957840d34 include: Filling in some more documentation gaps. 684098fac3 Fix possible bug with Windows dialogs bc9c86bcc2 Dialog: Add suffix to filters all the time b58e6d7274 .wikiheaders-options: Include CPU intrinsics macros in quick reference. c9ab8ad8d9 SDL_intrin.h: Added missing NEON and Altivec documentation. d38c09e5c4 Sync SDL3 wiki -> header 6730cf7bed SDL_intrin.h: Add documentation. 2f68efda83 wikiheaders: Add underscore to the "big ascii" character table. 19bdc01b8c Sync SDL3 wiki -> header eda0261c4e video: Drop size and position requests for windows in a fixed size/position state 6fa6297441 fix typo from commit b84f150d0669592f b84f150d06 fix macOS builds with hidapi disabled c52a96ca8e Sync SDL3 wiki -> header 080b3002c6 Fixed building with an older Windows SDK d0d1414836 messagebox: Copy title and message up front, to protect SDL_GetError() strings. a92eade183 Sync SDL3 wiki -> header 0bb42cb023 alsa: a few more minor formatting tweaks. 483ceb5355 alsa: Reenable SDL's internal channel map support when ALSA can't swizzle. 35360ec4d7 alsa: Use more hints for opening default devices. 576f13ac7c alsa: Put debug logging back into correct category and logging level. ff96c59df4 alsa: Add back in code to guess the correct ALSA device prefix. b108b54c6a alsa: Bring up to current SDL coding conventions and standards, other tweaks. 639855b7e5 alsa: Remove direct calls to memset a4a1dff219 alsa: remove `loop` macro b9c062c858 alsa: Pulled in latest changes from @sylware 76e7bc4c04 Added support for ALSA dmix audio output (thanks @sylware!) 3fa0537565 Sync SDL3 wiki -> header 79316ca36e Heavy work on improving category documentation. 9aca97f4e7 Sync SDL3 wiki -> header c0803f7683 SDL_dialog.h: Improvements and fixes to the documentation. a55686ce61 hints: Clarify when joystick hints should be set. eb3fc0684c wayland: Don't close an externally owned display on init failure 6cc9ce183d SDL_internal: remove `#undef SDL_LEAN_AND_MEAN` 8b6d3c88cf Fix `#ifdef`s to have config flags either defined as 1 or undefined 313d522f39 wayland: Only require fifo-v1 for Wayland by default ac2edad809 audio: Simplify and unify audio stream format updating when devices change. 9a9616894d wikiheaders: Fix uninitialized variable issue. 9628549c7c Xbox buildfixes 80b9986418 audio: Fixed potential NULL dereference. 1944bc7407 Fixed warning C4702: unreachable code 63a498c966 Fixed warning C4189: 'cqe': local variable is initialized but not referenced ce9dddfde2 Don't free properties while modifying the property hashtable 43a61fec91 Removed external hashtable locking functions 61511c48a4 SDL_HashTable is now optionally thread-safe e0cee83a3a emscriptenaudio: Removed comment about Firefox not supporting userActivation. 2635239bbc README-migration: some improvements to the audio section. ce7cb10541 dialog/unix: create zenity argv on the main thread cf59fc797f dialog/unix: deep copy args to avoid data race af6c641b8c dialog/unix: stricter typing 4c86511035 dialog/unix: reduce string allocations ff82238172 dialog/unix: remove /usr/bin/env indirection c5acbef3bf GPU: Fix D3D12_INTERNAL_StrToWStr returning incorrect length 6fe09e3aa4 dynapi: Minor optimization to SDL_SetError wrapper. a1e8d5c327 Sync SDL3 wiki -> header 3ee39f6c3f GPU: Revise swapchain acquisition (#11633) bbd4eeb287 examples/audio/04-multiple-streams: Note about web browser audio in README. f45ce45603 ngage: Remove Nokia N-Gage support. 3f425b6f20 examples/audio/04-multiple-streams: Patched to compile on Visual Studio. 1fbb8e1824 examples/audio/04-multiple-streams: Remove drag-and-drop support. e6e468d0c4 Sync SDL3 wiki -> header 962268ca21 Fixed Chinese locales on PSP (thanks @ccawley2011!) ac92af02ea wikiheaders: put a header on the quick reference pages. be5fba963a wikiheaders: optionally generate a Quick Reference page. 7c5c88a3ad cocoa: Fix conditional coding style d4225070ad cocoa: Toggle the fullscreen menu item to 'leave' when entering a fullscreen space 48b6b93fb6 cmake: make RelWithDebInfo the default configuration 5447cb6d38 video: Prefer the window manager supplied coordinates for selecting a fullscreen display e4215a04d9 gpu: make macro's function-like using do-while-0 fb71b44231 gpu: define EXPAND_ARRAY_IF_NEEDED macro once and make it function-like 0370b92d80 gpu: SDL_ClaimWindowForGPUDevice must set an error message on failure 5c020b9930 GPU: Enable VK_ERROR_NATIVE_WINDOW_IN_USE_KHR to print 279836d259 GPU: Swapchain image count respects number of allowed frames in flight 1d5d948ccf Fix building SDL3 without dialog support 19cc04a162 Add build-release.py updates from satellite libraries b5c05b6e29 wayland: pass actual empty strings to zenity 1e7c7c69c5 wayland: handle 0 extra buttons in message box 09428688b9 Added a reminder to sign the source archives when creating a release 972c6d0b82 Add `SetTextInputProperties` to video device API and fix iOS handling 5d09656afa Refactor iOS text input activation to better work with hardware keyboards 72895a6994 Remove unused `hardwareKeyboard` variable f64e9a52dc Sync SDL3 wiki -> header ddb1e66d90 Updated the release checklist documentation caf0348b26 Enable ApplePressAndHoldEnabled 900627f7fc Enable the SDL_HINT_MOUSE_DOUBLE_CLICK_TIME and SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS hints on macOS 6d1dac1404 Removed unused math code from the Visual Studio projects d25cdc0fef Sync SDL3 wiki -> header df48af22d4 Removed unused math code from the Xcode project 08de6656fc Document the pixel layout of YUV format surfaces 2ac62d8c67 Sync SDL3 wiki -> header 846eb9a886 Added SDL_RenderTextureAffine() to the exported API 7278399366 Sync SDL3 wiki -> header d0f1910918 add SDL_RenderTextureAffine 2c4fc2e549 Sync SDL3 wiki -> header 8d8578785c SDL_asyncio.h is a public header and should be included in the framework fa5f84fb6e GPU: Add SetGPUAllowedFramesInFlight (#11599) 47429227ab examples: Handle newlines in README.txt better. 0f228de48a examples: Add some metadata to the generated webpages. ffb9b30e84 The metal renderer doesn't actually support RGB texture formats 1a5b0796b4 examples: fix canvas size for small screens d1b8fcd692 work around type redefinition errors in SDL_immdevice.h 9b82d46259 GPU: Use correct logging category 5229b520af GPU: Log D3D12 driver version b79e3ac830 examples: Let the browser handle README.txt word wrapping. 90efb63e52 examples: Improve webpage generation in various ways, add thumbnails, etc. e50dc7265b examples: Fix some window titles in the demos. 7ddda4fe18 Add system theme support for Emscripten 3060105cfa Don't filter out controllers when launched by Steam under Proton 2e5208f353 kmsdrm: Fix Vulkan type redefinition errors from commit 24ed947cc35ebb9f50ac0685f1b88ec164d46c6c c49f4ceeb2 Sync SDL3 wiki -> header 23828b62d4 Added SDL_IsMainThread() and SDL_RunOnMainThread() bc4185c685 Document that video and input functions should be called on the main thread. fffa6c7a2b Add missing include of fcntl.h 235e5c6a6c Fixed crash if a device doesn't have a USB product or manufacturer string 9f8157f42c Sync SDL3 wiki -> header a0b8b57afe examples: add empty placeholder image 951ca96dc9 asyncio: Added more category documentation. 58f8e259d1 examples: fixup URLs for project subfolder 56da4e81d8 examples: added homepage + categories pages + added CSS (similar to wiki) 9784e10a75 audio: Let emscripten update device->sample_frames at device open time. 5bfece34f9 ran gendynapi.pl after PR/11170. 045e31178f Added SDL_dialog.c to the Xcode project a74693c9a5 Sync SDL3 wiki -> header a4852f3a10 SDL_ShowFileDialogWithProperties with more options dc5a2ddfd0 GPU: Forward D3D12 validation warnings to the SDL log efb59bd0bf GPU: Fix validation warning in D3D12 blit code 45869d6177 GPU: Vulkan requires drawIndirectFirstInstance feature (#11583) d8eb68a6c5 GPU: Clean up D3D12 blit shader compilation 24ed947cc3 kmsdrm: Fix an LTO type mismatch warning 31128b6cdd kmsdrm: Clean up GLES function definitions 123306b18c X11: support _NET_WM_SYNC_REQUEST d320d7143d Fix rawmouse wrong timestamp (#11553) 830b132cd4 SDL_asyncio_liburing.c: replace __kernel_time64_t use with SDL's Sint64 4ac78706bf SDL_asyncio_liburing.c: replace size_t casts on pointers with intptr_t 2ad5836d02 Sync SDL3 wiki -> header 31d09909b6 Sync SDL3 wiki -> header 1377cdb3f2 Fix the Indonesian language code on Android 46f43c2e6e asyncio: Remove `SDL_AsyncIOTask` from the public API. 4745aa3324 asyncio: Windows IoRing support, other tweaks and fixes. 3ca629ceb5 asyncio: Allow file closes to request a flush/fsyncdata. 022a6a9f97 asyncio: Added Linux io_uring support. e79ce2a200 asyncio: Added async i/o APIs. 7293c18314 Fixed an inaccuracy in the return parameter information in the SDL_ConvertPixels function 401187eb6c Removed extra sa in SDL_ConvertSurfaceAndColorspace b7a31ead08 added "gpu" to the list of possible values of SDL_HINT_RENDER_DRIVER in SDL_hints.h 9fb8661684 Fixed an inaccuracy in the return parameter information in the SDL_SurfaceHasAlternateImages function 6aab5a089d Fixed potential buffer overflow 65c9a58f5e audio: Make sure a few bitflag checks convert to bools correctly. ec2ef5f9b5 dynapi: order headers for reproducible behavior 2762644e96 video: Don't error when setting an unbounded max window size while a minimum is set 068d9cc7d6 Sync SDL3 wiki -> header 2f59a1ce44 SDL_audio.h: Fixed a documentation typo (thanks, @JBetz!). acf0f09320 SDL_migration.cocci: Fixed up some SDL3 symbols that had changed. 3a1d76d298 Sync SDL3 wiki -> header ce573b01f8 audio: Added SDL_IsAudioDevicePhysical and SDL_IsAudioDevicePlayback. d53241a299 docs/README-main-functions.md: reformatted Best Practices section. 5cd188bdbc Sync SDL3 wiki -> header 7099de4ae8 Update README-main-functions.md bf9fa38920 SDL_audio.h: Fixed two typos. f5ad66ef4b audio: Allow channel maps to specify -1 to mute a channel. 3303e9843f Sync SDL3 wiki -> header f852038384 filesystem: Added SDL_GetCurrentDirectory(). 16113374ff cmake: Enable POSIX fsops code for PS2 and PSP. c0f1fe8e7f Sync SDL3 wiki -> header f022501d52 fnsince.pl: Deal with post-3.1.3 releases before 3.2.0. b8233aff8e Vita: implement mousewheel and buttons 4/5 b8bbd29ce9 Sync SDL3 wiki -> header bbc9c75618 x11: Fix memory leaks in clipboard event handler 5c8bed3780 GPU: Fix D3D12 tearing query 03d15c031b Sync SDL3 wiki -> header d55e6dfc5e hint for which system cursor to use as default 3c13bae64f Sync SDL3 wiki -> header e0e61775b8 Add missing SDL_WindowFlags to SDL_test_common.c 6fab61b69d hidapi: check each usage on a device before ignoring it completely e9fdcf6c60 Sync SDL3 wiki -> header 1720fc77fe examples: Added input/02-joystick-events a07a88c1b4 examples: added input/01-joystick-polling c508396e33 Avoid usage of CreateEventEx in WASAPI code 7a3f5ef129 Speed up full-surface fills 10e2ce9ba4 examples: Added audio/04-multiple-streams 88926f2b73 emscripten: send drag and drop events e14d939ead Sync SDL3 wiki -> header bbe843fd80 Full configuration of SDL_INSTALL_CMAKEDIR_ROOT 79f6f766d4 Avoid usage of `CreateEventEx` in D3D12 GPU backend fdafa266d8 (doc): make cmake build parallel on linux 61ba8010d3 examples: Emscripten builds should allow memory growth. 212f0dcdb1 examples: Fix output name of demos. 41b0d36a6c fix MSVC projects after commit 51637495 f9ddb0bdea examples/demo/04-bytepusher: No need to check NULL before destroying things. 7bf3cae02e examples: fix cmake after commit 51637495 51637495e4 examples: Rename "game" to "demo". 566f3dc138 Add BytePusher example b02285d495 Sync SDL3 wiki -> header 97ddc9adf2 Fix outdated references to SDL symbols in docs. Fixes #11503 465881d560 android: patched to compile. c135386f58 events: Add render category to SDL_EventCategory. 615c935d11 events: Added SDL_RenderEvent. 848fd1eab4 ci: don't do 'brew install pkg-config' anymore II 0007451222 ci: don't do 'brew install pkg-config' anymore 3a2b595c4f PSP: Add locale support e94ba6e700 Sync SDL3 wiki -> header 631c30527b Sync SDL3 wiki -> header 2e70944c44 gpu: Added an initial FAQ to the category documentation. df73cae2b0 cocoa: Clear the pending flags on non-spaces fullscreen transitions a4006e654e Fixed typo in the name of the SDL_GetAppMetadataProperty function in the description of the SDL_SetAppMetadataProperty function 5ee4d176f1 Added support for the Razer Wolverine V3 Pro a0591ec4a3 README-documentation-rules.md: Mention not listing types in param/returns docs. fef001cb48 Sync SDL3 wiki -> header e770b4e266 dialog: Clean up filter param documentation. 795ceae520 Sync SDL3 wiki -> header ecae3789ab SDL_dialog.h: Remove verbose docs on callback param from several functions. 587384756f render: use nearest pixel scaling for debug text 2b744c7df3 cocoa: Refuse to SDL_Init(SDL_INIT_VIDEO) from background thread. 932bb968d7 Fixed infinite recursion when the microphone is unavailable 1413848f41 Fixed crash if a window ends up without a display 35e6c92c3c Added the ROG Ally X to the list of Xbox controllers 4fb955c80b cmake: fix sdlcpu.cmake for C89 compilers aa352837d5 cocoa: Don't sync on a pending fullscreen event if the window is miniaturized 18b7a2315c cocoa: Restore fullscreen state on the window regaining key status 014196d98d cocoa: Fix minimizing fullscreen windows on Sequoia 7a074f582e Steam Controller handling improvements d2dc0fa920 Sync SDL3 wiki -> header 0c53d9a1ee Implemented SendEffect for Steam Controllers d8f8cf3e99 Added SDL_HINT_JOYSTICK_HIDAPI_STEAM_HOME_LED 184da780f5 Fixed a crash when unplugging a Steam Controller dongle 70fe38bcb2 wayland: Rename some display related variables to better reflect their purpose e027b85cc4 Validate that pixel formats have the correct attributes bd57cfdb55 ci: pin MSVC ARM Windows SDK version to 10.0.22621.0 0f9e551d71 joystick/gdk/SDL_gameinputjoystick.c: fix build errors due to -Wformat af6ce629c4 Make sure pairing remains enabled for the entire time dongle pairing is active 2b10a040ff Fixed rare case of wireless Steam Controller not being detected at startup 572cc7af63 Sync SDL3 wiki -> header 7d7ee43ddb stdinc: document SDL_strnlen and SDL_strlen e9f7a1b359 fix relative system scale function on Windows 25390d6c21 fix relative warp emulation broken by #11460 e0166256ff joystick: Fix connection type for Steam Controller and Xbox 360 dongles 8657fa8b3b Improved reliability of the Steam Controller driver f8468d580d add brace for contitional eaef956a9a fix errenous delta when warping b54f6044a5 Removed Linux Steam Controller support b43b333d25 Moved the GPU renderer to the bottom of the list 7f14eb33c6 snake: improve comment b71151a697 Added support for pairing controllers to the Steam Controller dongle e4778d53d3 testautomation_video: Another Emscripten test to be skipped. d48d4c8c48 testautomation_video: Don't test window position on Emscripten. f0b61c69e7 Fixed duplicate controllers showing up on the Steam Controller wireless dongle fe3566ca46 Ignore Steam Controllers in the Linux driver if HIDAPI is handling them 7959b08a4d Fixed spacing 6ca8269b96 docs/README-raspberrypi.md: Corrected NEON information (thanks, @cmitu!). 0f9505256d Steam Controller support defaults off on mobile platforms 140aba9e5d Enable Steam Controller support by default 68c2cf84f6 hidapi: Add support for the Steam Controller wireless dongle 1a311bc638 hidapi: Add support for Steam controllers connected via USB e67ae274a5 hidapi: Fix bus type in HIDAPI_IGNORE_DEVICE() on Linux 7c5a2cd462 Sync SDL3 wiki -> header 95c8a1cf7c iostream: Update docs about return values and SDL_GetIOStatus(). 7007b4762b events: Fix a compiler warning. 6049ca4fb1 docs/README-raspberrypi.md: Initial updates. c021c75737 Sync SDL3 wiki -> header d20936b544 camera: Add some category docs about camera device warmup delays. 3877bf55a3 Sync SDL3 wiki -> header c26dda10e0 Sync SDL3 wiki -> header 9a4ae4b9ed Fixed crash if SDL_GetVideoDisplayForWindow() returns NULL 20cd4290d7 Sync SDL3 wiki -> header dcf6dd19c3 Sync SDL3 wiki -> header 6c99a4b783 Sync SDL3 wiki -> header a85f0b49f4 GPU: Remove D3D11 shaders from testgpu_spinning_cube 5a74aadac9 GPU: Null check shader inputs in CreateGPUGraphicsPipeline 32cc92dceb pipewire: i/o callbacks should avoid higher-level iteration during device open. 119b4fa5f5 GPU: Remove D3D11 backend and allow D3D12 to ingest DXBC (#11456) fc12cc6dfd ci: add linux-powerpc to test matrix 559223ff9d cmake: don't use uninitialized SDL_VERSION and use REVISION.txt 332fd824f0 GPU Vulkan: release submitted command buffer after defrag (#11430) 1ed1bc1d5d testautomation keyboard: use `space` instead of `a` 8a2cac7aaa Fix SDL_PRIs64 to use standard PRId64 54ff1f35bd Fixed audio dropouts when plenty of audio is queued on Android 37b49c98dc Fixed setting up surround sound on NVIDIA Shield TV dbe82e685d Sync SDL3 wiki -> header 3e2ef64c98 Add SDL_SaveFile and SDL_SaveFile_IO functions b0140fb1b4 Sync SDL3 wiki -> header 97dac37373 Added SDL_HINT_ANDROID_LOW_LATENCY_AUDIO 6836ef8fd2 Added logging for low latency audio state 908bd84c5e Fixed reopening a controller on Android 1ea4edddec Fixed Java exception if mConnection is null 588e32ea5a test: Change LoadContext() return value type from int to bool ecfd143a26 testcontroller: update the controller name when it's opened as a gamepad 908b42f2b9 Fixed 8BitDo M30 mapping to match fighting game conventions and the layout in XInput mode 028194286c Added mappings for the various firmware versions of the 8BitDo SN30 Pro controller 0ef7a1d901 Show the guid of gamepads that are opened ed943318e2 Support multiple joystick buttons bound to the same gamepad button 27b828754a Use HIDAPI to provide better names for DirectInput controllers 5a7b75607a Added the OpenVR license to openvr_capi.h c1246e31a4 Added support for the PowerA OPS v1 and v3 Pro wireless controllers d3b882b4f9 Added support for the PowerA Fusion Pro 4 and Fusion Pro Wireless controllers fb2145f731 Sync SDL3 wiki -> header 96729e745a SDL_GetClosestFullscreenDisplayMode(): Rename parameter `mode` to `closest` 683991ab71 Get the full display bounds if the window doesn't fit in the usable bounds. 6823e3f005 Fixed gaps in scaled 9-grid texture rendering 458f616c53 wayland: Send a display removed event when a display is disconnected 73e0e8cf5b SDL_GetDisplayForPoint(), SDL_GetDisplayForRect(): Check argument for NULL. 8026866994 wayland: fixed memory leak at shutdown cacfdc8cfa Sync SDL3 wiki -> header 7031b240df Added SDL_PROP_WINDOW_WAYLAND_VIEWPORT_POINTER c56a3f60fe xcode+cmake: use SDL3.framework folder as IMPORTED_LOCATION 615d2dcd5b .wikiheader-options: Treat SDL int types (Uint64, etc) as API prefixes. e001a309be create-release.py: use head of git ref as default commit 27f69c772c Updated the release checklist 87dade4421 Set SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER for the GPU renderer 0508f100e2 Sync SDL3 wiki -> header 927d297161 Updated to version 3.1.7 for development 78cc5c1734 Updated to version 3.1.6 for the preview release 19af3a2b34 Sync SDL3 wiki -> header e31e3caece PSP: Fix building examples in parallel c5f12b135d Fixed the D-pad on wireless Xbox 360 controllers 780578cd36 PSP: Allow building tests in parallel 8b48b70c6e Fixed return value setting state on combined Joy-Con controllers 77a0411dde Minor cleanup 68cc173d92 Sync SDL3 wiki -> header 7c968f1510 Update SDL_hints.h e2857fc5a2 Update SDL_mouse.c 5699ba799e Add return to CHECK_VULKAN_ERROR_AND_RETURN macro 6c10446a6c Add version info when building CI/CD for apple platforms d6b60bcc53 typo in player spawnpos, mov drawcall out of loop 09495059df Fixed the PS5 controller face buttons on Amazon Fire TV, Android 11 c099d0525e sort_controllers.py: fixed parsing SDL_PRIVATE_GAMEPAD_DEFINITIONS 24bdbb8bf4 Supress Metal warning when compiling against macOS 10.11-10.13 2a05b63580 Mark generate.py as executable 51628034d9 Don't offset the view if there's no text input rect c8a04eec06 Autorelease keys should go down when pressed. f543faf837 Allow in-tree build 6647345be0 Sync SDL3 wiki -> header b4dff42dcd GPU: Add SDL_CancelGPUCommandBuffer (#11316) 94d110edd5 Specify C source file in example VC projects 415abf2ea2 Rename variables for readability bdf16628fb Added 03-infinite-monkeys example game 2b92dc9baa Minor updates to woodeneye-008.c from template.c a93ec0c679 Added Visual Studio project for 02-woodeneye-008 9a77ee2008 Added instructions for creating Visual Studio projects for examples 014b473bcc GPU D3D12: Fix depth texture sampling ff14a1781f GPU D3D12: Fix indirect buffers not being refcounted 149ecffd6f SDL_vulkan.h: undefine VK_DEFINE_HANDLER and VK_DEFINE_NON_DISPATCHABLE_HANDLE 35e53f76a9 metal: check success of device creation (#11367) feb10434a1 Order by subsystem b2f216f9e2 Add GPU to iOS build config 54836050c9 metal: Add availability checks 8f9a562969 wayland: Remove vestigial struct member 152bcce85f Add examples to `SDL.sln` (#11255) 1e7c186461 Splitcreen FPS example with multiple mouse and keyboard (#11317) 5c5235fb51 ci: Add Steam Linux Runtime (Sniper) task 36c209080c wayland: Refactor some shell surface related names 2b7dc55364 wayland: Check the WM capabilities before sending a minimize event 1abbd13414 wayland: Throttle interactive user resize events e0d019c941 Sync SDL3 wiki -> header cb0c7c9680 SDL_CreateDirectory(): directory tree creation for absolute paths for non-Windows platforms a10578acbd SDL_SYS_RenamePath(): Fix error message. 3922bcec95 Sync SDL3 wiki -> header 04a478b6a9 SDL_Enumerate[Storage]Directory() comments: Use enum constant names instead of integers. 5c3d42aade Update README-linux.md for openSUSE Tumbleweed dependencies 8468c372b2 SDL_EnumerateDirectory(): (posix) Fix return value when directory is invalid 97b924f985 typo: maxOS -> macOS a851c5b648 create-release.py uses python3 47411d8007 build-release.py uses python3 4f160d69a6 Closes #10318 - implement Android prerotation in the Vulkan renderer 93471cf78d video/openvr: minor clean-up: 8bf1a84200 ci: add include headers of build directory to ci artifacts 590e1196d0 snake: check allocated memory before use 20e01c6fbe android: add (disabled) android.permission.INTERNET to AndroidManifest.xml 850158f83f testcontroller: fixed incorrect usage of memcpy() 344546b4ea cocoa: Make sure GL context destruction happens on the main thread. dcd4ddb043 Sync SDL3 wiki -> header 8d3bec99a7 audio: Make SDL_GetAudioStreamProperties() thread safe. 10e52e1899 docs: Added more '\threadsafety` tags. 731853077a Send drop complete events when the drop leaves the window on Cocoa, Wayland, and X11 db4e2ccbac Allow redefinition of only one macro SDL_SINT64_C SDL_UINT64_C c0bad724a7 README-ios.md: Add info about UIApplicationSupportsIndirectInputEvents on iOS 17 4ea26a7771 emscripten: scale mousewheel X coordinates correctly, not just Y coordinates. d0cf2c19d1 Allow defining custom SDL_SINT64_C and SDL_UINT64_C macros (#11315) 7108291d0b video: Change SDL_GLattr to SDL_GLAttr. c0e9205a92 video: Change capitalization on various OpenGL attribute typedefs. 3c506630c3 video: Turn several OpenGL attribute enums into integer typedefs. a04fda211c Sync SDL3 wiki -> header 4e33440c04 Sync SDL3 wiki -> header e8b69b03fe cmake: fail configuring when no X11 or wayland could be found (#11310) 540db0d164 Bumped version of macro 'main' to 3.1.3 370521363a Sync SDL3 wiki -> header 924f719b97 wayland: Get the window content scale from the backend 299587fa64 Sync SDL3 wiki -> header 5e855d82e3 Manually bump versions of non-function identifiers introduced after 3.1.3 to 3.2.0 22bc430bbb Set error using function hresult 6eca02a0e7 evdev: correctly handle composite devices ba1412cb9f evdev: fixed devices not being removed on disconnect 370c0426ce testspriteminimal: only quit when escape is pressed acfc223e15 Sync SDL3 wiki -> header 423337796c GPU Vulkan: Use dedicated allocation for download buffers (#11298) 24b376ef18 Sync SDL3 wiki -> header 1c1706a00b fnsince: update `\since` policy for documentation. 21c91d5535 examples now using SDL_ALPHA_OPAQUE(_FLOAT) for opaque alpha value 63ef5a2369 Sync SDL3 wiki -> header fd530d029f Fixed typo in SDL_clipboard.h 7b6416add0 Sync SDL3 wiki -> header af1c165352 Set version of new identifiers after 3.1.3 release to 3.1.6 45584ad73e Simplify get_channel_name() so it's easier for people to read and understand c134dd6e5e Fixed typo in the channel layout documentation 4a8eadf167 include: Fixed typo in SDL_CopyFile's documentation. d9e6fe0b7a Sync SDL3 wiki -> header f5c27a3a2c render: Corrected docs for SDL_SetRenderVSync(). 1f8b9a320c VITA: fix SDL_ShowMessageBox by using different memory type a42c9ec5f7 Sync SDL3 wiki -> header 2318961b6f docs: Add `\threadsafety` to some low-hanging fruit across a few headers. eed11ad6d6 docs: Fixed example code for SDL_qsort_r() and SDL_bsearch_r(). 0bec18245d android: fix android.content.Context:getCacheDir JNI prototype e9b5f6749e wikiheaders: add (disabled) code to check for missing `\threadsafety` tags. 19a1175c02 include: Updated docs on SDL_TouchFingerEvent. e61f0678ee x11: Remove the "safety net" error handler. f9bffa31b6 docs: fix window flags in README-migration.md b0982e8982 docs: Updated README-emscripten.md. c56af0d975 Removed unused code 35be8bb7f9 Fixed warning C4456: declaration of 'e' hides previous local declaration 8119568805 x11: Remove text-scaling-factor setting checks 1c51b8dc33 Only set the OpenGL flag if the OpenVR driver is active 82b3325978 Fixed memory leaks if Windows initialization fails d199586683 Fixed memory leaks if OpenVR initialization fails 7b492553c4 Allow the OpenVR driver to be enabled on Windows 0aea14cf45 Added logging for additional events 3d47877bb4 Added SDL_EVENT_RENDER_DEVICE_LOST 54e52d055f Sync SDL3 wiki -> header 9c848e08e4 docs: Explain events for already plugged in controllers (#11286) 26567df878 Don't treat mouse buttons as focus clicks if the window has mouse capture ef758d05c1 render: GetRenderViewportSize shouldn't use scale, just logical presentation. 92520c1d9b Improved D3D12 handling of unrecoverable device loss 315842cf71 Fixed crashes handling D3D11/12 device lost in testsprite e2254b1045 Added color scale info for the GPU renderer TODO item 4b54e32231 Tweak android path functions comment tag \sa a6536a9298 RI_KEY_BREAK indicates key is up 679dd4b181 SDL_RequestAndroidPermission() comment: Add link to android permissions website eb1451536e Sync SDL3 wiki -> header 5819d4b360 SDL_CreateRenderer() comment: Remove mention of flags e0321ca5b6 SDL3: SDL_render_gl(render name: opengl) dose not support transparent on Linux/X11 (Bug #11273) (#11274) dcbb2f11a8 Clamp the texture alpha and color modulation values to 0-255 541ba33714 Fix SDL_GetClosestFullscreenDisplayMode documentation 40070d899d Refactor Blit_RGB555_ARGB1555 to be more generic 3d2c8c510d add GLES3 headers from Khronos for OpenVR video driver. 2668558c5c Sync SDL3 wiki -> header 153f90a725 Revert "Use the correct return type for SDL_GetAndroidJNIEnv()" ffb1d9e4b4 Removed Blit2101010toN and BlitNto2101010 5c1ccaefae Fixed VULKAN_UpdateViewport judgment. 4c2d0c422b wayland: Remove kde_output_order_v1 support 5f874b60a8 Sync SDL3 wiki -> header 1647d36aec docs: document copying shared SDL3 a bit more + document sanitizer/libc incompatibility b6a6a4a7f8 audio: fix incorrect dynCall in Emscripten audio. 07bb8f1c4c openvr: added APIENTRY for OpenGL functions (thanks @cnlohr!) b40ad5428b Fixed assertion at quit when the debug text was the last texture used. a48fa675be Fix formatting 1d23d2c3c2 Renamed SDL_SANDBOX_UNKNOWN to SDL_SANDBOX_UNKNOWN_CONTAINER a7da3ad59b x11: Support sorting displays via the priority hint 0faf9dc4a4 kmsdrm: Support sorting displays via the priority hint a6e5ab437f video/openvr: Avoid type redefinition errors. 2654d5d48b Sync SDL3 wiki -> header e81e917c5e Added an OpenVR video driver (thanks @cnlohr!) 569691797d windows/SDL_systhread.c: fix permissions 186c6e5c9d windows: fix race condition with exception-based thread naming. faa404a652 If we get a newline character, treat it as SDLK_RETURN a432abf4cc Make sure that we quit if we get a terminating event c5e1ae4580 Only free debug_char_texture_atlas if it has been allocated 00f4cb308b Fixed crash if the Vulkan renderer changes swapchain image count 41366f73b2 Don't block in Android USB device open 60c3eaf5ee Use SDL_GetAndroidJNIEnv() in hid.cpp 2d3fa03d53 Use the correct return type for SDL_GetAndroidJNIEnv() 3d852da806 Requesting Bluetooth permission on Android is now asynchronous be3d961b47 Treat clicking the right pad as a thumbstick click on a Steam Controller 6da4d94abf VITA: implement camera subsystem f79f21217b VITA: fix yuv texture update 4612db21a3 SDL_utils.c: restrict gethostname() usage to non-windows 9a5420118a Define SDL_DIALOG_DUMMY in SDL_build_config_xbox.h dd955332a2 Removed SDL_build_config_emscripten.h 5492be23a1 ci: test Apple x64 on macos-13 runner c48fbbb067 Sync SDL3 wiki -> header c41b2bb855 SDL_ShouldIgnoreGamepad() should take product IDs rather than a guid. 8a30def5f2 Only use Steam Virtual Gamepads if we're running under Steam 28504f5791 Steam virtual gamepad info isn't available in the macOS sandbox d6981da5a4 Added SDL_GetSandbox() d7b1ba1bfc Added support for the Steam Virtual Gamepad on macOS Sequoia 3ebfdb04be SDL_stdinc.h: provide a prototype for strdup for __clang_analyzer__ case d9df87f19f Fix syntax of trailing doc comments 9cf388f260 Re-added HAVE_FDATASYNC and HAVE_GETHOSTNAME for platforms that have them. 6897385623 Add `void` to `run_colorspace_test()` function prototype 69433ee075 doc: explain build-scripts/create-release.py in the release checklist 18410c03ea cmake: fix checks for fdatasync() and gethostname() a027ec59ca Make the name of the Steam Deck Controller consistent. 09e3af58b5 Fixed bug #10954: software renderer: examples/renderer/10-geometry missing a triangle typo when changing return code from int to bool 860e38a3a2 VITA: fix shader color format ed1ec236c1 Removed fdatasync and gethostname definitions from platforms that don't have them cbbad4051b Treat a button press location as an implicit mouse move e5fa929245 Report win32 last error string windows_file_open (#11224) b4554a8a75 Sync SDL3 wiki -> header 97f1da73da Rename GPU properties for consistency 9af5ffcfbe Improve support for private platforms (#11220) 66d09a1cda wayland: Adjust primary display selection priority 638b50b69b CI, LoongArch64: disable clang-tidy dede2ab86f Sync SDL3 wiki -> header 553fc5fe0e wayland: Expose displays in a deterministic order, and attempt to better handle selecting a primary display. 075ae7db7d ci: update LoongArch toolchain to 2023.08.08 4162bddca7 cmake: fix configuration with -DCMAKE_DISABLE_FIND_PACKAGE_PkgConfig=ON cdaaabb978 GPU: Fix Metal sampler address mode order 104dabb9de PSVITA: enable posix fsops afee27a530 Make sure stdio handles are in blocking mode bb764e3106 Added support for full range BT.709 YUV conversion ce49465b13 Sync SDL3 wiki -> header 72bae5167e Updated documentation e254c99b38 examples/game/01-snake: Update game logic in AppIterate, don't use a timer. edb28e79b5 Make SDL_LoadBMP() use true instead of 1 f212cb5f92 Don't overwrite the SDL_IOFromConstMem() error in testshape 51dc978785 Don't overwrite the SDL_IOFromFile() error in SDL_LoadFile() fb43dc3097 Set error for NULL SDL_IOStream in SDL_LoadWAV_IO() 00bb81de76 GPU: Allow size queries on depth formats 817fa9a975 releases: don't add static library to MinGW binary release 45dfdfbb7b Add parametrized build script 57f2577c65 GPU Vulkan: Fix depth-only framebuffer leak 46835650db Added config.xcconfig to the Xcode build 9fac4b9f5f SDL_windowsmodes.c: Fix MSVC builds against SDKs older than 10.0.17134.0 b865708039 Sync SDL3 wiki -> header 0b6ad8bf62 Improved the documentation for SDL_SetWindowShape() f9d490045b Fixed uikit crash when GLES is disabled 3733b1d5d8 Sync SDL3 wiki -> header c20918b0fb render: Add SDL_RenderDebugText(). 44bc19b592 test: remove testaudio-art.txt (this info is in test/LICENSE.txt now). 1cc85c912b Check return value of SDL_small_alloc() d7be7fc168 Fixed Cohen-Sutherland out code computation for float line intersection db78c0f563 Sync SDL3 wiki -> header a8ca024495 Added SDL_GetDefaultLogOutputFunction() b766c824bd Don't overwrite the SDL_IOFromFile() error in SDL_LoadBMP() aed1f76248 Sync SDL3 wiki -> header a567786762 Added SDL_SetErrorV() d5e02474ac Fixed SDL_oldnames.h to use the correct new names 1a1e2e9892 Set size parameter in SDL_GetClipboardData() 82598e5ca9 GPU Vulkan: Fix frame counter timing (#11189) b641c2a0db Refactor gendynapi.py with the final goal to make it re-usable 173c168ff4 Default functions are already declared by the first SDL_dynapi_procs.h include fd9f2ae5b5 Sync SDL3 wiki -> header 01c9c1d0eb Document main callbacks API thread safety fd9e57b71e 3DS: Support simple message boxes 2bef8852fb testdrawchessboard: Allow using the standard render API 7556c44796 SDL3: Fixed Cocoa_GL_CreateContext() not returning a context on success (#11181) 94c8c170eb 3DS: Only bundle resources with tests that need them fec006a4f9 Allow for more fine tuning of Duff's device routines aebb64efa1 Remove leftover ARM SIMD code 9a81892447 Old env vars as fallback for SDL_VIDEO_DRIVER + SDL_AUDIO_DRIVER #11115 3e57d996fe Reduce the size of the SDL_blit_0 alpha code 05c53b5ab0 Add macro guards for OpenGL <=1.3 function prototypes 365dba6de8 Sync SDL3 wiki -> header 4898cbb6cf SDL_migration.cocci: Fix renaming SDL_bool 22566506d0 SDL3: opengles2 render not support window with transparent flag on Linux/X11 (#11167) c6c195ff88 Always use WaitForSingleObjectEx() as a fallback in SDL_SYS_DelayNS() c5904d8710 Improved implementation of SDL_DelayPrecise() (thanks @nightmareci!) 25251a9405 Fixed warning C4723: potential divide by 0 33366b0a4e Fix SDL_MAIN_USE_CALLBACKS with Android, introduce SDL_MAIN_EXPORTED 86ef790a23 explicit cast to int in SDL_bits 3cd7e22e8b Fixed converting full range YUV to RGB 3086b25c4e Set hint SDL_HINT_MAC_SCROLL_MOMENTUM version to SDL 3.1.4. b676413657 Sync SDL3 wiki -> header 48ff3efdb9 Clarify README-highdpi.md (#10083) e31c68427a Sync SDL3 wiki -> header 6ea4a66451 GPU: Add SDL_CalculateGPUTextureFormatSize (#11146) 6d85127560 Rename hint string literal SDL_HINT_MAC_SCROLL_MOMENTUM 3db10a6b2c GPU: ASTC block size fixes (#11157) 90a3a2359b thread: Rewrote generic Condition Variables. 41dfe2c246 test/testautomation_stdlib.c: fix gcc warning on 32 bit 73b995fbad Don't assume OpenGL on Android 8aaaeb7560 Sync SDL3 wiki -> header 2a9cb68b91 Sync SDL3 wiki -> header 0babb284dd fnsince.pl: Make fixes now that we've reached ABI lock. 40ff6a2785 test: Fix mouse focus test on X11 e4b1a9f382 Sync SDL3 wiki -> header 7ff819141d libm/e_exp.c: fix gcc warning on 32 bit: ac6b9e2d19 Sync SDL3 wiki -> header 8262072d91 Fixed possible memset(NULL) call in testautomation's SDL_aligned_alloc() check 4b7c5f561b Fixed warning: ‘new_item.probe_len’ may be used uninitialized in this function c8f5f6d47a Added SDL_DelayPrecise() 28a70a5b71 Use the correct version for the \since field bf351b0b0e Add more configChanges to Android Manifest (#11145) 9c322386bf gpu: vulkan: Fix an uninitialised structure in SDL_BlitGPUTexture() da5a1585cd GPU: Avoid calling SDL_GetWindowSizeInPixels when possible (#11139) 4707bb730e Sync SDL3 wiki -> header 9023a199dd Fixed crash in RLE colorkey blitting f946f87f30 Don't rely on event.buttonMask being set in touchesEnded ee9b6204cf Updated to version 3.1.5 for development 02f3a96476 Sync SDL3 wiki -> header f8eac30276 Added SDL_StepBackUTF8() 1f08a03794 Switched drag-n-drop logging to trace level 5b6342a00d Default SDL_HINT_JOYSTICK_GAMEINPUT to "1" on GDK platforms ed87e7e434 test: enable GameInput driver on GDK platforms acb18e05b5 GPU: fix swapchain buffer size not set on Xbox ff834f7733 Removed the restrict keyword 8e6ead2f7b [GPU] Added ASTC texture format support (#11116) 02434cd293 emscripten: Fixes for data addresses above 2gb c34790f9f1 Fixed spacing 312ecc4a52 SDL_main.h: Remove dead code for hypothetical C++ platforms 823b218051 Simplify code to include SDL_main_impl.h in SDL_main.h cba77834f2 init: Log '<unspecified>' not '(null)' if the app name isn't set. fb8244d6d9 init: Also log the SDL revision here c24f7d2453 Log app ID as SYSTEM/INFO during initialization e7ee92e822 Switched drag-n-drop logging to trace level d9f8474dd7 Sync SDL3 wiki -> header 95aaaa3232 Sync SDL3 wiki -> header 158ba93d61 Update some window function documentation 300daf308a Replace SDL_TRUE/FALSE with true/false in the coccinelle script 95ab38ba15 ci: actions/cache might return a boolean as string 7acfdfd3e7 Sync SDL3 wiki -> header 326ab439d7 Sync SDL3 wiki -> header fb07ab91c6 Improved SDL_main documentation and remove extern "C" comment. 03fa9ff0b0 Sync SDL3 wiki -> header 2000ccb541 Allow linear interpolation of the font textures f6fa617139 Define SDL_DIALOG_DUMMY in SDL_build_config.h as needed 4627283eca Allow building both Cocoa and dummy dialog implementations c8526532de Changed objectVersion to 54 so Xcode 12 can load the projects (thanks @Wohlstand!) 2fd12b2e8a keyboard: Note that enabling text input can also enable an IME 81b48de3f5 Fixed VID/PID list parsing of SDL_HINT_GAMECONTROLLER_SENSOR_FUSION 5db64300b8 Fixed SDL_GetStringInteger() for values starting with '0' and '1' (thanks @DanielGibson!) 7da728a642 Added support for wired XBox controllers on macOS 15.0 Sequoia 659f2f4b04 examples: add basic app metadata to all existing examples. aa534c3ac3 core: Fixed incorrect comment in core/windows/SDL_windows.h. ee7f61fd9a snake: Add extended app metadata ca82405d5a snake: Add basic app metadata 6ae5666acf Check for VK_SUBOPTIMAL_KHR also in vkQueuePresentKHR (#11113) 06bd214af6 Fixed warnings building on Android 596fcfa6c4 fix microphone permission and feature flags being spread out 54e622c2e6 Use the printf vararg verification macros when compiling with clang fca05fa754 examples: Use SDL_Log() instead of message boxes for errors. 9f170286ba test: Replace README with LICENSE.txt d0ef58b442 Sync SDL3 wiki -> header cbb9a16367 Sync SDL3 wiki -> header 65539bc4f7 Make sure trackpad state is updated when button presses are delivered 03b259893a Fixed return value of SDL_AddGamepadMapping() bf54eddba9 macOS: Clarify when macOS hints need to be set c2b98e21ba macOS: Add hint for smooth SDL_EVENT_MOUSE_WHEEL values 2fa8acb084 x11: Refresh the global cursor coordinates when confining the pointer e59078ac6f Sync SDL3 wiki -> header 9e74ada7b8 gpu: fixed formatting in docs. c358bf3f9b Removed test program list, it's better to just look at the code. f8dd73fdb9 Fixed build 0f47d3a77b Fixed use after free (thanks @meyraud705!) e159bcf5de test: Make blit_testExampleApplicationRender work on big endian c9ffa3f9e1 Remove vestiges of the TAKE_FOCUS window event 596ef1ba2e Moved the SDL_ttf IME demo to showfont in the SDL_ttf project e00b1fdd67 clipboard: include mime types in SDL_ClipboarUpdate 2880b40e33 fix pipewire prototype b6ab7d28f6 Replaced \r\n with \n in SDL root files b8e72b0969 Note that creating a renderer will fail if the preferred renderer isn't available. 1ca45c5891 Fix typo: DiretMedia->DirectMedia 8db3b47482 Just use normal stdio for the child process 8c3f88b495 docs: Wrote CategoryVulkan. 369b93771b Sync SDL3 wiki -> header deeffaa8d6 Sync SDL3 wiki -> header 84ecf7fd3e docs: Add CategorySurface text. e292d1f5ac Sync SDL3 wiki -> header d5af0c7e09 Added missing parentheses 5a60d073c0 Sync SDL3 wiki -> header a3413e050b Sync SDL3 wiki -> header c25423b94c docs: Filled in some category pages. a57ecad648 Fixed documentation typos 37315110c1 Sync SDL3 wiki -> header f26dd52090 SDL_GetProcessProperties is missing a SDLCALL d318a4a6b1 .wikiheaders-options: Declare SDL3 to be a stable API! 64cbf02dbf Sync SDL3 wiki -> header ffe4e571d1 wikiheaders: regex hack to make a URL not confuse wikilink genertion. a7e4e9219a Sync SDL3 wiki -> header e8c852d77c GPU: re-add parens to wiki intro 00385951a1 Use file descriptor I/O for process pipes f592a35439 Sync SDL3 wiki -> header 12d007038c GPU: wiki header link typo f275731e18 Sync SDL3 wiki -> header f3285b01c8 GPU: Intro fixes 93c7521dd5 Sync SDL3 wiki -> header c1084bfaa3 GPU Introduction (#11062) 21e7fa45e8 GPU: fix padding field typo bd4cd34a74 Add docs to mingw development archive f859d69c44 Sync SDL3 wiki -> header 6c64c62114 Rename SDL_BUTTON() to SDL_BUTTON_MASK() d529407ce7 Sync SDL3 wiki -> header fe2880fcda Rename SDL_SetThreadPriority() to SDL_SetCurrentThreadPriority() 69196ab30d Change evasive library handle to `SDL_SharedObject*` 3a6a3ab64f gpu: Fix memory leak in Vulkan backend. 43e7ce7dfc Updated to version 3.1.3 for the preview release ca0b1eaf5a Sync SDL3 wiki -> header 93c27a6675 Fixed the documentation for consistency. 3ae2af8aa1 Sync SDL3 wiki -> header 9a5d5a2839 video: Improve the EGL attribute callbacks. d4143e02d1 Always set checked_monotonic_time when calling CheckMonotonicTime() 020fb6889c Removed unnecessary const-qualifiers in src and test files b8e8dcaa9a Add void to openbsd function prototypes 0e909d2785 Removed redundant condition in src/events/SDL_pen.c 191f3ecbbc render: Restore previous policy for converting window/render coordinates. 3246df8bd3 Remove redundant SDL_Vulkan_GetResultString() declaration 07fd88d241 docs: Fix migration documentation for SDL_WINDOWEVENT_SIZE_CHANGED a0de6c4abf Add properties to SDL_IOStreams returned by IOFromMem 1bb7e2b1a8 SDL_migration.cocci: Removed obsolete SDL_CreateWindowWithPosition code. f4cea5e019 Removed const qualifiers from SDL_CreateHashTable() parameter types d287feaddf render: Remove non-pointer args' const qualifiers on SDL_RenderTextureRotated. e3757f072b Sync SDL3 wiki -> header 8b4f5f09c1 dynapi: It's a Python script now, not a perl script. 35b002be82 audio: Clarified SDL_GetAudioStreamQueued docs. 47450425fd Allow iterating just the keys or values in a hashtable d5fe6dd627 Don't use const for non-pointer API parameters d2b2a752ce SDL_migration.cocci: A few fixes. 91b074beb7 Removed SDL_IPHONE_MAX_GFORCE 34033d5838 Sync SDL3 wiki -> header eced9f58a9 Added a userdata parameter for EGL attribute callbacks 798c9574d0 Sync SDL3 wiki -> header 89e68aa801 Added missing return value documentation for bsearch() 4fa92d233d Include stdbool.h when using Visual Studio 2017+ 522321b7c9 test: Fix testcustomcursor on high-DPI displays 3b3c4a79b6 Don't close file descriptors already handled by AddFileDescriptorCloseActions() 5f5379dc99 Add `SDL_IsTV()` (#11004) 6bcf2f919a Sync SDL3 wiki -> header 0b5e01a305 loadso: library handles are now `SDL_SharedObject*` instead of `void*`. f351395c46 Sync SDL3 wiki -> header 3234a3b902 Simplified internal SDL_Surface structure 1f3a0d12e6 Made texture size and format public in the API 5136b30652 render: SDL_ConvertEventToRenderCoordinates() now handles pen events. b4fcd1f345 pen: Corrected some documentation. e3dbd74fe7 Improved documentation for SDL_Surface fields 13c5d1092f hidapi: update hid_write() for windows from mainstream. 3eab599977 just force the barrier on UpdateTexture actually e17741a6cb Render GPU: Only cycle on update if entire texture is replaced 45ad763de5 Disable backface culling and use a constant rectangle winding order. fa14b53273 GPU Vulkan: Clear up some swapchain edge cases c16d7c87d6 Sync SDL3 wiki -> header ab832f1be0 Added documentation for qsort and bsearch functions 818d7d892a x11: store all atoms in a specific struct 801870c8cf video: cache some more atoms under X11 dcc7560a5c Sync SDL3 wiki -> header afdf325fb4 GPU: Add swapchain dimension out params (#11003) b3388d5753 Haiku does not have fdatasync, but has fsync 396afa2117 ci: bump haiku to r1beta5 0b64520997 hashtable: fixed unused-parameter warnings 1787d6ca5c main: SDL_AppQuit() now reports the result value. 6a7f8b74f1 filesystem: SDL_GlobDirectory shouldn't strip final '/' if the path is "/". 7241dd9ec3 Add more SDL_Process tests f6055432c8 Fix null-pointer dereference on failing SDL_SYS_CreateProcess e9bfa5bf6a Mitigate BatBadBut vulnerability 06e122103c Fix window opacity update c84d825241 Added SDL_HashPointer() and SDL_KeyMatchPointer() d0c9c008e1 wayland: Use high-DPI system cursors on non-DPI aware windows 5f304b3a47 Fix builed error after commit 0e45b824e34 due to -Wunused-variable 0e45b824e3 renderer: always update the output pixel size at startup 2825a682f0 Fixed build errors ba7b346e52 hashtable: reimplement as open-addressed robin hood hashtable 62938837c2 Sync SDL3 wiki -> header fc242abbd2 GPU: recreate swapchain on window pixel size change event (#10985) 66f6b40c92 Render GPU: Don't call GetWindowSizeInPixels during RenderPreset (#10984) a923771978 Added SDL_murmur3_32() 039148fb0e Updated check for stdbool.h 7ca0e9ede1 wayland: Scale the pointer destination size relative to the theme size d2094bd0a2 wayland: Don't query the cursor info with DBus if the cursor shape protocol is present dee62e1b47 Remove trailing comma in enum 7d21a49c9c filesystem: SDL_EnumerateDirectoryCallback uses an enum now, not an int. 55bd9f5311 iostream: flush() should attempt to sync file data to physical media. 0852307b58 gpu: Check Vulkan device features for IsDeviceSuitable fb165a542b GPU Vulkan: add resolve info to framebuffer and render pass lookups 0542bbbf1a Sync SDL3 wiki -> header 4a296f1bde filesystem: Fixed memory leak on Windows. e944f0fb9d testfilesystem: Added test of creating parent dirs. 428f2f35be filesystem: SDL_CreateDirectory should make parent directories. 94030131de filesystem: Windows SDL_SYS_CreateDirectory should succeed if dir exists. 48c3ee2120 testcolorspace.c: Fix unreachable code warning 8d6b397cd8 Sync SDL3 wiki -> header 3f446d8fb5 Minor cleanup 1088ea55fa SDL_gpu_d3d11.c: define D3D11_FORMAT_SUPPORT2_UAV_TYPED_LOAD for old toolchains 8377cad974 Sync SDL3 wiki -> header c39e8298b7 GPU: Document swapchain dimensions de40d6bae0 GPU Metal: Set texture to NULL even if AcquireSwapchainTexture fails 0e5a49542d Sync SDL3 wiki -> header f32e96f5e2 clipboard: add SDL_ClipboardMimeTypes 0befa7d8e9 Sync SDL3 wiki -> header eedd2039f9 GPU: 32-bit component texture formats 769ff47461 Sync SDL3 wiki -> header 05d0656bd6 GPU: Simultaneous compute pass read-write (#10965) d39acc6d1e Fixed warning C4702: unreachable code 5ff6e8d522 GPU: Add enable_depth_clip to RasterizerState (#10964) 04bb105d09 Added header for SDL_ThreadID type e98cf3c870 Fix Xbox builds c7442b04f0 Sync SDL3 wiki -> header be401dd1e3 GPU: More robust error reporting (#10958) 48e213b4cd Fixed SDL_ShouldQuit() returning false during status transitions d8c76d2f34 filesystem: POSIX SDL_SYS_CopyFile shouldn't use a temp file. 0d593cf39a Sync SDL3 wiki -> header f267ec7681 filesystem: Improve docs, make some promises about overwrites and file caches. c1587b1eac Sync SDL3 wiki -> header 125e592844 Added SDL_ShouldInit() and SDL_ShouldQuit() 0e2c4e407a README-migration: note that logical presentation state is different from SDL2. 4e09e58f62 include: Small clarification on directory enumeration documentation. 38f971bac5 filesystem: SDL_SYS_EnumerateDirectory() now returns bool. 86ea283904 examples: No need to explicitly seed the RNG at startup. 671a33c2f7 wayland: Raise all touches on a cancel event 457d0edeaf Remove some extra semicolons 345cae361d Document mode parameter of SDL_GetRenderLogicalPresentation 345d9bfe19 A zero source rect is valid for blitting 1aea43846e Don't use BlitARGBto555PixelAlpha() for SDL_PIXELFORMAT_ARGB1555 59d69a3ba3 Sync SDL3 wiki -> header d9a7da4fac Optimized SDL_HasEvent() and SDL_HasEvents() 3abb213083 opengl: Fixed SDL_RENDERCMD_SETDRAWCOLOR code checking the wrong variable. 961cd51611 opengl: Removed a FIXME (this is documented as not-thread-safe now. 80cf3f7c38 ci: Fix check_stdlib_usage.py and run on ci 76f28ea120 Fix stdlib usage 80da805688 build: Fix testprocess invocation during "as-installed" tests 81644d260f Sync SDL3 wiki -> header 122cd4db2b include: Added `\threadsafety` notes to all SDL_render.h functions. 276969cd58 Sync SDL3 wiki -> header 4c48ff51f8 render: SDL_RenderPresent now behaves when a render target is currently set. 7a6a0becb8 render: Fixed a FIXME for SDL_SetRenderViewport with a negative size. 54459def69 render: Remove the logical presentation render target. bf7a48cdcc render/gpu: Change some memcpy calls to SDL_memcpy. b48f29dd9b examples: Fix name of renderer/17-read-pixels binary. 925e47a077 GPU: Fix backwards LogError and SetError calls 1561d7c089 Fix warnings in build-scripts/check_stdlib_usage.py 2070adb262 android: add python script checking Android JNI bindings cf4049cfde ci: check versioning on ci 557c6dfb18 GPU: call SDL_SetError where appropriate 6ec8b1a173 Throttle tickle reports to PS4/PS5 controllers 53bf2baac3 Change JNI calls to comply with recent Boolean changes fcab6c99fb examples: Fixed some window titles. 9881c4e582 examples: Added renderer/17-read-pixels 62389ada6f examples/renderer/02-primitives: seed the RNG. 95134f6d58 examples: Added renderer/15-cliprect ad3a4c677b wayland: Clean up cursor scaling e5d3a1b6f5 Remove casts from typed pointer to void * for printf %p in test projects 57418475ce kmsdrm: Keep fd around if we can drop master 13f88df190 kmsdrm: Fix KMSDRM_Vulkan_CreateSurface() return value 8f55f48337 kmsdrm: Move property initialization a bit further down 1ed3dac021 examples: Added renderer/14-viewport e00ea27d25 examples/renderer/01-clear: No longer needs vsync. 004ac40226 Fix warning: no function prototype 4a3faf20ac gpu: Replace high-level logs with SetError 043c876a15 Move default colorspace aliases into enum 0685b96469 GPU: fix build when SDL_GPU_DISABLED is set e973b687cd examples: Added renderer/11-color-mods 0478a6ee3b Move endian pixel format aliases into enum 1828bde49f examples/renderer/01-clear: Use the color-cycle code from testvulkan.c 3bc2bd790c build-web-examples.pl: Added a FIXME. git-subtree-dir: external/SDL git-subtree-split: 8ec576ddabdc7edfd68e7a8a3214e84e4026328d
3799 lines
128 KiB
CMake
3799 lines
128 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
|
|
if(NOT DEFINED CMAKE_BUILD_TYPE)
|
|
set(cmake_build_type_undefined 1)
|
|
endif()
|
|
|
|
# See docs/release_checklist.md
|
|
project(SDL3 LANGUAGES C VERSION "3.1.7")
|
|
|
|
if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
|
|
set(SDL3_SUBPROJECT OFF)
|
|
else()
|
|
set(SDL3_SUBPROJECT ON)
|
|
endif()
|
|
|
|
# By default, configure SDL3 in RelWithDebInfo configuration
|
|
if(NOT SDL3_SUBPROJECT)
|
|
get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
|
if(is_multi_config)
|
|
# The first item in CMAKE_CONFIGURATION_TYPES is the default configuration
|
|
if(DEFINED CMAKE_CONFIGURATION_TYPES AND "RelWithDebInfo" IN_LIST CMAKE_CONFIGURATION_TYPES)
|
|
list(REMOVE_ITEM CMAKE_CONFIGURATION_TYPES "RelWithDebInfo")
|
|
list(INSERT CMAKE_CONFIGURATION_TYPES 0 "RelWithDebInfo")
|
|
set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING "CMake configuration types" FORCE)
|
|
endif()
|
|
else()
|
|
if(cmake_build_type_undefined)
|
|
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "CMake build type" FORCE)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
# 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()
|
|
|
|
include(CheckLibraryExists)
|
|
include(CheckIncludeFile)
|
|
include(CheckLanguage)
|
|
include(CheckSymbolExists)
|
|
include(CheckCSourceCompiles)
|
|
include(CheckCSourceRuns)
|
|
include(CheckCCompilerFlag)
|
|
include(CheckCXXCompilerFlag)
|
|
include(CheckStructHasMember)
|
|
include(CMakeDependentOption)
|
|
include(CMakeParseArguments)
|
|
include(CMakePushCheckState)
|
|
include(GNUInstallDirs)
|
|
|
|
if(NOT DEFINED OpenGL_GL_PREFERENCE)
|
|
set(OpenGL_GL_PREFERENCE GLVND)
|
|
endif()
|
|
|
|
find_package(PkgConfig)
|
|
|
|
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/sdlcompilers.cmake")
|
|
include("${SDL3_SOURCE_DIR}/cmake/sdlcpu.cmake")
|
|
include("${SDL3_SOURCE_DIR}/cmake/sdlmanpages.cmake")
|
|
include("${SDL3_SOURCE_DIR}/cmake/sdlplatform.cmake")
|
|
include("${SDL3_SOURCE_DIR}/cmake/sdltargets.cmake")
|
|
include("${SDL3_SOURCE_DIR}/cmake/GetGitRevisionDescription.cmake")
|
|
include("${SDL3_SOURCE_DIR}/cmake/3rdparty.cmake")
|
|
include("${SDL3_SOURCE_DIR}/cmake/PreseedMSVCCache.cmake")
|
|
include("${SDL3_SOURCE_DIR}/cmake/PreseedEmscriptenCache.cmake")
|
|
|
|
SDL_DetectCompiler()
|
|
SDL_DetectTargetCPUArchitectures(SDL_CPUS)
|
|
|
|
# Increment this if there is an incompatible change - but if that happens,
|
|
# we should rename the library from SDL3 to SDL4, at which point this would
|
|
# reset to 0 anyway.
|
|
set(SDL_SO_VERSION_MAJOR "0")
|
|
set(SDL_SO_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
|
|
set(SDL_SO_VERSION_PATCH "${PROJECT_VERSION_PATCH}")
|
|
set(SDL_SO_VERSION "${SDL_SO_VERSION_MAJOR}.${SDL_SO_VERSION_MINOR}.${SDL_SO_VERSION_PATCH}")
|
|
|
|
if(PROJECT_VERSION_MINOR MATCHES "[02468]$")
|
|
math(EXPR SDL_DYLIB_COMPAT_VERSION_MAJOR "100 * ${PROJECT_VERSION_MINOR} + 1")
|
|
set(SDL_DYLIB_COMPAT_VERSION_MINOR "0")
|
|
math(EXPR SDL_DYLIB_CURRENT_VERSION_MAJOR "${SDL_DYLIB_COMPAT_VERSION_MAJOR}")
|
|
set(SDL_DYLIB_CURRENT_VERSION_MINOR "${PROJECT_VERSION_PATCH}")
|
|
else()
|
|
math(EXPR SDL_DYLIB_COMPAT_VERSION_MAJOR "100 * ${PROJECT_VERSION_MINOR} + ${PROJECT_VERSION_PATCH} + 1")
|
|
set(SDL_DYLIB_COMPAT_VERSION_MINOR "0")
|
|
math(EXPR SDL_DYLIB_CURRENT_VERSION_MAJOR "${SDL_DYLIB_COMPAT_VERSION_MAJOR}")
|
|
set(SDL_DYLIB_CURRENT_VERSION_MINOR "0")
|
|
endif()
|
|
set(SDL_DYLIB_CURRENT_VERSION_PATCH "0")
|
|
set(SDL_DYLIB_COMPAT_VERSION_PATCH "0")
|
|
|
|
set(SDL_DYLIB_CURRENT_VERSION "${SDL_DYLIB_CURRENT_VERSION_MAJOR}.${SDL_DYLIB_CURRENT_VERSION_MINOR}.${SDL_DYLIB_CURRENT_VERSION_PATCH}")
|
|
set(SDL_DYLIB_COMPAT_VERSION "${SDL_DYLIB_COMPAT_VERSION_MAJOR}.${SDL_DYLIB_COMPAT_VERSION_MINOR}.${SDL_DYLIB_COMPAT_VERSION_PATCH}")
|
|
|
|
message(DEBUG "SDL_SO_VERSION=${SDL_SO_VERSION} SDL_DYLIB_CURRENT_VERSION=${SDL_DYLIB_CURRENT_VERSION} SDL_DYLIB_COMPAT_VERSION=${SDL_DYLIB_COMPAT_VERSION}")
|
|
|
|
set(SDL_FRAMEWORK_VERSION "A")
|
|
|
|
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)
|
|
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -D_GNU_SOURCE=1")
|
|
list(APPEND CMAKE_REQUIRED_INCLUDES ${SDL_CHECK_REQUIRED_INCLUDES})
|
|
list(APPEND CMAKE_REQUIRED_LINK_OPTIONS ${SDL_CHECK_REQUIRED_LINK_OPTIONS})
|
|
|
|
# Get the platform
|
|
SDL_DetectCMakePlatform()
|
|
|
|
# Don't mistake macOS for unix
|
|
if(UNIX AND NOT ANDROID AND NOT APPLE AND NOT RISCOS)
|
|
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()
|
|
|
|
# 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 will change to ON once this becomes
|
|
# commonly supported in browsers or the Emscripten team makes a single
|
|
# binary work everywhere.
|
|
if (UNIX_OR_MAC_SYS AND NOT EMSCRIPTEN)
|
|
set(SDL_PTHREADS_DEFAULT ON)
|
|
else()
|
|
set(SDL_PTHREADS_DEFAULT OFF)
|
|
endif()
|
|
|
|
if(UNIX_SYS OR ANDROID)
|
|
set(SDL_CLOCK_GETTIME_DEFAULT ON)
|
|
else()
|
|
set(SDL_CLOCK_GETTIME_DEFAULT OFF)
|
|
endif()
|
|
|
|
# The hidraw support doesn't catch Xbox, PS4 and Nintendo controllers,
|
|
# so we'll just use libusb when it's available. libusb does not support iOS,
|
|
# so we default to yes on iOS.
|
|
if(IOS OR TVOS OR VISIONOS OR WATCHOS OR ANDROID)
|
|
set(SDL_HIDAPI_LIBUSB_AVAILABLE FALSE)
|
|
else()
|
|
set(SDL_HIDAPI_LIBUSB_AVAILABLE TRUE)
|
|
endif()
|
|
|
|
set(SDL_ASSEMBLY_DEFAULT OFF)
|
|
if(USE_CLANG OR USE_GCC OR USE_INTELCC OR MSVC_VERSION GREATER 1400)
|
|
set(SDL_ASSEMBLY_DEFAULT ON)
|
|
endif()
|
|
|
|
set(SDL_GCC_ATOMICS_DEFAULT OFF)
|
|
if(USE_GCC OR USE_CLANG OR USE_INTELCC OR USE_QCC)
|
|
set(SDL_GCC_ATOMICS_DEFAULT ON)
|
|
endif()
|
|
|
|
# Default option knobs
|
|
set(SDL_LIBC_DEFAULT ON)
|
|
set(SDL_SYSTEM_ICONV_DEFAULT ON)
|
|
if(WINDOWS OR MACOS OR IOS OR TVOS OR VISIONOS OR WATCHOS)
|
|
set(SDL_SYSTEM_ICONV_DEFAULT OFF)
|
|
endif()
|
|
|
|
set(SDL_RELOCATABLE_DEFAULT OFF)
|
|
if(MSVC)
|
|
set(SDL_RELOCATABLE_DEFAULT ON)
|
|
endif()
|
|
|
|
if(MSVC)
|
|
if(NOT SDL_LIBC)
|
|
# Make sure /RTC1 is disabled, otherwise it will use functions from the CRT
|
|
foreach(flag_var
|
|
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
|
|
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
|
|
string(REGEX REPLACE "/RTC(su|[1su])" "" ${flag_var} "${${flag_var}}")
|
|
endforeach(flag_var)
|
|
endif()
|
|
|
|
if(MSVC_CLANG)
|
|
# clang-cl treats /W4 as '-Wall -Wextra' -- we don't need -Wextra
|
|
foreach(flag_var
|
|
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
|
|
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
|
|
string(REGEX REPLACE "/W4" "/W3" ${flag_var} "${${flag_var}}")
|
|
endforeach(flag_var)
|
|
endif()
|
|
endif()
|
|
|
|
set(SDL_SHARED_DEFAULT ON)
|
|
set(SDL_STATIC_DEFAULT ON)
|
|
|
|
set(SDL_SHARED_AVAILABLE ON)
|
|
set(SDL_STATIC_AVAILABLE ON)
|
|
|
|
# All these *_DEFAULT vars will default to ON if not specified,
|
|
# so you only need to override them if they need to be disabled.
|
|
if(EMSCRIPTEN)
|
|
# Set up default values for the currently supported set of subsystems:
|
|
# Emscripten/Javascript does not have assembly support, a dynamic library
|
|
# loading architecture, or low-level CPU inspection.
|
|
set(SDL_ASSEMBLY_DEFAULT OFF)
|
|
set(SDL_SHARED_AVAILABLE OFF)
|
|
endif()
|
|
|
|
if(VITA OR PSP OR PS2 OR N3DS OR RISCOS)
|
|
set(SDL_SHARED_AVAILABLE OFF)
|
|
endif()
|
|
|
|
if((RISCOS OR UNIX_SYS) AND NOT (LINUX OR NETBSD OR OPENBSD))
|
|
set(SDL_OSS_DEFAULT ON)
|
|
else()
|
|
set(SDL_OSS_DEFAULT OFF)
|
|
endif()
|
|
|
|
if(SDL_SHARED_DEFAULT AND SDL_STATIC_DEFAULT AND SDL_SHARED_AVAILABLE)
|
|
if(DEFINED BUILD_SHARED_LIBS)
|
|
# When defined, use BUILD_SHARED_LIBS as default
|
|
if(BUILD_SHARED_LIBS)
|
|
set(SDL_STATIC_DEFAULT OFF)
|
|
else()
|
|
set(SDL_SHARED_DEFAULT OFF)
|
|
endif()
|
|
else()
|
|
# Default to just building the shared library
|
|
set(SDL_STATIC_DEFAULT OFF)
|
|
endif()
|
|
endif()
|
|
|
|
set(SDL_SUBSYSTEMS )
|
|
|
|
macro(define_sdl_subsystem _name)
|
|
cmake_parse_arguments("_ds" "" "" "DEPS" ${ARGN})
|
|
string(TOUPPER ${_name} _uname)
|
|
if(NOT DEFINED SDL_${_uname}_DEFAULT)
|
|
set(SDL_${_uname}_DEFAULT ON)
|
|
endif()
|
|
if(_ds_DEPS)
|
|
cmake_dependent_option(SDL_${_uname} "Enable the ${_name} subsystem" "${SDL_${_uname}_DEFAULT}" "${_ds_DEPS}" OFF)
|
|
else()
|
|
option(SDL_${_uname} "Enable the ${_name} subsystem" "${SDL_${_uname}_DEFAULT}")
|
|
endif()
|
|
list(APPEND SDL_SUBSYSTEMS "${_name}")
|
|
endmacro()
|
|
|
|
define_sdl_subsystem(Audio)
|
|
define_sdl_subsystem(Video)
|
|
define_sdl_subsystem(GPU DEPS SDL_VIDEO)
|
|
define_sdl_subsystem(Render DEPS SDL_VIDEO)
|
|
define_sdl_subsystem(Camera DEPS SDL_VIDEO)
|
|
define_sdl_subsystem(Joystick)
|
|
define_sdl_subsystem(Haptic)
|
|
define_sdl_subsystem(Hidapi)
|
|
define_sdl_subsystem(Power)
|
|
define_sdl_subsystem(Sensor)
|
|
define_sdl_subsystem(Dialog)
|
|
|
|
cmake_dependent_option(SDL_FRAMEWORK "Build SDL libraries as Apple Framework" OFF "APPLE" OFF)
|
|
if(SDL_FRAMEWORK)
|
|
set(SDL_STATIC_AVAILABLE FALSE)
|
|
endif()
|
|
|
|
if(UNIX AND NOT ANDROID AND NOT RISCOS AND NOT SDL_FRAMEWORK)
|
|
set(SDL_RPATH_DEFAULT ON)
|
|
else()
|
|
set(SDL_RPATH_DEFAULT OFF)
|
|
endif()
|
|
|
|
set(SDL_PRESEED_AVAILABLE OFF)
|
|
if(COMMAND SDL_Preseed_CMakeCache)
|
|
set(SDL_PRESEED_AVAILABLE ON)
|
|
endif()
|
|
|
|
set(SDL_X11_XRANDR_DEFAULT ON)
|
|
if(SOLARIS)
|
|
set(SDL_X11_XRANDR_DEFAULT OFF)
|
|
endif()
|
|
|
|
# Allow some projects to be built conditionally.
|
|
set_option(SDL_DISABLE_INSTALL "Disable installation of SDL3" ${SDL3_SUBPROJECT})
|
|
cmake_dependent_option(SDL_DISABLE_INSTALL_CPACK "Create binary SDL3 archive using CPack" ${SDL3_SUBPROJECT} "NOT SDL_DISABLE_INSTALL" ON)
|
|
cmake_dependent_option(SDL_DISABLE_INSTALL_DOCS "Install docs for SDL3" ON "NOT SDL_DISABLE_INSTALL;NOT SDL_FRAMEWORK" ON)
|
|
set_option(SDL_DISABLE_UNINSTALL "Disable uninstallation of SDL3" OFF)
|
|
cmake_dependent_option(SDL_PRESEED "Preseed CMake cache to speed up configuration" ON "${SDL_PRESEED_AVAILABLE}" OFF)
|
|
cmake_dependent_option(SDL_RELOCATABLE "Create relocatable SDL package" ${SDL_RELOCATABLE_DEFAULT} "NOT SDL_DISABLE_INSTALL" OFF)
|
|
|
|
cmake_dependent_option(SDL_DISABLE_ANDROID_JAR "Disable creation of SDL3.jar" ${SDL3_SUBPROJECT} "ANDROID" ON)
|
|
|
|
option_string(SDL_ASSERTIONS "Enable internal sanity checks (auto/disabled/release/enabled/paranoid)" "auto")
|
|
set_option(SDL_ASSEMBLY "Enable assembly routines" ${SDL_ASSEMBLY_DEFAULT})
|
|
dep_option(SDL_AVX "Use AVX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF)
|
|
dep_option(SDL_AVX2 "Use AVX2 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF)
|
|
dep_option(SDL_AVX512F "Use AVX512F assembly routines" 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_SSE4_1 "Use SSE4.1 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF)
|
|
dep_option(SDL_SSE4_2 "Use SSE4.2 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_ALTIVEC "Use Altivec assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_POWERPC32 OR SDL_CPU_POWERPC64" 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 routines" ON "SDL_ASSEMBLY;SDL_CPU_ARM32 OR SDL_CPU_ARM64" OFF)
|
|
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)
|
|
|
|
set_option(SDL_LIBC "Use the system C library" ${SDL_LIBC_DEFAULT})
|
|
set_option(SDL_SYSTEM_ICONV "Use iconv() from system-installed libraries" ${SDL_SYSTEM_ICONV_DEFAULT})
|
|
set_option(SDL_LIBICONV "Prefer iconv() from libiconv, if available, over libc version" OFF)
|
|
set_option(SDL_GCC_ATOMICS "Use gcc builtin atomics" ${SDL_GCC_ATOMICS_DEFAULT})
|
|
dep_option(SDL_DBUS "Enable D-Bus support" ON "${UNIX_SYS}" OFF)
|
|
dep_option(SDL_LIBURING "Enable liburing support" ON "${UNIX_SYS}" OFF)
|
|
dep_option(SDL_DISKAUDIO "Support the disk writer audio driver" ON "SDL_AUDIO" OFF)
|
|
dep_option(SDL_DUMMYAUDIO "Support the dummy audio driver" ON "SDL_AUDIO" OFF)
|
|
dep_option(SDL_DUMMYVIDEO "Use dummy video driver" ON "SDL_VIDEO" OFF)
|
|
dep_option(SDL_IBUS "Enable IBus support" ON "${UNIX_SYS}" OFF)
|
|
dep_option(SDL_OPENGL "Include OpenGL support" ON "SDL_VIDEO;NOT IOS;NOT VISIONOS;NOT TVOS;NOT WATCHOS" OFF)
|
|
dep_option(SDL_OPENGLES "Include OpenGL ES support" ON "SDL_VIDEO;NOT VISIONOS;NOT TVOS;NOT WATCHOS" OFF)
|
|
set_option(SDL_PTHREADS "Use POSIX threads for multi-threading" ${SDL_PTHREADS_DEFAULT})
|
|
dep_option(SDL_PTHREADS_SEM "Use pthread semaphores" ON "SDL_PTHREADS" OFF)
|
|
dep_option(SDL_OSS "Support the OSS audio API" ${SDL_OSS_DEFAULT} "UNIX_SYS OR RISCOS;SDL_AUDIO" OFF)
|
|
dep_option(SDL_ALSA "Support the ALSA audio API" ${UNIX_SYS} "SDL_AUDIO" OFF)
|
|
dep_option(SDL_ALSA_SHARED "Dynamically load ALSA audio support" ON "SDL_ALSA" OFF)
|
|
dep_option(SDL_JACK "Support the JACK audio API" ${UNIX_SYS} "SDL_AUDIO" OFF)
|
|
dep_option(SDL_JACK_SHARED "Dynamically load JACK audio support" ON "SDL_JACK" OFF)
|
|
set_option(SDL_PIPEWIRE "Use Pipewire audio" ${UNIX_SYS})
|
|
dep_option(SDL_PIPEWIRE_SHARED "Dynamically load Pipewire support" ON "SDL_PIPEWIRE" OFF)
|
|
dep_option(SDL_PULSEAUDIO "Use PulseAudio" ${UNIX_SYS} "SDL_AUDIO" OFF)
|
|
dep_option(SDL_PULSEAUDIO_SHARED "Dynamically load PulseAudio support" ON "SDL_PULSEAUDIO" OFF)
|
|
dep_option(SDL_SNDIO "Support the sndio audio API" ${UNIX_SYS} "SDL_AUDIO" OFF)
|
|
dep_option(SDL_SNDIO_SHARED "Dynamically load the sndio audio API" ON "SDL_SNDIO" OFF)
|
|
set_option(SDL_RPATH "Use an rpath when linking SDL" ${SDL_RPATH_DEFAULT})
|
|
set_option(SDL_CLOCK_GETTIME "Use clock_gettime() instead of gettimeofday()" ${SDL_CLOCK_GETTIME_DEFAULT})
|
|
dep_option(SDL_X11 "Use X11 video driver" ${UNIX_SYS} "SDL_VIDEO" OFF)
|
|
dep_option(SDL_X11_SHARED "Dynamically load X11 support" ON "SDL_X11" OFF)
|
|
dep_option(SDL_X11_XCURSOR "Enable Xcursor support" ON SDL_X11 OFF)
|
|
dep_option(SDL_X11_XDBE "Enable Xdbe support" ON SDL_X11 OFF)
|
|
dep_option(SDL_X11_XINPUT "Enable XInput support" ON SDL_X11 OFF)
|
|
dep_option(SDL_X11_XFIXES "Enable Xfixes support" ON SDL_X11 OFF)
|
|
dep_option(SDL_X11_XRANDR "Enable Xrandr support" "${SDL_X11_XRANDR_DEFAULT}" SDL_X11 OFF)
|
|
dep_option(SDL_X11_XSCRNSAVER "Enable Xscrnsaver support" ON SDL_X11 OFF)
|
|
dep_option(SDL_X11_XSHAPE "Enable XShape support" ON SDL_X11 OFF)
|
|
dep_option(SDL_X11_XSYNC "Enable Xsync support" ON SDL_X11 OFF)
|
|
dep_option(SDL_WAYLAND "Use Wayland video driver" ${UNIX_SYS} "SDL_VIDEO" OFF)
|
|
dep_option(SDL_WAYLAND_SHARED "Dynamically load Wayland support" ON "SDL_WAYLAND" OFF)
|
|
dep_option(SDL_WAYLAND_LIBDECOR "Use client-side window decorations on Wayland" ON "SDL_WAYLAND" OFF)
|
|
dep_option(SDL_WAYLAND_LIBDECOR_SHARED "Dynamically load libdecor support" ON "SDL_WAYLAND_LIBDECOR;SDL_WAYLAND_SHARED" OFF)
|
|
dep_option(SDL_RPI "Use Raspberry Pi video driver" ON "SDL_VIDEO;UNIX_SYS;SDL_CPU_ARM32 OR SDL_CPU_ARM64" OFF)
|
|
dep_option(SDL_ROCKCHIP "Use ROCKCHIP Hardware Acceleration video driver" ON "SDL_VIDEO;UNIX_SYS;SDL_CPU_ARM32 OR SDL_CPU_ARM64" OFF)
|
|
dep_option(SDL_COCOA "Use Cocoa video driver" ON "APPLE" OFF)
|
|
dep_option(SDL_DIRECTX "Use DirectX for Windows audio/video" ON "SDL_AUDIO OR SDL_VIDEO;WINDOWS" OFF)
|
|
dep_option(SDL_XINPUT "Use Xinput for Windows" ON "WINDOWS" OFF)
|
|
dep_option(SDL_WASAPI "Use the Windows WASAPI audio driver" ON "WINDOWS;SDL_AUDIO" OFF)
|
|
dep_option(SDL_RENDER_D3D "Enable the Direct3D 9 render driver" ON "SDL_RENDER;SDL_DIRECTX" OFF)
|
|
dep_option(SDL_RENDER_D3D11 "Enable the Direct3D 11 render driver" ON "SDL_RENDER;SDL_DIRECTX" OFF)
|
|
dep_option(SDL_RENDER_D3D12 "Enable the Direct3D 12 render driver" ON "SDL_RENDER;SDL_DIRECTX" OFF)
|
|
dep_option(SDL_RENDER_METAL "Enable the Metal render driver" ON "SDL_RENDER;${APPLE}" OFF)
|
|
dep_option(SDL_RENDER_GPU "Enable the SDL_GPU render driver" ON "SDL_RENDER;SDL_GPU" OFF)
|
|
dep_option(SDL_VIVANTE "Use Vivante EGL video driver" ON "${UNIX_SYS};SDL_CPU_ARM32" OFF)
|
|
dep_option(SDL_VULKAN "Enable Vulkan support" ON "SDL_VIDEO;ANDROID OR APPLE OR LINUX OR FREEBSD OR WINDOWS" OFF)
|
|
dep_option(SDL_RENDER_VULKAN "Enable the Vulkan render driver" ON "SDL_RENDER;SDL_VULKAN" OFF)
|
|
dep_option(SDL_METAL "Enable Metal support" ON "APPLE" OFF)
|
|
set_option(SDL_OPENVR "Use OpenVR video driver" OFF)
|
|
dep_option(SDL_KMSDRM "Use KMS DRM video driver" ${UNIX_SYS} "SDL_VIDEO" OFF)
|
|
dep_option(SDL_KMSDRM_SHARED "Dynamically load KMS DRM support" ON "SDL_KMSDRM" OFF)
|
|
set_option(SDL_OFFSCREEN "Use offscreen video driver" ON)
|
|
dep_option(SDL_DUMMYCAMERA "Support the dummy camera driver" ON SDL_CAMERA OFF)
|
|
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)
|
|
dep_option(SDL_HIDAPI "Enable the HIDAPI subsystem" ON "NOT VISIONOS" OFF)
|
|
dep_option(SDL_HIDAPI_LIBUSB "Use libusb for low level joystick drivers" ON SDL_HIDAPI_LIBUSB_AVAILABLE OFF)
|
|
dep_option(SDL_HIDAPI_LIBUSB_SHARED "Dynamically load libusb support" ON SDL_HIDAPI_LIBUSB 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)
|
|
set_option(SDL_LIBUDEV "Enable libudev support" ON)
|
|
set_option(SDL_ASAN "Use AddressSanitizer to detect memory errors" OFF)
|
|
set_option(SDL_CCACHE "Use Ccache to speed up build" OFF)
|
|
set_option(SDL_CLANG_TIDY "Run clang-tidy static analysis" OFF)
|
|
set_option(SDL_GPU_DXVK "Build SDL_GPU with DXVK support" OFF)
|
|
|
|
set(SDL_VENDOR_INFO "" CACHE STRING "Vendor name and/or version to add to SDL_REVISION")
|
|
|
|
cmake_dependent_option(SDL_SHARED "Build a shared version of the library" ${SDL_SHARED_DEFAULT} ${SDL_SHARED_AVAILABLE} OFF)
|
|
cmake_dependent_option(SDL_STATIC "Build a static version of the library" ${SDL_STATIC_DEFAULT} ${SDL_STATIC_AVAILABLE} OFF)
|
|
option(SDL_TEST_LIBRARY "Build the SDL3_test library" ON)
|
|
|
|
dep_option(SDL_TESTS "Build the test directory" OFF SDL_TEST_LIBRARY OFF)
|
|
dep_option(SDL_INSTALL_TESTS "Install test-cases" OFF "NOT SDL_DISABLE_INSTALL;NOT SDL_FRAMEWORK" OFF)
|
|
dep_option(SDL_TESTS_LINK_SHARED "link tests to shared SDL library" "${SDL_SHARED}" "SDL_SHARED;SDL_STATIC" "${SDL_SHARED}")
|
|
set(SDL_TESTS_TIMEOUT_MULTIPLIER "1" CACHE STRING "Timeout multiplier to account for really slow machines")
|
|
|
|
set_option(SDL_EXAMPLES "Build the examples directory")
|
|
dep_option(SDL_EXAMPLES_LINK_SHARED "link examples to shared SDL library" "${SDL_SHARED}" "SDL_SHARED;SDL_STATIC" "${SDL_SHARED}")
|
|
|
|
if(VITA)
|
|
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)
|
|
endif()
|
|
|
|
if(NOT (SDL_SHARED OR SDL_STATIC))
|
|
message(FATAL_ERROR "SDL_SHARED and SDL_STATIC cannot both be disabled")
|
|
endif()
|
|
|
|
if(SDL_PRESEED)
|
|
SDL_Preseed_CMakeCache()
|
|
endif()
|
|
|
|
if(SDL_SHARED)
|
|
add_library(SDL3-shared SHARED)
|
|
add_library(SDL3::SDL3-shared ALIAS SDL3-shared)
|
|
SDL_AddCommonCompilerFlags(SDL3-shared)
|
|
if ("c_std_99" IN_LIST CMAKE_C_COMPILE_FEATURES)
|
|
target_compile_features(SDL3-shared PRIVATE c_std_99)
|
|
else()
|
|
message(WARNING "target_compile_features does not know c_std_99 for C compiler")
|
|
endif()
|
|
endif()
|
|
|
|
if(SDL_STATIC)
|
|
add_library(SDL3-static STATIC)
|
|
add_library(SDL3::SDL3-static ALIAS SDL3-static)
|
|
SDL_AddCommonCompilerFlags(SDL3-static)
|
|
if ("c_std_99" IN_LIST CMAKE_C_COMPILE_FEATURES)
|
|
target_compile_features(SDL3-static PRIVATE c_std_99)
|
|
else()
|
|
message(WARNING "target_compile_features does not know c_std_99 for C compiler")
|
|
endif()
|
|
endif()
|
|
|
|
if(SDL_TEST_LIBRARY)
|
|
add_library(SDL3_test STATIC)
|
|
add_library(SDL3::SDL3_test ALIAS SDL3_test)
|
|
SDL_AddCommonCompilerFlags(SDL3_test)
|
|
endif()
|
|
|
|
# Make sure SDL3::SDL3 always exists
|
|
if(TARGET SDL3::SDL3-shared)
|
|
add_library(SDL3::SDL3 ALIAS SDL3-shared)
|
|
else()
|
|
add_library(SDL3::SDL3 ALIAS SDL3-static)
|
|
endif()
|
|
|
|
sdl_pc_link_options("-lSDL3")
|
|
|
|
# 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)
|
|
# Enable large file support on 32-bit glibc, so that we can access files with large inode numbers
|
|
sdl_compile_definitions(PRIVATE "_FILE_OFFSET_BITS=64")
|
|
# Enable 64-bit time_t on 32-bit glibc, so that time stamps remain correct beyond January 2038
|
|
sdl_compile_definitions(PRIVATE "_TIME_BITS=64")
|
|
endif()
|
|
|
|
check_linker_supports_version_file(HAVE_WL_VERSION_SCRIPT)
|
|
if(HAVE_WL_VERSION_SCRIPT)
|
|
sdl_shared_link_options("-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/src/dynapi/SDL_dynapi.sym")
|
|
else()
|
|
if((LINUX AND LIBC_IS_GLIBC) OR ANDROID)
|
|
message(FATAL_ERROR "Linker does not support '-Wl,--version-script=xxx.sym'. This is required on the current host platform (${SDL_CMAKE_PLATFORM}).")
|
|
endif()
|
|
endif()
|
|
|
|
if(CYGWIN)
|
|
# We build SDL on cygwin without the UNIX emulation layer
|
|
sdl_include_directories(PUBLIC SYSTEM "/usr/include/mingw")
|
|
cmake_push_check_state()
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -mno-cygwin")
|
|
check_c_source_compiles("int main(int argc, char **argv) { return 0; }"
|
|
HAVE_GCC_NO_CYGWIN)
|
|
cmake_pop_check_state()
|
|
if(HAVE_GCC_NO_CYGWIN)
|
|
sdl_shared_link_options("-mno-cygwin")
|
|
endif()
|
|
endif()
|
|
|
|
# General includes
|
|
sdl_compile_definitions(PRIVATE "USING_GENERATED_CONFIG_H")
|
|
sdl_include_directories(
|
|
PRIVATE
|
|
"${SDL3_BINARY_DIR}/include-config-$<LOWER_CASE:$<CONFIG>>/build_config"
|
|
"${SDL3_BINARY_DIR}/include-revision"
|
|
"${SDL3_SOURCE_DIR}/include"
|
|
)
|
|
# Note: The clang toolset for Visual Studio does not support the '-idirafter' option.
|
|
if(USE_GCC OR USE_INTELCC OR (USE_CLANG AND NOT MSVC_CLANG))
|
|
sdl_compile_options(NO_EXPORT PRIVATE "$<BUILD_INTERFACE:-idirafter${SDL3_SOURCE_DIR}/src/video/khronos>")
|
|
else()
|
|
sdl_include_directories(NO_EXPORT SYSTEM PRIVATE "$<BUILD_INTERFACE:${SDL3_SOURCE_DIR}/src/video/khronos>")
|
|
endif()
|
|
|
|
if(MSVC AND TARGET SDL3-shared AND NOT SDL_LIBC)
|
|
if(SDL_CPU_X64)
|
|
enable_language(ASM_MASM)
|
|
set(asm_src "${SDL3_SOURCE_DIR}/src/stdlib/SDL_mslibc_x64.masm")
|
|
target_compile_options(SDL3-shared PRIVATE "$<$<COMPILE_LANGUAGE:ASM_MASM>:/nologo>")
|
|
set_property(SOURCE "${asm_src}" PROPERTY LANGUAGE "ASM_MASM")
|
|
target_sources(SDL3-shared PRIVATE "${asm_src}")
|
|
elseif(SDL_CPU_ARM64)
|
|
enable_language(ASM_MARMASM)
|
|
set(asm_src "${SDL3_SOURCE_DIR}/src/stdlib/SDL_mslibc_arm64.masm")
|
|
target_compile_options(SDL3-shared PRIVATE "$<$<COMPILE_LANGUAGE:ASM_MARMASM>:/nologo>")
|
|
set_property(SOURCE "${asm_src}" PROPERTY LANGUAGE "ASM_MARMASM")
|
|
target_sources(SDL3-shared PRIVATE "${asm_src}")
|
|
elseif(SDL_CPU_ARM32)
|
|
# FIXME
|
|
endif()
|
|
endif()
|
|
|
|
if(USE_INTELCC)
|
|
# warning #39: division by zero
|
|
# warning #239: floating point underflow
|
|
# warning #264: floating-point value does not fit in required floating-point type
|
|
set_property(SOURCE "${SDL3_SOURCE_DIR}/src/libm/e_exp.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -wd239 -wd264")
|
|
set_property(SOURCE "${SDL3_SOURCE_DIR}/src/libm/e_log.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -wd39")
|
|
set_property(SOURCE "${SDL3_SOURCE_DIR}/src/libm/e_log10.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -wd39")
|
|
set_property(SOURCE
|
|
"${SDL3_SOURCE_DIR}/src/libm/e_exp.c"
|
|
"${SDL3_SOURCE_DIR}/src/libm/e_log.c"
|
|
"${SDL3_SOURCE_DIR}/src/libm/e_log10.c"
|
|
PROPERTY SKIP_PRECOMPILE_HEADERS 1)
|
|
endif()
|
|
|
|
set(SDL_DEFAULT_ASSERT_LEVEL_CONFIGURED 1)
|
|
if(SDL_ASSERTIONS MATCHES "^(auto|)$")
|
|
# Do nada - use optimization settings to determine the assertion level
|
|
set(SDL_DEFAULT_ASSERT_LEVEL )
|
|
set(SDL_DEFAULT_ASSERT_LEVEL_CONFIGURED 0)
|
|
elseif(SDL_ASSERTIONS MATCHES "^(disabled|0)$")
|
|
set(SDL_DEFAULT_ASSERT_LEVEL 0)
|
|
elseif(SDL_ASSERTIONS MATCHES "^(release|1)$")
|
|
set(SDL_DEFAULT_ASSERT_LEVEL 1)
|
|
elseif(SDL_ASSERTIONS MATCHES "^(enabled|2)$")
|
|
set(SDL_DEFAULT_ASSERT_LEVEL 2)
|
|
elseif(SDL_ASSERTIONS MATCHES "^(paranoid|3)$")
|
|
set(SDL_DEFAULT_ASSERT_LEVEL 3)
|
|
else()
|
|
message(FATAL_ERROR "unknown assertion level")
|
|
endif()
|
|
set(HAVE_ASSERTIONS ${SDL_ASSERTIONS})
|
|
|
|
if(NOT SDL_BACKGROUNDING_SIGNAL STREQUAL "OFF")
|
|
sdl_compile_definitions(PRIVATE "SDL_BACKGROUNDING_SIGNAL=${SDL_BACKGROUNDING_SIGNAL}")
|
|
endif()
|
|
|
|
if(NOT SDL_FOREGROUNDING_SIGNAL STREQUAL "OFF")
|
|
sdl_compile_definitions(PRIVATE "SDL_FOREGROUNDING_SIGNAL=${SDL_FOREGROUNDING_SIGNAL}")
|
|
endif()
|
|
|
|
# Compiler option evaluation
|
|
if(USE_GCC OR USE_CLANG OR USE_INTELCC OR USE_QCC)
|
|
if(SDL_GCC_ATOMICS)
|
|
check_c_source_compiles("int main(int argc, char **argv) {
|
|
int a;
|
|
void *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);
|
|
__sync_bool_compare_and_swap(&x, y, z);
|
|
return 0; }" COMPILER_SUPPORTS_GCC_ATOMICS)
|
|
set(HAVE_GCC_ATOMICS ${COMPILER_SUPPORTS_GCC_ATOMICS})
|
|
if(NOT HAVE_GCC_ATOMICS)
|
|
check_c_source_compiles("int main(int argc, char **argv) {
|
|
int a;
|
|
__sync_lock_test_and_set(&a, 1);
|
|
__sync_lock_release(&a);
|
|
return 0; }" COMPILER_SUPPORTS_SYNC_LOCK_TEST_AND_SET)
|
|
set(HAVE_GCC_SYNC_LOCK_TEST_AND_SET ${COMPILER_SUPPORTS_SYNC_LOCK_TEST_AND_SET})
|
|
endif()
|
|
endif()
|
|
|
|
cmake_push_check_state()
|
|
string(APPEND 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
|
|
__attribute__((visibility(\"default\"))) int foo(void);
|
|
__attribute__((visibility(\"hidden\"))) int bar(void);
|
|
int foo(void) { return 0; }
|
|
int bar(void) { return 1; }
|
|
int main(void) { return 0; }" HAVE_GCC_FVISIBILITY)
|
|
cmake_pop_check_state()
|
|
|
|
if(APPLE)
|
|
check_c_compiler_flag(-Wno-error=deprecated-declarations COMPILER_SUPPORTS_WNO_ERROR_DEPRECATED_DECLARATIONS)
|
|
if(COMPILER_SUPPORTS_WNO_ERROR_DEPRECATED_DECLARATIONS)
|
|
sdl_compile_options(PRIVATE "-Wno-error=deprecated-declarations")
|
|
endif()
|
|
endif()
|
|
|
|
if(APPLE)
|
|
check_linker_flag(C "-Wl,-undefined,error" LINKER_SUPPORTS_WL_UNDEFINED_ERROR)
|
|
if(LINKER_SUPPORTS_WL_UNDEFINED_ERROR)
|
|
sdl_shared_link_options("-Wl,-undefined,error")
|
|
endif()
|
|
elseif(NOT OPENBSD)
|
|
cmake_push_check_state()
|
|
check_linker_flag(C "-Wl,--no-undefined" LINKER_SUPPORTS_WL_NO_UNDEFINED)
|
|
#FIXME: originally this if had an additional "AND NOT (USE_CLANG AND WINDOWS)"
|
|
if(LINKER_SUPPORTS_WL_NO_UNDEFINED)
|
|
sdl_shared_link_options("-Wl,--no-undefined")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if(MSVC)
|
|
sdl_compile_definitions(
|
|
PRIVATE
|
|
"_CRT_SECURE_NO_DEPRECATE"
|
|
"_CRT_NONSTDC_NO_DEPRECATE"
|
|
"_CRT_SECURE_NO_WARNINGS"
|
|
)
|
|
|
|
# CET support was added in VS 2019 16.7
|
|
if(MSVC_VERSION GREATER 1926 AND CMAKE_GENERATOR_PLATFORM MATCHES "Win32|x64")
|
|
# Mark SDL3.dll as compatible with Control-flow Enforcement Technology (CET)
|
|
sdl_shared_link_options("-CETCOMPAT")
|
|
endif()
|
|
endif()
|
|
|
|
if(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
|
|
# Due to a limitation of Microsoft's LTO implementation, LTO must be disabled for memcpy and memset.
|
|
# The same applies to various functions normally belonging in the C library (for x86 architecture).
|
|
set_property(SOURCE "${SDL3_SOURCE_DIR}/src/stdlib/SDL_mslibc.c" APPEND_STRING PROPERTY COMPILE_FLAGS " /GL-")
|
|
endif()
|
|
|
|
if(SDL_ASSEMBLY)
|
|
set(HAVE_ASSEMBLY TRUE)
|
|
|
|
if(SDL_MMX)
|
|
cmake_push_check_state()
|
|
if(USE_GCC OR USE_CLANG OR USE_INTELCC)
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -mmmx")
|
|
endif()
|
|
check_c_source_compiles("
|
|
#include <mmintrin.h>
|
|
void ints_add(int *dest, int *a, int *b, unsigned size) {
|
|
for (; size >= 2; size -= 2, dest += 2, a += 2, b += 2) {
|
|
*(__m64*)dest = _mm_add_pi32(*(__m64*)a, *(__m64*)b);
|
|
}
|
|
}
|
|
int main(int argc, char *argv[]) {
|
|
ints_add((int*)0, (int*)0, (int*)0, 0);
|
|
return 0;
|
|
}" COMPILER_SUPPORTS_MMX)
|
|
cmake_pop_check_state()
|
|
if(COMPILER_SUPPORTS_MMX)
|
|
set(HAVE_MMX TRUE)
|
|
endif()
|
|
endif()
|
|
if(SDL_SSE)
|
|
cmake_push_check_state()
|
|
if(USE_GCC OR USE_CLANG OR USE_INTELCC)
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -msse")
|
|
endif()
|
|
check_c_source_compiles("
|
|
#include <xmmintrin.h>
|
|
void floats_add(float *dest, float *a, float *b, unsigned size) {
|
|
for (; size >= 4; size -= 4, dest += 4, a += 4, b += 4) {
|
|
_mm_storeu_ps(dest, _mm_add_ps(_mm_loadu_ps(a), _mm_loadu_ps (b)));
|
|
}
|
|
}
|
|
int main(int argc, char **argv) {
|
|
floats_add((float*)0, (float*)0, (float*)0, 0);
|
|
return 0;
|
|
}" COMPILER_SUPPORTS_SSE)
|
|
cmake_pop_check_state()
|
|
if(COMPILER_SUPPORTS_SSE)
|
|
set(HAVE_SSE TRUE)
|
|
endif()
|
|
endif()
|
|
if(SDL_SSE2)
|
|
cmake_push_check_state()
|
|
if(USE_GCC OR USE_CLANG OR USE_INTELCC)
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -msse2")
|
|
endif()
|
|
check_c_source_compiles("
|
|
#include <emmintrin.h>
|
|
void doubles_add(double *dest, double *a, double *b, unsigned size) {
|
|
for (; size >= 4; size -= 4, dest += 4, a += 4, b += 4) {
|
|
_mm_store_pd(dest, _mm_add_pd(_mm_loadu_pd(a), _mm_loadu_pd(b)));
|
|
}
|
|
}
|
|
int main(int argc, char **argv) {
|
|
doubles_add((double*)0, (double*)0, (double*)0, 0);
|
|
return 0;
|
|
}" COMPILER_SUPPORTS_SSE2)
|
|
cmake_pop_check_state()
|
|
if(COMPILER_SUPPORTS_SSE2)
|
|
set(HAVE_SSE2 TRUE)
|
|
endif()
|
|
endif()
|
|
if(SDL_SSE3)
|
|
cmake_push_check_state()
|
|
if(USE_GCC OR USE_CLANG OR USE_INTELCC)
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -msse3")
|
|
endif()
|
|
check_c_source_compiles("
|
|
#include <pmmintrin.h>
|
|
void ints_add(int *dest, int *a, int *b, unsigned size) {
|
|
for (; size >= 4; size -= 4, dest += 4, a += 4, b += 4) {
|
|
_mm_storeu_si128((__m128i*)dest, _mm_add_epi32(_mm_lddqu_si128((__m128i*)a), _mm_lddqu_si128((__m128i*)b)));
|
|
}
|
|
}
|
|
int main(int argc, char **argv) {
|
|
ints_add((int*)0, (int*)0, (int*)0, 0);
|
|
return 0;
|
|
}" COMPILER_SUPPORTS_SSE3)
|
|
cmake_pop_check_state()
|
|
if(COMPILER_SUPPORTS_SSE3)
|
|
set(HAVE_SSE3 TRUE)
|
|
endif()
|
|
endif()
|
|
if(SDL_SSE4_1)
|
|
cmake_push_check_state()
|
|
if(USE_GCC OR USE_CLANG OR USE_INTELCC)
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -msse4.1")
|
|
endif()
|
|
check_c_source_compiles("
|
|
#include <smmintrin.h>
|
|
void ints_mul(int *dest, int *a, int *b, unsigned size) {
|
|
for (; size >= 4; size -= 4, dest += 4, a += 4, b += 4) {
|
|
_mm_storeu_si128((__m128i*)dest, _mm_mullo_epi32(_mm_lddqu_si128((__m128i*)a), _mm_lddqu_si128((__m128i*)b)));
|
|
}
|
|
}
|
|
int main(int argc, char **argv) {
|
|
ints_mul((int*)0, (int*)0, (int*)0, 0);
|
|
return 0;
|
|
}" COMPILER_SUPPORTS_SSE4_1)
|
|
cmake_pop_check_state()
|
|
if(COMPILER_SUPPORTS_SSE4_1)
|
|
set(HAVE_SSE4_1 TRUE)
|
|
endif()
|
|
endif()
|
|
if(SDL_SSE4_2)
|
|
cmake_push_check_state()
|
|
if(USE_GCC OR USE_CLANG OR USE_INTELCC)
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -msse4.2")
|
|
endif()
|
|
check_c_source_compiles("
|
|
#include <nmmintrin.h>
|
|
unsigned calc_crc32c(const char *text, unsigned len) {
|
|
unsigned crc32c = ~0;
|
|
for (; len >= 4; len -= 4, text += 4) {
|
|
crc32c = (unsigned)_mm_crc32_u32(crc32c, *(unsigned*)text);
|
|
}
|
|
return crc32c;
|
|
}
|
|
int main(int argc, char **argv) {
|
|
calc_crc32c(\"SDL_SSE4\",8);
|
|
return 0;
|
|
}" COMPILER_SUPPORTS_SSE4_2)
|
|
cmake_pop_check_state()
|
|
if(COMPILER_SUPPORTS_SSE4_2)
|
|
set(HAVE_SSE4_2 TRUE)
|
|
endif()
|
|
endif()
|
|
if(SDL_AVX)
|
|
cmake_push_check_state()
|
|
if(USE_GCC OR USE_CLANG OR USE_INTELCC)
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -mavx")
|
|
endif()
|
|
check_c_source_compiles("
|
|
#include <immintrin.h>
|
|
void floats_add(float *dest, float *a, float *b, unsigned size) {
|
|
for (; size >= 8; size -= 8, dest += 8, a += 8, b += 8) {
|
|
_mm256_storeu_ps(dest, _mm256_add_ps(_mm256_loadu_ps(a), _mm256_loadu_ps(b)));
|
|
}
|
|
}
|
|
int main(int argc, char **argv) {
|
|
floats_add((float*)0, (float*)0, (float*)0, 0);
|
|
return 0;
|
|
}" COMPILER_SUPPORTS_AVX)
|
|
cmake_pop_check_state()
|
|
if(COMPILER_SUPPORTS_AVX)
|
|
set(HAVE_AVX TRUE)
|
|
endif()
|
|
endif()
|
|
if(SDL_AVX2)
|
|
cmake_push_check_state()
|
|
if(USE_GCC OR USE_CLANG OR USE_INTELCC)
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -mavx2")
|
|
endif()
|
|
check_c_source_compiles("
|
|
#include <immintrin.h>
|
|
void ints_add(int *dest, int *a, int *b, unsigned size) {
|
|
for (; size >= 8; size -= 8, dest += 8, a += 8, b += 8) {
|
|
_mm256_storeu_si256((__m256i*)dest, _mm256_add_epi32(_mm256_loadu_si256((__m256i*)a), _mm256_loadu_si256((__m256i*)b)));
|
|
}
|
|
}
|
|
int main(int argc, char **argv) {
|
|
ints_add((int*)0, (int*)0, (int*)0, 0);
|
|
return 0;
|
|
}" COMPILER_SUPPORTS_AVX2)
|
|
cmake_pop_check_state()
|
|
if(COMPILER_SUPPORTS_AVX2)
|
|
set(HAVE_AVX2 TRUE)
|
|
endif()
|
|
endif()
|
|
if(SDL_AVX512F)
|
|
cmake_push_check_state()
|
|
if(USE_GCC OR USE_CLANG OR USE_INTELCC)
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -mavx512f")
|
|
endif()
|
|
check_c_source_compiles("
|
|
#include <immintrin.h>
|
|
void floats_add(float *dest, float *a, float *b, unsigned size) {
|
|
for (; size >= 16; size -= 16, dest += 16, a += 16, b += 16) {
|
|
_mm512_storeu_ps(dest, _mm512_add_ps(_mm512_loadu_ps(a), _mm512_loadu_ps(b)));
|
|
}
|
|
}
|
|
int main(int argc, char **argv) {
|
|
floats_add((float*)0, (float*)0, (float*)0, 0);
|
|
return 0;
|
|
}" COMPILER_SUPPORTS_AVX512F)
|
|
cmake_pop_check_state()
|
|
if(COMPILER_SUPPORTS_AVX512F)
|
|
set(HAVE_AVX512F TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
if(SDL_ARMNEON)
|
|
check_c_source_compiles("
|
|
#include <arm_neon.h>
|
|
void floats_add(float *dest, float *a, float *b, unsigned size) {
|
|
for (; size >= 4; size -= 4, dest += 4, a += 4, b += 4) {
|
|
vst1q_f32(dest, vaddq_f32(vld1q_f32(a), vld1q_f32(b)));
|
|
}
|
|
}
|
|
int main(int argc, char *argv[]) {
|
|
floats_add((float*)0, (float*)0, (float*)0, 0);
|
|
return 0;
|
|
}" COMPILER_SUPPORTS_ARMNEON)
|
|
|
|
if(COMPILER_SUPPORTS_ARMNEON)
|
|
set(HAVE_ARMNEON TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
if(USE_GCC OR USE_CLANG)
|
|
# TODO: Those all seem to be quite GCC specific - needs to be
|
|
# reworked for better compiler support
|
|
|
|
if(SDL_ALTIVEC)
|
|
cmake_push_check_state()
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -maltivec")
|
|
check_c_source_compiles("
|
|
#include <altivec.h>
|
|
vector unsigned int vzero() {
|
|
return vec_splat_u32(0);
|
|
}
|
|
int main(int argc, char **argv) { return 0; }" COMPILER_SUPPORTS_ALTIVEC)
|
|
cmake_pop_check_state()
|
|
if(COMPILER_SUPPORTS_ALTIVEC)
|
|
set(HAVE_ALTIVEC TRUE)
|
|
set(SDL_ALTIVEC_BLITTERS 1)
|
|
sdl_compile_options(PRIVATE "-maltivec")
|
|
set_property(SOURCE "${SDL3_SOURCE_DIR}/src/video/SDL_blit_N.c" APPEND PROPERTY COMPILE_DEFINITIONS "SDL_ENABLE_ALTIVEC")
|
|
set_property(SOURCE "${SDL3_SOURCE_DIR}/src/video/SDL_blit_N.c" PROPERTY SKIP_PRECOMPILE_HEADERS 1)
|
|
endif()
|
|
endif()
|
|
|
|
if(SDL_LSX)
|
|
cmake_push_check_state()
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -mlsx")
|
|
check_c_source_compiles("
|
|
#ifndef __loongarch_sx
|
|
#error Assembler CPP flag not enabled
|
|
#endif
|
|
int main(int argc, char **argv) { return 0; }" COMPILER_SUPPORTS_LSX)
|
|
check_include_file("lsxintrin.h" HAVE_LSXINTRIN_H)
|
|
cmake_pop_check_state()
|
|
|
|
if(COMPILER_SUPPORTS_LSX AND HAVE_LSXINTRIN_H)
|
|
set_property(SOURCE "${SDL3_SOURCE_DIR}/src/video/yuv2rgb/yuv_rgb_lsx.c" APPEND PROPERTY COMPILE_OPTIONS "-mlsx")
|
|
set(HAVE_LSX TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
if(SDL_LASX)
|
|
cmake_push_check_state()
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -mlasx")
|
|
check_c_source_compiles("
|
|
#ifndef __loongarch_asx
|
|
#error Assembler CPP flag not enabled
|
|
#endif
|
|
int main(int argc, char **argv) { return 0; }" COMPILER_SUPPORTS_LASX)
|
|
check_include_file("lasxintrin.h" HAVE_LASXINTRIN_H)
|
|
cmake_pop_check_state()
|
|
if(COMPILER_SUPPORTS_LASX AND HAVE_LASXINTRIN_H)
|
|
set(HAVE_LASX TRUE)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT HAVE_MMX)
|
|
set(SDL_DISABLE_MMX 1)
|
|
endif()
|
|
|
|
if(NOT HAVE_SSE)
|
|
set(SDL_DISABLE_SSE 1)
|
|
endif()
|
|
|
|
if(NOT HAVE_SSE2)
|
|
set(SDL_DISABLE_SSE2 1)
|
|
endif()
|
|
|
|
if(NOT HAVE_SSE3)
|
|
set(SDL_DISABLE_SSE3 1)
|
|
endif()
|
|
|
|
if(NOT HAVE_SSE4_1)
|
|
set(SDL_DISABLE_SSE4_1 1)
|
|
endif()
|
|
|
|
if(NOT HAVE_SSE4_2)
|
|
set(SDL_DISABLE_SSE4_2 1)
|
|
endif()
|
|
|
|
if(NOT HAVE_AVX)
|
|
set(SDL_DISABLE_AVX 1)
|
|
endif()
|
|
|
|
if(NOT HAVE_AVX2)
|
|
set(SDL_DISABLE_AVX2 1)
|
|
endif()
|
|
|
|
if(NOT HAVE_AVX512F)
|
|
set(SDL_DISABLE_AVX512F 1)
|
|
endif()
|
|
|
|
if(NOT HAVE_LSX)
|
|
set(SDL_DISABLE_LSX 1)
|
|
endif()
|
|
|
|
if(NOT HAVE_LASX)
|
|
set(SDL_DISABLE_LASX 1)
|
|
endif()
|
|
|
|
if(NOT HAVE_ARMNEON)
|
|
set(SDL_DISABLE_NEON 1)
|
|
endif()
|
|
|
|
set(SDL_DISABLE_ALLOCA 0)
|
|
check_include_file("alloca.h" "HAVE_ALLOCA_H")
|
|
if(MSVC)
|
|
check_include_file("malloc.h" "HAVE_MALLOC_H")
|
|
check_symbol_exists("_alloca" "malloc.h" _ALLOCA_IN_MALLOC_H)
|
|
if(NOT HAVE_ALLOCA_H AND NOT _ALLOCA_IN_MALLOC_H)
|
|
set(SDL_DISABLE_ALLOCA 1)
|
|
endif()
|
|
endif()
|
|
|
|
# TODO: Can't deactivate on FreeBSD? w/o LIBC, SDL_stdinc.h can't define anything.
|
|
if(SDL_LIBC)
|
|
set(available_headers)
|
|
set(HAVE_LIBC TRUE)
|
|
set(headers_to_check
|
|
float.h
|
|
iconv.h
|
|
inttypes.h
|
|
limits.h
|
|
malloc.h
|
|
math.h
|
|
memory.h
|
|
signal.h
|
|
stdarg.h
|
|
stdbool.h
|
|
stddef.h
|
|
stdint.h
|
|
stdio.h
|
|
stdlib.h
|
|
string.h
|
|
strings.h
|
|
sys/types.h
|
|
time.h
|
|
wchar.h
|
|
)
|
|
foreach(_HEADER IN LISTS headers_to_check)
|
|
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}})
|
|
if(HAVE_${HEADER_IDENTIFIER})
|
|
list(APPEND available_headers "${_HEADER}")
|
|
endif()
|
|
endforeach()
|
|
|
|
set(symbols_to_check
|
|
abs acos acosf asin asinf atan atan2 atan2f atanf atof atoi
|
|
bcopy
|
|
ceil ceilf copysign copysignf cos cosf
|
|
_Exit exp expf
|
|
fabs fabsf floor floorf fmod fmodf fopen64 fseeko fseeko64
|
|
getenv
|
|
_i64toa index itoa
|
|
log log10 log10f logf lround lroundf _ltoa
|
|
malloc memcmp memcpy memmove memset modf modff
|
|
pow powf putenv
|
|
rindex round roundf
|
|
scalbn scalbnf setenv sin sinf sqr sqrt sqrtf sscanf strchr
|
|
strcmp strlcat strlcpy strlen strncmp strnlen strpbrk
|
|
strrchr strstr strnstr strtod strtok_r strtol strtoll strtoul strtoull
|
|
tan tanf trunc truncf
|
|
unsetenv
|
|
vsnprintf vsscanf
|
|
wcsnlen wcscmp wcsdup wcslcat wcslcpy wcslen wcsncmp wcsstr wcstol
|
|
)
|
|
if(WINDOWS)
|
|
list(APPEND symbols_to_check
|
|
_copysign _fseeki64 _strrev _ui64toa _uitoa _ultoa _wcsdup
|
|
)
|
|
else()
|
|
list(APPEND symbols_to_check
|
|
strcasestr
|
|
)
|
|
endif()
|
|
check_library_exists(m pow "" HAVE_LIBM)
|
|
cmake_push_check_state()
|
|
if(HAVE_LIBM)
|
|
sdl_link_dependency(math LIBS m)
|
|
list(APPEND CMAKE_REQUIRED_LIBRARIES m)
|
|
endif()
|
|
foreach(_FN IN LISTS symbols_to_check)
|
|
string(TOUPPER ${_FN} _UPPER)
|
|
set(LIBC_HAS_VAR "LIBC_HAS_${_UPPER}")
|
|
check_symbol_exists("${_FN}" "${available_headers}" ${LIBC_HAS_VAR})
|
|
set(HAVE_${_UPPER} ${${LIBC_HAS_VAR}})
|
|
endforeach()
|
|
cmake_pop_check_state()
|
|
|
|
cmake_push_check_state()
|
|
if(MSVC)
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -we4244 -WX") # 'conversion' conversion from 'type1' to 'type2', possible loss of data
|
|
else()
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -Wfloat-conversion -Werror")
|
|
endif()
|
|
foreach(math_fn isinf isnan)
|
|
string(TOUPPER "${math_fn}" MATH_FN)
|
|
check_c_source_compiles("
|
|
#include <math.h>
|
|
int main() {
|
|
double d = 3.14159;
|
|
return ${math_fn}(d);
|
|
}
|
|
" LIBC_HAS_${MATH_FN})
|
|
set(HAVE_${MATH_FN} ${LIBC_HAS_${MATH_FN}})
|
|
|
|
check_c_source_compiles("
|
|
#include <math.h>
|
|
int main() {
|
|
float f = 3.14159f;
|
|
return ${math_fn}(f);
|
|
}
|
|
" LIBC_${MATH_FN}_HANDLES_FLOAT)
|
|
set(HAVE_${MATH_FN}_FLOAT_MACRO ${LIBC_${MATH_FN}_HANDLES_FLOAT})
|
|
|
|
check_c_source_compiles("
|
|
#include <math.h>
|
|
int main() {
|
|
float f = 3.14159f;
|
|
return ${math_fn}f(f);
|
|
}
|
|
" LIBC_HAS_${MATH_FN}F)
|
|
set(HAVE_${MATH_FN}F "${LIBC_HAS_${MATH_FN}F}")
|
|
endforeach()
|
|
cmake_pop_check_state()
|
|
|
|
if(NOT WINDOWS)
|
|
check_symbol_exists(fdatasync "unistd.h" HAVE_FDATASYNC)
|
|
check_symbol_exists(gethostname "unistd.h" HAVE_GETHOSTNAME)
|
|
check_symbol_exists(getpagesize "unistd.h" HAVE_GETPAGESIZE)
|
|
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(gmtime_r "time.h" HAVE_GMTIME_R)
|
|
check_symbol_exists(localtime_r "time.h" HAVE_LOCALTIME_R)
|
|
check_symbol_exists(nl_langinfo "langinfo.h" HAVE_NL_LANGINFO)
|
|
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)
|
|
check_symbol_exists(elf_aux_info "sys/auxv.h" HAVE_ELF_AUX_INFO)
|
|
check_symbol_exists(poll "poll.h" HAVE_POLL)
|
|
check_symbol_exists(memfd_create "sys/mman.h" HAVE_MEMFD_CREATE)
|
|
check_symbol_exists(posix_fallocate "fcntl.h" HAVE_POSIX_FALLOCATE)
|
|
|
|
if(SDL_SYSTEM_ICONV)
|
|
check_c_source_compiles("
|
|
#define LIBICONV_PLUG 1 /* in case libiconv header is in include path */
|
|
#include <stddef.h>
|
|
#include <iconv.h>
|
|
int main(int argc, char **argv) {
|
|
return !iconv_open(NULL,NULL);
|
|
}" ICONV_IN_LIBC)
|
|
|
|
cmake_push_check_state()
|
|
list(APPEND CMAKE_REQUIRED_LIBRARIES iconv)
|
|
check_c_source_compiles("
|
|
#include <stddef.h>
|
|
#include <iconv.h>
|
|
int main(int argc, char **argv) {
|
|
return !iconv_open(NULL,NULL);
|
|
}" ICONV_IN_LIBICONV)
|
|
cmake_pop_check_state()
|
|
|
|
if(ICONV_IN_LIBC OR ICONV_IN_LIBICONV)
|
|
set(HAVE_ICONV 1)
|
|
set(HAVE_SYSTEM_ICONV TRUE)
|
|
if(ICONV_IN_LIBICONV AND (SDL_LIBICONV OR (NOT ICONV_IN_LIBC)))
|
|
sdl_link_dependency(iconv LIBS iconv)
|
|
set(SDL_USE_LIBICONV 1)
|
|
set(HAVE_LIBICONV TRUE)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
check_struct_has_member("struct sigaction" "sa_sigaction" "signal.h" HAVE_SA_SIGACTION)
|
|
check_struct_has_member("struct stat" "st_mtim" "sys/stat.h" HAVE_ST_MTIM)
|
|
endif()
|
|
else()
|
|
set(headers
|
|
stdarg.h
|
|
stddef.h
|
|
stdint.h
|
|
)
|
|
foreach(_HEADER ${headers})
|
|
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}})
|
|
endforeach()
|
|
|
|
if(MSVC AND USE_CLANG)
|
|
check_c_compiler_flag("/Q_no-use-libirc" HAS_Q_NO_USE_LIBIRC)
|
|
endif()
|
|
endif()
|
|
|
|
# General source files
|
|
sdl_glob_sources(
|
|
"${SDL3_SOURCE_DIR}/src/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/atomic/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/audio/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/camera/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/core/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/cpuinfo/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/dynapi/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/events/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/file/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/file/generic/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/filesystem/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/gpu/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/joystick/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/haptic/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/hidapi/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/locale/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/main/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/misc/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/power/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/render/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/render/*/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/sensor/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/stdlib/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/storage/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/time/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/timer/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/video/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/video/yuv2rgb/*.c"
|
|
)
|
|
|
|
# Build uclibc as a static library such that non-used symbols don't end up in the SDL3 shared library.
|
|
file(GLOB SDL_UCLIBC_SOURCES "${SDL3_SOURCE_DIR}/src/libm/*.c")
|
|
add_library(SDL_uclibc STATIC "${SDL_UCLIBC_SOURCES}")
|
|
target_compile_definitions(SDL_uclibc PRIVATE USING_GENERATED_CONFIG_H)
|
|
target_include_directories(SDL_uclibc PRIVATE "${SDL3_BINARY_DIR}/include-config-$<LOWER_CASE:$<CONFIG>>/build_config")
|
|
target_include_directories(SDL_uclibc PRIVATE "${SDL3_SOURCE_DIR}/src")
|
|
target_include_directories(SDL_uclibc PRIVATE "${SDL3_SOURCE_DIR}/include")
|
|
SDL_AddCommonCompilerFlags(SDL_uclibc)
|
|
sdl_sources(STATIC "$<TARGET_OBJECTS:SDL_uclibc>")
|
|
if(TARGET SDL3-shared)
|
|
target_link_libraries(SDL3-shared PRIVATE SDL_uclibc)
|
|
endif()
|
|
if(HAVE_GCC_FVISIBILITY)
|
|
set_property(TARGET SDL_uclibc PROPERTY C_VISIBILITY_PRESET "hidden")
|
|
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(FATAL_ERROR "SDL_HAPTIC requires SDL_JOYSTICK, which is not enabled")
|
|
endif()
|
|
endif()
|
|
|
|
|
|
# General SDL subsystem options, valid for all platforms
|
|
if(SDL_AUDIO)
|
|
# CheckDummyAudio/CheckDiskAudio - valid for all platforms
|
|
if(SDL_DUMMYAUDIO)
|
|
set(SDL_AUDIO_DRIVER_DUMMY 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/dummy/*.c")
|
|
set(HAVE_DUMMYAUDIO TRUE)
|
|
set(HAVE_SDL_AUDIO TRUE)
|
|
endif()
|
|
if(SDL_DISKAUDIO)
|
|
set(SDL_AUDIO_DRIVER_DISK 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/disk/*.c")
|
|
set(HAVE_DISKAUDIO TRUE)
|
|
set(HAVE_SDL_AUDIO TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
if(SDL_CAMERA)
|
|
# CheckDummyCamera/CheckDiskCamera - valid for all platforms
|
|
if(SDL_DUMMYCAMERA)
|
|
set(SDL_CAMERA_DRIVER_DUMMY 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/camera/dummy/*.c")
|
|
set(HAVE_DUMMYCAMERA TRUE)
|
|
set(HAVE_SDL_CAMERA TRUE)
|
|
endif()
|
|
# !!! FIXME: for later.
|
|
#if(SDL_DISKCAMERA)
|
|
# set(SDL_CAMERA_DRIVER_DISK 1)
|
|
# sdl_glob_sources("${SDL3_SOURCE_DIR}/src/camera/disk/*.c")
|
|
# set(HAVE_DISKCAMERA TRUE)
|
|
# set(HAVE_SDL_CAMERA TRUE)
|
|
#endif()
|
|
endif()
|
|
|
|
if(UNIX OR APPLE)
|
|
# Relevant for Unix/Darwin only
|
|
set(DYNAPI_NEEDS_DLOPEN 1)
|
|
CheckDLOPEN()
|
|
if(HAVE_DLOPEN)
|
|
set(SDL_LOADSO_DLOPEN 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/loadso/dlopen/*.c")
|
|
set(HAVE_SDL_LOADSO TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
if(UNIX OR APPLE OR HAIKU OR RISCOS)
|
|
CheckO_CLOEXEC()
|
|
endif()
|
|
|
|
if(SDL_JOYSTICK)
|
|
if(SDL_VIRTUAL_JOYSTICK)
|
|
set(HAVE_VIRTUAL_JOYSTICK TRUE)
|
|
set(SDL_JOYSTICK_VIRTUAL 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/virtual/*.c")
|
|
endif()
|
|
endif()
|
|
|
|
if(SDL_VIDEO)
|
|
if(SDL_DUMMYVIDEO)
|
|
set(SDL_VIDEO_DRIVER_DUMMY 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/dummy/*.c")
|
|
set(HAVE_DUMMYVIDEO TRUE)
|
|
set(HAVE_SDL_VIDEO TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
# Platform-specific options and settings
|
|
if(ANDROID)
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/android")
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/android/*.c")
|
|
sdl_sources("${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c")
|
|
set_property(SOURCE "${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-declaration-after-statement")
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/android/*.c")
|
|
set(HAVE_SDL_MISC TRUE)
|
|
|
|
# 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
|
|
cmake_push_check_state()
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -Werror=unused-command-line-argument")
|
|
check_c_compiler_flag(-marm HAVE_ARM_MODE)
|
|
cmake_pop_check_state()
|
|
if(HAVE_ARM_MODE)
|
|
set_property(SOURCE "${SDL3_SOURCE_DIR}/src/atomic/SDL_spinlock.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -marm")
|
|
set_source_files_properties(src/atomic/SDL_spinlock.c PROPERTIES SKIP_PRECOMPILE_HEADERS 1)
|
|
endif()
|
|
|
|
if(SDL_AUDIO)
|
|
set(SDL_AUDIO_DRIVER_OPENSLES 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/openslES/*.c")
|
|
|
|
sdl_link_dependency(opensles LIBS ${ANDROID_DL_LIBRARY} OpenSLES)
|
|
|
|
set(SDL_AUDIO_DRIVER_AAUDIO 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/aaudio/*.c")
|
|
|
|
set(HAVE_SDL_AUDIO TRUE)
|
|
endif()
|
|
|
|
set(SDL_FILESYSTEM_ANDROID 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/android/*.c")
|
|
set(HAVE_SDL_FILESYSTEM TRUE)
|
|
|
|
set(SDL_FSOPS_POSIX 1) # !!! FIXME: this might need something else for .apk data?
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/filesystem/posix/SDL_sysfsops.c")
|
|
set(HAVE_SDL_FSOPS TRUE)
|
|
|
|
if(SDL_HAPTIC)
|
|
set(SDL_HAPTIC_ANDROID 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/haptic/android/*.c")
|
|
set(HAVE_SDL_HAPTIC TRUE)
|
|
endif()
|
|
|
|
if(SDL_HIDAPI)
|
|
CheckHIDAPI()
|
|
endif()
|
|
|
|
if(SDL_JOYSTICK)
|
|
set(SDL_JOYSTICK_ANDROID 1)
|
|
sdl_glob_sources(
|
|
"${SDL3_SOURCE_DIR}/src/joystick/android/*.c"
|
|
)
|
|
set(HAVE_SDL_JOYSTICK TRUE)
|
|
endif()
|
|
|
|
set(SDL_LOADSO_DLOPEN 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/loadso/dlopen/*.c")
|
|
set(HAVE_SDL_LOADSO TRUE)
|
|
|
|
if(SDL_POWER)
|
|
set(SDL_POWER_ANDROID 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/power/android/*.c")
|
|
set(HAVE_SDL_POWER TRUE)
|
|
endif()
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/android/*.c")
|
|
set(HAVE_SDL_LOCALE TRUE)
|
|
|
|
set(SDL_TIME_UNIX 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/time/unix/*.c")
|
|
set(HAVE_SDL_TIME TRUE)
|
|
|
|
set(SDL_TIMER_UNIX 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/unix/*.c")
|
|
set(HAVE_SDL_TIMERS TRUE)
|
|
|
|
if(SDL_SENSOR)
|
|
set(SDL_SENSOR_ANDROID 1)
|
|
set(HAVE_SDL_SENSORS TRUE)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/sensor/android/*.c")
|
|
endif()
|
|
|
|
if(SDL_CAMERA)
|
|
set(SDL_CAMERA_DRIVER_ANDROID 1)
|
|
set(HAVE_CAMERA TRUE)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/camera/android/*.c")
|
|
endif()
|
|
|
|
if(SDL_VIDEO)
|
|
set(SDL_VIDEO_DRIVER_ANDROID 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/android/*.c")
|
|
set(HAVE_SDL_VIDEO TRUE)
|
|
|
|
# Core stuff
|
|
# find_library(ANDROID_DL_LIBRARY dl)
|
|
# FIXME failing dlopen https://github.com/android-ndk/ndk/issues/929
|
|
sdl_link_dependency(android_video LIBS dl log android)
|
|
sdl_compile_definitions(PRIVATE "GL_GLEXT_PROTOTYPES")
|
|
|
|
#enable gles
|
|
if(SDL_OPENGLES)
|
|
set(SDL_VIDEO_OPENGL_EGL 1)
|
|
set(HAVE_OPENGLES TRUE)
|
|
set(SDL_VIDEO_OPENGL_ES 1)
|
|
set(SDL_VIDEO_OPENGL_ES2 1)
|
|
set(SDL_VIDEO_RENDER_OGL_ES2 1)
|
|
|
|
sdl_link_dependency(opengles LIBS GLESv1_CM GLESv2)
|
|
endif()
|
|
|
|
if(SDL_VULKAN)
|
|
check_c_source_compiles("
|
|
#if defined(__ARM_ARCH) && __ARM_ARCH < 7
|
|
#error Vulkan doesn't work on this configuration
|
|
#endif
|
|
int main(int argc, char **argv) { return 0; }
|
|
" VULKAN_PASSED_ANDROID_CHECKS)
|
|
if(VULKAN_PASSED_ANDROID_CHECKS)
|
|
set(SDL_VIDEO_VULKAN 1)
|
|
set(HAVE_VULKAN TRUE)
|
|
if(SDL_RENDER_VULKAN)
|
|
set(SDL_VIDEO_RENDER_VULKAN 1)
|
|
set(HAVE_RENDER_VULKAN TRUE)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
CheckPTHREAD()
|
|
if(SDL_CLOCK_GETTIME)
|
|
set(HAVE_CLOCK_GETTIME 1)
|
|
endif()
|
|
|
|
if(NOT SDL_DISABLE_ANDROID_JAR)
|
|
find_package(Java)
|
|
find_package(SdlAndroidPlatform MODULE)
|
|
|
|
if(Java_FOUND AND SdlAndroidPlatform_FOUND AND NOT CMAKE_VERSION VERSION_LESS "3.19")
|
|
include(UseJava)
|
|
set(path_android_jar "${SDL_ANDROID_PLATFORM_ROOT}/android.jar")
|
|
set(android_java_sources_root "${SDL3_SOURCE_DIR}/android-project/app/src/main/java")
|
|
file(GLOB SDL_JAVA_SOURCES "${android_java_sources_root}/org/libsdl/app/*.java")
|
|
set(CMAKE_JAVA_COMPILE_FLAGS "-encoding;utf-8")
|
|
add_jar(SDL3-jar
|
|
SOURCES ${SDL_JAVA_SOURCES}
|
|
INCLUDE_JARS "${path_android_jar}"
|
|
OUTPUT_NAME "SDL3"
|
|
VERSION "${SDL3_VERSION}"
|
|
)
|
|
set_property(TARGET SDL3-jar PROPERTY OUTPUT "${SDL3_BINARY_DIR}/SDL3-${SDL3_VERSION}.jar")
|
|
add_library(SDL3__Jar INTERFACE)
|
|
add_library(SDL3::Jar ALIAS SDL3__Jar)
|
|
get_property(sdl3_jar_location TARGET SDL3-jar PROPERTY JAR_FILE)
|
|
set_property(TARGET SDL3__Jar PROPERTY JAR_FILE "${sdl3_jar_location}")
|
|
set(javasourcesjar "${SDL3_BINARY_DIR}/SDL3-${SDL3_VERSION}-sources.jar")
|
|
string(REGEX REPLACE "${android_java_sources_root}/" "" sdl_relative_java_sources "${SDL_JAVA_SOURCES}")
|
|
add_custom_command(
|
|
OUTPUT "${javasourcesjar}"
|
|
COMMAND ${Java_JAR_EXECUTABLE} cf "${javasourcesjar}" ${sdl_relative_java_sources}
|
|
WORKING_DIRECTORY "${android_java_sources_root}"
|
|
DEPENDS ${SDL_JAVA_SOURCES}
|
|
)
|
|
add_custom_target(SDL3-javasources ALL DEPENDS "${javasourcesjar}")
|
|
if(NOT SDL_DISABLE_INSTALL_DOCS)
|
|
set(javadocdir "${SDL3_BINARY_DIR}/docs/javadoc")
|
|
set(javadocjar "${SDL3_BINARY_DIR}/SDL3-${SDL3_VERSION}-javadoc.jar")
|
|
set(javadoc_index_html "${javadocdir}/index.html")
|
|
add_custom_command(
|
|
OUTPUT "${javadoc_index_html}"
|
|
COMMAND ${CMAKE_COMMAND} -E rm -rf "${javadocdir}" "${javadocjar}"
|
|
COMMAND ${Java_JAVADOC_EXECUTABLE} -encoding utf8 -d "${javadocdir}"
|
|
-classpath "${path_android_jar}"
|
|
-author -use -version ${SDL_JAVA_SOURCES}
|
|
DEPENDS ${SDL_JAVA_SOURCES} "${path_android_jar}"
|
|
)
|
|
add_custom_command(
|
|
OUTPUT "${javadocjar}"
|
|
COMMAND ${Java_JAR_EXECUTABLE} -c -f "${javadocjar}"
|
|
-C "${javadocdir}" *
|
|
WORKING_DIRECTORY "${javadocdir}"
|
|
DEPENDS ${javadoc_index_html}
|
|
)
|
|
add_custom_target(SDL3-javadoc ALL DEPENDS "${javadoc_index_html}" "${javadocjar}")
|
|
set_property(TARGET SDL3-javadoc PROPERTY OUTPUT_DIR "${javadocdir}")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
elseif(EMSCRIPTEN)
|
|
# 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.
|
|
sdl_compile_options(PRIVATE "-Wno-warn-absolute-paths")
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/main/emscripten/*.c")
|
|
set(HAVE_SDL_MAIN_CALLBACKS TRUE)
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/emscripten/*.c")
|
|
set(HAVE_SDL_MISC TRUE)
|
|
|
|
if(SDL_AUDIO)
|
|
set(SDL_AUDIO_DRIVER_EMSCRIPTEN 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/emscripten/*.c")
|
|
set(HAVE_SDL_AUDIO TRUE)
|
|
endif()
|
|
|
|
set(SDL_FILESYSTEM_EMSCRIPTEN 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/emscripten/*.c")
|
|
set(HAVE_SDL_FILESYSTEM TRUE)
|
|
|
|
set(SDL_FSOPS_POSIX 1)
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/filesystem/posix/SDL_sysfsops.c")
|
|
set(HAVE_SDL_FSOPS TRUE)
|
|
|
|
if(SDL_CAMERA)
|
|
set(SDL_CAMERA_DRIVER_EMSCRIPTEN 1)
|
|
set(HAVE_CAMERA TRUE)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/camera/emscripten/*.c")
|
|
endif()
|
|
|
|
if(SDL_JOYSTICK)
|
|
set(SDL_JOYSTICK_EMSCRIPTEN 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/emscripten/*.c")
|
|
set(HAVE_SDL_JOYSTICK TRUE)
|
|
endif()
|
|
|
|
if(SDL_POWER)
|
|
set(SDL_POWER_EMSCRIPTEN 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/power/emscripten/*.c")
|
|
set(HAVE_SDL_POWER TRUE)
|
|
endif()
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/emscripten/*.c")
|
|
set(HAVE_SDL_LOCALE TRUE)
|
|
|
|
set(SDL_TIME_UNIX 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/time/unix/*.c")
|
|
set(HAVE_SDL_TIME TRUE)
|
|
|
|
set(SDL_TIMER_UNIX 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/unix/*.c")
|
|
set(HAVE_SDL_TIMERS TRUE)
|
|
|
|
if(SDL_CLOCK_GETTIME)
|
|
set(HAVE_CLOCK_GETTIME 1)
|
|
endif()
|
|
|
|
if(SDL_VIDEO)
|
|
set(SDL_VIDEO_DRIVER_EMSCRIPTEN 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/emscripten/*.c")
|
|
set(HAVE_SDL_VIDEO TRUE)
|
|
|
|
#enable gles
|
|
if(SDL_OPENGLES)
|
|
set(SDL_VIDEO_OPENGL_EGL 1)
|
|
set(HAVE_OPENGLES TRUE)
|
|
set(SDL_VIDEO_OPENGL_ES2 1)
|
|
set(SDL_VIDEO_RENDER_OGL_ES2 1)
|
|
endif()
|
|
endif()
|
|
|
|
CheckPTHREAD()
|
|
CheckLibUnwind()
|
|
|
|
elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
|
|
if(SDL_AUDIO)
|
|
if(NETBSD)
|
|
set(SDL_AUDIO_DRIVER_NETBSD 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/netbsd/*.c")
|
|
set(HAVE_SDL_AUDIO TRUE)
|
|
elseif(QNX)
|
|
set(SDL_AUDIO_DRIVER_QNX 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/qnx/*.c")
|
|
sdl_link_dependency(asound LIBS asound)
|
|
set(HAVE_SDL_AUDIO TRUE)
|
|
endif()
|
|
CheckOSS()
|
|
CheckALSA()
|
|
CheckJACK()
|
|
CheckPipewire()
|
|
CheckPulseAudio()
|
|
CheckSNDIO()
|
|
endif()
|
|
|
|
if(SDL_VIDEO)
|
|
# Need to check for Raspberry PI first and add platform specific compiler flags, otherwise the test for GLES fails!
|
|
CheckRPI()
|
|
# Need to check for ROCKCHIP platform and get rid of "Can't window GBM/EGL surfaces on window creation."
|
|
CheckROCKCHIP()
|
|
CheckX11()
|
|
# Need to check for EGL first because KMSDRM and Wayland depend on it.
|
|
CheckEGL()
|
|
CheckKMSDRM()
|
|
CheckGLX()
|
|
CheckOpenGL()
|
|
CheckOpenGLES()
|
|
CheckWayland()
|
|
CheckOpenVR()
|
|
CheckVivante()
|
|
CheckVulkan()
|
|
CheckQNXScreen()
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/tray/unix/*.c")
|
|
set(HAVE_SDL_TRAY TRUE)
|
|
endif()
|
|
|
|
if(UNIX)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/unix/*.c")
|
|
|
|
check_c_source_compiles("
|
|
#include <linux/input.h>
|
|
#ifndef EVIOCGNAME
|
|
#error EVIOCGNAME() ioctl not available
|
|
#endif
|
|
int main(int argc, char** argv) { return 0; }" HAVE_LINUX_INPUT_H)
|
|
|
|
if(LINUX)
|
|
check_c_source_compiles("
|
|
#include <linux/kd.h>
|
|
#include <linux/keyboard.h>
|
|
#include <sys/ioctl.h>
|
|
int main(int argc, char **argv) {
|
|
struct kbentry kbe;
|
|
kbe.kb_table = KG_CTRL;
|
|
ioctl(0, KDGKBENT, &kbe);
|
|
return 0;
|
|
}" HAVE_INPUT_KD)
|
|
check_c_source_compiles("
|
|
#include <linux/videodev2.h>
|
|
int main(int argc, char** argv) { return 0; }" HAVE_LINUX_VIDEODEV2_H)
|
|
elseif(FREEBSD)
|
|
check_c_source_compiles("
|
|
#include <sys/kbio.h>
|
|
#include <sys/ioctl.h>
|
|
int main(int argc, char **argv) {
|
|
accentmap_t accTable;
|
|
ioctl(0, KDENABIO, 1);
|
|
return 0;
|
|
}" HAVE_INPUT_KBIO)
|
|
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>
|
|
int main(int argc, char **argv) {
|
|
struct wskbd_map_data data;
|
|
ioctl(0, WSKBDIO_GETMAP, &data);
|
|
return 0;
|
|
}" HAVE_INPUT_WSCONS)
|
|
endif()
|
|
|
|
if(SDL_CAMERA AND HAVE_LINUX_VIDEODEV2_H)
|
|
set(SDL_CAMERA_DRIVER_V4L2 1)
|
|
set(HAVE_CAMERA TRUE)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/camera/v4l2/*.c")
|
|
endif()
|
|
|
|
if(HAVE_LINUX_INPUT_H)
|
|
set(SDL_INPUT_LINUXEV 1)
|
|
endif()
|
|
|
|
if(SDL_HAPTIC AND HAVE_LINUX_INPUT_H)
|
|
set(SDL_HAPTIC_LINUX 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/haptic/linux/*.c")
|
|
set(HAVE_SDL_HAPTIC TRUE)
|
|
endif()
|
|
|
|
if(HAVE_INPUT_KD)
|
|
set(SDL_INPUT_LINUXKD 1)
|
|
endif()
|
|
|
|
if(HAVE_INPUT_KBIO)
|
|
set(SDL_INPUT_FBSDKBIO 1)
|
|
endif()
|
|
|
|
if(HAVE_INPUT_WSCONS)
|
|
set(SDL_INPUT_WSCONS 1)
|
|
endif()
|
|
|
|
CheckLibUDev()
|
|
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)
|
|
|
|
if(HAVE_SYS_INOTIFY_H AND HAVE_INOTIFY_INIT)
|
|
set(HAVE_INOTIFY 1)
|
|
endif()
|
|
|
|
if(PKG_CONFIG_FOUND)
|
|
if(SDL_DBUS)
|
|
pkg_search_module(DBUS dbus-1 dbus)
|
|
if(DBUS_FOUND)
|
|
set(HAVE_DBUS_DBUS_H TRUE)
|
|
sdl_include_directories(PRIVATE SYSTEM ${DBUS_INCLUDE_DIRS})
|
|
# Fcitx need only dbus.
|
|
set(HAVE_FCITX TRUE)
|
|
set(HAVE_DBUS TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
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)
|
|
sdl_include_directories(PRIVATE SYSTEM ${IBUS_INCLUDE_DIRS})
|
|
set(HAVE_IBUS TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
if (HAVE_IBUS_IBUS_H OR HAVE_FCITX)
|
|
set(SDL_USE_IME 1)
|
|
endif()
|
|
|
|
if(SDL_LIBURING)
|
|
pkg_search_module(LIBURING liburing-ffi)
|
|
find_path(HAVE_LIBURING_H NAMES liburing.h)
|
|
if(LIBURING_FOUND AND HAVE_LIBURING_H)
|
|
set(HAVE_LIBURING_LIBURING_H TRUE)
|
|
sdl_include_directories(PRIVATE SYSTEM ${LIBURING_INCLUDE_DIRS})
|
|
set(HAVE_LIBURING TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
if((FREEBSD OR NETBSD) AND NOT HAVE_INOTIFY)
|
|
set(LibInotify_PKG_CONFIG_SPEC libinotify)
|
|
pkg_check_modules(PC_LIBINOTIFY IMPORTED_TARGET ${LibInotify_PKG_CONFIG_SPEC})
|
|
if(PC_LIBINOTIFY_FOUND)
|
|
set(HAVE_INOTIFY 1)
|
|
sdl_link_dependency(libinotify LIBS PkgConfig::PC_LIBINOTIFY PKG_CONFIG_PREFIX PC_LIBINOTIFY PKG_CONFIG_SPECS ${LibInotify_PKG_CONFIG_SPEC})
|
|
endif()
|
|
endif()
|
|
|
|
CheckLibUnwind()
|
|
endif()
|
|
|
|
if(HAVE_DBUS_DBUS_H)
|
|
sdl_sources(
|
|
"${SDL3_SOURCE_DIR}/src/core/linux/SDL_dbus.c"
|
|
"${SDL3_SOURCE_DIR}/src/core/linux/SDL_system_theme.c"
|
|
)
|
|
endif()
|
|
|
|
if(SDL_USE_IME)
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/core/linux/SDL_ime.c")
|
|
endif()
|
|
|
|
if(HAVE_IBUS_IBUS_H)
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/core/linux/SDL_ibus.c")
|
|
endif()
|
|
|
|
if(HAVE_FCITX)
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/core/linux/SDL_fcitx.c")
|
|
endif()
|
|
|
|
if(HAVE_LIBUDEV_H)
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/core/linux/SDL_udev.c")
|
|
endif()
|
|
|
|
if(HAVE_LINUX_INPUT_H)
|
|
sdl_sources(
|
|
"${SDL3_SOURCE_DIR}/src/core/linux/SDL_evdev.c"
|
|
"${SDL3_SOURCE_DIR}/src/core/linux/SDL_evdev_kbd.c"
|
|
)
|
|
endif()
|
|
|
|
if(HAVE_INPUT_KBIO)
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/core/freebsd/SDL_evdev_kbd_freebsd.c")
|
|
endif()
|
|
|
|
if(HAVE_INPUT_WSCONS)
|
|
sdl_sources(
|
|
"${SDL3_SOURCE_DIR}/src/core/openbsd/SDL_wscons_kbd.c"
|
|
"${SDL3_SOURCE_DIR}/src/core/openbsd/SDL_wscons_mouse.c"
|
|
)
|
|
endif()
|
|
|
|
if(SDL_GPU AND SDL_GPU_DXVK)
|
|
if(PKG_CONFIG_FOUND)
|
|
pkg_search_module(DXVK_NATIVE dxvk-dxgi)
|
|
if(DXVK_NATIVE_FOUND)
|
|
set(HAVE_D3D11_H TRUE)
|
|
sdl_include_directories(PRIVATE SYSTEM ${DXVK_NATIVE_INCLUDE_DIRS})
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if(HAVE_LIBURING_H)
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/file/io_uring/SDL_asyncio_liburing.c")
|
|
endif()
|
|
|
|
# Always compiled for Linux, unconditionally:
|
|
sdl_sources(
|
|
"${SDL3_SOURCE_DIR}/src/core/linux/SDL_evdev_capabilities.c"
|
|
"${SDL3_SOURCE_DIR}/src/core/linux/SDL_threadprio.c"
|
|
)
|
|
|
|
# src/core/unix/*.c is included in a generic if(UNIX) section, elsewhere.
|
|
endif()
|
|
|
|
if(SDL_HIDAPI)
|
|
CheckHIDAPI()
|
|
endif()
|
|
|
|
if(SDL_JOYSTICK)
|
|
if(FREEBSD OR NETBSD OR OPENBSD OR BSDI)
|
|
CheckUSBHID()
|
|
endif()
|
|
if((LINUX OR FREEBSD) AND HAVE_LINUX_INPUT_H AND NOT ANDROID)
|
|
set(SDL_JOYSTICK_LINUX 1)
|
|
sdl_glob_sources(
|
|
"${SDL3_SOURCE_DIR}/src/joystick/linux/*.c"
|
|
)
|
|
set(HAVE_SDL_JOYSTICK TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
CheckPTHREAD()
|
|
|
|
if(SDL_CLOCK_GETTIME)
|
|
check_library_exists(c clock_gettime "" FOUND_CLOCK_GETTIME_LIBC)
|
|
if(FOUND_CLOCK_GETTIME_LIBC)
|
|
set(HAVE_CLOCK_GETTIME 1)
|
|
else()
|
|
check_library_exists(rt clock_gettime "" FOUND_CLOCK_GETTIME_LIBRT)
|
|
if(FOUND_CLOCK_GETTIME_LIBRT)
|
|
set(HAVE_CLOCK_GETTIME 1)
|
|
sdl_link_dependency(clock LIBS rt)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/unix/*.c")
|
|
set(HAVE_SDL_MISC TRUE)
|
|
|
|
if(SDL_POWER)
|
|
if(LINUX)
|
|
set(SDL_POWER_LINUX 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/power/linux/*.c")
|
|
set(HAVE_SDL_POWER TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/unix/*.c")
|
|
set(HAVE_SDL_LOCALE TRUE)
|
|
|
|
set(SDL_FILESYSTEM_UNIX 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/unix/*.c")
|
|
set(HAVE_SDL_FILESYSTEM TRUE)
|
|
|
|
set(SDL_STORAGE_GENERIC 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/storage/generic/*.c")
|
|
if(LINUX)
|
|
set(SDL_STORAGE_STEAM 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/storage/steam/*.c")
|
|
endif()
|
|
set(HAVE_SDL_STORAGE 1)
|
|
|
|
set(SDL_FSOPS_POSIX 1)
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/filesystem/posix/SDL_sysfsops.c")
|
|
set(HAVE_SDL_FSOPS TRUE)
|
|
|
|
set(SDL_TIME_UNIX 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/time/unix/*.c")
|
|
set(HAVE_SDL_TIME TRUE)
|
|
|
|
set(SDL_TIMER_UNIX 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/unix/*.c")
|
|
set(HAVE_SDL_TIMERS TRUE)
|
|
|
|
set(SDL_RLD_FLAGS "")
|
|
if(SDL_RPATH AND SDL_SHARED)
|
|
if(BSDI OR FREEBSD OR LINUX OR NETBSD)
|
|
cmake_push_check_state()
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -Wl,--enable-new-dtags")
|
|
check_c_compiler_flag("" HAVE_ENABLE_NEW_DTAGS)
|
|
cmake_pop_check_state()
|
|
if(HAVE_ENABLE_NEW_DTAGS)
|
|
set(SDL_RLD_FLAGS "-Wl,-rpath,\${libdir} -Wl,--enable-new-dtags")
|
|
else()
|
|
set(SDL_RLD_FLAGS "-Wl,-rpath,\${libdir}")
|
|
endif()
|
|
set(HAVE_RPATH TRUE)
|
|
elseif(SOLARIS)
|
|
set(SDL_RLD_FLAGS "-R\${libdir}")
|
|
set(HAVE_RPATH TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
if(QNX)
|
|
# QNX's *printf() family generates a SIGSEGV if NULL is passed for a string
|
|
# specifier (on purpose), but SDL expects "(null)". Use the built-in
|
|
# implementation.
|
|
set (HAVE_VSNPRINTF 0)
|
|
set (USE_POSIX_SPAWN 1)
|
|
endif()
|
|
elseif(WINDOWS)
|
|
check_c_source_compiles("
|
|
#include <windows.h>
|
|
int main(int argc, char **argv) { return 0; }" HAVE_WIN32_CC)
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/windows/*.c")
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/main/windows/*.c")
|
|
|
|
if(TARGET SDL3-shared AND MSVC AND NOT SDL_LIBC)
|
|
# Prevent codegen that would use the VC runtime libraries.
|
|
target_compile_options(SDL3-shared PRIVATE $<$<COMPILE_LANGUAGE:C,CXX>:/GS-> $<$<COMPILE_LANGUAGE:C,CXX>:/Gs1048576>)
|
|
target_compile_options(SDL_uclibc PRIVATE $<$<COMPILE_LANGUAGE:C,CXX>:/GS-> $<$<COMPILE_LANGUAGE:C,CXX>:/Gs1048576>)
|
|
if(SDL_CPU_X86)
|
|
target_compile_options(SDL3-shared PRIVATE "/arch:SSE")
|
|
target_compile_options(SDL3-SDL_uclibc PRIVATE "/arch:SSE")
|
|
endif()
|
|
endif()
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/windows/*.c")
|
|
|
|
set(HAVE_SDL_MISC TRUE)
|
|
|
|
# Check for DirectX
|
|
if(SDL_DIRECTX)
|
|
cmake_push_check_state()
|
|
if(DEFINED MSVC_VERSION AND NOT ${MSVC_VERSION} LESS 1700)
|
|
set(USE_WINSDK_DIRECTX TRUE)
|
|
endif()
|
|
if(NOT MINGW AND NOT USE_WINSDK_DIRECTX)
|
|
if("$ENV{DXSDK_DIR}" STREQUAL "")
|
|
message(FATAL_ERROR "DIRECTX requires the \$DXSDK_DIR environment variable to be set")
|
|
endif()
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " /I\"$ENV{DXSDK_DIR}\\Include\"")
|
|
endif()
|
|
|
|
check_include_file(d3d9.h HAVE_D3D9_H)
|
|
check_include_file(d3d11_1.h HAVE_D3D11_H)
|
|
check_include_file(ddraw.h HAVE_DDRAW_H)
|
|
check_include_file(dsound.h HAVE_DSOUND_H)
|
|
check_include_file(dinput.h HAVE_DINPUT_H)
|
|
if(SDL_CPU_ARM32) # !!! FIXME: this should probably check if we're !(x86 or x86-64) instead of arm.
|
|
set(HAVE_DINPUT_H 0)
|
|
endif()
|
|
check_include_file(dxgi.h HAVE_DXGI_H)
|
|
cmake_pop_check_state()
|
|
if(HAVE_D3D9_H OR HAVE_D3D11_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR HAVE_DINPUT_H)
|
|
set(HAVE_DIRECTX TRUE)
|
|
if(NOT MINGW AND NOT USE_WINSDK_DIRECTX)
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
set(PROCESSOR_ARCH "x64")
|
|
else()
|
|
set(PROCESSOR_ARCH "x86")
|
|
endif()
|
|
sdl_link_directories("$<BUILD_INTERFACE:$$ENV{DXSDK_DIR}\\lib\\${PROCESSOR_ARCH}>")
|
|
sdl_include_directories(PRIVATE SYSTEM "$<BUILD_INTERFACE:$ENV{DXSDK_DIR}\\Include>")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if(SDL_XINPUT)
|
|
# xinput.h may need windows.h, but does not include it itself.
|
|
check_c_source_compiles("
|
|
#include <windows.h>
|
|
#include <xinput.h>
|
|
int main(int argc, char **argv) { return 0; }" HAVE_XINPUT_H)
|
|
endif()
|
|
|
|
# headers needed elsewhere
|
|
check_c_source_compiles("
|
|
#define COBJMACROS
|
|
#include <windows.gaming.input.h>
|
|
static __x_ABI_CWindows_CGaming_CInput_CIGamepadStatics2 *s2;
|
|
int main(int argc, char **argv) { return 0; }" HAVE_WINDOWS_GAMING_INPUT_H
|
|
)
|
|
check_c_source_compiles("
|
|
#include <stdbool.h>
|
|
#define COBJMACROS
|
|
#include <gameinput.h>
|
|
int main(int argc, char **argv) { return 0; }" HAVE_GAMEINPUT_H
|
|
)
|
|
check_include_file(dxgi1_6.h HAVE_DXGI1_6_H)
|
|
check_include_file(tpcshrd.h HAVE_TPCSHRD_H)
|
|
check_include_file(roapi.h HAVE_ROAPI_H)
|
|
check_include_file(mmdeviceapi.h HAVE_MMDEVICEAPI_H)
|
|
check_include_file(audioclient.h HAVE_AUDIOCLIENT_H)
|
|
check_include_file(sensorsapi.h HAVE_SENSORSAPI_H)
|
|
check_include_file(shellscalingapi.h HAVE_SHELLSCALINGAPI_H)
|
|
check_c_source_compiles("
|
|
#include <windows.h>
|
|
#include <mfapi.h>
|
|
#include <mfidl.h>
|
|
#include <mfreadwrite.h>
|
|
int main(int argc, char **argv) { return 0; }
|
|
" HAVE_MFAPI_H
|
|
)
|
|
|
|
if(SDL_AUDIO)
|
|
if(HAVE_DSOUND_H)
|
|
set(SDL_AUDIO_DRIVER_DSOUND 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/directsound/*.c")
|
|
set(HAVE_SDL_AUDIO TRUE)
|
|
endif()
|
|
|
|
if(SDL_WASAPI AND HAVE_AUDIOCLIENT_H AND HAVE_MMDEVICEAPI_H)
|
|
set(SDL_AUDIO_DRIVER_WASAPI 1)
|
|
set(HAVE_WASAPI TRUE)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/wasapi/*.c")
|
|
set(HAVE_SDL_AUDIO TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
if(SDL_VIDEO)
|
|
set(SDL_VIDEO_DRIVER_WINDOWS 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/windows/*.c")
|
|
|
|
CheckOpenVR()
|
|
|
|
if(SDL_RENDER_D3D AND HAVE_D3D9_H)
|
|
set(SDL_VIDEO_RENDER_D3D 1)
|
|
set(HAVE_RENDER_D3D TRUE)
|
|
endif()
|
|
if(SDL_RENDER_D3D11 AND HAVE_D3D11_H)
|
|
set(SDL_VIDEO_RENDER_D3D11 1)
|
|
set(HAVE_RENDER_D3D11 TRUE)
|
|
endif()
|
|
if(SDL_RENDER_D3D12)
|
|
set(SDL_VIDEO_RENDER_D3D12 1)
|
|
set(HAVE_RENDER_D3D12 TRUE)
|
|
endif()
|
|
set(HAVE_SDL_VIDEO TRUE)
|
|
endif()
|
|
|
|
set(SDL_THREAD_GENERIC_COND_SUFFIX 1)
|
|
set(SDL_THREAD_GENERIC_RWLOCK_SUFFIX 1)
|
|
set(SDL_THREAD_WINDOWS 1)
|
|
sdl_sources(
|
|
"${SDL3_SOURCE_DIR}/src/thread/generic/SDL_syscond.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/generic/SDL_sysrwlock.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/windows/SDL_syscond_cv.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/windows/SDL_sysmutex.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/windows/SDL_sysrwlock_srw.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/windows/SDL_syssem.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/windows/SDL_systhread.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/windows/SDL_systls.c"
|
|
)
|
|
|
|
set(HAVE_SDL_THREADS TRUE)
|
|
|
|
if(SDL_SENSOR AND HAVE_SENSORSAPI_H)
|
|
set(SDL_SENSOR_WINDOWS 1)
|
|
set(HAVE_SDL_SENSORS TRUE)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/sensor/windows/*.c")
|
|
endif()
|
|
|
|
if(SDL_POWER)
|
|
set(SDL_POWER_WINDOWS 1)
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/power/windows/SDL_syspower.c")
|
|
set(HAVE_SDL_POWER TRUE)
|
|
endif()
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/windows/*.c")
|
|
set(HAVE_SDL_LOCALE TRUE)
|
|
|
|
set(SDL_FILESYSTEM_WINDOWS 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/windows/*.c")
|
|
set(HAVE_SDL_FILESYSTEM TRUE)
|
|
|
|
set(SDL_FSOPS_WINDOWS 1)
|
|
set(HAVE_SDL_FSOPS TRUE)
|
|
|
|
set(SDL_STORAGE_GENERIC 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/storage/generic/*.c")
|
|
set(SDL_STORAGE_STEAM 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/storage/steam/*.c")
|
|
set(HAVE_SDL_STORAGE 1)
|
|
|
|
# Libraries for Win32 native and MinGW
|
|
sdl_link_dependency(base LIBS kernel32 user32 gdi32 winmm imm32 ole32 oleaut32 version uuid advapi32 setupapi shell32)
|
|
|
|
set(SDL_TIME_WINDOWS 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/time/windows/*.c")
|
|
set(HAVE_SDL_TIME TRUE)
|
|
|
|
set(SDL_TIMER_WINDOWS 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/windows/*.c")
|
|
set(HAVE_SDL_TIMERS TRUE)
|
|
|
|
set(SDL_LOADSO_WINDOWS 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/loadso/windows/*.c")
|
|
set(HAVE_SDL_LOADSO TRUE)
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/windows/*.c")
|
|
|
|
if(SDL_VIDEO)
|
|
if(SDL_OPENGL)
|
|
set(SDL_VIDEO_OPENGL 1)
|
|
set(SDL_VIDEO_OPENGL_WGL 1)
|
|
set(SDL_VIDEO_RENDER_OGL 1)
|
|
set(HAVE_OPENGL TRUE)
|
|
endif()
|
|
|
|
if(SDL_OPENGLES)
|
|
set(SDL_VIDEO_OPENGL_EGL 1)
|
|
set(SDL_VIDEO_OPENGL_ES2 1)
|
|
set(SDL_VIDEO_RENDER_OGL_ES2 1)
|
|
set(HAVE_OPENGLES TRUE)
|
|
endif()
|
|
|
|
if(SDL_VULKAN)
|
|
set(SDL_VIDEO_VULKAN 1)
|
|
set(HAVE_VULKAN TRUE)
|
|
if(SDL_RENDER_VULKAN)
|
|
set(SDL_VIDEO_RENDER_VULKAN 1)
|
|
set(HAVE_RENDER_VULKAN TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/tray/windows/*.c")
|
|
set(HAVE_SDL_TRAY TRUE)
|
|
endif()
|
|
|
|
if(SDL_HIDAPI)
|
|
CheckHIDAPI()
|
|
endif()
|
|
|
|
if(SDL_JOYSTICK)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/windows/*.c")
|
|
|
|
set(SDL_JOYSTICK_RAWINPUT 1)
|
|
if(HAVE_DINPUT_H)
|
|
set(SDL_JOYSTICK_DINPUT 1)
|
|
sdl_link_dependency(joystick LIBS dinput8)
|
|
endif()
|
|
if(HAVE_XINPUT_H)
|
|
set(SDL_JOYSTICK_XINPUT 1)
|
|
set(HAVE_XINPUT TRUE)
|
|
endif()
|
|
if(HAVE_WINDOWS_GAMING_INPUT_H)
|
|
set(SDL_JOYSTICK_WGI 1)
|
|
endif()
|
|
if(HAVE_GAMEINPUT_H)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/gdk/*.c")
|
|
set(SDL_JOYSTICK_GAMEINPUT 1)
|
|
endif()
|
|
set(HAVE_SDL_JOYSTICK TRUE)
|
|
|
|
if(SDL_HAPTIC)
|
|
if(HAVE_DINPUT_H)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/haptic/windows/*.c")
|
|
set(SDL_HAPTIC_DINPUT 1)
|
|
set(HAVE_SDL_HAPTIC TRUE)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if(SDL_CAMERA)
|
|
if(HAVE_MFAPI_H)
|
|
set(HAVE_CAMERA TRUE)
|
|
set(SDL_CAMERA_DRIVER_MEDIAFOUNDATION 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/camera/mediafoundation/*.c")
|
|
endif()
|
|
endif()
|
|
|
|
enable_language(RC)
|
|
sdl_glob_sources(SHARED "${SDL3_SOURCE_DIR}/src/core/windows/*.rc")
|
|
if(MINGW OR CYGWIN)
|
|
sdl_pc_link_options("-mwindows")
|
|
endif()
|
|
|
|
elseif(APPLE)
|
|
# TODO: rework this all for proper macOS, iOS and Darwin support
|
|
|
|
# !!! FIXME: all the `if(IOS OR TVOS OR VISIONOS)` checks should get merged into one variable, so we're ready for the next platform (or just WatchOS).
|
|
|
|
# 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.
|
|
if(MACOS)
|
|
set(SDL_FRAMEWORK_COCOA 1)
|
|
set(SDL_FRAMEWORK_CARBON 1)
|
|
set(SDL_FRAMEWORK_UTTYPES 1)
|
|
endif()
|
|
set(SDL_FRAMEWORK_FOUNDATION 1)
|
|
set(SDL_FRAMEWORK_COREVIDEO 1)
|
|
|
|
# iOS can use a CADisplayLink for main callbacks. macOS just uses the generic one atm.
|
|
if(IOS OR TVOS OR VISIONOS OR WATCHOS)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/main/ios/*.m")
|
|
set(HAVE_SDL_MAIN_CALLBACKS TRUE)
|
|
endif()
|
|
|
|
if(SDL_CAMERA)
|
|
if(MACOS OR IOS)
|
|
set(SDL_CAMERA_DRIVER_COREMEDIA 1)
|
|
set(HAVE_CAMERA TRUE)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/camera/coremedia/*.m")
|
|
endif()
|
|
endif()
|
|
|
|
if(IOS OR TVOS OR VISIONOS OR WATCHOS)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/ios/*.m")
|
|
else()
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/macos/*.m")
|
|
endif()
|
|
set(HAVE_SDL_MISC TRUE)
|
|
|
|
if(SDL_AUDIO)
|
|
set(SDL_AUDIO_DRIVER_COREAUDIO 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/coreaudio/*.m")
|
|
set(HAVE_SDL_AUDIO TRUE)
|
|
set(SDL_FRAMEWORK_COREAUDIO 1)
|
|
set(SDL_FRAMEWORK_AUDIOTOOLBOX 1)
|
|
set(SDL_FRAMEWORK_AVFOUNDATION 1)
|
|
endif()
|
|
|
|
if(SDL_HIDAPI)
|
|
CheckHIDAPI()
|
|
endif()
|
|
|
|
if(SDL_JOYSTICK)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/apple/*.m")
|
|
if(IOS OR TVOS OR VISIONOS OR WATCHOS)
|
|
set(SDL_JOYSTICK_MFI 1)
|
|
if(IOS OR VISIONOS OR WATCHOS)
|
|
set(SDL_FRAMEWORK_COREMOTION 1)
|
|
endif()
|
|
set(SDL_FRAMEWORK_GAMECONTROLLER 1)
|
|
set(SDL_FRAMEWORK_COREHAPTICS 1)
|
|
else()
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/darwin/*.c")
|
|
set_property(SOURCE ${MFI_JOYSTICK_SOURCES} APPEND_STRING PROPERTY COMPILE_FLAGS " -fobjc-weak")
|
|
check_objc_source_compiles("
|
|
#include <AvailabilityMacros.h>
|
|
#include <TargetConditionals.h>
|
|
#import <Foundation/Foundation.h>
|
|
#import <GameController/GameController.h>
|
|
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1080
|
|
#error GameController framework doesn't work on this configuration
|
|
#endif
|
|
#if TARGET_CPU_X86
|
|
#error GameController framework doesn't work on this configuration
|
|
#endif
|
|
int main() { return 0; }" HAVE_FRAMEWORK_GAMECONTROLLER)
|
|
check_objc_source_compiles("
|
|
#include <AvailabilityMacros.h>
|
|
#include <TargetConditionals.h>
|
|
#import <Foundation/Foundation.h>
|
|
#import <CoreHaptics/CoreHaptics.h>
|
|
int main() { return 0; }" HAVE_FRAMEWORK_COREHAPTICS)
|
|
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()
|
|
if(NOT VISIONOS)
|
|
set(SDL_JOYSTICK_IOKIT 1)
|
|
set(SDL_FRAMEWORK_IOKIT 1)
|
|
endif()
|
|
set(SDL_FRAMEWORK_FF 1)
|
|
endif()
|
|
set(HAVE_SDL_JOYSTICK TRUE)
|
|
endif()
|
|
|
|
if(SDL_HAPTIC)
|
|
if (IOS OR TVOS OR VISIONOS OR WATCHOS)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/haptic/dummy/*.c")
|
|
set(SDL_HAPTIC_DUMMY 1)
|
|
else()
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/haptic/darwin/*.c")
|
|
set(SDL_HAPTIC_IOKIT 1)
|
|
set(SDL_FRAMEWORK_IOKIT 1)
|
|
set(SDL_FRAMEWORK_FF 1)
|
|
endif()
|
|
set(HAVE_SDL_HAPTIC TRUE)
|
|
endif()
|
|
|
|
if(SDL_POWER)
|
|
if (IOS OR TVOS OR VISIONOS OR WATCHOS)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/power/uikit/*.m")
|
|
set(SDL_POWER_UIKIT 1)
|
|
else()
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/power/macos/*.c")
|
|
set(SDL_POWER_MACOSX 1)
|
|
set(SDL_FRAMEWORK_IOKIT 1)
|
|
endif()
|
|
set(HAVE_SDL_POWER TRUE)
|
|
endif()
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/macos/*.m")
|
|
set(HAVE_SDL_LOCALE TRUE)
|
|
|
|
set(SDL_TIME_UNIX 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/time/unix/*.c")
|
|
set(HAVE_SDL_TIME TRUE)
|
|
|
|
set(SDL_TIMER_UNIX 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/unix/*.c")
|
|
set(HAVE_SDL_TIMERS TRUE)
|
|
|
|
set(SDL_FILESYSTEM_COCOA 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/cocoa/*.m")
|
|
set(HAVE_SDL_FILESYSTEM TRUE)
|
|
|
|
# TODO: SDL_STORAGE_ICLOUD
|
|
set(SDL_STORAGE_GENERIC 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/storage/generic/*.c")
|
|
if(MACOS)
|
|
set(SDL_STORAGE_STEAM 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/storage/steam/*.c")
|
|
endif()
|
|
set(HAVE_SDL_STORAGE 1)
|
|
|
|
set(SDL_FSOPS_POSIX 1)
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/filesystem/posix/SDL_sysfsops.c")
|
|
set(HAVE_SDL_FSOPS TRUE)
|
|
|
|
if(SDL_SENSOR)
|
|
if(IOS OR VISIONOS OR WATCHOS)
|
|
set(SDL_SENSOR_COREMOTION 1)
|
|
set(HAVE_SDL_SENSORS TRUE)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/sensor/coremotion/*.m")
|
|
endif()
|
|
endif()
|
|
|
|
# iOS hack needed - http://code.google.com/p/ios-cmake/ ?
|
|
if(SDL_VIDEO)
|
|
if(IOS OR TVOS OR VISIONOS OR WATCHOS)
|
|
set(SDL_VIDEO_DRIVER_UIKIT 1)
|
|
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)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/uikit/*.m")
|
|
set(HAVE_SDL_VIDEO TRUE)
|
|
else()
|
|
CheckCOCOA()
|
|
if(SDL_OPENGL)
|
|
set(SDL_VIDEO_OPENGL 1)
|
|
set(SDL_VIDEO_OPENGL_CGL 1)
|
|
set(SDL_VIDEO_RENDER_OGL 1)
|
|
set(HAVE_OPENGL TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
if(SDL_OPENGLES)
|
|
if(IOS OR TVOS OR VISIONOS OR WATCHOS)
|
|
set(SDL_FRAMEWORK_OPENGLES 1)
|
|
set(SDL_VIDEO_OPENGL_ES 1)
|
|
else()
|
|
set(SDL_VIDEO_OPENGL_EGL 1)
|
|
endif()
|
|
set(SDL_VIDEO_OPENGL_ES2 1)
|
|
set(SDL_VIDEO_RENDER_OGL_ES2 1)
|
|
set(HAVE_OPENGLES TRUE)
|
|
endif()
|
|
|
|
if(SDL_VULKAN OR SDL_METAL OR SDL_RENDER_METAL)
|
|
check_objc_source_compiles("
|
|
#include <AvailabilityMacros.h>
|
|
#import <Metal/Metal.h>
|
|
#import <QuartzCore/CAMetalLayer.h>
|
|
|
|
#if (!TARGET_CPU_X86_64 && !TARGET_CPU_ARM64)
|
|
#error Metal doesn't work on this configuration
|
|
#endif
|
|
int main(int argc, char **argv) { return 0; }" HAVE_FRAMEWORK_METAL)
|
|
if(HAVE_FRAMEWORK_METAL)
|
|
set(SDL_FRAMEWORK_METAL 1)
|
|
set(SDL_FRAMEWORK_QUARTZCORE 1)
|
|
if(SDL_VULKAN)
|
|
set(SDL_VIDEO_VULKAN 1)
|
|
set(HAVE_VULKAN TRUE)
|
|
if(SDL_RENDER_VULKAN)
|
|
set(SDL_VIDEO_RENDER_VULKAN 1)
|
|
set(HAVE_RENDER_VULKAN TRUE)
|
|
endif()
|
|
endif()
|
|
if(SDL_METAL)
|
|
set(SDL_VIDEO_METAL 1)
|
|
set(HAVE_METAL TRUE)
|
|
endif()
|
|
if(SDL_RENDER_METAL)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/render/metal/*.m")
|
|
set(SDL_VIDEO_RENDER_METAL 1)
|
|
set(HAVE_RENDER_METAL TRUE)
|
|
endif()
|
|
if (SDL_GPU)
|
|
set(SDL_GPU_METAL 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/gpu/metal/*.m")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if(MACOS)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/tray/cocoa/*.m")
|
|
set(HAVE_SDL_TRAY TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
# Minimum version for $<LINK_LIBRARY:feature,library-list>
|
|
cmake_minimum_required(VERSION 3.24)
|
|
|
|
# Actually load the frameworks at the end so we don't duplicate include.
|
|
if(SDL_FRAMEWORK_COREVIDEO)
|
|
find_library(COREMEDIA CoreMedia)
|
|
if(COREMEDIA)
|
|
sdl_link_dependency(corevideo LIBS "$<LINK_LIBRARY:FRAMEWORK,CoreMedia>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,CoreMedia")
|
|
endif()
|
|
sdl_link_dependency(corevideo LIBS "$<LINK_LIBRARY:FRAMEWORK,CoreVideo>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,CoreVideo")
|
|
endif()
|
|
if(SDL_FRAMEWORK_COCOA)
|
|
sdl_link_dependency(cocoa LIBS "$<LINK_LIBRARY:FRAMEWORK,Cocoa>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,Cocoa")
|
|
sdl_link_dependency(uniformtypeidentifiers LIBS "$<LINK_LIBRARY:WEAK_FRAMEWORK,UniformTypeIdentifiers>" PKG_CONFIG_LINK_OPTIONS "-Wl,-weak_framework,UniformTypeIdentifiers")
|
|
endif()
|
|
if(SDL_FRAMEWORK_IOKIT)
|
|
sdl_link_dependency(iokit LIBS "$<LINK_LIBRARY:FRAMEWORK,IOKit>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,IOKit")
|
|
endif()
|
|
if(SDL_FRAMEWORK_FF)
|
|
sdl_link_dependency(ff LIBS "$<LINK_LIBRARY:FRAMEWORK,ForceFeedback>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,ForceFeedback")
|
|
endif()
|
|
if(SDL_FRAMEWORK_CARBON)
|
|
sdl_link_dependency(carbon LIBS "$<LINK_LIBRARY:FRAMEWORK,Carbon>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,Carbon")
|
|
endif()
|
|
if(SDL_FRAMEWORK_COREAUDIO)
|
|
sdl_link_dependency(core_audio LIBS "$<LINK_LIBRARY:FRAMEWORK,CoreAudio>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,CoreAudio")
|
|
endif()
|
|
if(SDL_FRAMEWORK_AUDIOTOOLBOX)
|
|
sdl_link_dependency(audio_toolbox LIBS "$<LINK_LIBRARY:FRAMEWORK,AudioToolbox>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,AudioToolbox")
|
|
endif()
|
|
if(SDL_FRAMEWORK_AVFOUNDATION)
|
|
sdl_link_dependency(av_foundation LIBS "$<LINK_LIBRARY:FRAMEWORK,AVFoundation>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,AVFoundation")
|
|
endif()
|
|
if(SDL_FRAMEWORK_COREBLUETOOTH)
|
|
sdl_link_dependency(core_bluetooth LIBS "$<LINK_LIBRARY:FRAMEWORK,CoreBluetooth>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,CoreBluetooth")
|
|
endif()
|
|
if(SDL_FRAMEWORK_COREGRAPHICS)
|
|
sdl_link_dependency(core_graphics LIBS "$<LINK_LIBRARY:FRAMEWORK,CoreGraphics>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,CoreGraphics")
|
|
endif()
|
|
if(SDL_FRAMEWORK_COREMOTION)
|
|
sdl_link_dependency(core_motion LIBS "$<LINK_LIBRARY:FRAMEWORK,CoreMotion>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,CoreMotion")
|
|
endif()
|
|
if(SDL_FRAMEWORK_FOUNDATION)
|
|
sdl_link_dependency(foundation LIBS "$<LINK_LIBRARY:FRAMEWORK,Foundation>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,Foundation")
|
|
endif()
|
|
if(SDL_FRAMEWORK_GAMECONTROLLER)
|
|
find_library(GAMECONTROLLER GameController)
|
|
if(GAMECONTROLLER)
|
|
sdl_link_dependency(game_controller LIBS "$<LINK_LIBRARY:WEAK_FRAMEWORK,GameController>" PKG_CONFIG_LINK_OPTIONS "-Wl,-weak_framework,GameController")
|
|
endif()
|
|
endif()
|
|
if(SDL_FRAMEWORK_METAL)
|
|
if(IOS OR TVOS OR VISIONOS OR WATCHOS)
|
|
sdl_link_dependency(metal LIBS "$<LINK_LIBRARY:FRAMEWORK,Metal>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,Metal")
|
|
else()
|
|
sdl_link_dependency(metal LIBS "$<LINK_LIBRARY:WEAK_FRAMEWORK,Metal>" PKG_CONFIG_LINK_OPTIONS "-Wl,-weak_framework,Metal")
|
|
endif()
|
|
endif()
|
|
if(SDL_FRAMEWORK_OPENGLES)
|
|
sdl_link_dependency(opengles LIBS "$<LINK_LIBRARY:FRAMEWORK,OpenGLES>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,OpenGLES")
|
|
endif()
|
|
if(SDL_FRAMEWORK_QUARTZCORE)
|
|
if(IOS OR TVOS OR VISIONOS OR WATCHOS)
|
|
sdl_link_dependency(quartz_core LIBS "$<LINK_LIBRARY:FRAMEWORK,QuartzCore>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,QuartzCore")
|
|
else()
|
|
sdl_link_dependency(metal LIBS "$<LINK_LIBRARY:WEAK_FRAMEWORK,QuartzCore>" PKG_CONFIG_LINK_OPTIONS "-Wl,-weak_framework,QuartzCore")
|
|
endif()
|
|
endif()
|
|
if(SDL_FRAMEWORK_UIKIT)
|
|
sdl_link_dependency(ui_kit LIBS "$<LINK_LIBRARY:FRAMEWORK,UIKit>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,UIKit")
|
|
endif()
|
|
if(SDL_FRAMEWORK_COREHAPTICS)
|
|
find_library(COREHAPTICS CoreHaptics)
|
|
if(COREHAPTICS)
|
|
sdl_link_dependency(core_haptics LIBS "$<LINK_LIBRARY:FRAMEWORK,CoreHaptics>" PKG_CONFIG_LINK_OPTIONS "-Wl,-framework,CoreHaptics")
|
|
endif()
|
|
endif()
|
|
|
|
CheckPTHREAD()
|
|
|
|
if(SDL_RPATH AND SDL_SHARED)
|
|
set(SDL_RLD_FLAGS "-Wl,-rpath,\${libdir}")
|
|
set(HAVE_RPATH TRUE)
|
|
endif()
|
|
|
|
elseif(HAIKU)
|
|
enable_language(CXX)
|
|
if(SDL_AUDIO)
|
|
set(SDL_AUDIO_DRIVER_HAIKU 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/haiku/*.cc")
|
|
set(HAVE_SDL_AUDIO TRUE)
|
|
endif()
|
|
|
|
if(SDL_JOYSTICK)
|
|
set(SDL_JOYSTICK_HAIKU 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/haiku/*.cc")
|
|
set(HAVE_SDL_JOYSTICK TRUE)
|
|
endif()
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/haiku/*.cc")
|
|
set(HAVE_SDL_MISC TRUE)
|
|
|
|
if(SDL_VIDEO)
|
|
set(SDL_VIDEO_DRIVER_HAIKU 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/haiku/*.cc")
|
|
set(HAVE_SDL_VIDEO TRUE)
|
|
|
|
if(SDL_OPENGL)
|
|
# TODO: Use FIND_PACKAGE(OpenGL) instead
|
|
set(SDL_VIDEO_OPENGL 1)
|
|
set(SDL_VIDEO_OPENGL_HAIKU 1)
|
|
set(SDL_VIDEO_RENDER_OGL 1)
|
|
sdl_link_dependency(opengl LIBS GL)
|
|
set(HAVE_OPENGL TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
set(SDL_FILESYSTEM_HAIKU 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/haiku/*.cc")
|
|
set(HAVE_SDL_FILESYSTEM TRUE)
|
|
|
|
set(SDL_FSOPS_POSIX 1)
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/filesystem/posix/SDL_sysfsops.c")
|
|
set(HAVE_SDL_FSOPS TRUE)
|
|
|
|
set(SDL_TIME_UNIX 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/time/unix/*.c")
|
|
set(HAVE_SDL_TIME TRUE)
|
|
|
|
set(SDL_TIMER_HAIKU 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/haiku/*.c")
|
|
set(HAVE_SDL_TIMERS TRUE)
|
|
|
|
if(SDL_POWER)
|
|
set(SDL_POWER_HAIKU 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/power/haiku/*.c")
|
|
set(HAVE_SDL_POWER TRUE)
|
|
endif()
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/haiku/*.cc")
|
|
set(HAVE_SDL_LOCALE TRUE)
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/haiku/*.cc")
|
|
|
|
CheckPTHREAD()
|
|
sdl_link_dependency(base LIBS root be media game device textencoding tracker)
|
|
|
|
elseif(RISCOS)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/riscos/*.c")
|
|
set(HAVE_SDL_MISC TRUE)
|
|
|
|
if(SDL_VIDEO)
|
|
set(SDL_VIDEO_DRIVER_RISCOS 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/riscos/*.c")
|
|
set(HAVE_SDL_VIDEO TRUE)
|
|
endif()
|
|
|
|
set(SDL_FILESYSTEM_RISCOS 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/riscos/*.c")
|
|
set(HAVE_SDL_FILESYSTEM TRUE)
|
|
|
|
set(SDL_FSOPS_POSIX 1)
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/filesystem/posix/SDL_sysfsops.c")
|
|
set(HAVE_SDL_FSOPS TRUE)
|
|
|
|
set(SDL_TIME_UNIX 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/time/unix/*.c")
|
|
set(HAVE_SDL_TIME TRUE)
|
|
|
|
set(SDL_TIMER_UNIX 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/unix/*.c")
|
|
set(HAVE_SDL_TIMERS TRUE)
|
|
|
|
if(SDL_CLOCK_GETTIME)
|
|
set(HAVE_CLOCK_GETTIME 1)
|
|
endif()
|
|
|
|
CheckPTHREAD()
|
|
|
|
if(SDL_AUDIO)
|
|
CheckOSS()
|
|
endif()
|
|
|
|
elseif(VITA)
|
|
# SDL_spinlock.c Needs to be compiled in ARM mode.
|
|
cmake_push_check_state()
|
|
string(APPEND CMAKE_REQUIRED_FLAGS " -Werror=unused-command-line-argument")
|
|
check_c_compiler_flag(-marm HAVE_ARM_MODE)
|
|
cmake_pop_check_state()
|
|
if(HAVE_ARM_MODE)
|
|
set_property(SOURCE "${SDL3_SOURCE_DIR}/src/atomic/SDL_spinlock.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -marm")
|
|
endif()
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/vita/*.c")
|
|
set(HAVE_SDL_MISC TRUE)
|
|
|
|
if(SDL_AUDIO)
|
|
set(SDL_AUDIO_DRIVER_VITA 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/vita/*.c")
|
|
set(HAVE_SDL_AUDIO TRUE)
|
|
endif()
|
|
|
|
set(SDL_FILESYSTEM_VITA 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/vita/*.c")
|
|
set(HAVE_SDL_FILESYSTEM TRUE)
|
|
|
|
set(SDL_FSOPS_POSIX 1)
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/filesystem/posix/SDL_sysfsops.c")
|
|
set(HAVE_SDL_FSOPS TRUE)
|
|
|
|
if(SDL_JOYSTICK)
|
|
set(SDL_JOYSTICK_VITA 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/vita/*.c")
|
|
set(HAVE_SDL_JOYSTICK TRUE)
|
|
endif()
|
|
|
|
if(SDL_POWER)
|
|
set(SDL_POWER_VITA 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/power/vita/*.c")
|
|
set(HAVE_SDL_POWER TRUE)
|
|
endif()
|
|
|
|
set(SDL_THREAD_VITA 1)
|
|
sdl_sources(
|
|
"${SDL3_SOURCE_DIR}/src/thread/vita/SDL_sysmutex.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/vita/SDL_syssem.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/vita/SDL_systhread.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/generic/SDL_syscond.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/generic/SDL_sysrwlock.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/generic/SDL_systls.c"
|
|
)
|
|
set(HAVE_SDL_THREADS TRUE)
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/vita/*.c")
|
|
set(HAVE_SDL_LOCALE TRUE)
|
|
|
|
set(SDL_TIME_VITA 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/time/vita/*.c")
|
|
set(HAVE_SDL_TIME TRUE)
|
|
|
|
set(SDL_TIMER_VITA 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/vita/*.c")
|
|
set(HAVE_SDL_TIMERS TRUE)
|
|
|
|
if(SDL_SENSOR)
|
|
set(SDL_SENSOR_VITA 1)
|
|
set(HAVE_SDL_SENSORS TRUE)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/sensor/vita/*.c")
|
|
endif()
|
|
|
|
if(SDL_CAMERA)
|
|
set(SDL_CAMERA_DRIVER_VITA 1)
|
|
set(HAVE_CAMERA TRUE)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/camera/vita/*.c")
|
|
endif()
|
|
|
|
if(SDL_VIDEO)
|
|
set(SDL_VIDEO_DRIVER_VITA 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/vita/*.c")
|
|
set(HAVE_SDL_VIDEO TRUE)
|
|
|
|
if(VIDEO_VITA_PIB)
|
|
check_include_file(pib.h HAVE_PIGS_IN_BLANKET_H)
|
|
|
|
if(HAVE_PIGS_IN_BLANKET_H)
|
|
set(SDL_VIDEO_OPENGL_ES2 1)
|
|
sdl_link_dependency(pib
|
|
LIBS
|
|
pib
|
|
libScePiglet_stub_weak
|
|
taihen_stub_weak
|
|
SceShaccCg_stub_weak
|
|
)
|
|
set(HAVE_VIDEO_VITA_PIB ON)
|
|
set(SDL_VIDEO_VITA_PIB 1)
|
|
else()
|
|
set(HAVE_VIDEO_VITA_PIB OFF)
|
|
endif()
|
|
endif()
|
|
|
|
if(VIDEO_VITA_PVR)
|
|
check_include_file(gpu_es4/psp2_pvr_hint.h HAVE_PVR_H)
|
|
if(HAVE_PVR_H)
|
|
sdl_compile_definitions(PRIVATE "__psp2__")
|
|
set(SDL_VIDEO_OPENGL_EGL 1)
|
|
set(HAVE_OPENGLES TRUE)
|
|
set(SDL_VIDEO_OPENGL_ES 1)
|
|
set(SDL_VIDEO_OPENGL_ES2 1)
|
|
set(SDL_VIDEO_RENDER_OGL_ES2 1)
|
|
|
|
sdl_link_dependency(pvr
|
|
LIBS
|
|
libgpu_es4_ext_stub_weak
|
|
libIMGEGL_stub_weak
|
|
SceIme_stub
|
|
)
|
|
|
|
set(HAVE_VIDEO_VITA_PVR ON)
|
|
set(SDL_VIDEO_VITA_PVR 1)
|
|
|
|
if(SDL_OPENGL)
|
|
check_include_file(gl4esinit.h HAVE_GL4ES_H)
|
|
if(HAVE_GL4ES_H)
|
|
set(HAVE_OPENGL TRUE)
|
|
set(SDL_VIDEO_OPENGL 1)
|
|
set(SDL_VIDEO_RENDER_OGL 1)
|
|
sdl_link_dependency(opengl LIBS libGL_stub)
|
|
set(SDL_VIDEO_VITA_PVR_OGL 1)
|
|
endif()
|
|
endif()
|
|
|
|
else()
|
|
set(HAVE_VIDEO_VITA_PVR OFF)
|
|
endif()
|
|
endif()
|
|
|
|
set(SDL_VIDEO_RENDER_VITA_GXM 1)
|
|
sdl_link_dependency(base
|
|
LIBS
|
|
SceGxm_stub
|
|
SceDisplay_stub
|
|
SceCtrl_stub
|
|
SceAppMgr_stub
|
|
SceAppUtil_stub
|
|
SceAudio_stub
|
|
SceAudioIn_stub
|
|
SceSysmodule_stub
|
|
SceDisplay_stub
|
|
SceCtrl_stub
|
|
SceIofilemgr_stub
|
|
SceCommonDialog_stub
|
|
SceTouch_stub
|
|
SceHid_stub
|
|
SceMotion_stub
|
|
ScePower_stub
|
|
SceProcessmgr_stub
|
|
SceCamera_stub
|
|
)
|
|
endif()
|
|
|
|
sdl_compile_definitions(PRIVATE "__VITA__")
|
|
|
|
elseif(PSP)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/main/psp/*.c")
|
|
|
|
if(SDL_AUDIO)
|
|
set(SDL_AUDIO_DRIVER_PSP 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/psp/*.c")
|
|
set(HAVE_SDL_AUDIO TRUE)
|
|
endif()
|
|
|
|
set(SDL_FILESYSTEM_PSP 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/psp/*.c")
|
|
set(HAVE_SDL_FILESYSTEM TRUE)
|
|
|
|
set(SDL_FSOPS_POSIX 1)
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/filesystem/posix/SDL_sysfsops.c")
|
|
set(HAVE_SDL_FSOPS TRUE)
|
|
|
|
if(SDL_JOYSTICK)
|
|
set(SDL_JOYSTICK_PSP 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/psp/*.c")
|
|
set(HAVE_SDL_JOYSTICK TRUE)
|
|
endif()
|
|
|
|
if(SDL_POWER)
|
|
set(SDL_POWER_PSP 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/power/psp/*.c")
|
|
set(HAVE_SDL_POWER TRUE)
|
|
endif()
|
|
|
|
set(SDL_THREAD_PSP 1)
|
|
sdl_glob_sources(
|
|
"${SDL3_SOURCE_DIR}/src/thread/generic/SDL_syscond.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/generic/SDL_systls.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/generic/SDL_sysrwlock.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/psp/*.c"
|
|
)
|
|
set(HAVE_SDL_THREADS TRUE)
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/psp/*.c")
|
|
set(HAVE_SDL_LOCALE TRUE)
|
|
|
|
set(SDL_TIME_PSP 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/time/psp/*.c")
|
|
set(HAVE_SDL_TIME TRUE)
|
|
|
|
set(SDL_TIMER_PSP 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/psp/*.c")
|
|
set(HAVE_SDL_TIMERS TRUE)
|
|
|
|
if(SDL_VIDEO)
|
|
set(SDL_VIDEO_DRIVER_PSP 1)
|
|
set(SDL_VIDEO_RENDER_PSP 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/psp/*.c")
|
|
set(SDL_VIDEO_OPENGL 1)
|
|
set(HAVE_SDL_VIDEO TRUE)
|
|
endif()
|
|
|
|
sdl_link_dependency(base
|
|
LIBS
|
|
GL
|
|
pspvram
|
|
pspaudio
|
|
pspvfpu
|
|
pspdisplay
|
|
pspgu
|
|
pspge
|
|
psphprm
|
|
pspctrl
|
|
psppower
|
|
)
|
|
|
|
elseif(PS2)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/main/ps2/*.c")
|
|
|
|
if(SDL_AUDIO)
|
|
set(SDL_AUDIO_DRIVER_PS2 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/ps2/*.c")
|
|
set(HAVE_SDL_AUDIO TRUE)
|
|
endif()
|
|
|
|
set(SDL_FILESYSTEM_PS2 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/ps2/*.c")
|
|
set(HAVE_SDL_FILESYSTEM TRUE)
|
|
|
|
set(SDL_FSOPS_POSIX 1)
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/filesystem/posix/SDL_sysfsops.c")
|
|
set(HAVE_SDL_FSOPS TRUE)
|
|
|
|
if(SDL_JOYSTICK)
|
|
set(SDL_JOYSTICK_PS2 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/ps2/*.c")
|
|
set(HAVE_SDL_JOYSTICK TRUE)
|
|
endif()
|
|
|
|
set(SDL_THREAD_PS2 1)
|
|
sdl_glob_sources(
|
|
"${SDL3_SOURCE_DIR}/src/thread/generic/SDL_syscond.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/generic/SDL_sysmutex.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/generic/SDL_sysrwlock.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/generic/SDL_systls.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/ps2/*.c"
|
|
)
|
|
set(HAVE_SDL_THREADS TRUE)
|
|
|
|
set(SDL_TIME_PS2 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/time/ps2/*.c")
|
|
set(HAVE_SDL_TIME TRUE)
|
|
|
|
set(SDL_TIMER_PS2 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/ps2/*.c")
|
|
set(HAVE_SDL_TIMERS TRUE)
|
|
|
|
if(SDL_VIDEO)
|
|
set(SDL_VIDEO_DRIVER_PS2 1)
|
|
set(SDL_VIDEO_RENDER_PS2 1)
|
|
sdl_glob_sources(
|
|
"${SDL3_SOURCE_DIR}/src/video/ps2/*.c"
|
|
"${SDL3_SOURCE_DIR}/src/render/ps2/*.c"
|
|
)
|
|
set(SDL_VIDEO_OPENGL 0)
|
|
set(HAVE_SDL_VIDEO TRUE)
|
|
endif()
|
|
|
|
sdl_link_dependency(base
|
|
LIBS
|
|
patches
|
|
gskit
|
|
dmakit
|
|
ps2_drivers
|
|
)
|
|
elseif(N3DS)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/main/n3ds/*.c")
|
|
|
|
if(SDL_AUDIO)
|
|
set(SDL_AUDIO_DRIVER_N3DS 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/n3ds/*.c")
|
|
set(HAVE_SDL_AUDIO TRUE)
|
|
endif()
|
|
|
|
set(SDL_FILESYSTEM_N3DS 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/n3ds/*.c")
|
|
set(HAVE_SDL_FILESYSTEM TRUE)
|
|
|
|
# !!! FIXME: do we need a FSops implementation for this?
|
|
|
|
if(SDL_JOYSTICK)
|
|
set(SDL_JOYSTICK_N3DS 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/n3ds/*.c")
|
|
set(HAVE_SDL_JOYSTICK TRUE)
|
|
endif()
|
|
|
|
if(SDL_POWER)
|
|
set(SDL_POWER_N3DS 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/power/n3ds/*.c")
|
|
set(HAVE_SDL_POWER TRUE)
|
|
endif()
|
|
|
|
set(SDL_THREAD_N3DS 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/thread/n3ds/*.c")
|
|
sdl_sources(
|
|
"${SDL3_SOURCE_DIR}/src/thread/generic/SDL_systls.c"
|
|
"${SDL3_SOURCE_DIR}/src/thread/generic/SDL_sysrwlock.c"
|
|
)
|
|
set(HAVE_SDL_THREADS TRUE)
|
|
|
|
set(SDL_TIME_N3DS 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/time/n3ds/*.c")
|
|
set(HAVE_SDL_TIME TRUE)
|
|
|
|
set(SDL_TIMER_N3DS 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/n3ds/*.c")
|
|
set(HAVE_SDL_TIMERS TRUE)
|
|
|
|
set(SDL_FSOPS_POSIX 1)
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/filesystem/posix/SDL_sysfsops.c")
|
|
set(HAVE_SDL_FSOPS TRUE)
|
|
|
|
if(SDL_SENSOR)
|
|
set(SDL_SENSOR_N3DS 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/sensor/n3ds/*.c")
|
|
set(HAVE_SDL_SENSORS TRUE)
|
|
endif()
|
|
|
|
if(SDL_VIDEO)
|
|
set(SDL_VIDEO_DRIVER_N3DS 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/n3ds/*.c")
|
|
set(HAVE_SDL_VIDEO TRUE)
|
|
endif()
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/n3ds/*.c")
|
|
set(HAVE_SDL_LOCALE TRUE)
|
|
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/file/n3ds/*.c")
|
|
endif()
|
|
|
|
sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/SDL_dialog.c)
|
|
if (SDL_DIALOG)
|
|
sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/SDL_dialog_utils.c)
|
|
if(ANDROID)
|
|
sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/android/SDL_androiddialog.c)
|
|
set(HAVE_SDL_DIALOG TRUE)
|
|
elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
|
|
sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/unix/SDL_unixdialog.c)
|
|
sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/unix/SDL_portaldialog.c)
|
|
sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/unix/SDL_zenitydialog.c)
|
|
set(HAVE_SDL_DIALOG TRUE)
|
|
elseif(HAIKU)
|
|
sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/haiku/SDL_haikudialog.cc)
|
|
set(HAVE_SDL_DIALOG TRUE)
|
|
elseif(WINDOWS)
|
|
sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/windows/SDL_windowsdialog.c)
|
|
set(HAVE_SDL_DIALOG TRUE)
|
|
elseif(MACOS)
|
|
sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/cocoa/SDL_cocoadialog.m)
|
|
set(HAVE_SDL_DIALOG TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/process/SDL_process.c")
|
|
if(WINDOWS)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/process/windows/*.c")
|
|
set(SDL_PROCESS_WINDOWS 1)
|
|
set(HAVE_SDL_PROCESS TRUE)
|
|
else()
|
|
check_c_source_compiles("
|
|
#include <spawn.h>
|
|
#include <unistd.h>
|
|
|
|
int main(void)
|
|
{
|
|
int pipes[2];
|
|
int pid;
|
|
|
|
const char * args[] = {
|
|
\"/bin/false\",
|
|
NULL
|
|
};
|
|
|
|
const char * env[] = { NULL };
|
|
|
|
pipe(pipes);
|
|
|
|
posix_spawnattr_t attr;
|
|
posix_spawn_file_actions_t fa;
|
|
|
|
posix_spawnattr_init(&attr);
|
|
posix_spawn_file_actions_init(&fa);
|
|
|
|
posix_spawn_file_actions_addclose(&fa, pipes[0]);
|
|
posix_spawn_file_actions_adddup2(&fa, pipes[1], STDOUT_FILENO);
|
|
|
|
posix_spawn(&pid, args[0], &fa, &attr, (char * const *) args, (char * const *) env);
|
|
posix_spawnp(&pid, args[0], &fa, &attr, (char * const *) args, (char * const *) env);
|
|
|
|
posix_spawn_file_actions_destroy(&fa);
|
|
posix_spawnattr_destroy(&attr);
|
|
|
|
return 0;
|
|
}
|
|
" HAVE_POSIX_SPAWN)
|
|
if(HAVE_POSIX_SPAWN)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/process/posix/*.c")
|
|
set(SDL_PROCESS_POSIX 1)
|
|
set(HAVE_SDL_PROCESS TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
# Platform-independent options
|
|
|
|
if(SDL_VIDEO)
|
|
if(SDL_OFFSCREEN)
|
|
set(SDL_VIDEO_DRIVER_OFFSCREEN 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/offscreen/*.c")
|
|
set(HAVE_OFFSCREEN TRUE)
|
|
set(HAVE_SDL_VIDEO TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
sdl_glob_sources(${SDL3_SOURCE_DIR}/src/tray/*.c)
|
|
|
|
if(SDL_GPU)
|
|
if(HAVE_D3D11_H)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/gpu/d3d11/*.c")
|
|
set(SDL_GPU_D3D11 1)
|
|
set(HAVE_SDL_GPU TRUE)
|
|
endif()
|
|
if(SDL_RENDER_D3D12)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/gpu/d3d12/*.c")
|
|
set(SDL_GPU_D3D12 1)
|
|
set(HAVE_SDL_GPU TRUE)
|
|
endif()
|
|
if(SDL_VIDEO_VULKAN)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/gpu/vulkan/*.c")
|
|
set(SDL_GPU_VULKAN 1)
|
|
set(HAVE_SDL_GPU TRUE)
|
|
endif()
|
|
if(SDL_RENDER_GPU)
|
|
set(SDL_VIDEO_RENDER_GPU 1)
|
|
set(HAVE_RENDER_GPU TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
# Dummies
|
|
# configure.ac does it differently:
|
|
# 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.
|
|
if(NOT HAVE_SDL_AUDIO)
|
|
set(SDL_AUDIO_DRIVER_DUMMY 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/dummy/*.c")
|
|
endif()
|
|
if(NOT HAVE_SDL_VIDEO)
|
|
set(SDL_VIDEO_DRIVER_DUMMY 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/dummy/*.c")
|
|
endif()
|
|
if(NOT HAVE_SDL_JOYSTICK)
|
|
set(SDL_JOYSTICK_DUMMY 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/dummy/*.c")
|
|
endif()
|
|
if(NOT HAVE_SDL_HAPTIC)
|
|
set(SDL_HAPTIC_DUMMY 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/haptic/dummy/*.c")
|
|
endif()
|
|
if(NOT HAVE_SDL_SENSORS)
|
|
set(SDL_SENSOR_DUMMY 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/sensor/dummy/*.c")
|
|
endif()
|
|
if(NOT HAVE_SDL_LOADSO)
|
|
set(SDL_LOADSO_DUMMY 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/loadso/dummy/*.c")
|
|
endif()
|
|
if(NOT HAVE_SDL_FILESYSTEM)
|
|
set(SDL_FILESYSTEM_DUMMY 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/dummy/*.c")
|
|
endif()
|
|
if(NOT HAVE_SDL_STORAGE)
|
|
set(SDL_STORAGE_GENERIC 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/storage/generic/*.c")
|
|
endif()
|
|
if(NOT HAVE_SDL_FSOPS)
|
|
set(SDL_FSOPS_DUMMY 1)
|
|
sdl_sources("${SDL3_SOURCE_DIR}/src/filesystem/dummy/SDL_sysfsops.c")
|
|
endif()
|
|
if(NOT HAVE_SDL_LOCALE)
|
|
set(SDL_LOCALE_DUMMY 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/dummy/*.c")
|
|
endif()
|
|
if(NOT HAVE_SDL_MISC)
|
|
set(SDL_MISC_DUMMY 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/dummy/*.c")
|
|
endif()
|
|
if(NOT HAVE_SDL_DIALOG)
|
|
set(SDL_DIALOG_DUMMY 1)
|
|
sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/dummy/SDL_dummydialog.c)
|
|
endif()
|
|
if(NOT HAVE_SDL_PROCESS)
|
|
set(SDL_PROCESS_DUMMY 1)
|
|
sdl_glob_sources(${SDL3_SOURCE_DIR}/src/process/dummy/*.c)
|
|
endif()
|
|
if(NOT HAVE_SDL_TRAY)
|
|
set(SDL_TRAY_DUMMY 1)
|
|
sdl_glob_sources(${SDL3_SOURCE_DIR}/src/tray/dummy/*.c)
|
|
endif()
|
|
if(NOT HAVE_CAMERA)
|
|
set(SDL_CAMERA_DRIVER_DUMMY 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/camera/dummy/*.c")
|
|
endif()
|
|
|
|
# We always need to have threads and timers around
|
|
if(NOT HAVE_SDL_THREADS)
|
|
# The emscripten platform has been carefully vetted to work without threads
|
|
if(EMSCRIPTEN)
|
|
set(SDL_THREADS_DISABLED 1)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/thread/generic/*.c")
|
|
else()
|
|
message(FATAL_ERROR "Threads are needed by many SDL subsystems and may not be disabled")
|
|
endif()
|
|
endif()
|
|
if(NOT HAVE_SDL_TIMERS)
|
|
message(FATAL_ERROR "Timers are needed by many SDL subsystems and may not be disabled")
|
|
endif()
|
|
|
|
# Most platforms use this.
|
|
if(NOT HAVE_SDL_MAIN_CALLBACKS)
|
|
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/main/generic/*.c")
|
|
endif()
|
|
|
|
# config variables may contain generator expression, so we need to generate SDL_build_config.h in 2 steps:
|
|
# 1. replace all `#cmakedefine`'s and `@abc@`
|
|
configure_file("${SDL3_SOURCE_DIR}/include/build_config/SDL_build_config.h.cmake"
|
|
"${SDL3_BINARY_DIR}/CMakeFiles/SDL_build_config.h.intermediate")
|
|
# 2. generate SDL_build_config.h in an build_type-dependent folder (which should be first in the include search path)
|
|
file(GENERATE
|
|
OUTPUT "${SDL3_BINARY_DIR}/include-config-$<LOWER_CASE:$<CONFIG>>/build_config/SDL_build_config.h"
|
|
INPUT "${SDL3_BINARY_DIR}/CMakeFiles/SDL_build_config.h.intermediate"
|
|
)
|
|
|
|
file(GLOB SDL3_INCLUDE_FILES "${SDL3_SOURCE_DIR}/include/SDL3/*.h")
|
|
file(GLOB SDL3_TEST_INCLUDE_FILES "${SDL3_SOURCE_DIR}/include/SDL3/SDL_test*.h")
|
|
foreach(_hdr IN LISTS SDL3_INCLUDE_FILES)
|
|
if(_hdr MATCHES ".*SDL_revision\\.h" OR _hdr MATCHES ".*SDL_test.*\\.h")
|
|
list(REMOVE_ITEM SDL3_INCLUDE_FILES "${_hdr}")
|
|
endif()
|
|
endforeach()
|
|
|
|
# If REVISION.txt exists, then we are building from a SDL release.
|
|
# SDL_revision.h(.cmake) in source releases have SDL_REVISION baked into them.
|
|
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/REVISION.txt")
|
|
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/REVISION.txt" revisions)
|
|
list(GET revisions 0 revisions_0)
|
|
string(STRIP "${revisions_0}" SDL_REVISION)
|
|
else()
|
|
set(SDL_REVISION "" CACHE STRING "Custom SDL revision (only used when REVISION.txt does not exist)")
|
|
endif()
|
|
if(NOT SDL_REVISION)
|
|
# If SDL_REVISION is not overrided, use git to describe
|
|
git_describe(SDL_REVISION_GIT)
|
|
set(SDL_REVISION "SDL3-${SDL3_VERSION}-${SDL_REVISION_GIT}")
|
|
endif()
|
|
|
|
execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory "${SDL3_BINARY_DIR}/include-revision/SDL3")
|
|
configure_file(include/build_config/SDL_revision.h.cmake include-revision/SDL3/SDL_revision.h @ONLY)
|
|
list(APPEND SDL3_INCLUDE_FILES "${SDL3_BINARY_DIR}/include-revision/SDL3/SDL_revision.h")
|
|
|
|
if(SDL_FRAMEWORK)
|
|
# With Apple frameworks, headers in the PUBLIC_HEADER property also need to be added as sources
|
|
list(APPEND SDL3_INCLUDE_FILES ${SDL3_TEST_INCLUDE_FILES})
|
|
sdl_sources(${SDL3_INCLUDE_FILES})
|
|
endif()
|
|
|
|
if((CMAKE_STATIC_LIBRARY_PREFIX STREQUAL "" AND CMAKE_STATIC_LIBRARY_SUFFIX STREQUAL ".lib") OR SDL_FRAMEWORK)
|
|
# - Avoid conflict between the dll import library and the static library
|
|
# - Create SDL3-static Apple Framework
|
|
set(sdl_static_libname "SDL3-static")
|
|
else()
|
|
set(sdl_static_libname "SDL3")
|
|
endif()
|
|
|
|
macro(check_add_debug_flag FLAG SUFFIX)
|
|
check_c_compiler_flag(${FLAG} HAS_C_FLAG_${SUFFIX})
|
|
if(HAS_C_FLAG_${SUFFIX})
|
|
string(APPEND CMAKE_C_FLAGS_DEBUG " ${FLAG}")
|
|
endif()
|
|
|
|
if(CMAKE_CXX_COMPILER)
|
|
check_cxx_compiler_flag(${FLAG} HAS_CXX_${SUFFIX})
|
|
if(HAS_CXX_${SUFFIX})
|
|
string(APPEND CMAKE_CXX_FLAGS_DEBUG " ${FLAG}")
|
|
endif()
|
|
endif()
|
|
endmacro()
|
|
|
|
macro(asan_check_add_debug_flag ASAN_FLAG)
|
|
check_add_debug_flag("-fsanitize=${ASAN_FLAG}" "${ASAN_FLAG}")
|
|
if(HAS_C_${ASAN_FLAG} OR HAS_CXX_${ASAN_FLAG})
|
|
set(HAVE_ASAN ON)
|
|
endif()
|
|
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}")
|
|
|
|
cmake_push_check_state()
|
|
list(APPEND CMAKE_REQUIRED_LIBRARIES ${FLAG} asan)
|
|
|
|
check_c_compiler_flag (${FLAG} HAS_C_FLAG_${ASAN_FLAG})
|
|
if (HAS_C_FLAG_${ASAN_FLAG})
|
|
string(APPEND CMAKE_C_FLAGS_DEBUG " ${FLAG}")
|
|
endif()
|
|
|
|
if(CMAKE_CXX_COMPILER)
|
|
check_cxx_compiler_flag (${FLAG} HAS_CXX_FLAG_${ASAN_FLAG})
|
|
if (HAS_CXX_${ASAN_FLAG})
|
|
string(APPEND CMAKE_CXX_FLAGS_DEBUG " ${FLAG}")
|
|
endif()
|
|
endif()
|
|
|
|
cmake_pop_check_state()
|
|
if(HAS_C_${ASAN_FLAG} OR HAS_CXX_${ASAN_FLAG})
|
|
set(HAVE_ASAN ON)
|
|
endif()
|
|
endmacro()
|
|
|
|
# enable AddressSanitizer if supported
|
|
if(SDL_ASAN)
|
|
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.
|
|
if(NOT USE_CLANG OR CMAKE_BUILD_TYPE STREQUAL "")
|
|
asan_check_add_debug_flag("object-size")
|
|
endif()
|
|
endif()
|
|
|
|
if(SDL_CCACHE)
|
|
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()
|
|
else()
|
|
set(HAVE_CCACHE OFF)
|
|
endif()
|
|
|
|
if(SDL_CLANG_TIDY)
|
|
cmake_minimum_required(VERSION 3.6)
|
|
find_program(CLANG_TIDY_BINARY clang-tidy)
|
|
|
|
if(CLANG_TIDY_BINARY)
|
|
set(HAVE_CLANG_TIDY ON)
|
|
get_clang_tidy_ignored_files(CLANG_TIDY_IGNORED_FILES)
|
|
set(CLANG_TIDY_COMMAND "${CLANG_TIDY_BINARY}" "-extra-arg=-Wno-unknown-warning-option" "--line-filter=[${CLANG_TIDY_IGNORED_FILES}]")
|
|
if(SDL_WERROR)
|
|
list(APPEND CLANG_TIDY_COMMAND "--warnings-as-errors=*")
|
|
endif()
|
|
set(CMAKE_C_CLANG_TIDY ${CLANG_TIDY_COMMAND})
|
|
set(CMAKE_CXX_CLANG_TIDY ${CLANG_TIDY_COMMAND})
|
|
set(CMAKE_OBJC_CLANG_TIDY ${CLANG_TIDY_COMMAND})
|
|
get_property(shared_sources TARGET SDL3-collector PROPERTY INTERFACE_SOURCES)
|
|
set_source_files_properties(${shared_sources} PROPERTIES SKIP_PRECOMPILE_HEADERS TRUE)
|
|
file(GLOB STDLIB_SOURCES "${SDL3_SOURCE_DIR}/src/stdlib/*.c")
|
|
set_property(SOURCE ${STDLIB_SOURCES} APPEND PROPERTY COMPILE_DEFINITIONS "SDL_DISABLE_ANALYZE_MACROS")
|
|
else()
|
|
set(HAVE_CLANG_TIDY OFF)
|
|
endif()
|
|
endif()
|
|
|
|
if(SDL_TESTS)
|
|
set(HAVE_TESTS ON)
|
|
endif()
|
|
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
set(ARCH_64 TRUE)
|
|
else()
|
|
set(ARCH_64 FALSE)
|
|
endif()
|
|
|
|
if(ANDROID)
|
|
sdl_include_directories(PRIVATE SYSTEM "${ANDROID_NDK}/sources/android/cpufeatures")
|
|
endif()
|
|
|
|
if(APPLE)
|
|
cmake_push_check_state(RESET)
|
|
check_c_compiler_flag(-fobjc-arc COMPILER_SUPPORTS_FOBJC_ARC)
|
|
cmake_pop_check_state()
|
|
if(NOT COMPILER_SUPPORTS_FOBJC_ARC)
|
|
message(FATAL_ERROR "Compiler does not support -fobjc-arc: this is required on Apple platforms")
|
|
endif()
|
|
sdl_compile_options(PRIVATE "-fobjc-arc")
|
|
endif()
|
|
|
|
if(PS2)
|
|
sdl_compile_options(PRIVATE "-Wno-error=declaration-after-statement")
|
|
endif()
|
|
|
|
if(NOT SDL_LIBC)
|
|
if(MSVC)
|
|
set(saved_CMAKE_TRY_COMPILE_TARGET_TYPE "${CMAKE_TRY_COMPILE_TARGET_TYPE}")
|
|
cmake_push_check_state(RESET)
|
|
set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
|
|
check_c_compiler_flag("/Zl" COMPILER_SUPPORTS_Zl)
|
|
cmake_pop_check_state()
|
|
set(CMAKE_TRY_COMPILE_TARGET_TYPE "${saved_CMAKE_TRY_COMPILE_TARGET_TYPE}")
|
|
if(COMPILER_SUPPORTS_Zl)
|
|
# /Zl omits the default C runtime library name from the .obj file.
|
|
sdl_compile_options(PRIVATE "$<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:/Zl>")
|
|
if(TARGET SDL3_test)
|
|
target_compile_options(SDL3_test PRIVATE "/Zl")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if(APPLE)
|
|
get_property(sources TARGET SDL3-collector PROPERTY INTERFACE_SOURCES)
|
|
foreach(SOURCE_FILE IN LISTS sources)
|
|
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()
|
|
if(NOT FILE_EXTENSION STREQUAL ".c" AND NOT FILE_EXTENSION STREQUAL ".cpp")
|
|
set_property(SOURCE ${SOURCE_FILE} PROPERTY SKIP_PRECOMPILE_HEADERS 1)
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
|
|
# Disable precompiled headers on SDL_dynapi.c to avoid applying dynapi overrides
|
|
set_source_files_properties(src/dynapi/SDL_dynapi.c PROPERTIES SKIP_PRECOMPILE_HEADERS 1)
|
|
|
|
set(SDL_FRAMEWORK_RESOURCES
|
|
Xcode/SDL/pkg-support/resources/ReadMe.txt
|
|
LICENSE.txt
|
|
)
|
|
if(SDL_FRAMEWORK)
|
|
sdl_sources(${SDL_FRAMEWORK_RESOURCES})
|
|
endif()
|
|
|
|
add_library(SDL3_Headers INTERFACE)
|
|
add_library(SDL3::Headers ALIAS SDL3_Headers)
|
|
set_property(TARGET SDL3_Headers PROPERTY EXPORT_NAME "Headers")
|
|
target_include_directories(SDL3_Headers
|
|
INTERFACE
|
|
"$<BUILD_INTERFACE:${SDL3_BINARY_DIR}/include-revision>"
|
|
"$<BUILD_INTERFACE:${SDL3_SOURCE_DIR}/include>"
|
|
)
|
|
if(SDL_FRAMEWORK)
|
|
target_include_directories(SDL3_Headers
|
|
INTERFACE
|
|
"$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/SDL3.framework/Headers>"
|
|
)
|
|
# Add `-F <parent folder of SDL3.framework>` to make sure `#include "SDL3/..."` works.
|
|
target_compile_options(SDL3_Headers
|
|
INTERFACE
|
|
"$<INSTALL_INTERFACE:SHELL:-F $<INSTALL_PREFIX>>"
|
|
)
|
|
else()
|
|
target_include_directories(SDL3_Headers
|
|
INTERFACE
|
|
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
|
|
)
|
|
endif()
|
|
|
|
if(SDL_SHARED)
|
|
set_target_properties(SDL3-shared PROPERTIES
|
|
OUTPUT_NAME "SDL3"
|
|
POSITION_INDEPENDENT_CODE TRUE
|
|
LINK_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/dynapi/SDL_dynapi.sym"
|
|
INTERFACE_LINK_DEPENDS "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/dynapi/SDL_dynapi.sym>"
|
|
WINDOWS_EXPORT_ALL_SYMBOLS FALSE
|
|
DEFINE_SYMBOL "DLL_EXPORT"
|
|
)
|
|
if(HAVE_GCC_FVISIBILITY)
|
|
set_target_properties(SDL3-shared PROPERTIES
|
|
C_VISIBILITY_PRESET "hidden"
|
|
CXX_VISIBILITY_PRESET "hidden"
|
|
OBJC_VISIBILITY_PRESET "hidden"
|
|
)
|
|
endif()
|
|
if(NOT SDL_LIBC)
|
|
if(MSVC AND NOT MSVC_CLANG)
|
|
# Don't try to link with the default set of libraries.
|
|
# Note: The clang toolset for Visual Studio does not support /NODEFAULTLIB.
|
|
target_link_options(SDL3-shared PRIVATE "/NODEFAULTLIB")
|
|
if(SDL_CPU_ARM32)
|
|
# linking to msvcrt.lib avoid unresolved external symbols
|
|
# (__rt_sdiv, __rt_udiv, __rt_sdiv64, _rt_udiv64, __dtou64, __u64tod, __i64tos)
|
|
target_link_libraries(SDL3-shared PRIVATE msvcrt.lib)
|
|
endif()
|
|
find_library(HAVE_ONECORE_LIB NAMES "onecore.lib")
|
|
if(HAVE_ONECORE_LIB)
|
|
# SDL_malloc.c: __imp_MapViewOfFileNuma2 referenced in function MapViewOfFile2
|
|
target_link_libraries(SDL3-shared PRIVATE onecore.lib)
|
|
endif()
|
|
find_library(HAVE_VOLATILEACCESSU_LIB NAMES "volatileaccessu.lib")
|
|
if(HAVE_VOLATILEACCESSU_LIB)
|
|
# SDL_malloc.c : RtlSetVolatileMemory referenced in function RtlFillVolatileMemory
|
|
# SDL_malloc.c : RtlFillDeviceMemory referenced in function RtlZeroDeviceMemory
|
|
target_link_libraries(SDL3-shared PRIVATE volatileaccessu.lib)
|
|
endif()
|
|
endif()
|
|
if(HAS_Q_NO_USE_LIBIRC)
|
|
target_compile_options(SDL3-shared PRIVATE /Q_no-use-libirc)
|
|
endif()
|
|
endif()
|
|
if(APPLE)
|
|
cmake_minimum_required(VERSION 3.17)
|
|
set_target_properties(SDL3-shared PROPERTIES
|
|
MACOSX_RPATH TRUE
|
|
FRAMEWORK "${SDL_FRAMEWORK}"
|
|
SOVERSION "${SDL_SO_VERSION_MAJOR}"
|
|
MACHO_COMPATIBILITY_VERSION "${SDL_DYLIB_COMPAT_VERSION}"
|
|
MACHO_CURRENT_VERSION "${SDL_DYLIB_CURRENT_VERSION}"
|
|
)
|
|
if(SDL_FRAMEWORK)
|
|
set_target_properties(SDL3-shared PROPERTIES
|
|
PUBLIC_HEADER "${SDL3_INCLUDE_FILES}"
|
|
FRAMEWORK_VERSION "${SDL_FRAMEWORK_VERSION}"
|
|
MACOSX_FRAMEWORK_IDENTIFIER "org.libsdl.SDL3"
|
|
RESOURCE "${SDL_FRAMEWORK_RESOURCES}"
|
|
)
|
|
endif()
|
|
elseif(UNIX AND NOT ANDROID)
|
|
set_target_properties(SDL3-shared PROPERTIES
|
|
VERSION "${SDL_SO_VERSION}"
|
|
SOVERSION "${SDL_SO_VERSION_MAJOR}"
|
|
)
|
|
else()
|
|
if(WINDOWS OR CYGWIN)
|
|
set_target_properties(SDL3-shared PROPERTIES
|
|
PREFIX ""
|
|
)
|
|
endif()
|
|
endif()
|
|
target_link_libraries(SDL3-shared PRIVATE ${SDL_CMAKE_DEPENDS})
|
|
target_include_directories(SDL3-shared
|
|
PRIVATE
|
|
"$<BUILD_INTERFACE:${SDL3_BINARY_DIR}/include-config-$<LOWER_CASE:$<CONFIG>>>/build_config"
|
|
"$<BUILD_INTERFACE:${SDL3_SOURCE_DIR}/src>"
|
|
)
|
|
target_link_libraries(SDL3-shared PUBLIC $<TARGET_NAME:SDL3::Headers>)
|
|
if(MINGW OR CYGWIN)
|
|
target_link_options(SDL3-shared PRIVATE -static-libgcc)
|
|
endif()
|
|
# Use `Compatible Interface Properties` to:
|
|
# - allow consumers to enforce a shared/static library
|
|
# - block linking to SDL libraries of different major version
|
|
set_property(TARGET SDL3-shared APPEND PROPERTY COMPATIBLE_INTERFACE_BOOL SDL3_SHARED)
|
|
set_property(TARGET SDL3-shared PROPERTY INTERFACE_SDL3_SHARED TRUE)
|
|
set_property(TARGET SDL3-shared APPEND PROPERTY COMPATIBLE_INTERFACE_STRING "SDL_VERSION")
|
|
set_property(TARGET SDL3-shared PROPERTY INTERFACE_SDL_VERSION "SDL${SDL3_VERSION_MAJOR}")
|
|
if(NOT CMAKE_VERSION VERSION_LESS "3.16")
|
|
target_precompile_headers(SDL3-shared PRIVATE "$<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:${PROJECT_SOURCE_DIR}/src/SDL_internal.h>")
|
|
endif()
|
|
endif()
|
|
|
|
if(SDL_STATIC)
|
|
set_target_properties(SDL3-static PROPERTIES
|
|
OUTPUT_NAME "${sdl_static_libname}"
|
|
)
|
|
target_compile_definitions(SDL3-static PRIVATE SDL_STATIC_LIB)
|
|
target_link_libraries(SDL3-static PRIVATE ${SDL_CMAKE_DEPENDS})
|
|
target_include_directories(SDL3-static
|
|
PRIVATE
|
|
"$<BUILD_INTERFACE:${SDL3_BINARY_DIR}/include-config-$<LOWER_CASE:$<CONFIG>>>/build_config"
|
|
"$<BUILD_INTERFACE:${SDL3_SOURCE_DIR}/src>"
|
|
)
|
|
target_link_libraries(SDL3-static PUBLIC $<TARGET_NAME:SDL3::Headers>)
|
|
# Use `Compatible Interface Properties` to:
|
|
# - allow consumers to enforce a shared/static library
|
|
# - block linking to SDL libraries of different major version
|
|
set_property(TARGET SDL3-static APPEND PROPERTY COMPATIBLE_INTERFACE_BOOL SDL3_SHARED)
|
|
set_property(TARGET SDL3-static PROPERTY INTERFACE_SDL3_SHARED FALSE)
|
|
set_property(TARGET SDL3-static APPEND PROPERTY COMPATIBLE_INTERFACE_STRING "SDL_VERSION")
|
|
set_property(TARGET SDL3-static PROPERTY INTERFACE_SDL_VERSION "SDL${SDL3_VERSION_MAJOR}")
|
|
if(NOT CMAKE_VERSION VERSION_LESS "3.16")
|
|
target_precompile_headers(SDL3-static PRIVATE "$<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:${PROJECT_SOURCE_DIR}/src/SDL_internal.h>")
|
|
endif()
|
|
endif()
|
|
|
|
sdl_compile_definitions(
|
|
PRIVATE
|
|
"SDL_BUILD_MAJOR_VERSION=${PROJECT_VERSION_MAJOR}"
|
|
"SDL_BUILD_MINOR_VERSION=${PROJECT_VERSION_MINOR}"
|
|
"SDL_BUILD_MICRO_VERSION=${PROJECT_VERSION_PATCH}"
|
|
)
|
|
|
|
##### Tests #####
|
|
|
|
if(SDL_TEST_LIBRARY)
|
|
file(GLOB TEST_SOURCES "${SDL3_SOURCE_DIR}/src/test/*.c")
|
|
target_sources(SDL3_test PRIVATE ${TEST_SOURCES})
|
|
if(APPLE)
|
|
set_target_properties(SDL3_test PROPERTIES
|
|
FRAMEWORK "${SDL_FRAMEWORK}"
|
|
)
|
|
if(SDL_FRAMEWORK)
|
|
set_target_properties(SDL3_test PROPERTIES
|
|
FRAMEWORK_VERSION "${SDL_FRAMEWORK_VERSION}"
|
|
MACOSX_FRAMEWORK_IDENTIFIER "org.libsdl.SDL3_test"
|
|
RESOURCE "${SDL_FRAMEWORK_RESOURCES}"
|
|
)
|
|
endif()
|
|
endif()
|
|
target_link_libraries(SDL3_test PUBLIC $<TARGET_NAME:SDL3::Headers>)
|
|
# FIXME: get rid of EXTRA_TEST_LIBS variable
|
|
target_link_libraries(SDL3_test PRIVATE ${EXTRA_TEST_LIBS})
|
|
set_property(TARGET SDL3_test APPEND PROPERTY COMPATIBLE_INTERFACE_STRING "SDL_VERSION")
|
|
set_property(TARGET SDL3_test PROPERTY INTERFACE_SDL_VERSION "SDL${SDL3_VERSION_MAJOR}")
|
|
endif()
|
|
|
|
##### Configure installation folders #####
|
|
|
|
if(WINDOWS AND NOT MINGW)
|
|
set(SDL_INSTALL_CMAKEDIR_ROOT_DEFAULT "cmake")
|
|
else()
|
|
set(SDL_INSTALL_CMAKEDIR_ROOT_DEFAULT "${CMAKE_INSTALL_LIBDIR}/cmake/SDL3")
|
|
endif()
|
|
set(SDL_INSTALL_CMAKEDIR_ROOT "${SDL_INSTALL_CMAKEDIR_ROOT_DEFAULT}" CACHE STRING "Root folder where to install SDL3Config.cmake related files (SDL3 subfolder for MSVC projects)")
|
|
|
|
if(FREEBSD)
|
|
# FreeBSD uses ${PREFIX}/libdata/pkgconfig
|
|
set(SDL_PKGCONFIG_INSTALLDIR "libdata/pkgconfig")
|
|
else()
|
|
set(SDL_PKGCONFIG_INSTALLDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
|
endif()
|
|
|
|
if(WINDOWS AND NOT MINGW)
|
|
set(SDL_INSTALL_CMAKEDIR "${SDL_INSTALL_CMAKEDIR_ROOT}")
|
|
set(SDL_INSTALL_LICENSEDIR "licenses/SDL3")
|
|
set(SDL_INSTALL_HEADERSDIR "${CMAKE_INSTALL_INCLUDEDIR}/SDL3")
|
|
elseif(SDL_FRAMEWORK)
|
|
set(SDL_INSTALL_CMAKEDIR "SDL3.framework/Versions/${SDL_FRAMEWORK_VERSION}/Resources/CMake")
|
|
set(SDL_INSTALL_LICENSEDIR "Resources")
|
|
set(SDL_INSTALL_HEADERSDIR "Headers")
|
|
else()
|
|
set(SDL_INSTALL_CMAKEDIR "${SDL_INSTALL_CMAKEDIR_ROOT}")
|
|
set(SDL_INSTALL_LICENSEDIR "${CMAKE_INSTALL_DATAROOTDIR}/licenses/${PROJECT_NAME}")
|
|
set(SDL_INSTALL_HEADERSDIR "${CMAKE_INSTALL_INCLUDEDIR}/SDL3")
|
|
endif()
|
|
|
|
if(SDL_FRAMEWORK)
|
|
set(SDL_SDL_INSTALL_RESOURCEDIR "SDL3.framework/Resources")
|
|
set(SDL_SDL_INSTALL_CMAKEDIR "${SDL_SDL_INSTALL_RESOURCEDIR}/CMake")
|
|
set(SDL_SDL_INSTALL_REAL_RESOURCEDIR "SDL3.framework/Versions/${SDL_FRAMEWORK_VERSION}/Resources")
|
|
set(SDL_SDL_INSTALL_REAL_CMAKEDIR "${SDL_SDL_INSTALL_REAL_RESOURCEDIR}/CMake")
|
|
|
|
set(SDL_SDLtest_INSTALL_RESOURCEDIR "SDL3_test.framework/Resources")
|
|
set(SDL_SDLtest_INSTALL_CMAKEDIR "${SDL_SDLtest_INSTALL_RESOURCEDIR}/CMake")
|
|
set(SDL_SDLtest_INSTALL_CMAKEFILENAME "SDL3_testConfig.cmake")
|
|
else()
|
|
set(SDL_SDL_INSTALL_RESOURCEDIR ".")
|
|
set(SDL_SDL_INSTALL_CMAKEDIR ${SDL_INSTALL_CMAKEDIR})
|
|
set(SDL_SDL_INSTALL_REAL_CMAKEDIR ${SDL_INSTALL_CMAKEDIR})
|
|
|
|
# Install SDL3*Targets.cmake files in lib/cmake/SDL3
|
|
set(SDL_SDLstatic_INSTALL_RESOURCEDIR ".")
|
|
set(SDL_SDLstatic_INSTALL_CMAKEDIR "${SDL_SDL_INSTALL_CMAKEDIR}")
|
|
set(SDL_SDLstatic_INSTALL_CMAKEFILENAME "SDL3staticTargets.cmake")
|
|
|
|
set(SDL_SDLtest_INSTALL_RESOURCEDIR ".")
|
|
set(SDL_SDLtest_INSTALL_CMAKEDIR "${SDL_SDL_INSTALL_CMAKEDIR}")
|
|
set(SDL_SDLtest_INSTALL_CMAKEFILENAME "SDL3testTargets.cmake")
|
|
endif()
|
|
|
|
export(TARGETS SDL3_Headers NAMESPACE "SDL3::" FILE "SDL3headersTargets.cmake")
|
|
|
|
if(SDL_SHARED)
|
|
export(TARGETS SDL3-shared NAMESPACE "SDL3::" FILE "SDL3sharedTargets.cmake")
|
|
endif()
|
|
|
|
if(SDL_STATIC)
|
|
export(TARGETS SDL3-static NAMESPACE "SDL3::" FILE "SDL3staticTargets.cmake")
|
|
endif()
|
|
|
|
if(SDL_TEST_LIBRARY)
|
|
export(TARGETS SDL3_test NAMESPACE "SDL3::" FILE "SDL3testTargets.cmake")
|
|
endif()
|
|
|
|
sdl_cmake_config_find_pkg_config_commands(SDL_FIND_PKG_CONFIG_COMMANDS
|
|
COLLECTOR SDL3-collector
|
|
CONFIG_COMPONENT_FOUND_NAME SDL3_SDL3-static_FOUND
|
|
)
|
|
sdl_cmake_config_find_pkg_config_commands(SDL_TEST_FIND_PKG_CONFIG_COMMANDS
|
|
COLLECTOR SDL3_test-collector
|
|
CONFIG_COMPONENT_FOUND_NAME SDL3_SDL3_test_FOUND
|
|
)
|
|
|
|
include(CMakePackageConfigHelpers)
|
|
configure_package_config_file(cmake/SDL3Config.cmake.in SDL3Config.cmake
|
|
NO_SET_AND_CHECK_MACRO
|
|
PATH_VARS CMAKE_INSTALL_PREFIX
|
|
INSTALL_DESTINATION "${SDL_SDL_INSTALL_CMAKEDIR}"
|
|
)
|
|
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/SDL3ConfigVersion.cmake"
|
|
COMPATIBILITY AnyNewerVersion
|
|
)
|
|
|
|
sdl_cmake_config_required_modules(sdl_cmake_modules)
|
|
if(sdl_cmake_modules)
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${sdl_cmake_modules} "${SDL3_BINARY_DIR}")
|
|
endif()
|
|
|
|
if(NOT SDL_DISABLE_INSTALL)
|
|
|
|
##### sdl3.pc #####
|
|
configure_sdl3_pc()
|
|
if(NOT SDL_FRAMEWORK)
|
|
install(FILES ${SDL3_BINARY_DIR}/sdl3.pc DESTINATION "${SDL_PKGCONFIG_INSTALLDIR}")
|
|
endif()
|
|
|
|
##### Installation targets #####()
|
|
|
|
install(TARGETS SDL3_Headers EXPORT SDL3headersTargets)
|
|
|
|
if(SDL_SHARED)
|
|
install(TARGETS SDL3-shared EXPORT SDL3sharedTargets
|
|
PUBLIC_HEADER DESTINATION "${SDL_INSTALL_HEADERSDIR}"
|
|
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
|
FRAMEWORK DESTINATION "."
|
|
RESOURCE DESTINATION "${SDL_SDL_INSTALL_RESOURCEDIR}"
|
|
)
|
|
if(MSVC)
|
|
SDL_install_pdb(SDL3-shared "${CMAKE_INSTALL_BINDIR}")
|
|
endif()
|
|
endif()
|
|
|
|
if(SDL_STATIC)
|
|
install(TARGETS SDL3-static EXPORT SDL3staticTargets
|
|
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
FRAMEWORK DESTINATION "."
|
|
RESOURCE DESTINATION "${SDL_SDLstatic_INSTALL_RESOURCEDIR}"
|
|
)
|
|
if(MSVC)
|
|
SDL_install_pdb(SDL3-static "${CMAKE_INSTALL_LIBDIR}")
|
|
endif()
|
|
endif()
|
|
|
|
if(SDL_TEST_LIBRARY)
|
|
install(TARGETS SDL3_test EXPORT SDL3testTargets
|
|
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
FRAMEWORK DESTINATION "."
|
|
RESOURCE DESTINATION "${SDL_SDLtest_INSTALL_RESOURCEDIR}"
|
|
)
|
|
if(MSVC)
|
|
SDL_install_pdb(SDL3_test "${CMAKE_INSTALL_LIBDIR}")
|
|
endif()
|
|
endif()
|
|
|
|
##### Install CMake Targets #####
|
|
|
|
install(EXPORT SDL3headersTargets
|
|
FILE "SDL3headersTargets.cmake"
|
|
NAMESPACE SDL3::
|
|
DESTINATION "${SDL_SDL_INSTALL_CMAKEDIR}"
|
|
)
|
|
|
|
if(SDL_SHARED)
|
|
install(EXPORT SDL3sharedTargets
|
|
FILE "SDL3sharedTargets.cmake"
|
|
NAMESPACE SDL3::
|
|
DESTINATION "${SDL_SDL_INSTALL_CMAKEDIR}"
|
|
)
|
|
endif()
|
|
|
|
if(SDL_STATIC)
|
|
install(EXPORT SDL3staticTargets
|
|
FILE "${SDL_SDLstatic_INSTALL_CMAKEFILENAME}"
|
|
NAMESPACE SDL3::
|
|
DESTINATION "${SDL_SDLstatic_INSTALL_CMAKEDIR}"
|
|
)
|
|
endif()
|
|
|
|
if(SDL_TEST_LIBRARY)
|
|
install(EXPORT SDL3testTargets
|
|
FILE "${SDL_SDLtest_INSTALL_CMAKEFILENAME}"
|
|
NAMESPACE SDL3::
|
|
DESTINATION "${SDL_SDLtest_INSTALL_CMAKEDIR}"
|
|
)
|
|
endif()
|
|
|
|
install(FILES
|
|
${CMAKE_CURRENT_BINARY_DIR}/SDL3Config.cmake
|
|
${CMAKE_CURRENT_BINARY_DIR}/SDL3ConfigVersion.cmake
|
|
${sdl_cmake_modules}
|
|
DESTINATION "${SDL_SDL_INSTALL_REAL_CMAKEDIR}"
|
|
)
|
|
|
|
if(NOT SDL_FRAMEWORK)
|
|
install(FILES ${SDL3_INCLUDE_FILES}
|
|
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/SDL3"
|
|
)
|
|
if(SDL_TEST_LIBRARY)
|
|
install(FILES ${SDL3_TEST_INCLUDE_FILES}
|
|
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/SDL3"
|
|
)
|
|
endif()
|
|
|
|
install(FILES "LICENSE.txt" DESTINATION "${SDL_INSTALL_LICENSEDIR}")
|
|
endif()
|
|
|
|
if(NOT SDL_DISABLE_INSTALL_CPACK)
|
|
if(SDL_FRAMEWORK)
|
|
set(CPACK_GENERATOR "DragNDrop")
|
|
elseif(MSVC)
|
|
set(CPACK_GENERATOR "ZIP")
|
|
else()
|
|
set(CPACK_GENERATOR "TGZ")
|
|
endif()
|
|
configure_file(cmake/CPackProjectConfig.cmake.in CPackProjectConfig.cmake @ONLY)
|
|
set(CPACK_PROJECT_CONFIG_FILE "${SDL3_BINARY_DIR}/CPackProjectConfig.cmake")
|
|
# CPACK_SOURCE_PACKAGE_FILE_NAME must end with "-src" (so we can block creating a source archive)
|
|
set(CPACK_SOURCE_PACKAGE_FILE_NAME "SDL${PROJECT_VERSION_MAJOR}-${PROJECT_VERSION}-src")
|
|
set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}/dist")
|
|
include(CPack)
|
|
endif()
|
|
|
|
if(ANDROID)
|
|
if(TARGET SDL3-jar)
|
|
set(SDL_INSTALL_JAVADIR "${CMAKE_INSTALL_DATAROOTDIR}/java" CACHE PATH "Path where to install java clases + java sources")
|
|
set(PROGUARD_RULES_PATH "${CMAKE_CURRENT_SOURCE_DIR}/android-project/app/proguard-rules.pro")
|
|
# install_jar or $<TARGET_PROPERTY:SDL3-jar,INSTALL_FILES> does not work on Windows: a SDL3.jar symlink is not generated
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/SDL3-${SDL3_VERSION}.jar"
|
|
DESTINATION "${SDL_INSTALL_JAVADIR}/SDL3")
|
|
install(FILES "${PROGUARD_RULES_PATH}" RENAME "proguard.txt"
|
|
DESTINATION "${SDL_INSTALL_JAVADIR}/SDL3")
|
|
configure_package_config_file(cmake/SDL3jarTargets.cmake.in SDL3jarTargets.cmake
|
|
INSTALL_DESTINATION "${SDL_SDL_INSTALL_CMAKEDIR}"
|
|
PATH_VARS SDL_INSTALL_JAVADIR
|
|
NO_CHECK_REQUIRED_COMPONENTS_MACRO
|
|
INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}"
|
|
)
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/SDL3jarTargets.cmake"
|
|
DESTINATION "${SDL_SDL_INSTALL_CMAKEDIR}"
|
|
)
|
|
endif()
|
|
if(TARGET SDL3-javasources)
|
|
install(FILES "${SDL3_BINARY_DIR}/SDL3-${SDL3_VERSION}-sources.jar"
|
|
DESTINATION "${SDL_INSTALL_JAVADIR}/SDL3")
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT SDL_DISABLE_INSTALL_DOCS)
|
|
SDL_generate_manpages(
|
|
HEADERS_DIR "${PROJECT_SOURCE_DIR}/include/SDL3"
|
|
SYMBOL "SDL_Init"
|
|
WIKIHEADERS_PL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/build-scripts/wikiheaders.pl"
|
|
REVISION "${SDL_REVISION}"
|
|
)
|
|
if(TARGET SDL3-javadoc)
|
|
set(SDL_INSTALL_JAVADOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/javadoc" CACHE PATH "Path where to install SDL3 javadoc")
|
|
install(FILES "${SDL3_BINARY_DIR}/SDL3-${SDL3_VERSION}-javadoc.jar"
|
|
DESTINATION "${SDL_INSTALL_JAVADOCDIR}/SDL3")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
##### Uninstall target #####
|
|
|
|
if(NOT SDL_DISABLE_UNINSTALL)
|
|
if(NOT TARGET uninstall)
|
|
configure_file(cmake/cmake_uninstall.cmake.in cmake_uninstall.cmake IMMEDIATE @ONLY)
|
|
|
|
add_custom_target(uninstall
|
|
COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
|
|
endif()
|
|
endif()
|
|
|
|
##### Tests subproject (must appear after the install/uninstall targets) #####
|
|
|
|
if(SDL_TESTS)
|
|
set(HAVE_TESTS ON)
|
|
enable_testing()
|
|
add_subdirectory(test)
|
|
endif()
|
|
|
|
##### Examples subproject (must appear after the install/uninstall targets) #####
|
|
|
|
if(SDL_EXAMPLES)
|
|
set(HAVE_EXAMPLES ON)
|
|
add_subdirectory(examples)
|
|
endif()
|
|
|
|
##### Fix Objective C builds #####
|
|
string(APPEND CMAKE_OBJC_FLAGS " ${CMAKE_C_FLAGS}")
|
|
|
|
SDL_PrintSummary()
|
|
debug_show_sdl_deps()
|