mirror of
https://github.com/EttusResearch/uhd.git
synced 2026-10-25 17:36:10 +00:00
cmake: added libatomic check for boost/lockfree/queue.hpp
The boost/lockfree/queue.hpp requires linking with the libatomic on some platforms (e.g. s390x). Fixes #410 Signed-off-by: Jaroslav Škarvada <jskarvad@redhat.com>
This commit is contained in:
parent
ef30ed1743
commit
3a249aa0b1
@ -33,6 +33,18 @@ function(CHECK_WORKING_CXX_ATOMICS64 varname)
|
||||
" ${varname})
|
||||
endfunction(CHECK_WORKING_CXX_ATOMICS64)
|
||||
|
||||
# Note: If we reach this, we have already checked for the existence of Boost,
|
||||
# and Boost.Lockfree is a header-only library so no linker options required.
|
||||
function(CHECK_WORKING_CXX_BOOST_ATOMICS varname)
|
||||
CHECK_CXX_SOURCE_COMPILES("
|
||||
#include <boost/lockfree/queue.hpp>
|
||||
boost::lockfree::queue<int> queue(1);
|
||||
int main() {
|
||||
return queue.is_lock_free();
|
||||
}
|
||||
" ${varname})
|
||||
endfunction(CHECK_WORKING_CXX_BOOST_ATOMICS)
|
||||
|
||||
macro(CHECK_ATOMICS_LIB_REQUIRED required_var)
|
||||
set(${required_var} FALSE)
|
||||
if(MSVC)
|
||||
@ -76,5 +88,24 @@ macro(CHECK_ATOMICS_LIB_REQUIRED required_var)
|
||||
"Host compiler appears to require libatomic for 64-bit operations, but cannot find it.")
|
||||
endif()
|
||||
endif()
|
||||
# Check whether boost requires atomic.
|
||||
CHECK_WORKING_CXX_BOOST_ATOMICS(HAVE_CXX_BOOST_ATOMICS_WITHOUT_LIB)
|
||||
# If not, check if the library exists, and atomics work with it.
|
||||
if(NOT HAVE_CXX_BOOST_ATOMICS_WITHOUT_LIB)
|
||||
check_library_exists(atomic __atomic_fetch_add_4 "" HAVE_LIBATOMIC)
|
||||
if(HAVE_LIBATOMIC)
|
||||
set(${required_var} TRUE)
|
||||
set(CMAKE_REQUIRED_LIBRARIES "atomic")
|
||||
CHECK_WORKING_CXX_BOOST_ATOMICS(HAVE_CXX_BOOST_ATOMICS_WITH_LIB)
|
||||
unset(CMAKE_REQUIRED_LIBRARIES)
|
||||
if (NOT HAVE_CXX_BOOST_ATOMICS_WITH_LIB)
|
||||
message(FATAL_ERROR "Host compiler must support std::atomic!")
|
||||
endif()
|
||||
else()
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"Boost appears to require libatomic, but cannot find it.")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endmacro(CHECK_ATOMICS_LIB_REQUIRED)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user