mirror of
https://github.com/Kitware/CMake.git
synced 2025-05-08 22:37:04 +08:00
Merge topic 'cxx-atomic'
78bbd58545 Source: Link libatomic when needed on Linux 32-bit ARM Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !8663
This commit is contained in:
commit
8268fc8661
@ -981,13 +981,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
|
||||
|
6
Source/Checks/cm_cxx_atomic.cxx
Normal file
6
Source/Checks/cm_cxx_atomic.cxx
Normal file
@ -0,0 +1,6 @@
|
||||
#include <atomic>
|
||||
int main()
|
||||
{
|
||||
std::atomic<long long>(0).load();
|
||||
return 0;
|
||||
}
|
1
Source/Checks/cm_cxx_atomic_builtin.cxx
Normal file
1
Source/Checks/cm_cxx_atomic_builtin.cxx
Normal file
@ -0,0 +1 @@
|
||||
#include "cm_cxx_atomic.cxx"
|
1
Source/Checks/cm_cxx_atomic_lib.cxx
Normal file
1
Source/Checks/cm_cxx_atomic_lib.cxx
Normal file
@ -0,0 +1 @@
|
||||
#include "cm_cxx_atomic.cxx"
|
@ -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()
|
||||
|
@ -33,6 +33,9 @@ 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()
|
||||
|
||||
if(CMake_BUILD_PCH)
|
||||
target_precompile_headers(cmcppdap PRIVATE "include/dap/protocol.h")
|
||||
|
Loading…
x
Reference in New Issue
Block a user