From 1c9f8eeb4f03e71a3166217d7c074d3b34e3b113 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 26 Feb 2025 14:42:39 -0500 Subject: [PATCH 1/7] Help: Document CMAKE__COMPILER_ARCHITECTURE_ID Issue: #17702 --- Help/manual/cmake-variables.7.rst | 2 +- .../CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst | 166 +++++++++++++++++- 2 files changed, 163 insertions(+), 5 deletions(-) diff --git a/Help/manual/cmake-variables.7.rst b/Help/manual/cmake-variables.7.rst index 735f11e455..50a344cc79 100644 --- a/Help/manual/cmake-variables.7.rst +++ b/Help/manual/cmake-variables.7.rst @@ -73,6 +73,7 @@ Variables that Provide Information /variable/CMAKE_JOB_POOL_PRECOMPILE_HEADER /variable/CMAKE_JOB_POOLS /variable/CMAKE_LANG_COMPILER_AR + /variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID /variable/CMAKE_LANG_COMPILER_FRONTEND_VARIANT /variable/CMAKE_LANG_COMPILER_LINKER /variable/CMAKE_LANG_COMPILER_LINKER_FRONTEND_VARIANT @@ -815,7 +816,6 @@ are subject to change, and not recommended for use in project code. /variable/CMAKE_HOME_DIRECTORY /variable/CMAKE_INTERNAL_PLATFORM_ABI /variable/CMAKE_LANG_COMPILER_ABI - /variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID /variable/CMAKE_LANG_COMPILER_VERSION_INTERNAL /variable/CMAKE_LANG_LINKER_PREFERENCE /variable/CMAKE_LANG_LINKER_PREFERENCE_PROPAGATES diff --git a/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst b/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst index 8057566026..817a95f156 100644 --- a/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst +++ b/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst @@ -3,8 +3,166 @@ CMAKE__COMPILER_ARCHITECTURE_ID .. versionadded:: 3.10 -An internal variable subject to change. +Identifier indicating the +target architecture of the compiler for language ````. -This is used to identify the variant of a compiler based on its target -architecture. For some compilers this is needed to determine the correct -usage. +Possible values for each platform are documented in the following sections. + +Windows Platforms with MSVC ABI +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. versionadded:: 3.10 + +These identifiers are used when the :variable:`CMAKE__COMPILER` +targets Windows with a MSVC ABI (``_WIN32`` and ``_MSC_VER`` are defined). + +``ARM64`` + ARM 64-bit + +``ARM64EC`` + ARM 64-bit Emulation-Compatible + +``ARMV4I``, ``ARMV5I``, ``ARMV7`` + ARM 32-bit + +``IA64`` + Itanium 64-bit + +``MIPS`` + MIPS + +``SHx``, ``SH3``, ``SH3DSP``, ``SH4``, ``SH5`` + SuperH + +``x64`` + Intel 64-bit + +``X86`` + Intel 32-bit + +Windows Platforms with Watcom ABI +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. versionadded:: 3.10 + +These identifiers are used when :variable:`CMAKE__COMPILER_ID` is +``OpenWatcom`` or ``Watcom``. + +``I86`` + Intel 16-bit + +``X86`` + Intel 32-bit + +Green Hills MULTI Platforms +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. versionadded:: 3.14 + +These identifiers are used when :variable:`CMAKE__COMPILER_ID` is +``GHS``. + +``ARM`` + ARM 32-bit + +``PPC`` + PowerPC 32-bit + +``PPC64`` + PowerPC 64-bit + +``x64`` + Intel 64-bit + +``X86`` + Intel 32-bit + +IAR Platforms +^^^^^^^^^^^^^ + +.. versionadded:: 3.10 + +These identifiers are used when :variable:`CMAKE__COMPILER_ID` is +``IAR``. + +``8051`` + .. + +``ARM`` + .. + +``AVR`` + .. + +``MSP430`` + .. + +``RH850`` + .. + +``RISCV`` + .. + +``RL78`` + .. + +``RX`` + .. + +``STM8`` + .. + +``V850`` + .. + +TASKING Platforms +^^^^^^^^^^^^^^^^^ + +.. versionadded:: 3.25 + +These identifiers are used when :variable:`CMAKE__COMPILER_ID` is +``Tasking``. + +``8051`` + .. + +``ARC`` + .. + +``ARM`` + .. + +``MCS`` + .. + +``PCP`` + .. + +``TriCore`` + .. + +Texas Instruments Platforms +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. versionadded:: 3.19 + +These identifiers are used when :variable:`CMAKE__COMPILER_ID` is +``TI``. + +``ARM`` + .. + +``Blackfin`` + .. + +``MSP430`` + .. + +``SHARC`` + .. + +``TMS320C28x`` + .. + +``TMS320C6x`` + .. From 67ab5808042effc61322e19db5ea725f68812e2a Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 13 Mar 2025 15:39:34 -0400 Subject: [PATCH 2/7] Windows/Clang: Fix indentation in platform information module --- Modules/Platform/Windows-Clang.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/Platform/Windows-Clang.cmake b/Modules/Platform/Windows-Clang.cmake index c6dc423b63..34ed2bcf91 100644 --- a/Modules/Platform/Windows-Clang.cmake +++ b/Modules/Platform/Windows-Clang.cmake @@ -228,7 +228,7 @@ if("x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC" set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-imsvc") set(CMAKE_${lang}_LINK_MODE LINKER) -endmacro() + endmacro() else() cmake_policy(GET CMP0091 __WINDOWS_CLANG_CMP0091) if(__WINDOWS_CLANG_CMP0091 STREQUAL "NEW") From c0224f5aa1e1c964dd1f331b91198906f7fc0915 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 13 Mar 2025 14:55:10 -0400 Subject: [PATCH 3/7] CMakeDetermineCompilerABI: Make ABI info string more robust Apply the fix from commit 70c2dc8a64 (ENH: Make compiler id detection more robust, 2008-03-10, v2.6.0~67) the `INFO:abi` string. --- Modules/CMakeCompilerABI.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Modules/CMakeCompilerABI.h b/Modules/CMakeCompilerABI.h index ec0d78543a..621e3f87bb 100644 --- a/Modules/CMakeCompilerABI.h +++ b/Modules/CMakeCompilerABI.h @@ -40,6 +40,12 @@ static unsigned short const info_byte_order_little_endian[] = { # define ABI_ID "ELF" #endif +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ #if defined(ABI_ID) -static char const info_abi[] = "INFO:abi[" ABI_ID "]"; +static char const* info_abi = "INFO" + ":" + "abi[" ABI_ID "]"; #endif From eddf66eaef2d2fd0bdc65c5ce94aeef692e9abea Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 19 Mar 2025 13:12:57 -0400 Subject: [PATCH 4/7] CMakeDetermineASMCompiler: De-duplicate list of compiler info variables --- Modules/CMakeDetermineASMCompiler.cmake | 42 ++++++++------------ Modules/Internal/CMakeInspectASMLinker.cmake | 3 ++ 2 files changed, 19 insertions(+), 26 deletions(-) diff --git a/Modules/CMakeDetermineASMCompiler.cmake b/Modules/CMakeDetermineASMCompiler.cmake index c4b460364e..59f5558a2b 100644 --- a/Modules/CMakeDetermineASMCompiler.cmake +++ b/Modules/CMakeDetermineASMCompiler.cmake @@ -238,18 +238,6 @@ else() message(STATUS "Didn't find assembler") endif() -foreach(_var - COMPILER - COMPILER_ID - COMPILER_ARG1 - COMPILER_ENV_VAR - COMPILER_AR - COMPILER_RANLIB - COMPILER_VERSION - ) - set(_CMAKE_ASM_${_var} "${CMAKE_ASM${ASM_DIALECT}_${_var}}") -endforeach() - if(CMAKE_ASM${ASM_DIALECT}_COMPILER_SYSROOT) string(CONCAT _SET_CMAKE_ASM_COMPILER_SYSROOT "set(CMAKE_ASM${ASM_DIALECT}_COMPILER_SYSROOT \"${CMAKE_ASM${ASM_DIALECT}_COMPILER_SYSROOT}\")\n" @@ -273,17 +261,19 @@ else() endif() # configure variables set in this file for fast reload later on -configure_file(${CMAKE_ROOT}/Modules/CMakeASMCompiler.cmake.in - ${CMAKE_PLATFORM_INFO_DIR}/CMakeASM${ASM_DIALECT}Compiler.cmake @ONLY) - -foreach(_var - COMPILER - COMPILER_ID - COMPILER_ARG1 - COMPILER_ENV_VAR - COMPILER_AR - COMPILER_RANLIB - COMPILER_VERSION - ) - unset(_CMAKE_ASM_${_var}) -endforeach() +block() + foreach(_var IN ITEMS + # Keep in sync with Internal/CMakeTestASMLinker. + COMPILER + COMPILER_ID + COMPILER_ARG1 + COMPILER_ENV_VAR + COMPILER_AR + COMPILER_RANLIB + COMPILER_VERSION + ) + set(_CMAKE_ASM_${_var} "${CMAKE_ASM${ASM_DIALECT}_${_var}}") + endforeach() + configure_file(${CMAKE_ROOT}/Modules/CMakeASMCompiler.cmake.in + ${CMAKE_PLATFORM_INFO_DIR}/CMakeASM${ASM_DIALECT}Compiler.cmake @ONLY) +endblock() diff --git a/Modules/Internal/CMakeInspectASMLinker.cmake b/Modules/Internal/CMakeInspectASMLinker.cmake index 3f256765ef..8d7a39ba6c 100644 --- a/Modules/Internal/CMakeInspectASMLinker.cmake +++ b/Modules/Internal/CMakeInspectASMLinker.cmake @@ -4,6 +4,8 @@ # Re-configure to save learned information. block() foreach(_var IN ITEMS + # Compiler information. + # Keep in sync with CMakeDetermineASMCompiler. COMPILER COMPILER_ID COMPILER_ARG1 @@ -11,6 +13,7 @@ block() COMPILER_AR COMPILER_RANLIB COMPILER_VERSION + # Linker information. COMPILER_LINKER COMPILER_LINKER_ID COMPILER_LINKER_VERSION From 8e46672b29e02c4fdd815ca6c956549e506dd17c Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 19 Mar 2025 14:15:09 -0400 Subject: [PATCH 5/7] Fortran: Detect pointer size on sparc architectures --- Modules/CMakeFortranCompilerABI.F | 4 ++++ Modules/CMakeFortranCompilerABI.F90 | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/Modules/CMakeFortranCompilerABI.F b/Modules/CMakeFortranCompilerABI.F index f4a5489a14..f0cd0c5325 100644 --- a/Modules/CMakeFortranCompilerABI.F +++ b/Modules/CMakeFortranCompilerABI.F @@ -12,6 +12,8 @@ PRINT *, 'INFO:sizeof_dptr[8]' #elif defined(__x86_64__) PRINT *, 'INFO:sizeof_dptr[8]' +#elif defined(__sparcv9) || defined(__sparcv9__) || defined(__sparc64__) + PRINT *, 'INFO:sizeof_dptr[8]' #elif defined(_ILP32) PRINT *, 'INFO:sizeof_dptr[4]' @@ -19,6 +21,8 @@ PRINT *, 'INFO:sizeof_dptr[4]' #elif defined(__i386__) PRINT *, 'INFO:sizeof_dptr[4]' +#elif defined(__sparc) || defined(__sparc__) + PRINT *, 'INFO:sizeof_dptr[4]' #elif defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 8 PRINT *, 'INFO:sizeof_dptr[8]' diff --git a/Modules/CMakeFortranCompilerABI.F90 b/Modules/CMakeFortranCompilerABI.F90 index 4a1715331d..6369fe9ed4 100644 --- a/Modules/CMakeFortranCompilerABI.F90 +++ b/Modules/CMakeFortranCompilerABI.F90 @@ -20,6 +20,8 @@ PRINT *, 'INFO:sizeof_dptr[8]' PRINT *, 'INFO:sizeof_dptr[8]' #elif defined(__x86_64__) PRINT *, 'INFO:sizeof_dptr[8]' +#elif defined(__sparcv9) || defined(__sparcv9__) || defined(__sparc64__) +PRINT *, 'INFO:sizeof_dptr[8]' #elif defined(_ILP32) PRINT *, 'INFO:sizeof_dptr[4]' @@ -27,6 +29,8 @@ PRINT *, 'INFO:sizeof_dptr[4]' PRINT *, 'INFO:sizeof_dptr[4]' #elif defined(__i386__) PRINT *, 'INFO:sizeof_dptr[4]' +#elif defined(__sparc) || defined(__sparc__) +PRINT *, 'INFO:sizeof_dptr[4]' #elif defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 8 PRINT *, 'INFO:sizeof_dptr[8]' From 019f0f8b329b2e8b2ed6ac6244212ed50b8c6320 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 13 Mar 2025 15:20:28 -0400 Subject: [PATCH 6/7] ARCHITECTURE_ID: Save persistently even if empty --- Modules/CMakeASMCompiler.cmake.in | 2 +- Modules/CMakeCCompiler.cmake.in | 2 +- Modules/CMakeCUDACompiler.cmake.in | 1 + Modules/CMakeCXXCompiler.cmake.in | 2 +- Modules/CMakeDetermineASMCompiler.cmake | 8 +------- Modules/CMakeDetermineCCompiler.cmake | 7 ------- Modules/CMakeDetermineCXXCompiler.cmake | 7 ------- Modules/CMakeDetermineFortranCompiler.cmake | 7 ------- Modules/CMakeDetermineHIPCompiler.cmake | 7 ------- Modules/CMakeDetermineOBJCCompiler.cmake | 7 ------- Modules/CMakeDetermineOBJCXXCompiler.cmake | 7 ------- Modules/CMakeFortranCompiler.cmake.in | 2 +- Modules/CMakeHIPCompiler.cmake.in | 1 + Modules/CMakeOBJCCompiler.cmake.in | 2 +- Modules/CMakeOBJCXXCompiler.cmake.in | 2 +- Modules/Internal/CMakeInspectASMLinker.cmake | 1 + 16 files changed, 10 insertions(+), 55 deletions(-) diff --git a/Modules/CMakeASMCompiler.cmake.in b/Modules/CMakeASMCompiler.cmake.in index ac92379150..7c75837055 100644 --- a/Modules/CMakeASMCompiler.cmake.in +++ b/Modules/CMakeASMCompiler.cmake.in @@ -18,7 +18,7 @@ set(CMAKE_ASM@ASM_DIALECT@_COMPILER_ID "@_CMAKE_ASM_COMPILER_ID@") set(CMAKE_ASM@ASM_DIALECT@_COMPILER_VERSION "@_CMAKE_ASM_COMPILER_VERSION@") set(CMAKE_ASM@ASM_DIALECT@_COMPILER_ENV_VAR "@_CMAKE_ASM_COMPILER_ENV_VAR@") @_SET_CMAKE_ASM_COMPILER_ID_VENDOR_MATCH@ -@_SET_CMAKE_ASM_COMPILER_ARCHITECTURE_ID@ +set(CMAKE_ASM@ASM_DIALECT@_ARCHITECTURE_ID "@_CMAKE_ASM_ARCHITECTURE_ID@") @_SET_CMAKE_ASM_COMPILER_SYSROOT@ set(CMAKE_ASM@ASM_DIALECT@_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) diff --git a/Modules/CMakeCCompiler.cmake.in b/Modules/CMakeCCompiler.cmake.in index 5642f99140..61bf9f2626 100644 --- a/Modules/CMakeCCompiler.cmake.in +++ b/Modules/CMakeCCompiler.cmake.in @@ -18,7 +18,7 @@ set(CMAKE_C_PLATFORM_ID "@CMAKE_C_PLATFORM_ID@") set(CMAKE_C_SIMULATE_ID "@CMAKE_C_SIMULATE_ID@") set(CMAKE_C_COMPILER_FRONTEND_VARIANT "@CMAKE_C_COMPILER_FRONTEND_VARIANT@") set(CMAKE_C_SIMULATE_VERSION "@CMAKE_C_SIMULATE_VERSION@") -@_SET_CMAKE_C_COMPILER_ARCHITECTURE_ID@ +set(CMAKE_C_COMPILER_ARCHITECTURE_ID "@CMAKE_C_COMPILER_ARCHITECTURE_ID@") @_SET_CMAKE_C_COMPILER_SYSROOT@ @SET_MSVC_C_ARCHITECTURE_ID@ @SET_CMAKE_XCODE_ARCHS@ diff --git a/Modules/CMakeCUDACompiler.cmake.in b/Modules/CMakeCUDACompiler.cmake.in index 6b8b43344e..ea31ea092b 100644 --- a/Modules/CMakeCUDACompiler.cmake.in +++ b/Modules/CMakeCUDACompiler.cmake.in @@ -23,6 +23,7 @@ set(CMAKE_CUDA_PLATFORM_ID "@CMAKE_CUDA_PLATFORM_ID@") set(CMAKE_CUDA_SIMULATE_ID "@CMAKE_CUDA_SIMULATE_ID@") set(CMAKE_CUDA_COMPILER_FRONTEND_VARIANT "@CMAKE_CUDA_COMPILER_FRONTEND_VARIANT@") set(CMAKE_CUDA_SIMULATE_VERSION "@CMAKE_CUDA_SIMULATE_VERSION@") +set(CMAKE_CUDA_COMPILER_ARCHITECTURE_ID "@CMAKE_CUDA_COMPILER_ARCHITECTURE_ID@") @SET_MSVC_CUDA_ARCHITECTURE_ID@ @_SET_CMAKE_CUDA_COMPILER_SYSROOT@ diff --git a/Modules/CMakeCXXCompiler.cmake.in b/Modules/CMakeCXXCompiler.cmake.in index b1de7fb014..a69d289a8b 100644 --- a/Modules/CMakeCXXCompiler.cmake.in +++ b/Modules/CMakeCXXCompiler.cmake.in @@ -20,7 +20,7 @@ set(CMAKE_CXX_PLATFORM_ID "@CMAKE_CXX_PLATFORM_ID@") set(CMAKE_CXX_SIMULATE_ID "@CMAKE_CXX_SIMULATE_ID@") set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "@CMAKE_CXX_COMPILER_FRONTEND_VARIANT@") set(CMAKE_CXX_SIMULATE_VERSION "@CMAKE_CXX_SIMULATE_VERSION@") -@_SET_CMAKE_CXX_COMPILER_ARCHITECTURE_ID@ +set(CMAKE_CXX_COMPILER_ARCHITECTURE_ID "@CMAKE_CXX_COMPILER_ARCHITECTURE_ID@") @_SET_CMAKE_CXX_COMPILER_SYSROOT@ @SET_MSVC_CXX_ARCHITECTURE_ID@ @SET_CMAKE_XCODE_ARCHS@ diff --git a/Modules/CMakeDetermineASMCompiler.cmake b/Modules/CMakeDetermineASMCompiler.cmake index 59f5558a2b..e0bcf5ce31 100644 --- a/Modules/CMakeDetermineASMCompiler.cmake +++ b/Modules/CMakeDetermineASMCompiler.cmake @@ -253,13 +253,6 @@ else() set(_SET_CMAKE_ASM_COMPILER_ID_VENDOR_MATCH "") endif() -if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID) - set(_SET_CMAKE_ASM_COMPILER_ARCHITECTURE_ID - "set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID ${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID})") -else() - set(_SET_CMAKE_ASM_COMPILER_ARCHITECTURE_ID "") -endif() - # configure variables set in this file for fast reload later on block() foreach(_var IN ITEMS @@ -271,6 +264,7 @@ block() COMPILER_AR COMPILER_RANLIB COMPILER_VERSION + COMPILER_ARCHITECTURE_ID ) set(_CMAKE_ASM_${_var} "${CMAKE_ASM${ASM_DIALECT}_${_var}}") endforeach() diff --git a/Modules/CMakeDetermineCCompiler.cmake b/Modules/CMakeDetermineCCompiler.cmake index 214bca1af5..98d57c80c0 100644 --- a/Modules/CMakeDetermineCCompiler.cmake +++ b/Modules/CMakeDetermineCCompiler.cmake @@ -210,13 +210,6 @@ else() set(_SET_CMAKE_C_COMPILER_SYSROOT "") endif() -if(CMAKE_C_COMPILER_ARCHITECTURE_ID) - set(_SET_CMAKE_C_COMPILER_ARCHITECTURE_ID - "set(CMAKE_C_COMPILER_ARCHITECTURE_ID ${CMAKE_C_COMPILER_ARCHITECTURE_ID})") -else() - set(_SET_CMAKE_C_COMPILER_ARCHITECTURE_ID "") -endif() - if(MSVC_C_ARCHITECTURE_ID) set(SET_MSVC_C_ARCHITECTURE_ID "set(MSVC_C_ARCHITECTURE_ID ${MSVC_C_ARCHITECTURE_ID})") diff --git a/Modules/CMakeDetermineCXXCompiler.cmake b/Modules/CMakeDetermineCXXCompiler.cmake index 895f558e3c..a5d33a0453 100644 --- a/Modules/CMakeDetermineCXXCompiler.cmake +++ b/Modules/CMakeDetermineCXXCompiler.cmake @@ -216,13 +216,6 @@ else() set(_SET_CMAKE_CXX_COMPILER_SYSROOT "") endif() -if(CMAKE_CXX_COMPILER_ARCHITECTURE_ID) - set(_SET_CMAKE_CXX_COMPILER_ARCHITECTURE_ID - "set(CMAKE_CXX_COMPILER_ARCHITECTURE_ID ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID})") -else() - set(_SET_CMAKE_CXX_COMPILER_ARCHITECTURE_ID "") -endif() - if(MSVC_CXX_ARCHITECTURE_ID) set(SET_MSVC_CXX_ARCHITECTURE_ID "set(MSVC_CXX_ARCHITECTURE_ID ${MSVC_CXX_ARCHITECTURE_ID})") diff --git a/Modules/CMakeDetermineFortranCompiler.cmake b/Modules/CMakeDetermineFortranCompiler.cmake index e0f9bef2ef..f7727a9f74 100644 --- a/Modules/CMakeDetermineFortranCompiler.cmake +++ b/Modules/CMakeDetermineFortranCompiler.cmake @@ -327,13 +327,6 @@ else() set(_SET_CMAKE_Fortran_COMPILER_SYSROOT "") endif() -if(CMAKE_Fortran_COMPILER_ARCHITECTURE_ID) - set(_SET_CMAKE_Fortran_COMPILER_ARCHITECTURE_ID - "set(CMAKE_Fortran_COMPILER_ARCHITECTURE_ID ${CMAKE_Fortran_COMPILER_ARCHITECTURE_ID})") -else() - set(_SET_CMAKE_Fortran_COMPILER_ARCHITECTURE_ID "") -endif() - if(MSVC_Fortran_ARCHITECTURE_ID) set(SET_MSVC_Fortran_ARCHITECTURE_ID "set(MSVC_Fortran_ARCHITECTURE_ID ${MSVC_Fortran_ARCHITECTURE_ID})") diff --git a/Modules/CMakeDetermineHIPCompiler.cmake b/Modules/CMakeDetermineHIPCompiler.cmake index 041302ab65..0efa81ed13 100644 --- a/Modules/CMakeDetermineHIPCompiler.cmake +++ b/Modules/CMakeDetermineHIPCompiler.cmake @@ -268,13 +268,6 @@ else() set(_SET_CMAKE_HIP_COMPILER_SYSROOT "") endif() -if(CMAKE_HIP_COMPILER_ARCHITECTURE_ID) - set(_SET_CMAKE_HIP_COMPILER_ARCHITECTURE_ID - "set(CMAKE_HIP_COMPILER_ARCHITECTURE_ID ${CMAKE_HIP_COMPILER_ARCHITECTURE_ID})") -else() - set(_SET_CMAKE_HIP_COMPILER_ARCHITECTURE_ID "") -endif() - if(MSVC_HIP_ARCHITECTURE_ID) set(SET_MSVC_HIP_ARCHITECTURE_ID "set(MSVC_HIP_ARCHITECTURE_ID ${MSVC_HIP_ARCHITECTURE_ID})") diff --git a/Modules/CMakeDetermineOBJCCompiler.cmake b/Modules/CMakeDetermineOBJCCompiler.cmake index 280be74408..43a0b4aabc 100644 --- a/Modules/CMakeDetermineOBJCCompiler.cmake +++ b/Modules/CMakeDetermineOBJCCompiler.cmake @@ -169,13 +169,6 @@ include(CMakeFindBinUtils) include(Compiler/${CMAKE_OBJC_COMPILER_ID}-FindBinUtils OPTIONAL) unset(_CMAKE_PROCESSING_LANGUAGE) -if(CMAKE_OBJC_COMPILER_ARCHITECTURE_ID) - set(_SET_CMAKE_OBJC_COMPILER_ARCHITECTURE_ID - "set(CMAKE_OBJC_COMPILER_ARCHITECTURE_ID ${CMAKE_OBJC_COMPILER_ARCHITECTURE_ID})") -else() - set(_SET_CMAKE_OBJC_COMPILER_ARCHITECTURE_ID "") -endif() - if(CMAKE_OBJC_XCODE_ARCHS) set(SET_CMAKE_XCODE_ARCHS "set(CMAKE_XCODE_ARCHS \"${CMAKE_OBJC_XCODE_ARCHS}\")") diff --git a/Modules/CMakeDetermineOBJCXXCompiler.cmake b/Modules/CMakeDetermineOBJCXXCompiler.cmake index 24f917540d..cf56342ebe 100644 --- a/Modules/CMakeDetermineOBJCXXCompiler.cmake +++ b/Modules/CMakeDetermineOBJCXXCompiler.cmake @@ -176,13 +176,6 @@ include(CMakeFindBinUtils) include(Compiler/${CMAKE_OBJCXX_COMPILER_ID}-FindBinUtils OPTIONAL) unset(_CMAKE_PROCESSING_LANGUAGE) -if(CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID) - set(_SET_CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID - "set(CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID ${CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID})") -else() - set(_SET_CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID "") -endif() - if(CMAKE_OBJCXX_XCODE_ARCHS) set(SET_CMAKE_XCODE_ARCHS "set(CMAKE_XCODE_ARCHS \"${CMAKE_OBJCXX_XCODE_ARCHS}\")") diff --git a/Modules/CMakeFortranCompiler.cmake.in b/Modules/CMakeFortranCompiler.cmake.in index 1a4acc4419..bfcf3f4f9f 100644 --- a/Modules/CMakeFortranCompiler.cmake.in +++ b/Modules/CMakeFortranCompiler.cmake.in @@ -8,7 +8,7 @@ set(CMAKE_Fortran_SIMULATE_ID "@CMAKE_Fortran_SIMULATE_ID@") set(CMAKE_Fortran_COMPILER_FRONTEND_VARIANT "@CMAKE_Fortran_COMPILER_FRONTEND_VARIANT@") set(CMAKE_Fortran_SIMULATE_VERSION "@CMAKE_Fortran_SIMULATE_VERSION@") @_SET_CMAKE_Fortran_XL_CPP@ -@_SET_CMAKE_Fortran_COMPILER_ARCHITECTURE_ID@ +set(CMAKE_Fortran_COMPILER_ARCHITECTURE_ID "@CMAKE_Fortran_COMPILER_ARCHITECTURE_ID@") @_SET_CMAKE_Fortran_COMPILER_SYSROOT@ @SET_MSVC_Fortran_ARCHITECTURE_ID@ set(CMAKE_AR "@CMAKE_AR@") diff --git a/Modules/CMakeHIPCompiler.cmake.in b/Modules/CMakeHIPCompiler.cmake.in index 0077c19593..2c762b894c 100644 --- a/Modules/CMakeHIPCompiler.cmake.in +++ b/Modules/CMakeHIPCompiler.cmake.in @@ -21,6 +21,7 @@ set(CMAKE_HIP_PLATFORM_ID "@CMAKE_HIP_PLATFORM_ID@") set(CMAKE_HIP_SIMULATE_ID "@CMAKE_HIP_SIMULATE_ID@") set(CMAKE_HIP_COMPILER_FRONTEND_VARIANT "@CMAKE_HIP_COMPILER_FRONTEND_VARIANT@") set(CMAKE_HIP_SIMULATE_VERSION "@CMAKE_HIP_SIMULATE_VERSION@") +set(CMAKE_HIP_COMPILER_ARCHITECTURE_ID "@CMAKE_HIP_COMPILER_ARCHITECTURE_ID@") @SET_MSVC_HIP_ARCHITECTURE_ID@ @_SET_CMAKE_HIP_COMPILER_SYSROOT@ set(CMAKE_HIP_COMPILER_ROCM_ROOT "@CMAKE_HIP_COMPILER_ROCM_ROOT@") diff --git a/Modules/CMakeOBJCCompiler.cmake.in b/Modules/CMakeOBJCCompiler.cmake.in index 23175b23c6..65207bac11 100644 --- a/Modules/CMakeOBJCCompiler.cmake.in +++ b/Modules/CMakeOBJCCompiler.cmake.in @@ -18,7 +18,7 @@ set(CMAKE_OBJC_PLATFORM_ID "@CMAKE_OBJC_PLATFORM_ID@") set(CMAKE_OBJC_SIMULATE_ID "@CMAKE_OBJC_SIMULATE_ID@") set(CMAKE_OBJC_COMPILER_FRONTEND_VARIANT "@CMAKE_OBJC_COMPILER_FRONTEND_VARIANT@") set(CMAKE_OBJC_SIMULATE_VERSION "@CMAKE_OBJC_SIMULATE_VERSION@") -@_SET_CMAKE_OBJC_COMPILER_ARCHITECTURE_ID@ +set(CMAKE_OBJC_COMPILER_ARCHITECTURE_ID "@CMAKE_OBJC_COMPILER_ARCHITECTURE_ID@") @SET_CMAKE_XCODE_ARCHS@ set(CMAKE_AR "@CMAKE_AR@") set(CMAKE_OBJC_COMPILER_AR "@CMAKE_OBJC_COMPILER_AR@") diff --git a/Modules/CMakeOBJCXXCompiler.cmake.in b/Modules/CMakeOBJCXXCompiler.cmake.in index a374acd174..78afc16eec 100644 --- a/Modules/CMakeOBJCXXCompiler.cmake.in +++ b/Modules/CMakeOBJCXXCompiler.cmake.in @@ -19,7 +19,7 @@ set(CMAKE_OBJCXX_PLATFORM_ID "@CMAKE_OBJCXX_PLATFORM_ID@") set(CMAKE_OBJCXX_SIMULATE_ID "@CMAKE_OBJCXX_SIMULATE_ID@") set(CMAKE_OBJCXX_COMPILER_FRONTEND_VARIANT "@CMAKE_OBJCXX_COMPILER_FRONTEND_VARIANT@") set(CMAKE_OBJCXX_SIMULATE_VERSION "@CMAKE_OBJCXX_SIMULATE_VERSION@") -@_SET_CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID@ +set(CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID "@CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID@") @SET_CMAKE_XCODE_ARCHS@ set(CMAKE_AR "@CMAKE_AR@") set(CMAKE_OBJCXX_COMPILER_AR "@CMAKE_OBJCXX_COMPILER_AR@") diff --git a/Modules/Internal/CMakeInspectASMLinker.cmake b/Modules/Internal/CMakeInspectASMLinker.cmake index 8d7a39ba6c..1ae7a402a8 100644 --- a/Modules/Internal/CMakeInspectASMLinker.cmake +++ b/Modules/Internal/CMakeInspectASMLinker.cmake @@ -13,6 +13,7 @@ block() COMPILER_AR COMPILER_RANLIB COMPILER_VERSION + COMPILER_ARCHITECTURE_ID # Linker information. COMPILER_LINKER COMPILER_LINKER_ID From 7f0f382c55f612eff5bbef1d9eb2c7a3268af2fa Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 24 Mar 2025 11:41:20 -0400 Subject: [PATCH 7/7] Provide CMAKE__COMPILER_ARCHITECTURE_ID on more compilers Provide it whenever we can detect a target architecture from the compiler during compiler inspection. In order to avoid changing existing IDs, do this only for compilers where we don't already detect a target architecture during compiler identification. Fixes: #17702 --- Help/release/dev/compiler-architecture-id.rst | 5 + .../CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst | 142 +++++++++++++++++- Modules/CMakeCCompilerABI.c | 3 + Modules/CMakeCUDACompilerABI.cu | 3 + Modules/CMakeCXXCompilerABI.cpp | 3 + Modules/CMakeCompilerABI.h | 109 ++++++++++++++ Modules/CMakeDetermineCompilerABI.cmake | 26 ++++ Modules/CMakeFortranCompilerABI.F | 103 +++++++++++++ Modules/CMakeFortranCompilerABI.F90 | 103 +++++++++++++ Modules/CMakeHIPCompilerABI.hip | 3 + Modules/CMakeOBJCCompilerABI.m | 3 + Modules/CMakeOBJCXXCompilerABI.mm | 3 + .../CMakeParseCompilerArchitectureId.cmake | 74 +++++++++ Modules/SystemInformation.in | 8 +- Tests/RunCMake/CompilerId/C-stdout.txt | 1 + Tests/RunCMake/CompilerId/C.cmake | 1 + Tests/RunCMake/CompilerId/CUDA-stdout.txt | 2 + Tests/RunCMake/CompilerId/CUDA.cmake | 1 + Tests/RunCMake/CompilerId/CXX-stdout.txt | 1 + Tests/RunCMake/CompilerId/CXX.cmake | 1 + Tests/RunCMake/CompilerId/Fortran-stdout.txt | 1 + Tests/RunCMake/CompilerId/Fortran.cmake | 1 + Tests/RunCMake/CompilerId/HIP-stdout.txt | 2 + Tests/RunCMake/CompilerId/HIP.cmake | 1 + Tests/RunCMake/CompilerId/OBJC-stdout.txt | 1 + Tests/RunCMake/CompilerId/OBJC.cmake | 1 + Tests/RunCMake/CompilerId/OBJCXX-stdout.txt | 1 + Tests/RunCMake/CompilerId/OBJCXX.cmake | 1 + Tests/SystemInformation/SystemInformation.in | 2 + 29 files changed, 603 insertions(+), 3 deletions(-) create mode 100644 Help/release/dev/compiler-architecture-id.rst create mode 100644 Modules/Internal/CMakeParseCompilerArchitectureId.cmake diff --git a/Help/release/dev/compiler-architecture-id.rst b/Help/release/dev/compiler-architecture-id.rst new file mode 100644 index 0000000000..aa4bd89949 --- /dev/null +++ b/Help/release/dev/compiler-architecture-id.rst @@ -0,0 +1,5 @@ +compiler-architecture-id +------------------------ + +* The :variable:`CMAKE__COMPILER_ARCHITECTURE_ID` variable is now + populated for most compilers, and documented for public use. diff --git a/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst b/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst index 817a95f156..9554037357 100644 --- a/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst +++ b/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst @@ -3,11 +3,149 @@ CMAKE__COMPILER_ARCHITECTURE_ID .. versionadded:: 3.10 -Identifier indicating the -target architecture of the compiler for language ````. +:ref:`List ` of identifiers indicating the +target architecture(s) of the compiler for language ````. + +Typically the list has one entry unless :variable:`CMAKE_OSX_ARCHITECTURES` +lists multiple architectures. Possible values for each platform are documented in the following sections. +.. Sync with: + Modules/CMakeCompilerABI.h + Modules/CMakeFortranCompilerABI.F + Modules/CMakeFortranCompilerABI.F90 + Modules/Internal/CMakeParseCompilerArchitectureId.cmake + +Apple Platforms +^^^^^^^^^^^^^^^ + +.. versionadded:: 4.1 + +These identifiers are used when the :variable:`CMAKE__COMPILER` +targets an Apple platform (``__APPLE__`` is defined). + +``arm64`` + ARM 64-bit + +``arm64e`` + ARM 64-bit with Pointer Authentication (PACs) + +``arm64_32`` + ARM 64-bit with 32-bit pointers (watchOS) + +``armv5``, ``armv6``, ``armv7``, ``armv7k``, ``armv7s`` + ARM 32-bit + +``i386``, ``i486``, ``i586``, ``i686`` + Intel 32-bit + +``ppc`` + PowerPC 32-bit + +``x86_64`` + Intel 64-bit + +UNIX Platforms +^^^^^^^^^^^^^^ + +.. versionadded:: 4.1 + +These identifiers are used when the :variable:`CMAKE__COMPILER` +targets a UNIX platform. + +``aarch64`` + ARM 64-bit + +``alpha`` + DEC Alpha + +``armv5``, ``armv6``, ``armv7`` + ARM 32-bit + +``i386``, ``i486``, ``i586``, ``i686`` + Intel 32-bit + +``ia64`` + Itanium 64-bit + +``loongarch32`` + LoongArch 32-bit + +``loongarch64`` + LoongArch 64-bit + +``m68k`` + Motorola 68000 + +``mips`` + MIPS 32-bit big-endian + +``mipsel`` + MIPS 32-bit little-endian + +``mips64`` + MIPS 64-bit big-endian + +``mips64el`` + MIPS 64-bit little-endian + +``parisc`` + PA-RISC 32-bit + +``parisc64`` + PA-RISC 64-bit + +``ppc`` + PowerPC 32-bit big-endian + +``ppcle`` + PowerPC 32-bit little-endian + +``ppc64`` + PowerPC 64-bit big-endian + +``ppc64le`` + PowerPC 64-bit little-endian + +``riscv32`` + RISC-V 32-bit + +``riscv64`` + RISC-V 64-bit + +``s390``, ``s390x`` + IBM Z + +``sparc`` + SPARC 32-bit + +``sparcv9`` + SPARC 64-bit + +``x86_64`` + Intel 64-bit + +Windows Platforms with GNU ABI (MinGW) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. versionadded:: 4.1 + +These identifiers are used when the :variable:`CMAKE__COMPILER` +targets Windows with a GNU ABI (``_WIN32`` and ``__MINGW32__`` are defined). + +``aarch64`` + ARM 64-bit + +``armv7`` + ARM 32-bit + +``i386``, ``i486``, ``i586``, ``i686`` + Intel 32-bit + +``x86_64`` + Intel 64-bit + Windows Platforms with MSVC ABI ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/Modules/CMakeCCompilerABI.c b/Modules/CMakeCCompilerABI.c index 63596be4a5..61e31d541b 100644 --- a/Modules/CMakeCCompilerABI.c +++ b/Modules/CMakeCCompilerABI.c @@ -22,6 +22,9 @@ int main(int argc, char* argv[]) require += info_byte_order_little_endian[argc]; #if defined(ABI_ID) require += info_abi[argc]; +#endif +#if defined(ARCHITECTURE_ID) + require += info_arch[argc]; #endif (void)argv; return require; diff --git a/Modules/CMakeCUDACompilerABI.cu b/Modules/CMakeCUDACompilerABI.cu index b04d0ec20f..1550a9d73f 100644 --- a/Modules/CMakeCUDACompilerABI.cu +++ b/Modules/CMakeCUDACompilerABI.cu @@ -13,6 +13,9 @@ int main(int argc, char* argv[]) require += info_byte_order_little_endian[argc]; #if defined(ABI_ID) require += info_abi[argc]; +#endif +#if defined(ARCHITECTURE_ID) + require += info_arch[argc]; #endif static_cast(argv); diff --git a/Modules/CMakeCXXCompilerABI.cpp b/Modules/CMakeCXXCompilerABI.cpp index 036b96ea36..23e4bdffea 100644 --- a/Modules/CMakeCXXCompilerABI.cpp +++ b/Modules/CMakeCXXCompilerABI.cpp @@ -12,6 +12,9 @@ int main(int argc, char* argv[]) require += info_byte_order_little_endian[argc]; #if defined(ABI_ID) require += info_abi[argc]; +#endif +#if defined(ARCHITECTURE_ID) + require += info_arch[argc]; #endif (void)argv; return require; diff --git a/Modules/CMakeCompilerABI.h b/Modules/CMakeCompilerABI.h index 621e3f87bb..dc71f9f92c 100644 --- a/Modules/CMakeCompilerABI.h +++ b/Modules/CMakeCompilerABI.h @@ -40,6 +40,110 @@ static unsigned short const info_byte_order_little_endian[] = { # define ABI_ID "ELF" #endif +/* Sync with: + * Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst + * Modules/CMakeFortranCompilerABI.F + * Modules/CMakeFortranCompilerABI.F90 + * Modules/Internal/CMakeParseCompilerArchitectureId.cmake + */ +#if defined(__APPLE__) && defined(__arm64__) +# if defined(__ARM64_ARCH_8_32__) +# define ARCHITECTURE_ID "arm64_32" +# elif defined(__arm64e__) +# define ARCHITECTURE_ID "arm64e" +# else +# define ARCHITECTURE_ID "arm64" +# endif +#elif defined(_MSC_VER) && defined(_M_ARM64EC) +# define ARCHITECTURE_ID "arm64ec" +#elif defined(_MSC_VER) && defined(_M_ARM64) +# define ARCHITECTURE_ID "arm64" +#elif defined(__arm64ec__) +# define ARCHITECTURE_ID "arm64ec" +#elif defined(__aarch64__) +# define ARCHITECTURE_ID "aarch64" +#elif __ARM_ARCH == 7 || _M_ARM == 7 || defined(__ARM_ARCH_7__) || \ + defined(__TI_ARM_V7__) +# if defined(__APPLE__) && defined(__ARM_ARCH_7K__) +# define ARCHITECTURE_ID "armv7k" +# elif defined(__APPLE__) && defined(__ARM_ARCH_7S__) +# define ARCHITECTURE_ID "armv7s" +# else +# define ARCHITECTURE_ID "armv7" +# endif +#elif __ARM_ARCH == 6 || _M_ARM == 6 || defined(__ARM_ARCH_6__) || \ + defined(__TI_ARM_V6__) +# define ARCHITECTURE_ID "armv6" +#elif __ARM_ARCH == 5 || _M_ARM == 5 || defined(__ARM_ARCH_5__) || \ + defined(__TI_ARM_V5__) +# define ARCHITECTURE_ID "armv5" +#elif defined(__alpha) || defined(__alpha) || defined(_M_ALPHA) +# define ARCHITECTURE_ID "alpha" +#elif defined(__x86_64) || defined(__x86_64__) || defined(__amd64) || \ + defined(__amd64__) || defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x86_64" +#elif defined(__i686) || defined(__i686__) || _M_IX86 == 600 +# define ARCHITECTURE_ID "i686" +#elif defined(__i586) || defined(__i586__) || _M_IX86 == 500 +# define ARCHITECTURE_ID "i586" +#elif defined(__i486) || defined(__i486__) || _M_IX86 == 400 +# define ARCHITECTURE_ID "i486" +#elif defined(__i386) || defined(__i386__) || defined(_M_IX86) +# define ARCHITECTURE_ID "i386" +#elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64) +# define ARCHITECTURE_ID "ia64" +#elif defined(__loongarch64) +# define ARCHITECTURE_ID "loongarch64" +#elif defined(__loongarch__) +# define ARCHITECTURE_ID "loongarch32" +#elif defined(__m68k__) +# define ARCHITECTURE_ID "m68k" +#elif defined(__mips64) || defined(__mips64__) +# if defined(_MIPSEL) +# define ARCHITECTURE_ID "mips64el" +# else +# define ARCHITECTURE_ID "mips64" +# endif +#elif defined(__mips) || defined(__mips__) +# if defined(_MIPSEL) +# define ARCHITECTURE_ID "mipsel" +# else +# define ARCHITECTURE_ID "mips" +# endif +#elif defined(__riscv) && __riscv_xlen == 64 +# define ARCHITECTURE_ID "riscv64" +#elif defined(__riscv) && __riscv_xlen == 32 +# define ARCHITECTURE_ID "riscv32" +#elif defined(__s390x__) +# define ARCHITECTURE_ID "s390x" +#elif defined(__s390__) +# define ARCHITECTURE_ID "s390" +#elif defined(__sparcv9) || defined(__sparcv9__) || defined(__sparc64__) +# define ARCHITECTURE_ID "sparcv9" +#elif defined(__sparc) || defined(__sparc__) +# define ARCHITECTURE_ID "sparc" +#elif defined(__hppa) || defined(__hppa__) +# if defined(__LP64__) +# define ARCHITECTURE_ID "parisc64" +# else +# define ARCHITECTURE_ID "parisc" +# endif +#elif defined(__ppc64__) || defined(__powerpc64__) || defined(__PPC64__) || \ + defined(_ARCH_PPC64) +# if defined(_LITTLE_ENDIAN) || defined(__LITTLE_ENDIAN__) +# define ARCHITECTURE_ID "ppc64le" +# else +# define ARCHITECTURE_ID "ppc64" +# endif +#elif defined(__ppc__) || defined(__powerpc__) || defined(__PPC__) || \ + defined(_ARCH_PPC) +# if defined(_LITTLE_ENDIAN) || defined(__LITTLE_ENDIAN__) +# define ARCHITECTURE_ID "ppcle" +# else +# define ARCHITECTURE_ID "ppc" +# endif +#endif + /* Construct the string literal in pieces to prevent the source from getting matched. Store it in a pointer rather than an array because some compilers will just produce instructions to fill the @@ -49,3 +153,8 @@ static char const* info_abi = "INFO" ":" "abi[" ABI_ID "]"; #endif +#if defined(ARCHITECTURE_ID) +static char const* info_arch = "INFO" + ":" + "arch[" ARCHITECTURE_ID "]"; +#endif diff --git a/Modules/CMakeDetermineCompilerABI.cmake b/Modules/CMakeDetermineCompilerABI.cmake index 9fe39514e9..23509ac379 100644 --- a/Modules/CMakeDetermineCompilerABI.cmake +++ b/Modules/CMakeDetermineCompilerABI.cmake @@ -150,6 +150,7 @@ function(CMAKE_DETERMINE_COMPILER_ABI lang src) set(ABI_SIZEOF_DPTR "NOTFOUND") set(ABI_BYTE_ORDER "NOTFOUND") set(ABI_NAME "NOTFOUND") + set(ARCHITECTURE_ID "") foreach(info ${ABI_STRINGS}) if("${info}" MATCHES "INFO:sizeof_dptr\\[0*([^]]*)\\]" AND NOT ABI_SIZEOF_DPTR) set(ABI_SIZEOF_DPTR "${CMAKE_MATCH_1}") @@ -167,6 +168,9 @@ function(CMAKE_DETERMINE_COMPILER_ABI lang src) if("${info}" MATCHES "INFO:abi\\[([^]]*)\\]" AND NOT ABI_NAME) set(ABI_NAME "${CMAKE_MATCH_1}") endif() + if("${info}" MATCHES "INFO:arch\\[([^]\"]*)\\]") + list(APPEND ARCHITECTURE_ID "${CMAKE_MATCH_1}") + endif() endforeach() if(ABI_SIZEOF_DPTR) @@ -183,6 +187,28 @@ function(CMAKE_DETERMINE_COMPILER_ABI lang src) set(CMAKE_${lang}_COMPILER_ABI "${ABI_NAME}" PARENT_SCOPE) endif() + # The GNU Fortran compiler does not predefine architecture macros. + if(NOT CMAKE_${lang}_COMPILER_ARCHITECTURE_ID AND NOT ARCHITECTURE_ID + AND lang STREQUAL "Fortran" AND CMAKE_${lang}_COMPILER_ID STREQUAL "GNU") + execute_process(COMMAND "${CMAKE_${lang}_COMPILER}" -dumpmachine + OUTPUT_VARIABLE _dumpmachine_triple OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE _dumpmachine_stderr + RESULT_VARIABLE _dumpmachine_result + ) + if(_dumpmachine_result EQUAL 0) + include(Internal/CMakeParseCompilerArchitectureId) + cmake_parse_compiler_architecture_id("${_dumpmachine_triple}" ARCHITECTURE_ID) + endif() + endif() + + # For some compilers we detect the architecture id during compiler identification. + # If this was not one of those, use what was detected during compiler ABI detection, + # which might be a list, e.g., when CMAKE_OSX_ARCHITECTURES has multiple values. + if(NOT CMAKE_${lang}_COMPILER_ARCHITECTURE_ID AND ARCHITECTURE_ID) + list(SORT ARCHITECTURE_ID) + set(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID "${ARCHITECTURE_ID}" PARENT_SCOPE) + endif() + # Parse implicit include directory for this language, if available. if(CMAKE_${lang}_VERBOSE_FLAG) set (implicit_incdirs "") diff --git a/Modules/CMakeFortranCompilerABI.F b/Modules/CMakeFortranCompilerABI.F index f0cd0c5325..81676cb7a7 100644 --- a/Modules/CMakeFortranCompilerABI.F +++ b/Modules/CMakeFortranCompilerABI.F @@ -40,5 +40,108 @@ #if defined(__ELF__) PRINT *, 'INFO:abi[ELF]' #endif + +#if 0 +! Sync with +! Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst +! Modules/CMakeCompilerABI.h +! Modules/CMakeFortranCompilerABI.F90 +! Modules/Internal/CMakeParseCompilerArchitectureId.cmake +#endif +#if defined(__APPLE__) && defined(__arm64__) +# if defined(__ARM64_ARCH_8_32__) + PRINT *, 'INFO:arch[arm64_32]' +# elif defined(__arm64e__) + PRINT *, 'INFO:arch[arm64e]' +# else + PRINT *, 'INFO:arch[arm64]' +# endif +#elif defined(_MSC_VER) && defined(_M_ARM64EC) + PRINT *, 'INFO:arch[arm64ec]' +#elif defined(_MSC_VER) && defined(_M_ARM64) + PRINT *, 'INFO:arch[arm64]' +#elif defined(__arm64ec__) + PRINT *, 'INFO:arch[arm64ec]' +#elif defined(__aarch64__) + PRINT *, 'INFO:arch[aarch64]' +#elif __ARM_ARCH == 7 || _M_ARM == 7 || defined(__ARM_ARCH_7__) +# if defined(__APPLE__) && defined(__ARM_ARCH_7K__) + PRINT *, 'INFO:arch[armv7k]' +# elif defined(__APPLE__) && defined(__ARM_ARCH_7S__) + PRINT *, 'INFO:arch[armv7s]' +# else + PRINT *, 'INFO:arch[armv7]' +# endif +#elif __ARM_ARCH == 6 || _M_ARM == 6 || defined(__ARM_ARCH_6__) + PRINT *, 'INFO:arch[armv6]' +#elif __ARM_ARCH == 5 || _M_ARM == 5 || defined(__ARM_ARCH_5__) + PRINT *, 'INFO:arch[armv5]' +#elif defined(__alpha) || defined(__alpha) || defined(_M_ALPHA) + PRINT *, 'INFO:arch[alpha]' +#elif defined(__x86_64) || defined(__x86_64__) || defined(__amd64) || \ + defined(__amd64__) || defined(_M_X64) || defined(_M_AMD64) + PRINT *, 'INFO:arch[x86_64]' +#elif defined(__i686) || defined(__i686__) || _M_IX86 == 600 + PRINT *, 'INFO:arch[i686]' +#elif defined(__i586) || defined(__i586__) || _M_IX86 == 500 + PRINT *, 'INFO:arch[i586]' +#elif defined(__i486) || defined(__i486__) || _M_IX86 == 400 + PRINT *, 'INFO:arch[i486]' +#elif defined(__i386) || defined(__i386__) || defined(_M_IX86) + PRINT *, 'INFO:arch[i386]' +#elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64) + PRINT *, 'INFO:arch[ia64]' +#elif defined(__loongarch64) + PRINT *, 'INFO:arch[loongarch64]' +#elif defined(__loongarch__) + PRINT *, 'INFO:arch[loongarch32]' +#elif defined(__m68k__) + PRINT *, 'INFO:arch[m68k]' +#elif defined(__mips64) || defined(__mips64__) +# if defined(_MIPSEL) + PRINT *, 'INFO:arch[mips64el]' +# else + PRINT *, 'INFO:arch[mips64]' +# endif +#elif defined(__mips) || defined(__mips__) +# if defined(_MIPSEL) + PRINT *, 'INFO:arch[mipsel]' +# else + PRINT *, 'INFO:arch[mips]' +# endif +#elif defined(__riscv) && __riscv_xlen == 64 + PRINT *, 'INFO:arch[riscv64]' +#elif defined(__riscv) && __riscv_xlen == 32 + PRINT *, 'INFO:arch[riscv32]' +#elif defined(__s390x__) + PRINT *, 'INFO:arch[s390x]' +#elif defined(__s390__) + PRINT *, 'INFO:arch[s390]' +#elif defined(__sparcv9) || defined(__sparcv9__) || defined(__sparc64__) + PRINT *, 'INFO:arch[sparcv9]' +#elif defined(__sparc) || defined(__sparc__) + PRINT *, 'INFO:arch[sparc]' +#elif defined(__hppa) || defined(__hppa__) +# if defined(__LP64__) + PRINT *, 'INFO:arch[parisc64]' +# else + PRINT *, 'INFO:arch[parisc]' +# endif +#elif defined(__ppc64__) || defined(__powerpc64__) || defined(__PPC64__) || \ + defined(_ARCH_PPC64) +# if defined(_LITTLE_ENDIAN) || defined(__LITTLE_ENDIAN__) + PRINT *, 'INFO:arch[ppc64le]' +# else + PRINT *, 'INFO:arch[ppc64]' +# endif +#elif defined(__ppc__) || defined(__powerpc__) || defined(__PPC__) || \ + defined(_ARCH_PPC) +# if defined(_LITTLE_ENDIAN) || defined(__LITTLE_ENDIAN__) + PRINT *, 'INFO:arch[ppcle]' +# else + PRINT *, 'INFO:arch[ppc]' +# endif +#endif + PRINT *, 'ABI Detection' END diff --git a/Modules/CMakeFortranCompilerABI.F90 b/Modules/CMakeFortranCompilerABI.F90 index 6369fe9ed4..2a9259b1a7 100644 --- a/Modules/CMakeFortranCompilerABI.F90 +++ b/Modules/CMakeFortranCompilerABI.F90 @@ -48,5 +48,108 @@ PRINT *, 'INFO:sizeof_dptr[4]' #if defined(__ELF__) PRINT *, 'INFO:abi[ELF]' #endif + +#if 0 +! Sync with +! Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst +! Modules/CMakeCompilerABI.h +! Modules/CMakeFortranCompilerABI.F +! Modules/Internal/CMakeParseCompilerArchitectureId.cmake +#endif +#if defined(__APPLE__) && defined(__arm64__) +# if defined(__ARM64_ARCH_8_32__) +PRINT *, 'INFO:arch[arm64_32]' +# elif defined(__arm64e__) +PRINT *, 'INFO:arch[arm64e]' +# else +PRINT *, 'INFO:arch[arm64]' +# endif +#elif defined(_MSC_VER) && defined(_M_ARM64EC) +PRINT *, 'INFO:arch[arm64ec]' +#elif defined(_MSC_VER) && defined(_M_ARM64) +PRINT *, 'INFO:arch[arm64]' +#elif defined(__arm64ec__) +PRINT *, 'INFO:arch[arm64ec]' +#elif defined(__aarch64__) +PRINT *, 'INFO:arch[aarch64]' +#elif __ARM_ARCH == 7 || _M_ARM == 7 || defined(__ARM_ARCH_7__) +# if defined(__APPLE__) && defined(__ARM_ARCH_7K__) +PRINT *, 'INFO:arch[armv7k]' +# elif defined(__APPLE__) && defined(__ARM_ARCH_7S__) +PRINT *, 'INFO:arch[armv7s]' +# else +PRINT *, 'INFO:arch[armv7]' +# endif +#elif __ARM_ARCH == 6 || _M_ARM == 6 || defined(__ARM_ARCH_6__) +PRINT *, 'INFO:arch[armv6]' +#elif __ARM_ARCH == 5 || _M_ARM == 5 || defined(__ARM_ARCH_5__) +PRINT *, 'INFO:arch[armv5]' +#elif defined(__alpha) || defined(__alpha) || defined(_M_ALPHA) +PRINT *, 'INFO:arch[alpha]' +#elif defined(__x86_64) || defined(__x86_64__) || defined(__amd64) || \ + defined(__amd64__) || defined(_M_X64) || defined(_M_AMD64) +PRINT *, 'INFO:arch[x86_64]' +#elif defined(__i686) || defined(__i686__) || _M_IX86 == 600 +PRINT *, 'INFO:arch[i686]' +#elif defined(__i586) || defined(__i586__) || _M_IX86 == 500 +PRINT *, 'INFO:arch[i586]' +#elif defined(__i486) || defined(__i486__) || _M_IX86 == 400 +PRINT *, 'INFO:arch[i486]' +#elif defined(__i386) || defined(__i386__) || defined(_M_IX86) +PRINT *, 'INFO:arch[i386]' +#elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64) +PRINT *, 'INFO:arch[ia64]' +#elif defined(__loongarch64) +PRINT *, 'INFO:arch[loongarch64]' +#elif defined(__loongarch__) +PRINT *, 'INFO:arch[loongarch32]' +#elif defined(__m68k__) +PRINT *, 'INFO:arch[m68k]' +#elif defined(__mips64) || defined(__mips64__) +# if defined(_MIPSEL) +PRINT *, 'INFO:arch[mips64el]' +# else +PRINT *, 'INFO:arch[mips64]' +# endif +#elif defined(__mips) || defined(__mips__) +# if defined(_MIPSEL) +PRINT *, 'INFO:arch[mipsel]' +# else +PRINT *, 'INFO:arch[mips]' +# endif +#elif defined(__riscv) && __riscv_xlen == 64 +PRINT *, 'INFO:arch[riscv64]' +#elif defined(__riscv) && __riscv_xlen == 32 +PRINT *, 'INFO:arch[riscv32]' +#elif defined(__s390x__) +PRINT *, 'INFO:arch[s390x]' +#elif defined(__s390__) +PRINT *, 'INFO:arch[s390]' +#elif defined(__sparcv9) || defined(__sparcv9__) || defined(__sparc64__) +PRINT *, 'INFO:arch[sparcv9]' +#elif defined(__sparc) || defined(__sparc__) +PRINT *, 'INFO:arch[sparc]' +#elif defined(__hppa) || defined(__hppa__) +# if defined(__LP64__) +PRINT *, 'INFO:arch[parisc64]' +# else +PRINT *, 'INFO:arch[parisc]' +# endif +#elif defined(__ppc64__) || defined(__powerpc64__) || defined(__PPC64__) || \ + defined(_ARCH_PPC64) +# if defined(_LITTLE_ENDIAN) || defined(__LITTLE_ENDIAN__) +PRINT *, 'INFO:arch[ppc64le]' +# else +PRINT *, 'INFO:arch[ppc64]' +# endif +#elif defined(__ppc__) || defined(__powerpc__) || defined(__PPC__) || \ + defined(_ARCH_PPC) +# if defined(_LITTLE_ENDIAN) || defined(__LITTLE_ENDIAN__) +PRINT *, 'INFO:arch[ppcle]' +# else +PRINT *, 'INFO:arch[ppc]' +# endif +#endif + PRINT *, 'ABI Detection' end program diff --git a/Modules/CMakeHIPCompilerABI.hip b/Modules/CMakeHIPCompilerABI.hip index 7d8b815d48..9910195cec 100644 --- a/Modules/CMakeHIPCompilerABI.hip +++ b/Modules/CMakeHIPCompilerABI.hip @@ -14,6 +14,9 @@ int main(int argc, char* argv[]) require += info_sizeof_dptr[argc]; #if defined(ABI_ID) require += info_abi[argc]; +#endif +#if defined(ARCHITECTURE_ID) + require += info_arch[argc]; #endif static_cast(argv); diff --git a/Modules/CMakeOBJCCompilerABI.m b/Modules/CMakeOBJCCompilerABI.m index 0726cd3eb4..8a6e99ff91 100644 --- a/Modules/CMakeOBJCCompilerABI.m +++ b/Modules/CMakeOBJCCompilerABI.m @@ -16,6 +16,9 @@ int main(int argc, char *argv[]) require += info_byte_order_little_endian[argc]; #if defined(ABI_ID) require += info_abi[argc]; +#endif +#if defined(ARCHITECTURE_ID) + require += info_arch[argc]; #endif (void)argv; return require; diff --git a/Modules/CMakeOBJCXXCompilerABI.mm b/Modules/CMakeOBJCXXCompilerABI.mm index 7b9fefccf5..84a96d4943 100644 --- a/Modules/CMakeOBJCXXCompilerABI.mm +++ b/Modules/CMakeOBJCXXCompilerABI.mm @@ -16,6 +16,9 @@ int main(int argc, char *argv[]) require += info_byte_order_little_endian[argc]; #if defined(ABI_ID) require += info_abi[argc]; +#endif +#if defined(ARCHITECTURE_ID) + require += info_arch[argc]; #endif (void)argv; return require; diff --git a/Modules/Internal/CMakeParseCompilerArchitectureId.cmake b/Modules/Internal/CMakeParseCompilerArchitectureId.cmake new file mode 100644 index 0000000000..9200158b05 --- /dev/null +++ b/Modules/Internal/CMakeParseCompilerArchitectureId.cmake @@ -0,0 +1,74 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file LICENSE.rst or https://cmake.org/licensing for details. + +function(cmake_parse_compiler_architecture_id triple arch_id_var) + # Sync with: + # Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst + # Modules/CMakeCompilerABI.h + # Modules/CMakeFortranCompilerABI.F + # Modules/CMakeFortranCompilerABI.F90 + if(_dumpmachine_triple MATCHES "^(aarch64|arm64)-apple-") + set(ARCHITECTURE_ID "arm64") + elseif(_dumpmachine_triple MATCHES "^(aarch64|arm64)_32-apple-") + set(ARCHITECTURE_ID "arm64_32") + elseif(_dumpmachine_triple MATCHES "^(aarch64|arm64)e-apple-") + set(ARCHITECTURE_ID "arm64e") + elseif(_dumpmachine_triple MATCHES "^(armv7k|armv7s)-apple-") + set(ARCHITECTURE_ID "${CMAKE_MATCH_1}") + elseif(_dumpmachine_triple MATCHES "^(aarch64|arm64)-") + set(ARCHITECTURE_ID "aarch64") + elseif(_dumpmachine_triple MATCHES "^(armv[5-7])[^-]*-") + set(ARCHITECTURE_ID "${CMAKE_MATCH_1}") + elseif(_dumpmachine_triple MATCHES "^alpha[^-]*-") + set(ARCHITECTURE_ID "alpha") + elseif(_dumpmachine_triple MATCHES "^(x86_64|amd64)-") + set(ARCHITECTURE_ID "x86_64") + elseif(_dumpmachine_triple MATCHES "^(i[3-6]86)-") + set(ARCHITECTURE_ID "${CMAKE_MATCH_1}") + elseif(_dumpmachine_triple MATCHES "^ia64-") + set(ARCHITECTURE_ID "ia64") + elseif(_dumpmachine_triple MATCHES "^loongarch64-") + set(ARCHITECTURE_ID "loongarch64") + elseif(_dumpmachine_triple MATCHES "^loongarch(32)?-") + set(ARCHITECTURE_ID "loongarch32") + elseif(_dumpmachine_triple MATCHES "^m68k-") + set(ARCHITECTURE_ID "m68k") + elseif(_dumpmachine_triple MATCHES "^mingw32$") # MinGW/MSYS 1.0: http://mingw.osdn.io/ + set(ARCHITECTURE_ID "i386") + elseif(_dumpmachine_triple MATCHES "^mips[^-]*64[^-]*el-") + set(ARCHITECTURE_ID "mips64el") + elseif(_dumpmachine_triple MATCHES "^mips[^-]*64[^-]*-") + set(ARCHITECTURE_ID "mips64") + elseif(_dumpmachine_triple MATCHES "^mips[^-]*el[^-]*-") + set(ARCHITECTURE_ID "mipsel") + elseif(_dumpmachine_triple MATCHES "^mips[^-]*-") + set(ARCHITECTURE_ID "mips") + elseif(_dumpmachine_triple MATCHES "^riscv64-") + set(ARCHITECTURE_ID "riscv64") + elseif(_dumpmachine_triple MATCHES "^riscv32-") + set(ARCHITECTURE_ID "riscv32") + elseif(_dumpmachine_triple MATCHES "^s390x-") + set(ARCHITECTURE_ID "s390x") + elseif(_dumpmachine_triple MATCHES "^s390-") + set(ARCHITECTURE_ID "s390") + elseif(_dumpmachine_triple MATCHES "^(sparcv9|sparc64)-") + set(ARCHITECTURE_ID "sparcv9") + elseif(_dumpmachine_triple MATCHES "^sparc-") + set(ARCHITECTURE_ID "sparc") + elseif(_dumpmachine_triple MATCHES "^(hppa64|parisc64)-") + set(ARCHITECTURE_ID "parisc64") + elseif(_dumpmachine_triple MATCHES "^(hppa[0-9.]*|parisc)-") + set(ARCHITECTURE_ID "parisc") + elseif(_dumpmachine_triple MATCHES "^(powerpc64le|ppc64le)-") + set(ARCHITECTURE_ID "ppc64le") + elseif(_dumpmachine_triple MATCHES "^(powerpc64|ppc64)-") + set(ARCHITECTURE_ID "ppc64") + elseif(_dumpmachine_triple MATCHES "^(powerpcle|ppcle)-") + set(ARCHITECTURE_ID "ppcle") + elseif(_dumpmachine_triple MATCHES "^(powerpc|ppc)-") + set(ARCHITECTURE_ID "ppc") + else() + set(ARCHITECTURE_ID "") + endif() + set("${arch_id_var}" "${ARCHITECTURE_ID}" PARENT_SCOPE) +endfunction() diff --git a/Modules/SystemInformation.in b/Modules/SystemInformation.in index 50b5720e2b..8d4b046c2d 100644 --- a/Modules/SystemInformation.in +++ b/Modules/SystemInformation.in @@ -18,8 +18,14 @@ CMAKE_SKIP_RPATH == "${CMAKE_SKIP_RPATH}" CMAKE_SYSTEM_INFO_FILE == "${CMAKE_SYSTEM_INFO_FILE}" CMAKE_SYSTEM_NAME == "${CMAKE_SYSTEM_NAME}" CMAKE_SYSTEM == "${CMAKE_SYSTEM}" -CMAKE_CXX_COMPILER == "${CMAKE_CXX_COMPILER}" CMAKE_C_COMPILER == "${CMAKE_C_COMPILER}" +CMAKE_C_COMPILER_ID == "${CMAKE_C_COMPILER_ID}" +CMAKE_C_COMPILER_VERSION == "${CMAKE_C_COMPILER_VERSION}" +CMAKE_C_COMPILER_ARCHITECTURE_ID == "${CMAKE_C_COMPILER_ARCHITECTURE_ID}" +CMAKE_CXX_COMPILER == "${CMAKE_CXX_COMPILER}" +CMAKE_CXX_COMPILER_ID == "${CMAKE_CXX_COMPILER_ID}" +CMAKE_CXX_COMPILER_VERSION == "${CMAKE_CXX_COMPILER_VERSION}" +CMAKE_CXX_COMPILER_ARCHITECTURE_ID == "${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" CMAKE_COMPILER_IS_GNUCC == "${CMAKE_COMPILER_IS_GNUCC}" CMAKE_COMPILER_IS_GNUCXX == "${CMAKE_COMPILER_IS_GNUCXX}" diff --git a/Tests/RunCMake/CompilerId/C-stdout.txt b/Tests/RunCMake/CompilerId/C-stdout.txt index e9ce46b0f3..14fad83650 100644 --- a/Tests/RunCMake/CompilerId/C-stdout.txt +++ b/Tests/RunCMake/CompilerId/C-stdout.txt @@ -1,3 +1,4 @@ -- CMAKE_C_COMPILER='[^']+' -- CMAKE_C_COMPILER_ID='[A-Za-z]+' -- CMAKE_C_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?' +-- CMAKE_C_COMPILER_ARCHITECTURE_ID='[A-Za-z0-9_;]+' diff --git a/Tests/RunCMake/CompilerId/C.cmake b/Tests/RunCMake/CompilerId/C.cmake index 3bf943f49c..4705450e09 100644 --- a/Tests/RunCMake/CompilerId/C.cmake +++ b/Tests/RunCMake/CompilerId/C.cmake @@ -2,3 +2,4 @@ enable_language(C) message(STATUS "CMAKE_C_COMPILER='${CMAKE_C_COMPILER}'") message(STATUS "CMAKE_C_COMPILER_ID='${CMAKE_C_COMPILER_ID}'") message(STATUS "CMAKE_C_COMPILER_VERSION='${CMAKE_C_COMPILER_VERSION}'") +message(STATUS "CMAKE_C_COMPILER_ARCHITECTURE_ID='${CMAKE_C_COMPILER_ARCHITECTURE_ID}'") diff --git a/Tests/RunCMake/CompilerId/CUDA-stdout.txt b/Tests/RunCMake/CompilerId/CUDA-stdout.txt index 459743f61d..4ed392db1c 100644 --- a/Tests/RunCMake/CompilerId/CUDA-stdout.txt +++ b/Tests/RunCMake/CompilerId/CUDA-stdout.txt @@ -1,11 +1,13 @@ (-- CMAKE_CUDA_COMPILER='[^']+' -- CMAKE_CUDA_COMPILER_ID='NVIDIA' -- CMAKE_CUDA_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?' +-- CMAKE_CUDA_COMPILER_ARCHITECTURE_ID='[A-Za-z0-9_;]+' -- CMAKE_CUDA_HOST_COMPILER_ID='[A-Za-z]+' -- CMAKE_CUDA_HOST_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?' |-- CMAKE_CUDA_COMPILER='[^']+' -- CMAKE_CUDA_COMPILER_ID='([^N]|N[^V]|NV[^I]|NVI[^D]|NVID[^I]|NVIDI[^A])[A-Za-z]*' -- CMAKE_CUDA_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?' +-- CMAKE_CUDA_COMPILER_ARCHITECTURE_ID='[A-Za-z0-9_;]+' -- CMAKE_CUDA_HOST_COMPILER_ID='' -- CMAKE_CUDA_HOST_COMPILER_VERSION='' ) diff --git a/Tests/RunCMake/CompilerId/CUDA.cmake b/Tests/RunCMake/CompilerId/CUDA.cmake index 874a2ffee8..8ba97dfd5d 100644 --- a/Tests/RunCMake/CompilerId/CUDA.cmake +++ b/Tests/RunCMake/CompilerId/CUDA.cmake @@ -2,5 +2,6 @@ enable_language(CUDA) message(STATUS "CMAKE_CUDA_COMPILER='${CMAKE_CUDA_COMPILER}'") message(STATUS "CMAKE_CUDA_COMPILER_ID='${CMAKE_CUDA_COMPILER_ID}'") message(STATUS "CMAKE_CUDA_COMPILER_VERSION='${CMAKE_CUDA_COMPILER_VERSION}'") +message(STATUS "CMAKE_CUDA_COMPILER_ARCHITECTURE_ID='${CMAKE_CUDA_COMPILER_ARCHITECTURE_ID}'") message(STATUS "CMAKE_CUDA_HOST_COMPILER_ID='${CMAKE_CUDA_HOST_COMPILER_ID}'") message(STATUS "CMAKE_CUDA_HOST_COMPILER_VERSION='${CMAKE_CUDA_HOST_COMPILER_VERSION}'") diff --git a/Tests/RunCMake/CompilerId/CXX-stdout.txt b/Tests/RunCMake/CompilerId/CXX-stdout.txt index 4062a97a9d..9fff7dfc95 100644 --- a/Tests/RunCMake/CompilerId/CXX-stdout.txt +++ b/Tests/RunCMake/CompilerId/CXX-stdout.txt @@ -1,3 +1,4 @@ -- CMAKE_CXX_COMPILER='[^']+' -- CMAKE_CXX_COMPILER_ID='[A-Za-z]+' -- CMAKE_CXX_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?' +-- CMAKE_CXX_COMPILER_ARCHITECTURE_ID='[A-Za-z0-9_;]+' diff --git a/Tests/RunCMake/CompilerId/CXX.cmake b/Tests/RunCMake/CompilerId/CXX.cmake index 4d8bd0ea89..eebf5fd058 100644 --- a/Tests/RunCMake/CompilerId/CXX.cmake +++ b/Tests/RunCMake/CompilerId/CXX.cmake @@ -2,3 +2,4 @@ enable_language(CXX) message(STATUS "CMAKE_CXX_COMPILER='${CMAKE_CXX_COMPILER}'") message(STATUS "CMAKE_CXX_COMPILER_ID='${CMAKE_CXX_COMPILER_ID}'") message(STATUS "CMAKE_CXX_COMPILER_VERSION='${CMAKE_CXX_COMPILER_VERSION}'") +message(STATUS "CMAKE_CXX_COMPILER_ARCHITECTURE_ID='${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}'") diff --git a/Tests/RunCMake/CompilerId/Fortran-stdout.txt b/Tests/RunCMake/CompilerId/Fortran-stdout.txt index 6a59c668d3..cdd17bba31 100644 --- a/Tests/RunCMake/CompilerId/Fortran-stdout.txt +++ b/Tests/RunCMake/CompilerId/Fortran-stdout.txt @@ -1,3 +1,4 @@ -- CMAKE_Fortran_COMPILER='[^']+' -- CMAKE_Fortran_COMPILER_ID='[A-Za-z]+' -- CMAKE_Fortran_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?' +-- CMAKE_Fortran_COMPILER_ARCHITECTURE_ID='[A-Za-z0-9_;]+' diff --git a/Tests/RunCMake/CompilerId/Fortran.cmake b/Tests/RunCMake/CompilerId/Fortran.cmake index d4ed0396a6..5039f5730c 100644 --- a/Tests/RunCMake/CompilerId/Fortran.cmake +++ b/Tests/RunCMake/CompilerId/Fortran.cmake @@ -2,3 +2,4 @@ enable_language(Fortran) message(STATUS "CMAKE_Fortran_COMPILER='${CMAKE_Fortran_COMPILER}'") message(STATUS "CMAKE_Fortran_COMPILER_ID='${CMAKE_Fortran_COMPILER_ID}'") message(STATUS "CMAKE_Fortran_COMPILER_VERSION='${CMAKE_Fortran_COMPILER_VERSION}'") +message(STATUS "CMAKE_Fortran_COMPILER_ARCHITECTURE_ID='${CMAKE_Fortran_COMPILER_ARCHITECTURE_ID}'") diff --git a/Tests/RunCMake/CompilerId/HIP-stdout.txt b/Tests/RunCMake/CompilerId/HIP-stdout.txt index ab779aae42..6aab4ecd34 100644 --- a/Tests/RunCMake/CompilerId/HIP-stdout.txt +++ b/Tests/RunCMake/CompilerId/HIP-stdout.txt @@ -1,11 +1,13 @@ (-- CMAKE_HIP_COMPILER='[^']+' -- CMAKE_HIP_COMPILER_ID='NVIDIA' -- CMAKE_HIP_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?' +-- CMAKE_HIP_COMPILER_ARCHITECTURE_ID='[A-Za-z0-9_;]+' -- CMAKE_HIP_HOST_COMPILER_ID='[A-Za-z]+' -- CMAKE_HIP_HOST_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?' |-- CMAKE_HIP_COMPILER='[^']+' -- CMAKE_HIP_COMPILER_ID='([^N]|N[^V]|NV[^I]|NVI[^D]|NVID[^I]|NVIDI[^A])[A-Za-z]*' -- CMAKE_HIP_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?' +-- CMAKE_HIP_COMPILER_ARCHITECTURE_ID='[A-Za-z0-9_;]+' -- CMAKE_HIP_HOST_COMPILER_ID='' -- CMAKE_HIP_HOST_COMPILER_VERSION='' ) diff --git a/Tests/RunCMake/CompilerId/HIP.cmake b/Tests/RunCMake/CompilerId/HIP.cmake index 095c3a8fe4..3fc31b3b3e 100644 --- a/Tests/RunCMake/CompilerId/HIP.cmake +++ b/Tests/RunCMake/CompilerId/HIP.cmake @@ -2,5 +2,6 @@ enable_language(HIP) message(STATUS "CMAKE_HIP_COMPILER='${CMAKE_HIP_COMPILER}'") message(STATUS "CMAKE_HIP_COMPILER_ID='${CMAKE_HIP_COMPILER_ID}'") message(STATUS "CMAKE_HIP_COMPILER_VERSION='${CMAKE_HIP_COMPILER_VERSION}'") +message(STATUS "CMAKE_HIP_COMPILER_ARCHITECTURE_ID='${CMAKE_HIP_COMPILER_ARCHITECTURE_ID}'") message(STATUS "CMAKE_HIP_HOST_COMPILER_ID='${CMAKE_HIP_HOST_COMPILER_ID}'") message(STATUS "CMAKE_HIP_HOST_COMPILER_VERSION='${CMAKE_HIP_HOST_COMPILER_VERSION}'") diff --git a/Tests/RunCMake/CompilerId/OBJC-stdout.txt b/Tests/RunCMake/CompilerId/OBJC-stdout.txt index 528675afff..1892caaddd 100644 --- a/Tests/RunCMake/CompilerId/OBJC-stdout.txt +++ b/Tests/RunCMake/CompilerId/OBJC-stdout.txt @@ -1,3 +1,4 @@ -- CMAKE_OBJC_COMPILER='[^']+' -- CMAKE_OBJC_COMPILER_ID='[A-Za-z]+' -- CMAKE_OBJC_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?' +-- CMAKE_OBJC_COMPILER_ARCHITECTURE_ID='[A-Za-z0-9_;]+' diff --git a/Tests/RunCMake/CompilerId/OBJC.cmake b/Tests/RunCMake/CompilerId/OBJC.cmake index 5ae4681c95..ad78a43a1a 100644 --- a/Tests/RunCMake/CompilerId/OBJC.cmake +++ b/Tests/RunCMake/CompilerId/OBJC.cmake @@ -2,3 +2,4 @@ enable_language(OBJC) message(STATUS "CMAKE_OBJC_COMPILER='${CMAKE_OBJC_COMPILER}'") message(STATUS "CMAKE_OBJC_COMPILER_ID='${CMAKE_OBJC_COMPILER_ID}'") message(STATUS "CMAKE_OBJC_COMPILER_VERSION='${CMAKE_OBJC_COMPILER_VERSION}'") +message(STATUS "CMAKE_OBJC_COMPILER_ARCHITECTURE_ID='${CMAKE_OBJC_COMPILER_ARCHITECTURE_ID}'") diff --git a/Tests/RunCMake/CompilerId/OBJCXX-stdout.txt b/Tests/RunCMake/CompilerId/OBJCXX-stdout.txt index 9d7f822a1c..239217e9d0 100644 --- a/Tests/RunCMake/CompilerId/OBJCXX-stdout.txt +++ b/Tests/RunCMake/CompilerId/OBJCXX-stdout.txt @@ -1,3 +1,4 @@ -- CMAKE_OBJCXX_COMPILER='[^']+' -- CMAKE_OBJCXX_COMPILER_ID='[A-Za-z]+' -- CMAKE_OBJCXX_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?' +-- CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID='[A-Za-z0-9_;]+' diff --git a/Tests/RunCMake/CompilerId/OBJCXX.cmake b/Tests/RunCMake/CompilerId/OBJCXX.cmake index 0e1875bdca..7d25237ae9 100644 --- a/Tests/RunCMake/CompilerId/OBJCXX.cmake +++ b/Tests/RunCMake/CompilerId/OBJCXX.cmake @@ -2,3 +2,4 @@ enable_language(OBJCXX) message(STATUS "CMAKE_OBJCXX_COMPILER='${CMAKE_OBJCXX_COMPILER}'") message(STATUS "CMAKE_OBJCXX_COMPILER_ID='${CMAKE_OBJCXX_COMPILER_ID}'") message(STATUS "CMAKE_OBJCXX_COMPILER_VERSION='${CMAKE_OBJCXX_COMPILER_VERSION}'") +message(STATUS "CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID='${CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID}'") diff --git a/Tests/SystemInformation/SystemInformation.in b/Tests/SystemInformation/SystemInformation.in index f7e81e625e..8abe60ce88 100644 --- a/Tests/SystemInformation/SystemInformation.in +++ b/Tests/SystemInformation/SystemInformation.in @@ -19,6 +19,7 @@ CMAKE_COMPILER_IS_GNUCC == "${CMAKE_COMPILER_IS_GNUCC}" CMAKE_COMPILER_IS_GNUCXX == "${CMAKE_COMPILER_IS_GNUCXX}" CMAKE_C_COMPILER_ID == "${CMAKE_C_COMPILER_ID}" CMAKE_C_COMPILER_VERSION == "${CMAKE_C_COMPILER_VERSION}" +CMAKE_C_COMPILER_ARCHITECTURE_ID == "${CMAKE_C_COMPILER_ARCHITECTURE_ID}" CMAKE_C90_STANDARD_COMPILE_OPTION == "${CMAKE_C90_STANDARD_COMPILE_OPTION}" CMAKE_C99_STANDARD_COMPILE_OPTION == "${CMAKE_C99_STANDARD_COMPILE_OPTION}" CMAKE_C11_STANDARD_COMPILE_OPTION == "${CMAKE_C11_STANDARD_COMPILE_OPTION}" @@ -31,6 +32,7 @@ CMAKE_C99_COMPILE_FEATURES == "${CMAKE_C99_COMPILE_FEATURES}" CMAKE_C11_COMPILE_FEATURES == "${CMAKE_C11_COMPILE_FEATURES}" CMAKE_CXX_COMPILER_ID == "${CMAKE_CXX_COMPILER_ID}" CMAKE_CXX_COMPILER_VERSION == "${CMAKE_CXX_COMPILER_VERSION}" +CMAKE_CXX_COMPILER_ARCHITECTURE_ID == "${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" CMAKE_CXX98_STANDARD_COMPILE_OPTION == "${CMAKE_CXX98_STANDARD_COMPILE_OPTION}" CMAKE_CXX11_STANDARD_COMPILE_OPTION == "${CMAKE_CXX11_STANDARD_COMPILE_OPTION}" CMAKE_CXX98_EXTENSION_COMPILE_OPTION == "${CMAKE_CXX98_EXTENSION_COMPILE_OPTION}"