diff --git a/cmake/FindWrapAtomic.cmake b/cmake/FindWrapAtomic.cmake index c2582bdd6bd..3ea72bb1882 100644 --- a/cmake/FindWrapAtomic.cmake +++ b/cmake/FindWrapAtomic.cmake @@ -10,35 +10,39 @@ include(CheckCXXSourceCompiles) set (atomic_test_sources "#include #include -void test(volatile std::atomic &a) -{ - std::int64_t v = a.load(std::memory_order_acquire); - while (!a.compare_exchange_strong(v, v + 1, - std::memory_order_acq_rel, - std::memory_order_acquire)) { - v = a.exchange(v - 1); - } - a.store(v + 1, std::memory_order_release); -} - int main(int, char **) { - void *ptr = (void*)0xffffffc0; // any random pointer - test(*reinterpret_cast *>(ptr)); + volatile std::atomic size_1; + volatile std::atomic size_2; + volatile std::atomic size_4; + volatile std::atomic size_8; + + ++size_1; + ++size_2; + ++size_4; + ++size_8; + + (void)size_1.load(std::memory_order_relaxed); + (void)size_2.load(std::memory_order_relaxed); + (void)size_4.load(std::memory_order_relaxed); + (void)size_8.load(std::memory_order_relaxed); + return 0; }") check_cxx_source_compiles("${atomic_test_sources}" HAVE_STDATOMIC) if(NOT HAVE_STDATOMIC) set(_req_libraries "${CMAKE_REQUIRED_LIBRARIES}") - set(CMAKE_REQUIRED_LIBRARIES "atomic") + find_library(atomic_LIB atomic REQUIRED) + set(CMAKE_REQUIRED_LIBRARIES ${atomic_LIB}) check_cxx_source_compiles("${atomic_test_sources}" HAVE_STDATOMIC_WITH_LIB) set(CMAKE_REQUIRED_LIBRARIES "${_req_libraries}") endif() add_library(WrapAtomic::WrapAtomic INTERFACE IMPORTED) if(HAVE_STDATOMIC_WITH_LIB) - target_link_libraries(WrapAtomic::WrapAtomic INTERFACE atomic) + # atomic_LIB is already found above. + target_link_libraries(WrapAtomic::WrapAtomic INTERFACE ${atomic_LIB}) endif() set(WrapAtomic_FOUND 1)