Source: Improve detection of Linux architectures requiring explicit libatomic

Extend commit fa3c4b6dbf (Source: Link libatomic when needed on any
Linux architecture, 2023-08-24, v3.27.5~9^2) to decide based on the
architecture targeted by the compiler, known since CMake 4.1.
Use `CMAKE_SYSTEM_PROCESSOR` only as a fallback for older versions.

Fixes: #27406
This commit is contained in:
Brad King
2025-11-24 11:29:15 -05:00
parent 5961f5f3bc
commit 37171d9db0

View File

@@ -102,11 +102,18 @@ else()
set(CMake_HAVE_CXX_FILESYSTEM FALSE)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|aarch64)$")
cm_check_cxx_feature(atomic_builtin)
if(NOT CMake_HAVE_CXX_ATOMIC_BUILTIN)
set(cm_check_cxx_feature_LINK_LIBRARIES atomic)
cm_check_cxx_feature(atomic_lib) # defines CMake_HAVE_CXX_ATOMIC_LIB
unset(cm_check_cxx_feature_LINK_LIBRARIES)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
if(CMAKE_CXX_COMPILER_ARCHITECTURE_ID)
set(arch_id "${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}")
else()
set(arch_id "${CMAKE_SYSTEM_PROCESSOR}")
endif()
if(NOT arch_id MATCHES "^(x86_64|aarch64)$")
cm_check_cxx_feature(atomic_builtin)
if(NOT CMake_HAVE_CXX_ATOMIC_BUILTIN)
set(cm_check_cxx_feature_LINK_LIBRARIES atomic)
cm_check_cxx_feature(atomic_lib) # defines CMake_HAVE_CXX_ATOMIC_LIB
unset(cm_check_cxx_feature_LINK_LIBRARIES)
endif()
endif()
endif()