|
 |
613bc24 |
diff --git a/host/cmake/Modules/UHDAtomics.cmake b/host/cmake/Modules/UHDAtomics.cmake
|
|
 |
613bc24 |
index 4d53a2d..e206f39 100644
|
|
 |
613bc24 |
--- a/host/cmake/Modules/UHDAtomics.cmake
|
|
 |
613bc24 |
+++ b/host/cmake/Modules/UHDAtomics.cmake
|
|
 |
613bc24 |
@@ -33,6 +33,16 @@ function(CHECK_WORKING_CXX_ATOMICS64 varname)
|
|
 |
613bc24 |
" ${varname})
|
|
 |
613bc24 |
endfunction(CHECK_WORKING_CXX_ATOMICS64)
|
|
 |
613bc24 |
|
|
 |
613bc24 |
+function(CHECK_WORKING_CXX_BOOST_ATOMICS varname)
|
|
 |
613bc24 |
+ CHECK_CXX_SOURCE_COMPILES("
|
|
 |
613bc24 |
+ #include <boost/lockfree/queue.hpp>
|
|
 |
613bc24 |
+ boost::lockfree::queue<int> queue(1);
|
|
 |
613bc24 |
+ int main() {
|
|
 |
613bc24 |
+ return queue.is_lock_free();
|
|
 |
613bc24 |
+ }
|
|
 |
613bc24 |
+ " ${varname})
|
|
 |
613bc24 |
+endfunction(CHECK_WORKING_CXX_BOOST_ATOMICS)
|
|
 |
addbe90 |
+
|
|
 |
613bc24 |
macro(CHECK_ATOMICS_LIB_REQUIRED required_var)
|
|
 |
613bc24 |
set(${required_var} FALSE)
|
|
 |
613bc24 |
if(MSVC)
|
|
 |
613bc24 |
@@ -76,5 +86,24 @@ macro(CHECK_ATOMICS_LIB_REQUIRED required_var)
|
|
 |
613bc24 |
"Host compiler appears to require libatomic for 64-bit operations, but cannot find it.")
|
|
 |
613bc24 |
endif()
|
|
 |
613bc24 |
endif()
|
|
 |
613bc24 |
+ # Check whether boost requires atomic.
|
|
 |
613bc24 |
+ CHECK_WORKING_CXX_BOOST_ATOMICS(HAVE_CXX_BOOST_ATOMICS_WITHOUT_LIB)
|
|
 |
613bc24 |
+ # If not, check if the library exists, and atomics work with it.
|
|
 |
613bc24 |
+ if(NOT HAVE_CXX_BOOST_ATOMICS_WITHOUT_LIB)
|
|
 |
613bc24 |
+ check_library_exists(atomic __atomic_fetch_add_4 "" HAVE_LIBATOMIC)
|
|
 |
613bc24 |
+ if(HAVE_LIBATOMIC)
|
|
 |
613bc24 |
+ set(${required_var} TRUE)
|
|
 |
613bc24 |
+ set(CMAKE_REQUIRED_LIBRARIES "atomic")
|
|
 |
613bc24 |
+ CHECK_WORKING_CXX_BOOST_ATOMICS(HAVE_CXX_BOOST_ATOMICS_WITH_LIB)
|
|
 |
613bc24 |
+ unset(CMAKE_REQUIRED_LIBRARIES)
|
|
 |
613bc24 |
+ if (NOT HAVE_CXX_BOOST_ATOMICS_WITH_LIB)
|
|
 |
613bc24 |
+ message(FATAL_ERROR "Host compiler must support std::atomic!")
|
|
 |
613bc24 |
+ endif()
|
|
 |
613bc24 |
+ else()
|
|
 |
613bc24 |
+ message(
|
|
 |
613bc24 |
+ FATAL_ERROR
|
|
 |
613bc24 |
+ "Host compiler appears to require libatomic, but cannot find it.")
|
|
 |
613bc24 |
+ endif()
|
|
 |
613bc24 |
+ endif()
|
|
 |
613bc24 |
endif()
|
|
 |
613bc24 |
endmacro(CHECK_ATOMICS_LIB_REQUIRED)
|