]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/jaegertracing/opentelemetry-cpp/third_party/prometheus-cpp/cmake/CheckAtomic.cmake
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / jaegertracing / opentelemetry-cpp / third_party / prometheus-cpp / cmake / CheckAtomic.cmake
diff --git a/ceph/src/jaegertracing/opentelemetry-cpp/third_party/prometheus-cpp/cmake/CheckAtomic.cmake b/ceph/src/jaegertracing/opentelemetry-cpp/third_party/prometheus-cpp/cmake/CheckAtomic.cmake
new file mode 100644 (file)
index 0000000..bbb6e47
--- /dev/null
@@ -0,0 +1,37 @@
+# Inspired by CheckAtomic.cmake from LLVM project:
+# https://github.com/llvm/llvm-project/blob/master/llvm/cmake/modules/CheckAtomic.cmake
+#
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+include(CheckCXXSourceCompiles)
+include(CheckLibraryExists)
+
+function(check_working_cxx_atomics varname)
+  check_cxx_source_compiles("
+#include <atomic>
+#include <cstdint>
+std::atomic<std::uint64_t> x(0);
+int main() {
+  std::uint64_t i = x.load(std::memory_order_relaxed);
+  return static_cast<int>(i);
+}
+" ${varname})
+endfunction()
+
+if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
+  # First check if atomics work without the library.
+  check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITHOUT_LIB)
+  # If not, check if the library exists, and atomics work with it.
+  if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB)
+    check_library_exists(atomic __atomic_load_8 "" HAVE_CXX_LIBATOMIC)
+    if(HAVE_CXX_LIBATOMIC)
+      list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
+      check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITH_LIB)
+      if(NOT HAVE_CXX_ATOMICS_WITH_LIB)
+        message(FATAL_ERROR "Host compiler must support 64-bit std::atomic!")
+      endif()
+    else()
+      message(FATAL_ERROR "Host compiler appears to require libatomic for 64-bit operations, but cannot find it.")
+    endif()
+  endif()
+endif()