From f0b282a69587453ae396ce0cfd1f140310cc1e38 Mon Sep 17 00:00:00 2001 From: Richard E Barber Date: Mon, 28 Aug 2023 09:32:43 -0700 Subject: [PATCH 1/4] Create findATOMIC.cmake Provided by @Floessie https://github.com/Beep6581/RawTherapee/issues/6821#issuecomment-1678626624 --- cmake/modules/findATOMIC.cmake | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 cmake/modules/findATOMIC.cmake diff --git a/cmake/modules/findATOMIC.cmake b/cmake/modules/findATOMIC.cmake new file mode 100644 index 000000000..1669983c3 --- /dev/null +++ b/cmake/modules/findATOMIC.cmake @@ -0,0 +1,36 @@ +include(CheckCXXSourceCompiles) + +set(ATOMIC_CXX_TEST_SOURCE +" +#include +int main() { + std::atomic b(false); + std::atomic i(0); + std::atomic ui(0); + b.exchange(true); + ++i; + return ++ui; +} +") + +set(SAFE_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}") +list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES "atomic") + +check_cxx_source_compiles("${ATOMIC_CXX_TEST_SOURCE}" HAVE_CXX_ATOMICS_WITHOUT_LIB) + +if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB) + list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic") + check_cxx_source_compiles("${ATOMIC_CXX_TEST_SOURCE}" HAVE_CXX_ATOMICS_WITH_LIB) + if (NOT HAVE_CXX_ATOMICS_WITH_LIB) + message(FATAL_ERROR "libatomic support needed for std::atomic<> but not +found.") + endif() + set(ATOMIC_LIBRARIES "atomic") + set(ATOMIC_FOUND ON) +endif() + +set(CMAKE_REQUIRED_LIBRARIES "${SAFE_CMAKE_REQUIRED_LIBRARIES}") +unset(SAFE_CMAKE_REQUIRED_LIBRARIES) + +mark_as_advanced(ATOMIC_LIBRARIES) +mark_as_advanced(ATOMIC_FOUND) From ea33323d188a80a11169710b7461b95b91080947 Mon Sep 17 00:00:00 2001 From: Richard E Barber Date: Mon, 28 Aug 2023 09:37:08 -0700 Subject: [PATCH 2/4] Call findATOMIC.cmake libatomic is required in some builds. see #6821 --- CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e33d28cf..6f1bc382e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -565,6 +565,12 @@ if(WITH_MYFILE_MMAP) add_definitions(-DMYFILE_MMAP) endif() +# Atomic is required in some builds: #6821 +find_package(ATOMIC) +if(ATOMIC_FOUND) + target_link_libraries(executable ${ATOMIC_LIBRARIES}) +endif() + if(WITH_LTO) # Using LTO with older versions of binutils requires setting extra flags set(BINUTILS_VERSION_MININUM "2.29") From 7a5931135ed55c5f443dff90d9b2c26e3e8285fb Mon Sep 17 00:00:00 2001 From: Richard E Barber Date: Mon, 28 Aug 2023 09:43:09 -0700 Subject: [PATCH 3/4] handle libatomic in cmake module cmake/modules/findATOMIC.cmake detects libatomic flags. see #6821 --- rtgui/CMakeLists.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/rtgui/CMakeLists.txt b/rtgui/CMakeLists.txt index fb4acbe42..592b816a0 100644 --- a/rtgui/CMakeLists.txt +++ b/rtgui/CMakeLists.txt @@ -251,9 +251,10 @@ else() endif() # Excluding libatomic needed by Clang/FreeBSD, #3636 -if(OPENMP_FOUND AND NOT APPLE AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") - set(EXTRA_LIB_RTGUI "${EXTRA_LIB_RTGUI}" "atomic") -endif() +# Now handled in cmake/modules/findATOMIC.cmake, #6821 +# if(OPENMP_FOUND AND NOT APPLE AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") +# set(EXTRA_LIB_RTGUI "${EXTRA_LIB_RTGUI}" "atomic") +# endif() # Create config.h which defines where data are stored configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/config.h") From d6f102100b6a1d9ceebba18d07520b1dfb566bda Mon Sep 17 00:00:00 2001 From: Richard E Barber Date: Mon, 28 Aug 2023 10:06:59 -0700 Subject: [PATCH 4/4] Rename findATOMIC.cmake to FindATOMIC.cmake --- cmake/modules/{findATOMIC.cmake => FindATOMIC.cmake} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename cmake/modules/{findATOMIC.cmake => FindATOMIC.cmake} (100%) diff --git a/cmake/modules/findATOMIC.cmake b/cmake/modules/FindATOMIC.cmake similarity index 100% rename from cmake/modules/findATOMIC.cmake rename to cmake/modules/FindATOMIC.cmake