Add in-tree oneTBB build

This commit is contained in:
Tom Lin 2022-07-26 23:51:21 +01:00
parent 193eaa7fe2
commit f5513cd69e
5 changed files with 47 additions and 3 deletions

View File

@ -71,6 +71,25 @@ hint_flag(CXX_EXTRA_LINKER_FLAGS "
# Honor user's CXX_EXTRA_LINK_FLAGS
set(CXX_EXTRA_LINK_FLAGS ${CXX_EXTRA_FLAGS} ${CXX_EXTRA_LINK_FLAGS})
option(USE_TBB "Enable oneTBB library for *supported* models. Enabling this on models that
don't explicitly link against TBB is a no-op, see description of your selected
model on how this is used." OFF)
if (USE_TBB)
include(FetchContent)
FetchContent_Declare(
TBB
GIT_REPOSITORY https://github.com/oneapi-src/oneTBB.git
GIT_TAG faaf43c4ab22cb4b4267d65d5e218fa58800eea8
)
# Not using FetchContent_MakeAvailable because we need EXCLUDE_FROM_ALL
FetchContent_GetProperties(TBB)
if (NOT TBB_POPULATED)
FetchContent_Populate(TBB)
add_subdirectory(${tbb_SOURCE_DIR} ${tbb_BINARY_DIR} EXCLUDE_FROM_ALL)
endif ()
endif ()
# include our macros
include(cmake/register_models.cmake)

View File

@ -23,6 +23,10 @@ register_flag_optional(NVHPC_OFFLOAD
ccall - Compile for all supported compute capabilities"
"")
register_flag_optional(USE_TBB
"No-op if ONE_TBB_DIR is set. Link against an in-tree oneTBB via FetchContent_Declare, see top level CMakeLists.txt for details."
"OFF")
macro(setup)
set(CMAKE_CXX_STANDARD 17)
@ -35,5 +39,7 @@ macro(setup)
if(USE_VECTOR)
register_definitions(USE_VECTOR)
endif()
if (USE_TBB)
register_link_library(TBB::tbb)
endif ()
endmacro()

View File

@ -23,6 +23,11 @@ register_flag_optional(NVHPC_OFFLOAD
ccall - Compile for all supported compute capabilities"
"")
register_flag_optional(USE_TBB
"Link against an in-tree oneTBB via FetchContent_Declare, see top level CMakeLists.txt for details."
"OFF")
macro(setup)
set(CMAKE_CXX_STANDARD 17)
@ -35,5 +40,7 @@ macro(setup)
if(USE_VECTOR)
register_definitions(USE_VECTOR)
endif()
if (USE_TBB)
register_link_library(TBB::tbb)
endif ()
endmacro()

View File

@ -7,6 +7,10 @@ register_flag_optional(USE_VECTOR
"Whether to use std::vector<T> for storage or use aligned_alloc. C++ vectors are *zero* initialised where as aligned_alloc is uninitialised before first use."
"OFF")
register_flag_optional(USE_TBB
"No-op if ONE_TBB_DIR is set. Link against an in-tree oneTBB via FetchContent_Declare, see top level CMakeLists.txt for details."
"OFF")
macro(setup)
# TODO this needs to eventually be removed when CMake adds proper C++20 support or at least update the flag used here
@ -20,4 +24,7 @@ macro(setup)
if(USE_VECTOR)
register_definitions(USE_VECTOR)
endif()
if (USE_TBB)
register_link_library(TBB::tbb)
endif ()
endmacro()

View File

@ -19,15 +19,20 @@ register_flag_optional(USE_VECTOR
"Whether to use std::vector<T> for storage or use aligned_alloc. C++ vectors are *zero* initialised where as aligned_alloc is uninitialised before first use."
"OFF")
register_flag_optional(USE_TBB
"No-op if ONE_TBB_DIR is set. Link against an in-tree oneTBB via FetchContent_Declare, see top level CMakeLists.txt for details."
"OFF")
macro(setup)
if(ONE_TBB_DIR)
set(TBB_ROOT "${ONE_TBB_DIR}") # see https://github.com/Kitware/VTK/blob/0a31a9a3c1531ae238ac96a372fec4be42282863/CMake/FindTBB.cmake#L34
# docs on Intel's website refers to TBB_DIR which is not correct
find_package(TBB REQUIRED)
endif()
# No need to handle USE_TBB as both ONE_TBB_DIR and USE_TBB will create the TBB::tbb target
# see https://github.com/oneapi-src/oneTBB/blob/master/cmake/README.md#tbbconfig---integration-of-binary-packages
find_package(TBB REQUIRED)
register_link_library(TBB::tbb)
register_definitions(PARTITIONER_${PARTITIONER})
if(USE_VECTOR)