xref: /oneTBB/src/tbb/CMakeLists.txt (revision 68e075cb)
1# Copyright (c) 2020-2021 Intel Corporation
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#     http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15add_library(tbb
16    address_waiter.cpp
17    allocator.cpp
18    arena.cpp
19    arena_slot.cpp
20    concurrent_bounded_queue.cpp
21    dynamic_link.cpp
22    exception.cpp
23    governor.cpp
24    global_control.cpp
25    itt_notify.cpp
26    main.cpp
27    market.cpp
28    misc.cpp
29    misc_ex.cpp
30    observer_proxy.cpp
31    parallel_pipeline.cpp
32    private_server.cpp
33    profiling.cpp
34    rml_tbb.cpp
35    rtm_mutex.cpp
36    rtm_rw_mutex.cpp
37    semaphore.cpp
38    small_object_pool.cpp
39    task.cpp
40    task_dispatcher.cpp
41    task_group_context.cpp
42    version.cpp
43    queuing_rw_mutex.cpp)
44
45add_library(TBB::tbb ALIAS tbb)
46
47if (WIN32)
48    set_target_properties(tbb PROPERTIES OUTPUT_NAME "tbb${TBB_BINARY_VERSION}")
49endif()
50
51# TODO: Add statistics.cpp
52
53target_compile_definitions(tbb
54                           PUBLIC
55                           $<$<CONFIG:DEBUG>:TBB_USE_DEBUG>
56                           PRIVATE
57                           __TBB_BUILD)
58
59if (NOT ("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "(armv7-a|aarch64|mips|arm64)" OR
60         "${CMAKE_OSX_ARCHITECTURES}" MATCHES "arm64" OR
61         WINDOWS_STORE OR
62         TBB_WINDOWS_DRIVER))
63    target_compile_definitions(tbb PRIVATE __TBB_USE_ITT_NOTIFY)
64endif()
65
66target_include_directories(tbb
67    PUBLIC
68    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../../include>
69    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
70
71target_compile_options(tbb
72    PRIVATE
73    ${TBB_CXX_STD_FLAG} # TODO: consider making it PUBLIC.
74    ${TBB_MMD_FLAG}
75    ${TBB_DSE_FLAG}
76    ${TBB_WARNING_LEVEL}
77    ${TBB_WARNING_SUPPRESS}
78    ${TBB_LIB_COMPILE_FLAGS}
79    ${TBB_COMMON_COMPILE_FLAGS}
80    ${TBB_IPO_COMPILE_FLAGS}
81)
82
83# Avoid use of target_link_libraries here as it changes /DEF option to \DEF on Windows.
84set_target_properties(tbb PROPERTIES
85    DEFINE_SYMBOL ""
86    VERSION ${TBB_BINARY_VERSION}.${TBB_BINARY_MINOR_VERSION}
87    SOVERSION ${TBB_BINARY_VERSION}
88    LINK_FLAGS ${TBB_LINK_DEF_FILE_FLAG}${CMAKE_CURRENT_SOURCE_DIR}/def/${TBB_DEF_FILE_PREFIX}-tbb.def
89    LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/def/${TBB_DEF_FILE_PREFIX}-tbb.def
90)
91
92# Prefer using target_link_options instead of target_link_libraries to specify link options because
93# target_link_libraries may incorrectly handle some options (on Windows, for example).
94if (COMMAND target_link_options)
95    target_link_options(tbb
96        PRIVATE
97        ${TBB_LIB_LINK_FLAGS}
98        ${TBB_COMMON_LINK_FLAGS}
99        ${TBB_IPO_LINK_FLAGS}
100    )
101else()
102    target_link_libraries(tbb
103        PRIVATE
104        ${TBB_LIB_LINK_FLAGS}
105        ${TBB_COMMON_LINK_FLAGS}
106        ${TBB_IPO_LINK_FLAGS}
107    )
108endif()
109
110target_link_libraries(tbb
111    PRIVATE
112    Threads::Threads
113    ${TBB_LIB_LINK_LIBS}
114    ${TBB_COMMON_LINK_LIBS}
115)
116
117tbb_install_target(tbb)
118
119if (WIN32)
120    # Create a copy of target linker file (tbb<ver>[_debug].lib) with legacy name (tbb[_debug].lib)
121    # to support previous user experience for linkage.
122    install(FILES
123            $<TARGET_LINKER_FILE:tbb>
124            DESTINATION lib
125            CONFIGURATIONS RelWithDebInfo Release MinSizeRel
126            RENAME tbb.lib
127            COMPONENT devel
128    )
129
130    install(FILES
131            $<TARGET_LINKER_FILE:tbb>
132            DESTINATION lib
133            CONFIGURATIONS Debug
134            RENAME tbb_debug.lib
135            COMPONENT devel
136    )
137endif()
138
139set(_tbb_pc_lib_name tbb)
140
141if (WIN32)
142    set(_tbb_pc_lib_name ${_tbb_pc_lib_name}${TBB_BINARY_VERSION})
143endif()
144
145if (CMAKE_SIZEOF_VOID_P EQUAL 8)
146    set(TBB_PC_NAME tbb)
147else()
148    set(TBB_PC_NAME tbb32)
149endif()
150
151set(_prefix_for_pc_file "${CMAKE_INSTALL_PREFIX}")
152
153if (IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}")
154    set(_libdir_for_pc_file "${CMAKE_INSTALL_LIBDIR}")
155else()
156    set(_libdir_for_pc_file "\${prefix}/${CMAKE_INSTALL_LIBDIR}")
157endif()
158
159if (IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}")
160    set(_includedir_for_pc_file "${CMAKE_INSTALL_INCLUDEDIR}")
161else()
162    set(_includedir_for_pc_file "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
163endif()
164
165configure_file(${PROJECT_SOURCE_DIR}/integration/pkg-config/tbb.pc.in ${CMAKE_CURRENT_BINARY_DIR}/${TBB_PC_NAME}.pc @ONLY)
166install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${TBB_PC_NAME}.pc
167        DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig/
168        COMPONENT devel)
169
170if (COMMAND tbb_gen_vars)
171    tbb_gen_vars(tbb)
172endif()
173