Simple Directmedia Layer

cmake: detect CPU architecture in 1 compilation

Changed files
+209 -154
.github
workflows
VisualC
build-scripts
cmake
+1 -1
.github/workflows/release.yml
··· 330 330 -B build_x64 -A x64 331 331 cmake --build build_x64 --config Release --verbose 332 332 ctest --test-dir build_x64 --no-tests=error -C Release --output-on-failure 333 - - name: 'CMake (configure + build + tests) arm64' 333 + - name: 'CMake (configure + build) arm64' 334 334 run: | 335 335 $env:PATH += ";${{ steps.bin.outputs.path }}/x86" 336 336 cmake -S "${{ steps.src.outputs.path }}/cmake/test" `
+2 -2
CMakeLists.txt
··· 48 48 include("${SDL3_SOURCE_DIR}/cmake/macros.cmake") 49 49 include("${SDL3_SOURCE_DIR}/cmake/sdlchecks.cmake") 50 50 include("${SDL3_SOURCE_DIR}/cmake/sdlcompilers.cmake") 51 + include("${SDL3_SOURCE_DIR}/cmake/sdlcpu.cmake") 51 52 include("${SDL3_SOURCE_DIR}/cmake/sdlmanpages.cmake") 52 53 include("${SDL3_SOURCE_DIR}/cmake/sdlplatform.cmake") 53 54 include("${SDL3_SOURCE_DIR}/cmake/sdltargets.cmake") 54 - include("${SDL3_SOURCE_DIR}/cmake/CheckCPUArchitecture.cmake") 55 55 include("${SDL3_SOURCE_DIR}/cmake/GetGitRevisionDescription.cmake") 56 56 include("${SDL3_SOURCE_DIR}/cmake/3rdparty.cmake") 57 57 include("${SDL3_SOURCE_DIR}/cmake/PreseedMSVCCache.cmake") 58 58 59 59 SDL_DetectCompiler() 60 - SDL_DetectCPUArchitecture() 60 + SDL_DetectTargetCPUArchitectures(SDL_CPUS) 61 61 SDL_Preseed_CMakeCache() 62 62 63 63 # Increment this if there is an incompatible change - but if that happens,
+5 -2
VisualC/pkg-support/cmake/sdl3-config-version.cmake
··· 47 47 set(PACKAGE_VERSION_UNSUITABLE TRUE) 48 48 endif() 49 49 50 + include("${CMAKE_CURRENT_LIST_DIR}/sdlcpu.cmake") 51 + SDL_DetectTargetCPUArchitectures(_detected_archs) 52 + 50 53 # check that the installed version has a compatible architecture as the one which is currently searching: 51 - if(NOT (CMAKE_SYSTEM_PROCESSOR MATCHES "([aA][mM][dD]64|[xX]86((_|-)64)?|[iI][34567]86|[aA][aA][rR][cC][hH]64|[aA][rR][mM]64)")) 52 - set(PACKAGE_VERSION "${PACKAGE_VERSION} (x86,x64,arm64)") 54 + if(NOT(SDL_CPU_X86 OR SDL_CPU_X64 OR SDL_CPU_ARM64)) 55 + set(PACKAGE_VERSION "${PACKAGE_VERSION} (X86,X64,ARM64)") 53 56 set(PACKAGE_VERSION_UNSUITABLE TRUE) 54 57 endif()
+18 -28
VisualC/pkg-support/cmake/sdl3-config.cmake
··· 30 30 31 31 set(SDL3_FOUND TRUE) 32 32 33 - if(CMAKE_SYSTEM_PROCESSOR MATCHES "([aA][mM][dD]64|[xX]86(_|-64)?|[iI][34567]86)") 34 - if(CMAKE_SIZEOF_VOID_P EQUAL "4") 35 - set(_sdl_arch_subdir "x86") 36 - elseif(CMAKE_SIZEOF_VOID_P EQUAL "8") 37 - set(_sdl_arch_subdir "x64") 38 - else() 39 - set(SDL3_FOUND FALSE) 40 - return() 41 - endif() 42 - elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "([aA][aA][rR][cC][hH]64|[aA][rR][mM]64)") 43 - if(CMAKE_SIZEOF_VOID_P EQUAL "8") 44 - set(_sdl_arch_subdir "arm64") 45 - else() 46 - set(SDL3_FOUND FALSE) 47 - return() 48 - endif() 33 + if(SDL_CPU_X86) 34 + set(_sdl_arch_subdir "x86") 35 + elseif(SDL_CPU_X64) 36 + set(_sdl_arch_subdir "x64") 37 + elseif(SDL_CPU_ARM64) 38 + set(_sdl_arch_subdir "arm64") 49 39 else() 50 40 set(SDL3_FOUND FALSE) 51 41 return() ··· 53 43 54 44 get_filename_component(_sdl3_prefix "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE) 55 45 set_and_check(_sdl3_prefix "${_sdl3_prefix}") 56 - set(_sdl3_include_dirs "${_sdl3_prefix}/include;${_sdl3_prefix}/include/SDL3") 46 + set(_sdl3_include_dirs "${_sdl3_prefix}/include") 57 47 58 - set(_sdl3_library "${_sdl3_prefix}/lib/${_sdl_arch_subdir}/SDL3.lib") 59 - set(_sdl3_dll_library "${_sdl3_prefix}/lib/${_sdl_arch_subdir}/SDL3.dll") 60 - set(_sdl3test_library "${_sdl3_prefix}/lib/${_sdl_arch_subdir}/SDL3_test.lib") 48 + set(_sdl3_implib "${_sdl3_prefix}/lib/${_sdl_arch_subdir}/SDL3.lib") 49 + set(_sdl3_dll "${_sdl3_prefix}/lib/${_sdl_arch_subdir}/SDL3.dll") 50 + set(_sdl3test_lib "${_sdl3_prefix}/lib/${_sdl_arch_subdir}/SDL3_test.lib") 61 51 62 52 unset(_sdl_arch_subdir) 63 53 unset(_sdl3_prefix) ··· 75 65 set(SDL3_Headers_FOUND TRUE) 76 66 unset(_sdl3_include_dirs) 77 67 78 - if(EXISTS "${_sdl3_library}" AND EXISTS "${_sdl3_dll_library}") 68 + if(EXISTS "${_sdl3_implib}" AND EXISTS "${_sdl3_dll}") 79 69 if(NOT TARGET SDL3::SDL3-shared) 80 70 add_library(SDL3::SDL3-shared SHARED IMPORTED) 81 71 set_target_properties(SDL3::SDL3-shared 82 72 PROPERTIES 83 73 INTERFACE_LINK_LIBRARIES "SDL3::Headers" 84 - IMPORTED_IMPLIB "${_sdl3_library}" 85 - IMPORTED_LOCATION "${_sdl3_dll_library}" 74 + IMPORTED_IMPLIB "${_sdl3_implib}" 75 + IMPORTED_LOCATION "${_sdl3_dll}" 86 76 COMPATIBLE_INTERFACE_BOOL "SDL3_SHARED" 87 77 INTERFACE_SDL3_SHARED "ON" 88 78 COMPATIBLE_INTERFACE_STRING "SDL_VERSION" ··· 93 83 else() 94 84 set(SDL3_SDL3-shared_FOUND FALSE) 95 85 endif() 96 - unset(_sdl3_library) 97 - unset(_sdl3_dll_library) 86 + unset(_sdl3_implib) 87 + unset(_sdl3_dll) 98 88 99 89 set(SDL3_SDL3-static_FOUND FALSE) 100 90 101 - if(EXISTS "${_sdl3test_library}") 91 + if(EXISTS "${_sdl3test_lib}") 102 92 if(NOT TARGET SDL3::SDL3_test) 103 93 add_library(SDL3::SDL3_test STATIC IMPORTED) 104 94 set_target_properties(SDL3::SDL3_test 105 95 PROPERTIES 106 96 INTERFACE_LINK_LIBRARIES "SDL3::Headers" 107 - IMPORTED_LOCATION "${_sdl3test_library}" 97 + IMPORTED_LOCATION "${_sdl3test_lib}" 108 98 COMPATIBLE_INTERFACE_STRING "SDL_VERSION" 109 99 INTERFACE_SDL_VERSION "SDL3" 110 100 ) ··· 113 103 else() 114 104 set(SDL3_SDL3_test_FOUND FALSE) 115 105 endif() 116 - unset(_sdl3test_library) 106 + unset(_sdl3test_lib) 117 107 118 108 if(SDL3_SDL3-shared_FOUND) 119 109 set(SDL3_SDL3_FOUND TRUE)
+1
build-scripts/build-release.py
··· 530 530 zip_directory(zf, directory=self.root / "include/SDL3", arcrelpath="include/SDL3") 531 531 zip_directory(zf, directory=self.root / "docs", arcrelpath="docs") 532 532 zip_directory(zf, directory=self.root / "VisualC/pkg-support/cmake", arcrelpath="cmake") 533 + zip_file(zf, path=self.root / "cmake/sdlcpu.cmake", arcrelpath="cmake/sdlcpu.cmake") 533 534 534 535 for txt in ("BUGS.txt", "README-SDL.txt", "WhatsNew.txt"): 535 536 zip_file(zf, path=self.root / txt, arcrelpath=txt)
-48
cmake/CheckCPUArchitecture.cmake
··· 1 - include(CheckCSourceCompiles) 2 - include(CMakePushCheckState) 3 - 4 - function(_internal_check_cpu_architecture macro_check NAME VARIABLE) 5 - cmake_push_check_state() 6 - string(TOUPPER "${NAME}" UPPER_NAME) 7 - set(CACHE_VARIABLE "CHECK_CPU_ARCHITECTURE_${UPPER_NAME}") 8 - set(test_src " 9 - int main(int argc, char *argv[]) { 10 - #if ${macro_check} 11 - return 0; 12 - #else 13 - choke 14 - #endif 15 - } 16 - ") 17 - check_c_source_compiles("${test_src}" "${CACHE_VARIABLE}") 18 - cmake_pop_check_state() 19 - if(${CACHE_VARIABLE}) 20 - set(${VARIABLE} "TRUE" PARENT_SCOPE) 21 - else() 22 - set(${VARIABLE} "FALSE" PARENT_SCOPE) 23 - endif() 24 - endfunction() 25 - 26 - function(check_cpu_architecture ARCH VARIABLE) 27 - if(ARCH STREQUAL "x86") 28 - _internal_check_cpu_architecture("defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) ||defined( __i386) || defined(_M_IX86)" x86 ${VARIABLE}) 29 - elseif(ARCH STREQUAL "x64") 30 - _internal_check_cpu_architecture("defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64)" x64 ${VARIABLE}) 31 - elseif(ARCH STREQUAL "arm32") 32 - _internal_check_cpu_architecture("defined(__arm__) || defined(_M_ARM)" arm32 ${VARIABLE}) 33 - elseif(ARCH STREQUAL "arm64") 34 - _internal_check_cpu_architecture("defined(__aarch64__) || defined(_M_ARM64)" arm64 ${VARIABLE}) 35 - elseif(ARCH STREQUAL "loongarch64") 36 - _internal_check_cpu_architecture("defined(__loongarch64)" loongarch64 ${VARIABLE}) 37 - elseif(ARCH STREQUAL "emscripten") 38 - _internal_check_cpu_architecture("defined(__EMSCRIPTEN__)" emscripten ${VARIABLE}) 39 - elseif(ARCH STREQUAL "powerpc64") 40 - _internal_check_cpu_architecture("defined(__PPC64__) || defined(__powerpc64__)" powerpc64 ${VARIABLE}) 41 - elseif(ARCH STREQUAL "powerpc32") 42 - _internal_check_cpu_architecture("(defined(__PPC__) || defined(__powerpc__)) && !defined(__powerpc64__)" powerpc32 ${VARIABLE}) 43 - else() 44 - message(WARNING "Unknown CPU architectures (${ARCH}).") 45 - set("${VARIABLE}" FALSE) 46 - endif() 47 - set("${VARIABLE}" "${${VARIABLE}}" PARENT_SCOPE) 48 - endfunction()
+149
cmake/sdlcpu.cmake
··· 1 + function(SDL_DetectTargetCPUArchitectures DETECTED_ARCHS) 2 + 3 + set(DETECTABLE_ARCHS ARM32 ARM64 EMSCRIPTEN LOONGARCH64 POWERPC32 POWERPC64 X86 X64) 4 + 5 + if(APPLE AND CMAKE_OSX_ARCHITECTURES) 6 + foreach(arch IN LISTS DETECTABLE_ARCHS) 7 + set(SDL_CPU_${arch} "0") 8 + endforeach() 9 + set(detected_archs) 10 + foreach(osx_arch IN LISTS CMAKE_OSX_ARCHITECTURES) 11 + if(osx_arch STREQUAL "x86_64") 12 + set(SDL_CPU_X64 "1") 13 + list(APPEND detected_archs "X64") 14 + elseif(osx_arch STREQUAL "arm64") 15 + set(SDL_CPU_ARM64 "1") 16 + list(APPEND detected_archs "ARM64") 17 + endif() 18 + endforeach() 19 + set("${DETECTED_ARCHS}" "${detected_archs}" PARENT_SCOPE) 20 + return() 21 + endif() 22 + 23 + set(detected_archs) 24 + foreach(arch IN LISTS DETECTABLE_ARCHS) 25 + if(SDL_CPU_${arch}) 26 + list(APPEND detected_archs "${arch}") 27 + endif() 28 + endforeach() 29 + 30 + if(detected_archs) 31 + set("${DETECTED_ARCHS}" "${detected_archs}" PARENT_SCOPE) 32 + return() 33 + endif() 34 + 35 + set(src_arch_detect [=====[ 36 + 37 + #if defined(__arm__) || defined(_M_ARM) 38 + #define ARCH_ARM32 "1" 39 + #else 40 + #define ARCH_ARM32 "0" 41 + #endif 42 + const char *arch_arm32 = "INFO<ARM32=" ARCH_ARM32 ">"; 43 + 44 + #if defined(__aarch64__) || defined(_M_ARM64) 45 + #define ARCH_ARM64 "1" 46 + #else 47 + #define ARCH_ARM64 "0" 48 + #endif 49 + const char *arch_arm64 = "INFO<ARM64=" ARCH_ARM64 ">"; 50 + 51 + #if defined(__EMSCRIPTEN__) 52 + #define ARCH_EMSCRIPTEN "1" 53 + #else 54 + #define ARCH_EMSCRIPTEN "0" 55 + #endif 56 + const char *arch_emscripten = "INFO<EMSCRIPTEN=" ARCH_EMSCRIPTEN ">"; 57 + 58 + #if defined(__loongarch64) 59 + #define ARCH_LOONGARCH64 "1" 60 + #else 61 + #define ARCH_LOONGARCH64 "0" 62 + #endif 63 + const char *arch_loongarch64 = "INFO<LOONGARCH64=" ARCH_LOONGARCH64 ">"; 64 + 65 + #if (defined(__PPC__) || defined(__powerpc__)) && !defined(__powerpc64__) 66 + #define ARCH_POWERPC32 "1" 67 + #else 68 + #define ARCH_POWERPC32 "0" 69 + #endif 70 + const char *arch_powerpc32 = "INFO<ARCH_POWERPC32=" ARCH_POWERPC32 ">"; 71 + 72 + #if defined(__PPC64__) || defined(__powerpc64__) 73 + #define ARCH_POWERPC64 "1" 74 + #else 75 + #define ARCH_POWERPC64 "0" 76 + #endif 77 + const char *arch_powerpc64 = "INFO<POWERPC64=" ARCH_POWERPC64 ">"; 78 + 79 + #if defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) ||defined( __i386) || defined(_M_IX86) 80 + #define ARCH_X86 "1" 81 + #else 82 + #define ARCH_X86 "0" 83 + #endif 84 + const char *arch_x86 = "INFO<X86=" ARCH_X86 ">"; 85 + 86 + #if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64) 87 + #define ARCH_X64 "1" 88 + #else 89 + #define ARCH_X64 "0" 90 + #endif 91 + const char *arch_x64 = "INFO<X64=" ARCH_X64 ">"; 92 + 93 + int main(int argc, char *argv[]) { 94 + (void) argv; 95 + int result = argc; 96 + result += arch_arm32[argc]; 97 + result += arch_arm64[argc]; 98 + result += arch_emscripten[argc]; 99 + result += arch_loongarch64[argc]; 100 + result += arch_powerpc32[argc]; 101 + result += arch_powerpc64[argc]; 102 + result += arch_x86[argc]; 103 + result += arch_x64[argc]; 104 + return result; 105 + } 106 + ]=====]) 107 + 108 + set(path_src_arch_detect "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmp/SDL_detect_arch.c") 109 + file(WRITE "${path_src_arch_detect}" "${src_arch_detect}") 110 + set(path_dir_arch_detect "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmp/SDL_detect_arch") 111 + set(path_bin_arch_detect "${path_dir_arch_detect}/bin") 112 + 113 + set(msg "Detecting Target CPU Architecture") 114 + message(STATUS "${msg}") 115 + 116 + try_compile(COMPILED_RES 117 + "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmp/SDL_detect_arch" 118 + SOURCES "${path_src_arch_detect}" 119 + COPY_FILE "${path_bin_arch_detect}" 120 + ) 121 + if(NOT COMPILED_RES) 122 + message(STATUS "${msg} - <ERROR>") 123 + message(WARNING "Failed to compile source detecting the target CPU architecture") 124 + endif() 125 + 126 + set(re "INFO<([A-Z0-9]+)=([01])>") 127 + file(STRINGS "${path_bin_arch_detect}" infos REGEX "${re}") 128 + 129 + set(detected_archs) 130 + 131 + foreach(info_arch_01 IN LISTS infos) 132 + string(REGEX MATCH "${re}" A "${info_arch_01}") 133 + if(NOT "${CMAKE_MATCH_1}" IN_LIST DETECTABLE_ARCHS) 134 + message(WARNING "Unknown architecture: \"${CMAKE_MATCH_1}\"") 135 + continue() 136 + endif() 137 + set(arch "${CMAKE_MATCH_1}") 138 + set(arch_01 "${CMAKE_MATCH_2}") 139 + if(arch_01) 140 + list(APPEND detected_archs "${arch}") 141 + endif() 142 + set("SDL_CPU_${arch}" "${arch_01}" CACHE BOOL "Detected architecture ${arch}") 143 + endforeach() 144 + 145 + message(STATUS "${msg} - ${detected_archs}") 146 + 147 + set("${DETECTED_ARCHS}" "${detected_archs}" PARENT_SCOPE) 148 + 149 + endfunction()
+33 -73
cmake/sdlplatform.cmake
··· 1 - macro(SDL_DetectCMakePlatform) 2 - set(SDL_CMAKE_PLATFORM ) 3 - # Get the platform 1 + function(SDL_DetectCMakePlatform) 2 + set(sdl_cmake_platform ) 4 3 if(WIN32) 5 - set(SDL_CMAKE_PLATFORM Windows) 4 + set(sdl_cmake_platform Windows) 6 5 elseif(PSP) 7 - set(SDL_CMAKE_PLATFORM psp) 6 + set(sdl_cmake_platform psp) 8 7 elseif(APPLE) 9 8 if(CMAKE_SYSTEM_NAME MATCHES ".*(Darwin|MacOS).*") 10 - set(SDL_CMAKE_PLATFORM macOS) 9 + set(sdl_cmake_platform macOS) 11 10 elseif(CMAKE_SYSTEM_NAME MATCHES ".*tvOS.*") 12 - set(SDL_CMAKE_PLATFORM tvOS) 11 + set(sdl_cmake_platform tvOS) 13 12 elseif(CMAKE_SYSTEM_NAME MATCHES ".*iOS.*") 14 - set(SDL_CMAKE_PLATFORM iOS) 13 + set(sdl_cmake_platform iOS) 15 14 elseif(CMAKE_SYSTEM_NAME MATCHES ".*watchOS.*") 16 - set(SDL_CMAKE_PLATFORM watchOS) 15 + set(sdl_cmake_platform watchOS) 17 16 elseif (CMAKE_SYSTEM_NAME MATCHES "visionOS") 18 - set(SDL_CMAKE_PLATFORM visionOS) 17 + set(sdl_cmake_platform visionOS) 19 18 else() 20 19 message(WARNING "Unknown Apple platform: \"${CMAKE_SYSTEM_NAME}\"") 21 20 endif() 22 21 elseif(CMAKE_SYSTEM_NAME MATCHES "Haiku.*") 23 - set(SDL_CMAKE_PLATFORM Haiku) 22 + set(sdl_cmake_platform Haiku) 24 23 elseif(NINTENDO_3DS) 25 - set(SDL_CMAKE_PLATFORM n3ds) 24 + set(sdl_cmake_platform n3ds) 26 25 elseif(PS2) 27 - set(SDL_CMAKE_PLATFORM ps2) 26 + set(sdl_cmake_platform ps2) 28 27 elseif(VITA) 29 - set(SDL_CMAKE_PLATFORM Vita) 28 + set(sdl_cmake_platform Vita) 30 29 elseif(CMAKE_SYSTEM_NAME MATCHES ".*Linux") 31 - set(SDL_CMAKE_PLATFORM Linux) 30 + set(sdl_cmake_platform Linux) 32 31 elseif(CMAKE_SYSTEM_NAME MATCHES "kFreeBSD.*") 33 - set(SDL_CMAKE_PLATFORM FreeBSD) 32 + set(sdl_cmake_platform FreeBSD) 34 33 elseif(CMAKE_SYSTEM_NAME MATCHES "kNetBSD.*|NetBSD.*") 35 - set(SDL_CMAKE_PLATFORM NetBSD) 34 + set(sdl_cmake_platform NetBSD) 36 35 elseif(CMAKE_SYSTEM_NAME MATCHES "kOpenBSD.*|OpenBSD.*") 37 - set(SDL_CMAKE_PLATFORM OpenBSD) 36 + set(sdl_cmake_platform OpenBSD) 38 37 elseif(CMAKE_SYSTEM_NAME MATCHES ".*GNU.*") 39 - set(SDL_CMAKE_PLATFORM GNU) 38 + set(sdl_cmake_platform GNU) 40 39 elseif(CMAKE_SYSTEM_NAME MATCHES ".*BSDI.*") 41 - set(SDL_CMAKE_PLATFORM BSDi) 40 + set(sdl_cmake_platform BSDi) 42 41 elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly.*|FreeBSD") 43 - set(SDL_CMAKE_PLATFORM FreeBSD) 42 + set(sdl_cmake_platform FreeBSD) 44 43 elseif(CMAKE_SYSTEM_NAME MATCHES "SYSV5.*") 45 - set(SDL_CMAKE_PLATFORM SYSV5) 44 + set(sdl_cmake_platform SYSV5) 46 45 elseif(CMAKE_SYSTEM_NAME MATCHES "Solaris.*|SunOS.*") 47 - set(SDL_CMAKE_PLATFORM Solaris) 46 + set(sdl_cmake_platform Solaris) 48 47 elseif(CMAKE_SYSTEM_NAME MATCHES "HP-UX.*") 49 - set(SDL_CMAKE_PLATFORM HPUX) 48 + set(sdl_cmake_platform HPUX) 50 49 elseif(CMAKE_SYSTEM_NAME MATCHES "AIX.*") 51 - set(SDL_CMAKE_PLATFORM AIX) 50 + set(sdl_cmake_platform AIX) 52 51 elseif(CMAKE_SYSTEM_NAME MATCHES "Minix.*") 53 - set(SDL_CMAKE_PLATFORM Minix) 52 + set(sdl_cmake_platform Minix) 54 53 elseif(CMAKE_SYSTEM_NAME MATCHES "Android.*") 55 - set(SDL_CMAKE_PLATFORM Android) 54 + set(sdl_cmake_platform Android) 56 55 elseif(CMAKE_SYSTEM_NAME MATCHES "Emscripten.*") 57 - set(SDL_CMAKE_PLATFORM Emscripten) 56 + set(sdl_cmake_platform Emscripten) 58 57 elseif(CMAKE_SYSTEM_NAME MATCHES "QNX.*") 59 - set(SDL_CMAKE_PLATFORM QNX) 58 + set(sdl_cmake_platform QNX) 60 59 elseif(CMAKE_SYSTEM_NAME MATCHES "BeOS.*") 61 60 message(FATAL_ERROR "BeOS support has been removed as of SDL 2.0.2.") 62 61 endif() 63 62 64 - if(SDL_CMAKE_PLATFORM) 65 - string(TOUPPER "${SDL_CMAKE_PLATFORM}" _upper_platform) 66 - set(${_upper_platform} TRUE) 63 + if(sdl_cmake_platform) 64 + string(TOUPPER "${sdl_cmake_platform}" _upper_platform) 65 + set("${_upper_platform}" TRUE PARENT_SCOPE) 67 66 else() 68 - set(SDL_CMAKE_PLATFORM "unknown") 67 + set(sdl_cmake_platform "unknown") 69 68 endif() 70 - endmacro() 71 - 72 - function(SDL_DetectCPUArchitecture) 73 - set(sdl_cpu_names) 74 - if(APPLE AND CMAKE_OSX_ARCHITECTURES) 75 - foreach(osx_arch ${CMAKE_OSX_ARCHITECTURES}) 76 - if(osx_arch STREQUAL "x86_64") 77 - list(APPEND sdl_cpu_names "x64") 78 - elseif(osx_arch STREQUAL "arm64") 79 - list(APPEND sdl_cpu_names "arm64") 80 - endif() 81 - endforeach() 82 - endif() 83 - 84 - set(sdl_known_archs x64 x86 arm64 arm32 emscripten powerpc64 powerpc32 loongarch64) 85 - if(NOT sdl_cpu_names) 86 - set(found FALSE) 87 - foreach(sdl_known_arch ${sdl_known_archs}) 88 - if(NOT found) 89 - string(TOUPPER "${sdl_known_arch}" sdl_known_arch_upper) 90 - set(var_name "SDL_CPU_${sdl_known_arch_upper}") 91 - check_cpu_architecture(${sdl_known_arch} ${var_name}) 92 - if(${var_name}) 93 - list(APPEND sdl_cpu_names ${sdl_known_arch}) 94 - set(found TRUE) 95 - endif() 96 - endif() 97 - endforeach() 98 - endif() 99 - 100 - foreach(sdl_known_arch ${sdl_known_archs}) 101 - string(TOUPPER "${sdl_known_arch}" sdl_known_arch_upper) 102 - set(var_name "SDL_CPU_${sdl_known_arch_upper}") 103 - if(sdl_cpu_names MATCHES "(^|;)${sdl_known_arch}($|;)") # FIXME: use if(IN_LIST) 104 - set(${var_name} 1 PARENT_SCOPE) 105 - else() 106 - set(${var_name} 0 PARENT_SCOPE) 107 - endif() 108 - endforeach() 109 - set(SDL_CPU_NAMES ${sdl_cpu_names} PARENT_SCOPE) 69 + set(SDL_CMAKE_PLATFORM "${sdl_cmake_platform}" PARENT_SCOPE) 110 70 endfunction()