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)