SDL: cmake: detect cpu architecture in SDL_DetectCPUArchitecture

From 19d162281cf045655f15952e6e92e07d96ac524b Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Mon, 9 Jan 2023 15:06:45 +0100
Subject: [PATCH] cmake: detect cpu architecture in SDL_DetectCPUArchitecture

Stop looking for arch, when one is found
---
 CMakeLists.txt          |  6 +-----
 cmake/sdlplatform.cmake | 21 +++++++++++++++++++++
 2 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index a593b668a6a1..87c87739eae2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -104,11 +104,7 @@ set(SDL_DYLIB_COMPAT_VERSION "${SDL_DYLIB_COMPAT_VERSION_MAJOR}.${SDL_DYLIB_COMP
 
 #message("SDL_SO_VERSION=${SDL_SO_VERSION} SDL_DYLIB_CURRENT_VERSION=${SDL_DYLIB_CURRENT_VERSION} SDL_DYLIB_COMPAT_VERSION=${SDL_DYLIB_COMPAT_VERSION}")
 
-check_cpu_architecture(x86 SDL_CPU_X86)
-check_cpu_architecture(x64 SDL_CPU_X64)
-check_cpu_architecture(arm32 SDL_CPU_ARM32)
-check_cpu_architecture(arm64 SDL_CPU_ARM64)
-check_cpu_architecture(loongarch64 SDL_CPU_LOONGARCH64)
+SDL_DetectCPUArchitecture()
 
 # Check for 64 or 32 bit
 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
diff --git a/cmake/sdlplatform.cmake b/cmake/sdlplatform.cmake
index f55ad313b309..e32529a6782b 100644
--- a/cmake/sdlplatform.cmake
+++ b/cmake/sdlplatform.cmake
@@ -53,3 +53,24 @@ macro(SDL_DetectCMakePlatform)
     set(${SDL_CMAKE_PLATFORM} TRUE)
   endif()
 endmacro()
+
+function(SDL_DetectCPUArchitecture)
+  set(archs x86 x64 arm32 arm64 loongarch64)
+  set(found FALSE)
+  foreach(arch ${archs})
+    string(TOUPPER "${arch}" arch_upper)
+    set(var_name "SDL_CPU_${arch_upper}")
+    if(found)
+      set(${var_name} 0 PARENT_SCOPE)
+    else()
+      check_cpu_architecture(${arch} ${var_name})
+      set(found ${${var_name}})
+      set(${var_name} ${${var_name}} PARENT_SCOPE)
+      set(SDL_CPU_NAME ${arch})
+    endif()
+  endforeach()
+  if(NOT found)
+    message(AUTHOR_WARNING "Unknown architecture (failed archs=${archs})")
+    set(SDL_CPU_NAME "(unknown)")
+  endif()
+endfunction()