From 8acec2fff1fb869d75b475787910d6785c4a294e Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Tue, 29 Nov 2022 22:42:51 +0100
Subject: [PATCH] cmake use CheckCPUArchitecture to detect x86
---
CMakeLists.txt | 10 +++-----
cmake/CheckCPUArchitecture.cmake | 42 ++++++++++++++++++++++++++++++++
2 files changed, 46 insertions(+), 6 deletions(-)
create mode 100644 cmake/CheckCPUArchitecture.cmake
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 16a3665..7b9639f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -24,12 +24,15 @@ include(CheckCCompilerFlag)
include(CMakePackageConfigHelpers)
include(CMakePushCheckState)
include(GNUInstallDirs)
+include("${CMAKE_CURRENT_LIST_DIR}/cmake/CheckCPUArchitecture.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/cmake/sdlchecks.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/cmake/sdlplatform.cmake")
SDL_DetectCMakePlatform()
CheckOpenGLES()
+check_cpu_architecture(x86 SDL_CPU_X86)
+
if(NOT MSVC AND NOT APPLE AND NOT OPENBSD)
cmake_push_check_state()
set(CMAKE_REQUIRED_FLAGS "-Wl,--no-undefined")
@@ -202,12 +205,7 @@ endif()
if(MSVC)
# Don't try to link with the default set of libraries.
set(MSVC_FLAGS "/GS-")
- check_c_source_compiles("int main(void) {
-#ifndef _M_IX86
-#error not x86
-#endif
-return 0; }" IS_X86)
- if(IS_X86) # don't emit SSE2 in x86 builds
+ if(SDL_CPU_X86) # don't emit SSE2 in x86 builds
set(MSVC_FLAGS "${MSVC_FLAGS} /arch:SSE")
endif()
set_target_properties(SDL2 PROPERTIES COMPILE_FLAGS ${MSVC_FLAGS})
diff --git a/cmake/CheckCPUArchitecture.cmake b/cmake/CheckCPUArchitecture.cmake
new file mode 100644
index 0000000..1eebbd4
--- /dev/null
+++ b/cmake/CheckCPUArchitecture.cmake
@@ -0,0 +1,42 @@
+include(CheckCSourceCompiles)
+include(CMakePushCheckState)
+
+function(_internal_check_cpu_architecture macro_check NAME VARIABLE)
+ cmake_push_check_state()
+ string(TOUPPER "${NAME}" UPPER_NAME)
+ set(CACHE_VARIABLE "CHECK_CPU_ARCHITECTURE_${UPPER_NAME}")
+ set(test_src "
+int main(int argc, char *argv[]) {
+#if ${macro_check}
+ return 0;
+#else
+ choke
+#endif
+}
+")
+ check_c_source_compiles("${test_src}" "${CACHE_VARIABLE}")
+ cmake_pop_check_state()
+ if(${CACHE_VARIABLE})
+ set(${VARIABLE} "TRUE" PARENT_SCOPE)
+ else()
+ set(${VARIABLE} "FALSE" PARENT_SCOPE)
+ endif()
+endfunction()
+
+function(check_cpu_architecture ARCH VARIABLE)
+ if(ARCH STREQUAL "x86")
+ _internal_check_cpu_architecture("defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) ||defined( __i386) || defined(_M_IX86)" x86 ${VARIABLE})
+ elseif(ARCH STREQUAL "x64")
+ _internal_check_cpu_architecture("defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64)" x64 ${VARIABLE})
+ elseif(ARCH STREQUAL "arm32")
+ _internal_check_cpu_architecture("defined(__arm__) || defined(_M_ARM)" arm32 ${VARIABLE})
+ elseif(ARCH STREQUAL "arm64")
+ _internal_check_cpu_architecture("defined(__aarch64__) || defined(_M_ARM64)" arm64 ${VARIABLE})
+ elseif(ARCH STREQUAL "loongarch64")
+ _internal_check_cpu_architecture("defined(__loongarch64)" loongarch64 ${VARIABLE})
+ else()
+ message(WARNING "Unknown CPU architectures (${ARCH}).")
+ set(${VARIABLE} FALSE)
+ endif()
+ set("${VARIABLE}" "${${VARIABLE}}" PARENT_SCOPE)
+endfunction()