From 52a9af3dca0c1e7b5e3007967e2ee0042a704f8b Mon Sep 17 00:00:00 2001 From: MerryMage Date: Thu, 11 Jun 2020 13:15:13 +0100 Subject: [PATCH] CMakeLists: Rework architecture detection * Also only enable xybak/vixl on appropriate architectures --- CMakeLists.txt | 7 ---- CMakeModules/DetectArchitecture.cmake | 54 +++++++++++++++++++++++---- externals/CMakeLists.txt | 6 ++- src/CMakeLists.txt | 2 +- 4 files changed, 52 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cf67fb7f..e51b764a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -107,13 +107,6 @@ endif() # Arch detection include(DetectArchitecture) -if (MSVC) - detect_architecture("_M_AMD64" x86_64) - detect_architecture("_M_ARM64" Aarch64) -else() - detect_architecture("__x86_64__" x86_64) - detect_architecture("__aarch64__" Aarch64) -endif() if (NOT DEFINED ARCHITECTURE) message(FATAL_ERROR "Unsupported architecture encountered. Ending CMake generation.") endif() diff --git a/CMakeModules/DetectArchitecture.cmake b/CMakeModules/DetectArchitecture.cmake index e984c6b8..ba6679cd 100644 --- a/CMakeModules/DetectArchitecture.cmake +++ b/CMakeModules/DetectArchitecture.cmake @@ -1,16 +1,56 @@ include(CheckSymbolExists) + function(detect_architecture symbol arch) if (NOT DEFINED ARCHITECTURE) - set(CMAKE_REQUIRED_QUIET 1) - check_symbol_exists("${symbol}" "" ARCHITECTURE_${arch}) + set(CMAKE_REQUIRED_QUIET YES) + check_symbol_exists("${symbol}" "" DETECT_ARCHITECTURE_${arch}) unset(CMAKE_REQUIRED_QUIET) - # The output variable needs to be unique across invocations otherwise - # CMake's crazy scope rules will keep it defined - if (ARCHITECTURE_${arch}) + if (DETECT_ARCHITECTURE_${arch}) set(ARCHITECTURE "${arch}" PARENT_SCOPE) - set(ARCHITECTURE_${arch} 1 PARENT_SCOPE) - add_definitions(-DARCHITECTURE_${arch}=1) endif() + + unset(DETECT_ARCHITECTURE_${arch} CACHE) endif() endfunction() + +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) diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 3fb20a51..e5bbb936 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -27,12 +27,14 @@ target_include_directories(robin_map SYSTEM INTERFACE "$