Skip to content

Commit 2fed497

Browse files
authored
[tbb] use proper CMake target and move builtin-build to subdir
1 parent 9456c7a commit 2fed497

13 files changed

Lines changed: 109 additions & 105 deletions

File tree

.github/workflows/root-ci-config/buildconfig/alma10-clang_ninja.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ builtin_lzma=ON
1111
builtin_nlohmann=ON
1212
builtin_pcre=ON
1313
builtin_png=ON
14+
builtin_tbb=ON
1415
builtin_tiff=ON
1516
builtin_vdt=ON
1617
builtin_xxhash=ON

builtins/tbb/CMakeLists.txt

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
set(ROOT_TBB_URL ${lcgpackages}/oneTBB-2021.9.0.tar.gz)
2+
set(ROOT_TBB_HASH 1ce48f34dada7837f510735ff1172f6e2c261b09460e3bf773b49791d247d24e)
3+
4+
if(MSVC)
5+
if(CMAKE_GENERATOR MATCHES Ninja)
6+
if(CMAKE_BUILD_TYPE MATCHES Debug)
7+
set(tbbsuffix "_debug")
8+
endif()
9+
else()
10+
set(tbb_build Release)
11+
if(winrtdebug)
12+
set(tbb_build Debug)
13+
set(tbbsuffix "_debug")
14+
endif()
15+
endif()
16+
set(ROOT_TBB_LIBRARY ${CMAKE_BINARY_DIR}/lib/tbb12${tbbsuffix}.lib)
17+
install(DIRECTORY ${CMAKE_BINARY_DIR}/bin/ DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries FILES_MATCHING PATTERN "tbb*.dll")
18+
install(DIRECTORY ${CMAKE_BINARY_DIR}/lib/ DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries FILES_MATCHING PATTERN "tbb*.lib")
19+
else()
20+
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
21+
set(tbbsuffix "_debug")
22+
endif()
23+
set(ROOT_TBB_LIBRARY ${CMAKE_BINARY_DIR}/lib/libtbb${tbbsuffix}${CMAKE_SHARED_LIBRARY_SUFFIX})
24+
install(DIRECTORY ${CMAKE_BINARY_DIR}/lib/ DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries FILES_MATCHING PATTERN "libtbb*")
25+
endif()
26+
if(tbb_build)
27+
set(TBB_EXTRA_BUILD_ARGS --config ${tbb_build})
28+
endif()
29+
30+
ExternalProject_Add(
31+
BUILTIN_TBB
32+
URL ${ROOT_TBB_URL}
33+
URL_HASH SHA256=${ROOT_TBB_HASH}
34+
INSTALL_DIR ${CMAKE_BINARY_DIR}
35+
CMAKE_ARGS -G ${CMAKE_GENERATOR}
36+
-DCMAKE_POLICY_VERSION_MINIMUM=3.5
37+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
38+
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
39+
-DCMAKE_CXX_FLAGS=${ROOT_EXTERNAL_CXX_FLAGS}
40+
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
41+
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
42+
-DCMAKE_INSTALL_INCLUDEDIR=${CMAKE_BINARY_DIR}/include
43+
-DCMAKE_INSTALL_BINDIR=${CMAKE_BINARY_DIR}/bin
44+
-DCMAKE_INSTALL_LIBDIR=${CMAKE_BINARY_DIR}/lib
45+
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}
46+
-DTBBMALLOC_BUILD=OFF
47+
-DTBBMALLOC_PROXY_BUILD=OFF
48+
-DTBB_ENABLE_IPO=OFF
49+
-DTBB_STRICT=OFF
50+
-DTBB_TEST=OFF
51+
BUILD_COMMAND ${CMAKE_COMMAND} --build . ${TBB_EXTRA_BUILD_ARGS}
52+
INSTALL_COMMAND ${CMAKE_COMMAND} --install . ${TBB_EXTRA_BUILD_ARGS}
53+
LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1
54+
BUILD_BYPRODUCTS ${ROOT_TBB_LIBRARY}
55+
TIMEOUT 600
56+
)
57+
58+
set(ROOT_TBB_INCLUDE_DIR ${CMAKE_BINARY_DIR}/ginclude)
59+
60+
ExternalProject_Add_Step(
61+
BUILTIN_TBB tbb2externals
62+
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/include/tbb ${ROOT_TBB_INCLUDE_DIR}/tbb
63+
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/include/oneapi ${ROOT_TBB_INCLUDE_DIR}/oneapi
64+
DEPENDEES install
65+
)
66+
67+
file(MAKE_DIRECTORY ${ROOT_TBB_INCLUDE_DIR})
68+
add_library(TBB::tbb IMPORTED STATIC GLOBAL)
69+
add_dependencies(TBB::tbb BUILTIN_TBB)
70+
set_target_properties(TBB::tbb PROPERTIES
71+
IMPORTED_LOCATION ${ROOT_TBB_LIBRARY}
72+
INTERFACE_INCLUDE_DIRECTORIES ${ROOT_TBB_INCLUDE_DIR})
73+
target_compile_definitions(TBB::tbb INTERFACE TBB_SUPPRESS_DEPRECATED_MESSAGES=1)
74+
if(MSVC)
75+
target_compile_definitions(TBB::tbb INTERFACE __TBB_NO_IMPLICIT_LINKAGE=1)
76+
endif()
77+
78+
set(TBB_FOUND ON PARENT_SCOPE)
79+
set(TBB_VERSION ${ROOT_TBB_VERSION} PARENT_SCOPE)
80+
set(TBB_INCLUDE_DIRS ${ROOT_TBB_INCLUDE_DIR} PARENT_SCOPE)
81+
set(TBB_LIBRARIES ${ROOT_TBB_LIBRARY} PARENT_SCOPE)

cmake/modules/FindTBB.cmake

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,3 +298,14 @@ ENDIF (CMAKE_VERSION VERSION_GREATER 2.8.2)
298298
FIND_PACKAGE_HANDLE_STANDARD_ARGS (TBB REQUIRED_VARS TBB_ROOT_DIR
299299
TBB_INCLUDE_DIR TBB_LIBRARY ${_TBB_MISSING_LIBRARIES}
300300
${_TBB_FPHSA_ADDITIONAL_ARGS})
301+
302+
if(TBB_FOUND)
303+
add_library(TBB::tbb IMPORTED STATIC GLOBAL)
304+
set_target_properties(TBB::tbb PROPERTIES
305+
IMPORTED_LOCATION ${TBB_LIBRARY}
306+
INTERFACE_INCLUDE_DIRECTORIES ${TBB_INCLUDE_DIR})
307+
target_compile_definitions(TBB::tbb INTERFACE TBB_SUPPRESS_DEPRECATED_MESSAGES=1)
308+
if(MSVC)
309+
target_compile_definitions(TBB::tbb INTERFACE __TBB_NO_IMPLICIT_LINKAGE=1)
310+
endif()
311+
endif()

cmake/modules/SearchInstalledSoftware.cmake

Lines changed: 2 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -935,74 +935,8 @@ if(builtin_tbb)
935935
endif()
936936

937937
if(builtin_tbb)
938-
set(tbb_url ${lcgpackages}/oneTBB-2021.9.0.tar.gz)
939-
set(tbb_sha256 1ce48f34dada7837f510735ff1172f6e2c261b09460e3bf773b49791d247d24e)
940-
941-
if(MSVC)
942-
if(CMAKE_GENERATOR MATCHES Ninja)
943-
if(CMAKE_BUILD_TYPE MATCHES Debug)
944-
set(tbbsuffix "_debug")
945-
endif()
946-
else()
947-
set(tbb_build Release)
948-
if(winrtdebug)
949-
set(tbb_build Debug)
950-
set(tbbsuffix "_debug")
951-
endif()
952-
endif()
953-
set(TBB_LIBRARIES ${CMAKE_BINARY_DIR}/lib/tbb12${tbbsuffix}.lib)
954-
set(TBB_CXXFLAGS "-D__TBB_NO_IMPLICIT_LINKAGE=1")
955-
install(DIRECTORY ${CMAKE_BINARY_DIR}/bin/ DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries FILES_MATCHING PATTERN "tbb*.dll")
956-
install(DIRECTORY ${CMAKE_BINARY_DIR}/lib/ DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries FILES_MATCHING PATTERN "tbb*.lib")
957-
else()
958-
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
959-
set(tbbsuffix "_debug")
960-
endif()
961-
set(TBB_LIBRARIES ${CMAKE_BINARY_DIR}/lib/libtbb${tbbsuffix}${CMAKE_SHARED_LIBRARY_SUFFIX})
962-
install(DIRECTORY ${CMAKE_BINARY_DIR}/lib/ DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries FILES_MATCHING PATTERN "libtbb*")
963-
endif()
964-
if(tbb_build)
965-
set(TBB_EXTRA_BUILD_ARGS --config ${tbb_build})
966-
endif()
967-
968-
ExternalProject_Add(
969-
TBB
970-
URL ${tbb_url}
971-
URL_HASH SHA256=${tbb_sha256}
972-
INSTALL_DIR ${CMAKE_BINARY_DIR}
973-
CMAKE_ARGS -G ${CMAKE_GENERATOR}
974-
-DCMAKE_POLICY_VERSION_MINIMUM=3.5
975-
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
976-
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
977-
-DCMAKE_CXX_FLAGS=${ROOT_EXTERNAL_CXX_FLAGS}
978-
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
979-
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
980-
-DCMAKE_INSTALL_INCLUDEDIR=${CMAKE_BINARY_DIR}/include
981-
-DCMAKE_INSTALL_LIBDIR=${CMAKE_BINARY_DIR}/lib
982-
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}
983-
-DTBBMALLOC_BUILD=OFF
984-
-DTBBMALLOC_PROXY_BUILD=OFF
985-
-DTBB_ENABLE_IPO=OFF
986-
-DTBB_STRICT=OFF
987-
-DTBB_TEST=OFF
988-
BUILD_COMMAND ${CMAKE_COMMAND} --build . ${TBB_EXTRA_BUILD_ARGS}
989-
INSTALL_COMMAND ${CMAKE_COMMAND} --install . ${TBB_EXTRA_BUILD_ARGS}
990-
LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1
991-
BUILD_BYPRODUCTS ${TBB_LIBRARIES}
992-
TIMEOUT 600
993-
)
994-
995-
ExternalProject_Add_Step(
996-
TBB tbb2externals
997-
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/include/tbb ${CMAKE_BINARY_DIR}/ginclude/tbb
998-
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/include/oneapi ${CMAKE_BINARY_DIR}/ginclude/oneapi
999-
DEPENDEES install
1000-
)
1001-
set(TBB_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/ginclude)
1002-
set(TBB_CXXFLAGS "-DTBB_SUPPRESS_DEPRECATED_MESSAGES=1")
1003-
# The following line is needed to generate the proper dependency with: BUILTINS TBB (in Imt)
1004-
# and generated with this syntax: add_dependencies(${library} ${${arg1}_TARGET})
1005-
set(TBB_TARGET TBB)
938+
list(APPEND ROOT_BUILTINS BUILTIN_TBB)
939+
add_subdirectory(builtins/tbb)
1006940
endif()
1007941

1008942
if(builtin_vdt)

core/imt/CMakeLists.txt

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ ROOT_LINKER_LIBRARY(Imt
1919
src/TTaskGroup.cxx
2020
DEPENDENCIES
2121
${MULTIPROC_LIB}
22-
BUILTINS
23-
TBB
2422
)
2523

2624
target_link_libraries(Imt PRIVATE Thread INTERFACE Core)
2725

2826
if(imt)
27+
target_link_libraries(Imt PRIVATE TBB::tbb)
28+
2929
ROOT_GENERATE_DICTIONARY(G__Imt STAGE1
3030
ROOT/TTaskGroup.hxx
3131
ROOT/RTaskArena.hxx
@@ -40,8 +40,7 @@ if(imt)
4040
Core
4141
Thread
4242
${MULTIPROC_LIB}
43-
BUILTINS
44-
TBB
43+
TBB::tbb
4544
)
4645

4746
# G__Imt.cxx is automatically added by ROOT_GENERATE_DICTIONARY()
@@ -51,10 +50,6 @@ if(imt)
5150
src/TThreadExecutor.cxx
5251
)
5352

54-
target_include_directories(Imt SYSTEM PRIVATE ${TBB_INCLUDE_DIRS})
55-
target_link_libraries(Imt PRIVATE ${TBB_LIBRARIES})
56-
set_target_properties(Imt PROPERTIES COMPILE_FLAGS "${TBB_CXXFLAGS}")
57-
5853
ROOT_ADD_TEST_SUBDIRECTORY(test)
5954
else()
6055
ROOT_GENERATE_DICTIONARY(G__Imt STAGE1

core/imt/src/RTaskArena.cxx

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
// Require TBB without captured exceptions
2-
#define TBB_USE_CAPTURED_EXCEPTION 0
3-
41
#include "ROOT/RTaskArena.hxx"
52
#include "ROpaqueTaskArena.hxx"
63
#include "TError.h"
@@ -13,7 +10,6 @@
1310
#include <thread>
1411
#include <cmath>
1512
#include "tbb/task_arena.h"
16-
#define TBB_PREVIEW_GLOBAL_CONTROL 1 // required for TBB versions preceding 2019_U4
1713
#include "tbb/global_control.h"
1814

1915
//////////////////////////////////////////////////////////////////////////

core/imt/src/TThreadExecutor.cxx

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
1-
// Require TBB without captured exceptions
2-
#define TBB_USE_CAPTURED_EXCEPTION 0
3-
41
#include "ROOT/TThreadExecutor.hxx"
52
#include "ROpaqueTaskArena.hxx"
63
#if !defined(_MSC_VER)
74
#pragma GCC diagnostic push
85
#pragma GCC diagnostic ignored "-Wshadow"
96
#endif
107
#include "tbb/tbb.h"
11-
#define TBB_PREVIEW_GLOBAL_CONTROL 1 // required for TBB versions preceding 2019_U4
128
#include "tbb/global_control.h"
139
#if !defined(_MSC_VER)
1410
#pragma GCC diagnostic pop

core/imt/test/CMakeLists.txt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@
44
# For the licensing terms see $ROOTSYS/LICENSE.
55
# For the list of contributors see $ROOTSYS/README/CREDITS.
66

7-
ROOT_ADD_GTEST(testTaskArena testRTaskArena.cxx LIBRARIES Imt ${TBB_LIBRARIES} FAILREGEX "" INCLUDE_DIRS ${TBB_INCLUDE_DIRS})
8-
set_target_properties(testTaskArena PROPERTIES COMPILE_FLAGS "${TBB_CXXFLAGS}")
9-
ROOT_ADD_GTEST(testTBBGlobalControl testTBBGlobalControl.cxx LIBRARIES Imt ${TBB_LIBRARIES} INCLUDE_DIRS ${TBB_INCLUDE_DIRS})
10-
set_target_properties(testTBBGlobalControl PROPERTIES COMPILE_FLAGS "${TBB_CXXFLAGS}")
11-
ROOT_ADD_GTEST(testEnableImt testEnableImt.cxx LIBRARIES Imt ${TBB_LIBRARIES} INCLUDE_DIRS ${TBB_INCLUDE_DIRS})
12-
set_target_properties(testEnableImt PROPERTIES COMPILE_FLAGS "${TBB_CXXFLAGS}")
7+
ROOT_ADD_GTEST(testTaskArena testRTaskArena.cxx LIBRARIES Imt TBB::tbb FAILREGEX "")
8+
ROOT_ADD_GTEST(testTBBGlobalControl testTBBGlobalControl.cxx LIBRARIES Imt TBB::tbb)
9+
ROOT_ADD_GTEST(testEnableImt testEnableImt.cxx LIBRARIES Imt TBB::tbb)

core/imt/test/testTBBGlobalControl.cxx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
#include "ROOT/TThreadExecutor.hxx"
44
#include "ROOT/TestSupport.hxx"
55
#include "gtest/gtest.h"
6-
#define TBB_PREVIEW_GLOBAL_CONTROL 1 // required for TBB versions preceding 2019_U4
76
#include "tbb/global_control.h"
87

98
#ifdef R__USE_IMT

core/thread/CMakeLists.txt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,6 @@ ROOT_STANDARD_LIBRARY_PACKAGE(Thread
6262
-writeEmptyRootPCM
6363
DEPENDENCIES
6464
Core
65-
BUILTINS
66-
TBB
6765
INSTALL_OPTIONS ${installoptions}
6866
)
6967

@@ -77,10 +75,8 @@ target_include_directories(Thread PUBLIC
7775
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/inc>
7876
)
7977

80-
if((TBB_FOUND OR builtin_tbb) AND NOT MSVC)
81-
target_include_directories(Thread PRIVATE ${TBB_INCLUDE_DIRS})
82-
target_link_libraries(Thread PRIVATE ${TBB_LIBRARIES})
83-
set_target_properties(Thread PROPERTIES COMPILE_FLAGS "${TBB_CXXFLAGS}")
78+
if(TARGET TBB::tbb)
79+
target_link_libraries(Thread PRIVATE TBB::tbb)
8480
target_compile_definitions(Thread PUBLIC ROOT_CORE_THREAD_TBB)
8581
endif()
8682

0 commit comments

Comments
 (0)