[PATCH 3/3] check whether 64bit atomics require -latomic
authorAndreas Beckmann <anbe@debian.org>
Mon, 27 Jun 2022 12:04:28 +0000 (14:04 +0200)
committerAndreas Beckmann <anbe@debian.org>
Tue, 13 Dec 2022 03:08:31 +0000 (03:08 +0000)
Gbp-Pq: Name 1020-check-whether-64bit-atomics-require-latomic.patch

CMakeLists.txt
lib/CL/CMakeLists.txt

index 719b560bcd80c49d8b3498c754e9b3a8b74814c6..727b3585579005c5e6efadc3edd4c7d222bef929 100644 (file)
@@ -646,6 +646,37 @@ endif()
 
 ######################################################################################
 
+function(check_64bit_atomics varname)
+    check_c_source_compiles("
+#include <stdint.h>
+uint64_t x = 0;
+int main()
+{
+  __atomic_add_fetch(&x, 1, __ATOMIC_SEQ_CST);
+  __atomic_sub_fetch(&x, 1, __ATOMIC_SEQ_CST);
+  return x;
+}
+" ${varname})
+endfunction(check_64bit_atomics)
+
+# platforms w/o lockfree 64bit atomics need to link with -latomic
+if(UNIX)
+    check_64bit_atomics(HAVE_64BIT_ATOMICS_WITHOUT_LIB)
+    if(HAVE_64BIT_ATOMICS_WITHOUT_LIB)
+        set(HAVE_64BIT_ATOMICS_WITH_LIB FALSE)
+    else()
+        set(OLD_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
+        list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
+        check_64bit_atomics(HAVE_64BIT_ATOMICS_WITH_LIB)
+        set(CMAKE_REQUIRED_LIBRARIES ${OLD_CMAKE_REQUIRED_LIBRARIES})
+        if(NOT HAVE_64BIT_ATOMICS_WITH_LIB)
+            message(SEND_ERROR "Missing 64-bit atomic increment")
+        endif()
+    endif()
+endif()
+
+######################################################################################
+
 if(UNIX AND ENABLE_LLVM AND HAVE_DLADDR)
     option(ENABLE_RELOCATION "make libpocl relocatable" ON)
 else()
index 342cdac4949b5bf67e0484293873c94a9b4cd50e..ed573409bfece324bdc7eacd4c25fc1b08aacb2d 100644 (file)
@@ -242,6 +242,10 @@ if(HAVE_CLOCK_GETTIME AND CMAKE_SYSTEM_NAME MATCHES "Linux")
   list(APPEND POCL_PRIVATE_LINK_LIST "rt")
 endif()
 
+if(HAVE_64BIT_ATOMICS_WITH_LIB)
+  list(APPEND POCL_PRIVATE_LINK_LIST "atomic")
+endif()
+
 list(APPEND POCL_PRIVATE_LINK_LIST ${LIBMATH} ${CMAKE_DL_LIBS} ${PTHREAD_LIBRARY})
 
 # see lib/CMakeLists.txt