From 354a35c1d737b8a219d308738006d7d0552ed15b Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Mon, 12 Aug 2024 19:17:38 +0200 Subject: [PATCH] cmake: port back Apple changes from SDL3 --- .github/workflows/main.yml | 6 +++++- CMakeLists.txt | 28 ++++++++++++++-------------- cmake/sdlchecks.cmake | 2 +- cmake/sdlplatform.cmake | 10 ++++++---- 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 21ea7de3f9..7198dfb8bd 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -29,6 +29,7 @@ jobs: - { name: Ubuntu 22.04 (CMake), os: ubuntu-22.04, shell: sh } - { name: Ubuntu 22.04 (autotools), os: ubuntu-22.04, shell: sh, autotools: true } + - { name: iOS (CMake), os: macos-latest, shell: sh, cmake: '-DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_ARCHITECTURES="arm64"', cross: true, test-pkg-config: false } - { name: MacOS (CMake), os: macos-latest, shell: sh, cmake: '-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"' } - { name: MacOS (autotools), os: macos-latest, shell: sh, autotools: true } @@ -107,7 +108,7 @@ jobs: ${{ matrix.platform.source_cmd }} cmake --build build/ --config Release --verbose --parallel - name: Run build-time tests (CMake) - if: "! matrix.platform.autotools" + if: ${{ ! matrix.platform.autotools && !matrix.platform.cross }} run: | ${{ matrix.platform.source_cmd }} set -eu @@ -197,14 +198,17 @@ jobs: ${{ matrix.platform.source_cmd }} cmake -S cmake/test -B cmake_config_build -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ + ${{ matrix.platform.cmake }} \ -DCMAKE_PREFIX_PATH=${{ env.SDL2_DIR }} cmake --build cmake_config_build --verbose - name: Verify sdl2-config + if: ${{ !!matrix.platform.test-pkg-config }} run: | ${{ matrix.platform.source_cmd }} export PATH=${{ env.SDL2_DIR }}/bin:$PATH cmake/test/test_sdlconfig.sh - name: Verify sdl2.pc + if: ${{ !!matrix.platform.test-pkg-config }} run: | ${{ matrix.platform.source_cmd }} export PKG_CONFIG_PATH=${{ env.SDL2_DIR }}/lib/pkgconfig diff --git a/CMakeLists.txt b/CMakeLists.txt index a30a019a0c..514bd1192f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -198,7 +198,7 @@ endif() # so we'll just use libusb when it's available. libusb does not support iOS, # so we default to yes on iOS. # TODO: Windows can support libusb, the hid.c file just depends on Unix APIs -if((WINDOWS AND NOT WINDOWS_STORE) OR IOS OR TVOS OR ANDROID) +if((WINDOWS AND NOT WINDOWS_STORE) OR IOS OR TVOS OR VISIONOS OR WATCHOS OR ANDROID) set(HIDAPI_SKIP_LIBUSB TRUE) else() set(HIDAPI_SKIP_LIBUSB FALSE) @@ -244,7 +244,7 @@ endif() if(UNIX OR MINGW OR MSYS OR (USE_CLANG AND NOT WINDOWS) OR VITA OR PSP OR PS2 OR N3DS OR SDL_CPU_ARM64EC) set(OPT_DEF_LIBC ON) endif() -if(WINDOWS OR DARWIN OR MACOSX OR IOS OR TVOS) +if(WINDOWS OR MACOS OR IOS OR TVOS OR VISIONOS OR WATCHOS) set(SDL_SYSTEM_ICONV_DEFAULT OFF) else() set(SDL_SYSTEM_ICONV_DEFAULT ON) @@ -2076,7 +2076,7 @@ elseif(APPLE) # !!! 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(DARWIN OR MACOSX) + if(MACOS) set(SDL_FRAMEWORK_COCOA 1) set(SDL_FRAMEWORK_CARBON 1) endif() @@ -2090,12 +2090,12 @@ elseif(APPLE) set(HAVE_SDL_FILE TRUE) endif() - if(IOS OR TVOS) + if(IOS OR TVOS OR VISIONOS OR WATCHOS) file(GLOB SDLMAIN_SOURCES ${SDL2_SOURCE_DIR}/src/main/uikit/*.c) endif() if(SDL_MISC) - if(IOS OR TVOS) + if(IOS OR TVOS OR VISIONOS OR WATCHOS) file(GLOB MISC_SOURCES ${SDL2_SOURCE_DIR}/src/misc/ios/*.m) else() file(GLOB MISC_SOURCES ${SDL2_SOURCE_DIR}/src/misc/macosx/*.m) @@ -2120,10 +2120,10 @@ elseif(APPLE) if(SDL_JOYSTICK) file(GLOB MFI_JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/iphoneos/*.m) - if(IOS OR TVOS) + if(IOS OR TVOS OR VISIONOS OR WATCHOS) file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/steam/*.c) set(SDL_JOYSTICK_MFI 1) - if(IOS) + if(IOS OR VISIONOS OR WATCHOS) set(SDL_FRAMEWORK_COREMOTION 1) endif() set(SDL_FRAMEWORK_GAMECONTROLLER 1) @@ -2164,7 +2164,7 @@ elseif(APPLE) endif() if(SDL_HAPTIC) - if (IOS OR TVOS) + if(IOS OR TVOS OR VISIONOS OR WATCHOS) file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/dummy/*.c) set(SDL_HAPTIC_DUMMY 1) else() @@ -2178,7 +2178,7 @@ elseif(APPLE) endif() if(SDL_POWER) - if (IOS OR TVOS) + if(IOS OR TVOS OR VISIONOS OR WATCHOS) file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/uikit/*.m) set(SDL_POWER_UIKIT 1) else() @@ -2211,7 +2211,7 @@ elseif(APPLE) endif() if(SDL_SENSOR) - if(IOS) + if(IOS OR VISIONOS OR WATCHOS) set(SDL_SENSOR_COREMOTION 1) set(HAVE_SDL_SENSORS TRUE) file(GLOB SENSOR_SOURCES ${SDL2_SOURCE_DIR}/src/sensor/coremotion/*.m) @@ -2221,7 +2221,7 @@ elseif(APPLE) # iOS hack needed - http://code.google.com/p/ios-cmake/ ? if(SDL_VIDEO) - if (IOS OR TVOS) + if(IOS OR TVOS OR VISIONOS OR WATCHOS) set(SDL_VIDEO_DRIVER_UIKIT 1) set(SDL_FRAMEWORK_COREGRAPHICS 1) set(SDL_FRAMEWORK_QUARTZCORE 1) @@ -2242,7 +2242,7 @@ elseif(APPLE) endif() if(SDL_OPENGLES) - if(IOS OR TVOS) + if(IOS OR TVOS OR VISIONOS OR WATCHOS) set(SDL_FRAMEWORK_OPENGLES 1) set(SDL_VIDEO_OPENGL_ES 1) set(SDL_VIDEO_RENDER_OGL_ES 1) @@ -2345,7 +2345,7 @@ elseif(APPLE) endif() endif() if(SDL_FRAMEWORK_METAL) - if(IOS OR TVOS) + if(IOS OR TVOS OR VISIONOS OR WATCHOS) list(APPEND PKGCONFIG_LDFLAGS "-Wl,-framework,Metal") list(APPEND CMAKE_LIBS "$") else() @@ -2358,7 +2358,7 @@ elseif(APPLE) list(APPEND CMAKE_LIBS "$") endif() if(SDL_FRAMEWORK_QUARTZCORE) - if(IOS OR TVOS) + if(IOS OR TVOS OR VISIONOS OR WATCHOS) list(APPEND PKGCONFIG_LDFLAGS "-Wl,-framework,QuartzCore") list(APPEND CMAKE_LIBS "$") else() diff --git a/cmake/sdlchecks.cmake b/cmake/sdlchecks.cmake index 81430d79ad..47c94af5df 100644 --- a/cmake/sdlchecks.cmake +++ b/cmake/sdlchecks.cmake @@ -947,7 +947,7 @@ macro(CheckPTHREAD) elseif(BSDI) set(PTHREAD_CFLAGS "-D_REENTRANT -D_THREAD_SAFE") set(PTHREAD_LDFLAGS "") - elseif(DARWIN) + elseif(MACOS) set(PTHREAD_CFLAGS "-D_THREAD_SAFE") # causes Carbon.p complaints? # set(PTHREAD_CFLAGS "-D_REENTRANT -D_THREAD_SAFE") diff --git a/cmake/sdlplatform.cmake b/cmake/sdlplatform.cmake index 6d8ece6ac5..d0d57671ed 100644 --- a/cmake/sdlplatform.cmake +++ b/cmake/sdlplatform.cmake @@ -32,10 +32,8 @@ macro(SDL_DetectCMakePlatform) set(SDL_CMAKE_PLATFORM QNX) endif() elseif(APPLE) - if(CMAKE_SYSTEM_NAME MATCHES ".*Darwin.*") - set(SDL_CMAKE_PLATFORM DARWIN) - elseif(CMAKE_SYSTEM_NAME MATCHES ".*MacOS.*") - set(SDL_CMAKE_PLATFORM MACOSX) + if(CMAKE_SYSTEM_NAME MATCHES ".*(Darwin|MacOS).*") + set(SDL_CMAKE_PLATFORM MACOS) elseif(CMAKE_SYSTEM_NAME MATCHES ".*tvOS.*") set(SDL_CMAKE_PLATFORM TVOS) elseif(CMAKE_SYSTEM_NAME MATCHES ".*iOS.*") @@ -43,6 +41,10 @@ macro(SDL_DetectCMakePlatform) if(CMAKE_VERSION VERSION_LESS 3.14) set(SDL_CMAKE_PLATFORM IOS) endif() + elseif(CMAKE_SYSTEM_NAME MATCHES ".*watchOS.*") + set(SDL_CMAKE_PLATFORM WATCHOS) + elseif (CMAKE_SYSTEM_NAME MATCHES "visionOS") + set(SDL_CMAKE_PLATFORM VISIONOS) endif() elseif(CMAKE_SYSTEM_NAME MATCHES "BeOS.*") message_error("BeOS support has been removed as of SDL 2.0.2.")