1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
From 2404e50c9fe8c5b687b4518caa78d191933361cf Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sun, 1 Feb 2026 10:11:25 +0100
Subject: [PATCH] Check if libatomic is needed
/usr/bin/powerpc-linux-gnu-ld.bfd: CMakeFiles/scitokens-integration-test.dir/integration_test.cpp.o: undefined reference to symbol '__atomic_load_8@@LIBATOMIC_1.0'
/usr/bin/powerpc-linux-gnu-ld.bfd: /usr/lib/powerpc-linux-gnu/libatomic.so.1: error adding symbols: DSO missing from command line
---
cmake/FindAtomic.cmake | 42 ++++++++++++++++++++++++++++++++++++++++++
test/CMakeLists.txt | 3 ++-
2 files changed, 44 insertions(+), 1 deletion(-)
create mode 100644 cmake/FindAtomic.cmake
diff --git a/cmake/FindAtomic.cmake b/cmake/FindAtomic.cmake
new file mode 100644
index 0000000..2848e00
--- /dev/null
+++ b/cmake/FindAtomic.cmake
@@ -0,0 +1,42 @@
+include(CheckSourceCompiles)
+
+function( check_working_cxx_atomics varname )
+ CHECK_SOURCE_COMPILES( CXX "
+ #include <cstdlib>
+ #include <atomic>
+ #include <cstdint>
+
+ int main() {
+ std::atomic<uint8_t> a1;
+ std::atomic<uint16_t> a2;
+ std::atomic<uint32_t> a3;
+ std::atomic<uint64_t> a4;
+ return a1++ + a2++ + a3++ + a4++;
+ }" ${varname}
+ )
+endfunction( check_working_cxx_atomics varname )
+
+set( _found FALSE )
+check_working_cxx_atomics( CXX_ATOMIC_NO_LINK_NEEDED )
+if( CXX_ATOMIC_NO_LINK_NEEDED )
+ set( _found TRUE )
+else()
+ set( OLD_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} )
+ list( APPEND CMAKE_REQUIRED_LIBRARIES "atomic" )
+ check_working_cxx_atomics( HAVE_CXX_ATOMICS_WITH_LIB )
+ set( CMAKE_REQUIRED_LIBRARIES ${OLD_CMAKE_REQUIRED_LIBRARIES} )
+ if( HAVE_CXX_ATOMICS_WITH_LIB )
+ set( _found TRUE )
+ endif()
+endif()
+
+add_library( std::atomic INTERFACE IMPORTED )
+
+if( HAVE_CXX_ATOMICS_WITH_LIB )
+ set_property( TARGET std::atomic APPEND PROPERTY INTERFACE_LINK_LIBRARIES atomic )
+endif()
+
+set( Atomic_FOUND ${_found} CACHE BOOL "TRUE if we can run a program using std::atomic" FORCE )
+if( Atomic_FIND_REQUIRED AND NOT Atomic_FOUND )
+ message( FATAL_ERROR "Cannot run simple program using std::atomic" )
+endif()
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 6f1f9a4..b3d4b5f 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -51,11 +51,12 @@ add_test(
)
# Integration test executable
+find_package( Atomic REQUIRED )
add_executable(scitokens-integration-test integration_test.cpp)
if( NOT SCITOKENS_EXTERNAL_GTEST )
add_dependencies(scitokens-integration-test gtest)
endif()
-target_link_libraries(scitokens-integration-test SciTokens "${LIBGTEST}" pthread)
+target_link_libraries(scitokens-integration-test SciTokens "${LIBGTEST}" pthread std::atomic)
# Integration test fixture - setup
add_test(
--
2.52.0
|