cmake: improve dependency checks
[awesomized/libmemcached] / CMake / CheckTbb.cmake
diff --git a/CMake/CheckTbb.cmake b/CMake/CheckTbb.cmake
new file mode 100644 (file)
index 0000000..1245e03
--- /dev/null
@@ -0,0 +1,20 @@
+function(CHECK_TBB)
+    check_header(execution)
+    # TBBConfig only sets TBB_FOUND to FALSE
+    if(HAVE_EXECUTION)
+        check_dependency(LIBTBB tbb tbb/task.h)
+        if(HAVE_LIBTBB)
+            cmake_push_check_state(RESET)
+            get_property(LIBTBB_INCLUDEDIR TARGET LIBTBB PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
+            get_property(LIBTBB_LIBRARIES TARGET LIBTBB PROPERTY INTERFACE_LINK_LIBRARIES)
+            set(CMAKE_REQUIRED_INCLUDES "${LIBTBB_INCLUDEDIR}")
+            set(CMAKE_REQUIRED_LIBRARIES "${LIBTBB_LIBRARIES}")
+            set(CMAKE_REQUIRED_FLAGS -std=c++17)
+            check_compiles(HAVE_TBB "std::vector<char> a={1,2,3}; std::all_of(std::execution::par,a.begin(),a.end(),[](char i){return i>0;});" vector algorithm execution)
+            cmake_pop_check_state(RESET)
+            if(HAVE_TBB)
+                set(HAVE_LIBTBB 1 PARENT_SCOPE)
+            endif()
+        endif()
+    endif()
+endfunction()