From 8d803499687037180efa075fef99c4d0e3b826c5 Mon Sep 17 00:00:00 2001 From: crueter Date: Tue, 7 Oct 2025 21:30:56 -0400 Subject: [PATCH] ?? Signed-off-by: crueter --- CMakeLists.txt | 10 ++- CMakeModules/DetectArchitecture.cmake | 98 +++++++++++++++------------ 2 files changed, 58 insertions(+), 50 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index db7ac28fe8..96209292db 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,13 +65,11 @@ endif() include(DetectArchitecture) -if (NOT DEFINED ARCHITECTURE) - set(ARCHITECTURE "GENERIC") - set(ARCHITECTURE_GENERIC 1) - add_definitions(-DARCHITECTURE_GENERIC=1) -endif() +DetectArchitecture() -message(STATUS "Target architecture(s): ${ARCHITECTURE}") +if (NOT DEFINED ARCHITECTURE) + message(FATAL_ERROR "Architecture didn't make it out of scope, did you delete DetectArchitecture.cmake?") +endif() if (MSVC AND ARCHITECTURE_x86) message(FATAL_ERROR "Attempting to build with the x86 environment is not supported. \ diff --git a/CMakeModules/DetectArchitecture.cmake b/CMakeModules/DetectArchitecture.cmake index dc4feea56f..3ce2ed3119 100644 --- a/CMakeModules/DetectArchitecture.cmake +++ b/CMakeModules/DetectArchitecture.cmake @@ -40,57 +40,67 @@ if (CMAKE_OSX_ARCHITECTURES) return() endif() -macro(detect_architecture symbol arch) +function(detect_architecture symbol arch) if (NOT DEFINED ARCHITECTURE) set(CMAKE_REQUIRED_QUIET 1) check_symbol_exists("${symbol}" "" ARCHITECTURE_${arch}) unset(CMAKE_REQUIRED_QUIET) if (ARCHITECTURE_${arch}) - set(ARCHITECTURE "${arch}") - set(ARCHITECTURE_${arch} 1) + set(ARCHITECTURE "${arch}" PARENT_SCOPE) + set(ARCHITECTURE_${arch} 1 PARENT_SCOPE) add_definitions(-DARCHITECTURE_${arch}=1) endif() endif() +endfunction() + +macro(DetectArchitecture) + detect_architecture("__ARM64__" arm64) + detect_architecture("__aarch64__" arm64) + detect_architecture("_M_ARM64" arm64) + + detect_architecture("__arm__" arm) + detect_architecture("__TARGET_ARCH_ARM" arm) + detect_architecture("_M_ARM" arm) + + detect_architecture("__x86_64" x86_64) + detect_architecture("__x86_64__" x86_64) + detect_architecture("__amd64" x86_64) + detect_architecture("_M_X64" x86_64) + + detect_architecture("__i386" x86) + detect_architecture("__i386__" x86) + detect_architecture("_M_IX86" x86) + + detect_architecture("__ia64" ia64) + detect_architecture("__ia64__" ia64) + detect_architecture("_M_IA64" ia64) + + detect_architecture("__mips" mips) + detect_architecture("__mips__" mips) + detect_architecture("_M_MRX000" mips) + + detect_architecture("__ppc64__" ppc64) + detect_architecture("__powerpc64__" ppc64) + + detect_architecture("__ppc__" ppc) + detect_architecture("__ppc" ppc) + detect_architecture("__powerpc__" ppc) + detect_architecture("_ARCH_COM" ppc) + detect_architecture("_ARCH_PWR" ppc) + detect_architecture("_ARCH_PPC" ppc) + detect_architecture("_M_MPPC" ppc) + detect_architecture("_M_PPC" ppc) + + detect_architecture("__riscv" riscv) + + detect_architecture("__EMSCRIPTEN__" wasm) + + if (NOT DEFINED ARCHITECTURE) + set(ARCHITECTURE "GENERIC") + set(ARCHITECTURE_GENERIC 1) + add_definitions(-DARCHITECTURE_GENERIC=1) + endif() + + message(STATUS "Target architecture(s): ${ARCHITECTURE}") endmacro() - -detect_architecture("__ARM64__" arm64) -detect_architecture("__aarch64__" arm64) -detect_architecture("_M_ARM64" arm64) - -detect_architecture("__arm__" arm) -detect_architecture("__TARGET_ARCH_ARM" arm) -detect_architecture("_M_ARM" arm) - -detect_architecture("__x86_64" x86_64) -detect_architecture("__x86_64__" x86_64) -detect_architecture("__amd64" x86_64) -detect_architecture("_M_X64" x86_64) - -detect_architecture("__i386" x86) -detect_architecture("__i386__" x86) -detect_architecture("_M_IX86" x86) - -detect_architecture("__ia64" ia64) -detect_architecture("__ia64__" ia64) -detect_architecture("_M_IA64" ia64) - -detect_architecture("__mips" mips) -detect_architecture("__mips__" mips) -detect_architecture("_M_MRX000" mips) - -detect_architecture("__ppc64__" ppc64) -detect_architecture("__powerpc64__" ppc64) - -detect_architecture("__ppc__" ppc) -detect_architecture("__ppc" ppc) -detect_architecture("__powerpc__" ppc) -detect_architecture("_ARCH_COM" ppc) -detect_architecture("_ARCH_PWR" ppc) -detect_architecture("_ARCH_PPC" ppc) -detect_architecture("_M_MPPC" ppc) -detect_architecture("_M_PPC" ppc) - -detect_architecture("__riscv" riscv) - -detect_architecture("__EMSCRIPTEN__" wasm)