diff --git a/Xcode/SDL/SDL.xcodeproj/project.pbxproj b/Xcode/SDL/SDL.xcodeproj/project.pbxproj index affeb7f2b..fb7326f01 100644 --- a/Xcode/SDL/SDL.xcodeproj/project.pbxproj +++ b/Xcode/SDL/SDL.xcodeproj/project.pbxproj @@ -2633,7 +2633,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "mkdir -p build/dmg-tmp\ncp -a build/SDL3.xcframework build/dmg-tmp/\n\ncp pkg-support/resources/License.txt build/dmg-tmp\ncp pkg-support/resources/ReadMe.txt build/dmg-tmp\n\n# remove the .DS_Store files if any (we may want to provide one in the future for fancy .dmgs)\nfind build/dmg-tmp -name .DS_Store -exec rm -f \"{}\" \\;\n\n# for fancy .dmg\nmkdir -p build/dmg-tmp/.logo\ncp pkg-support/resources/SDL_DS_Store build/dmg-tmp/.DS_Store\ncp pkg-support/sdl_logo.pdf build/dmg-tmp/.logo\n\n# create the dmg\nhdiutil create -ov -fs HFS+ -volname SDL3 -srcfolder build/dmg-tmp build/SDL3.dmg\n\n# clean up\nrm -rf build/dmg-tmp\n"; + shellScript = "mkdir -p build/dmg-tmp/share/cmake/SDL3\ncp -a build/SDL3.xcframework build/dmg-tmp/\n\ncp pkg-support/resources/License.txt build/dmg-tmp\ncp pkg-support/resources/ReadMe.txt build/dmg-tmp\ncp pkg-support/resources/CMake/sdl3-config.cmake build/dmg-tmp/share/cmake/SDL3\ncp pkg-support/resources/CMake/sdl3-config-version.cmake build/dmg-tmp/share/cmake/SDL3\n\n\nmkdir -p \n\n# remove the .DS_Store files if any (we may want to provide one in the future for fancy .dmgs)\nfind build/dmg-tmp -name .DS_Store -exec rm -f \"{}\" \\;\n\n# for fancy .dmg\nmkdir -p build/dmg-tmp/.logo\ncp pkg-support/resources/SDL_DS_Store build/dmg-tmp/.DS_Store\ncp pkg-support/sdl_logo.pdf build/dmg-tmp/.logo\n\n# create the dmg\nhdiutil create -ov -fs HFS+ -volname SDL3 -srcfolder build/dmg-tmp build/SDL3.dmg\n\n# clean up\nrm -rf build/dmg-tmp\n"; }; F3B38CF0296F63D1005DA6D3 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; diff --git a/Xcode/SDL/pkg-support/resources/CMake/sdl3-config-version.cmake b/Xcode/SDL/pkg-support/resources/CMake/sdl3-config-version.cmake index 6dbcf1298..fbc9a3cee 100644 --- a/Xcode/SDL/pkg-support/resources/CMake/sdl3-config-version.cmake +++ b/Xcode/SDL/pkg-support/resources/CMake/sdl3-config-version.cmake @@ -1,14 +1,21 @@ # based on the files generated by CMake's write_basic_package_version_file # SDL CMake version configuration file: -# This file is meant to be placed in Resources/CMake of a SDL3 framework +# This file is meant to be placed in share/cmake/SDL3, next to SDL3.xcframework -if(NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/../../Headers/SDL_version.h") - message(AUTHOR_WARNING "Could not find SDL_version.h. This script is meant to be placed in the Resources/CMake directory of SDL3.framework") +cmake_minimum_required(VERSION 3.12) + +get_filename_component(_sdl3_xcframework_parent_path "../.." ABSOLUTE) + +set(_sdl3_xcframework "${_sdl3_xcframework_parent_path}/SDL3.xcframework") +set(_sdl3_version_h "${_sdl3_xcframework}/macos-arm64_x86_64/SDL3.framework/Headers/SDL_version.h") + +if(NOT EXISTS "${_sdl3_version_h}") + message(AUTHOR_WARNING "Cannot not find SDL_version.h. This script is meant to be placed in share/cmake/SDL3, next to SDL3.xcframework") return() endif() -file(READ "${CMAKE_CURRENT_LIST_DIR}/../../Headers/SDL_version.h" _sdl_version_h) +file(READ "${_sdl3_version_h}" _sdl_version_h) string(REGEX MATCH "#define[ \t]+SDL_MAJOR_VERSION[ \t]+([0-9]+)" _sdl_major_re "${_sdl_version_h}") set(_sdl_major "${CMAKE_MATCH_1}") string(REGEX MATCH "#define[ \t]+SDL_MINOR_VERSION[ \t]+([0-9]+)" _sdl_minor_re "${_sdl_version_h}") @@ -22,6 +29,9 @@ else() return() endif() +unset(_sdl3_xcframework) +unset(_sdl3_version_h) + if(PACKAGE_FIND_VERSION_RANGE) # Package version must be in the requested version range if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN) @@ -42,7 +52,11 @@ else() endif() endif() -# if the using project doesn't have CMAKE_SIZEOF_VOID_P set, fail. -if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "") +# The SDL3.xcframework only contains 64-bit archives +if(NOT "${CMAKE_SIZEOF_VOID_P}" EQUAL "8") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() + +if(NOT CMAKE_SYSTEM_NAME MATCHES "^(Darwin|iOS|tvOS)$") set(PACKAGE_VERSION_UNSUITABLE TRUE) endif() diff --git a/Xcode/SDL/pkg-support/resources/CMake/sdl3-config.cmake b/Xcode/SDL/pkg-support/resources/CMake/sdl3-config.cmake index 2fd2d7c3e..1e5151bd1 100644 --- a/Xcode/SDL/pkg-support/resources/CMake/sdl3-config.cmake +++ b/Xcode/SDL/pkg-support/resources/CMake/sdl3-config.cmake @@ -1,5 +1,5 @@ # SDL CMake configuration file: -# This file is meant to be placed in Resources/CMake of a SDL3 framework +# This file is meant to be placed in share/cmake/SDL3, next to SDL3.xcframework # INTERFACE_LINK_OPTIONS needs CMake 3.12 cmake_minimum_required(VERSION 3.12) @@ -31,15 +31,50 @@ endmacro() set(SDL3_FOUND TRUE) -# Compute the installation prefix relative to this file. -get_filename_component(_sdl3_framework_path "${CMAKE_CURRENT_LIST_FILE}" PATH) # /SDL3.framework/Resources/CMake/ -get_filename_component(_sdl3_framework_path "${_sdl3_framework_path}" PATH) # /SDL3.framework/Resources/ -get_filename_component(_sdl3_framework_path "${_sdl3_framework_path}" PATH) # /SDL3.framework/ -get_filename_component(_sdl3_framework_parent_path "${_sdl3_framework_path}" PATH) # / +macro(_check_target_is_simulator) + include(CheckCSourceCompiles) + check_c_source_compiles([===[ + #include + #if defined(TARGET_OS_SIMULATOR) + int target_is_simulator; + #endif + int main(int argc, char *argv[]) { return target_is_simulator; } + ]===] SDL_TARGET_IS_SIMULATOR) +endmacro() +if(CMAKE_SYSTEM_NAME STREQUAL "iOS") + _check_target_is_simulator() + if(SDL_TARGET_IS_SIMULATOR) + set(_xcfw_target_subdir "ios-arm64_x86_64-simulator") + else() + set(_xcfw_target_subdir "ios-arm64") + endif() +elseif(CMAKE_SYSTEM_NAME STREQUAL "tvOS") + _check_target_is_simulator() + if(SDL_TARGET_IS_SIMULATOR) + set(_xcfw_target_subdir "tvos-arm64_x86_64-simulator") + else() + set(_xcfw_target_subdir "tvos-arm64") + endif() +elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(_xcfw_target_subdir "macos-arm64_x86_64") +else() + message(WARNING "Unsupported Apple platform (${CMAKE_SYSTEM_NAME}) and broken sdl3-config-version.cmake") + set(SDL3_FOUND FALSE) + return() +endif() + +# Compute the installation prefix relative to this file. +get_filename_component(_sdl3_xcframework_parent_path "${CMAKE_CURRENT_LIST_DIR}" REALPATH) # /share/cmake/SDL3/ +get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" REALPATH) # /share/cmake/SDL3/ +get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" PATH) # /share/cmake +get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" PATH) # /share +get_filename_component(_sdl3_xcframework_parent_path "${_sdl3_xcframework_parent_path}" PATH) # / +set_and_check(_sdl3_xcframework_path "${_sdl3_xcframework_parent_path}/SDL3.xcframework") # /SDL3.xcframework +set_and_check(_sdl3_framework_parent_path "${_sdl3_xcframework_path}/${_xcfw_target_subdir}") # /SDL3.xcframework/macos-arm64_x86_64 +set_and_check(_sdl3_framework_path "${_sdl3_framework_parent_path}/SDL3.framework") # /SDL3.xcframework/macos-arm64_x86_64/SDL3.framework set_and_check(_sdl3_include_dirs "${_sdl3_framework_path}/Headers") -set(SDL3_LIBRARIES "SDL3::SDL3") # All targets are created, even when some might not be requested though COMPONENTS. # This is done for compatibility with CMake generated SDL3-target.cmake files. @@ -53,16 +88,26 @@ if(NOT TARGET SDL3::Headers) ) endif() set(SDL3_Headers_FOUND TRUE) -unset(_sdl3_include_dirs) if(NOT TARGET SDL3::SDL3-shared) add_library(SDL3::SDL3-shared SHARED IMPORTED) + if(CMAKE_VERSION GREATER_EQUAL "3.28") + set_target_properties(SDL3::SDL3-shared + PROPERTIES + FRAMEWORK "TRUE" + IMPORTED_LOCATION "${_sdl3_xcframework_path}" + INTERFACE_LINK_LIBRARIES "SDL3::Headers" + ) + else() + set_target_properties(SDL3::SDL3-shared + PROPERTIES + FRAMEWORK "TRUE" + IMPORTED_LOCATION "${_sdl3_framework_path}/SDL3" + INTERFACE_LINK_LIBRARIES "SDL3::Headers" + ) + endif() set_target_properties(SDL3::SDL3-shared PROPERTIES - FRAMEWORK "TRUE" - INTERFACE_LINK_LIBRARIES "SDL3::Headers" - IMPORTED_LOCATION "${_sdl3_framework_path}/SDL3" - IMPORTED_SONAME "${_sdl3_framework_path}/SDL3" COMPATIBLE_INTERFACE_BOOL "SDL3_SHARED" INTERFACE_SDL3_SHARED "ON" COMPATIBLE_INTERFACE_STRING "SDL_VERSION" @@ -75,10 +120,13 @@ set(SDL3_SDL3-static FALSE) set(SDL3_SDL3_test FALSE) +unset(_sdl3_xcframework_parent_path) +unset(_sdl3_xcframework_path) unset(_sdl3_framework_parent_path) unset(_sdl3_framework_path) +unset(_sdl3_include_dirs) -if(SDL3_SDL3-shared_FOUND OR SDL3_SDL3-static_FOUND) +if(SDL3_SDL3-shared_FOUND) set(SDL3_SDL3_FOUND TRUE) endif() @@ -96,9 +144,13 @@ endfunction() if(NOT TARGET SDL3::SDL3) if(TARGET SDL3::SDL3-shared) _sdl_create_target_alias_compat(SDL3::SDL3 SDL3::SDL3-shared) - else() - _sdl_create_target_alias_compat(SDL3::SDL3 SDL3::SDL3-static) endif() endif() check_required_components(SDL3) + +set(SDL3_LIBRARIES SDL3::SDL3) +set(SDL3_STATIC_LIBRARIES SDL3::SDL3-static) +set(SDL3_STATIC_PRIVATE_LIBS) + +set(SDL3TEST_LIBRARY SDL3::SDL3_test)