Source: Link libatomic when needed on Linux 32-bit ARM

Fixes: #25114
This commit is contained in:
Brad King 2023-07-27 11:01:48 -04:00
parent 2d8aeaca07
commit 78bbd58545
6 changed files with 25 additions and 7 deletions

View File

@ -938,13 +938,9 @@ if(WIN32 AND NOT CYGWIN)
list(APPEND _tools cmcldeps)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR MATCHES "sparc")
# the atomic instructions are implemented using libatomic on some platforms,
# so linking to that may be required
check_library_exists(atomic __atomic_fetch_add_4 "" LIBATOMIC_NEEDED)
if(LIBATOMIC_NEEDED)
target_link_libraries(CMakeLib PUBLIC atomic)
endif()
# Some atomic instructions are implemented using libatomic on some platforms.
if(CMake_HAVE_CXX_ATOMIC_LIB)
target_link_libraries(CMakeLib PUBLIC atomic)
endif()
# On Apple we need CoreFoundation and CoreServices

View File

@ -0,0 +1,6 @@
#include <atomic>
int main()
{
std::atomic<long long>(0).load();
return 0;
}

View File

@ -0,0 +1 @@
#include "cm_cxx_atomic.cxx"

View File

@ -0,0 +1 @@
#include "cm_cxx_atomic.cxx"

View File

@ -17,6 +17,7 @@ function(cm_check_cxx_feature name)
try_run(CMake_RUN_CXX_${FEATURE} CMake_COMPILE_CXX_${FEATURE}
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_LIST_DIR}/cm_cxx_${name}.cxx
LINK_LIBRARIES ${cm_check_cxx_feature_LINK_LIBRARIES}
CMAKE_FLAGS ${maybe_cxx_standard}
OUTPUT_VARIABLE OUTPUT
)
@ -29,6 +30,7 @@ function(cm_check_cxx_feature name)
try_compile(CMake_HAVE_CXX_${FEATURE}
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_LIST_DIR}/cm_cxx_${name}.cxx
LINK_LIBRARIES ${cm_check_cxx_feature_LINK_LIBRARIES}
CMAKE_FLAGS ${maybe_cxx_standard}
OUTPUT_VARIABLE OUTPUT
)
@ -93,3 +95,12 @@ if (NOT CMAKE_CXX_STANDARD LESS "17")
else()
set(CMake_HAVE_CXX_FILESYSTEM FALSE)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR MATCHES "armv7l|sparc")
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()

View File

@ -33,5 +33,8 @@ if(WIN32)
elseif(NOT APPLE)
target_link_libraries(cmcppdap PRIVATE Threads::Threads)
endif()
if(CMake_HAVE_CXX_ATOMIC_LIB)
target_link_libraries(cmcppdap PRIVATE atomic)
endif()
install(FILES NOTICE DESTINATION ${CMAKE_DOC_DIR}/cmcppdap)