Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/3rdparty/tbb/CMakeLists.txt
16337 views
1
#Cross compile TBB from source
2
project(tbb)
3
4
if (WIN32 AND NOT ARM)
5
message(FATAL_ERROR "BUILD_TBB option supports Windows on ARM only!\nUse regular official TBB build instead of the BUILD_TBB option!")
6
endif()
7
8
set(tbb_filename "2018_U1.tar.gz")
9
set(tbb_subdir "tbb-2018_U1")
10
set(tbb_md5 "b2f2fa09adf44a22f4024049907f774b")
11
12
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4702
13
-Wshadow
14
-Wunused-parameter
15
-Wmissing-prototypes # MacOSX
16
)
17
18
set(tbb_src_dir "${OpenCV_BINARY_DIR}/3rdparty/tbb")
19
ocv_download(FILENAME ${tbb_filename}
20
HASH ${tbb_md5}
21
URL
22
"${OPENCV_TBB_URL}"
23
"$ENV{OPENCV_TBB_URL}"
24
"https://github.com/01org/tbb/archive/"
25
DESTINATION_DIR ${tbb_src_dir}
26
ID TBB
27
STATUS res
28
UNPACK RELATIVE_URL)
29
if(NOT res)
30
return()
31
endif()
32
set(tbb_src_dir "${tbb_src_dir}/${tbb_subdir}")
33
34
ocv_include_directories("${tbb_src_dir}/include"
35
"${tbb_src_dir}/src/"
36
"${tbb_src_dir}/src/rml/include"
37
"${CMAKE_CURRENT_SOURCE_DIR}")
38
39
file(GLOB lib_srcs "${tbb_src_dir}/src/tbb/*.cpp")
40
file(GLOB lib_hdrs "${tbb_src_dir}/src/tbb/*.h")
41
list(APPEND lib_srcs "${tbb_src_dir}/src/rml/client/rml_tbb.cpp")
42
43
if (WIN32)
44
add_definitions(/D__TBB_DYNAMIC_LOAD_ENABLED=0
45
/D__TBB_BUILD=1
46
/DTBB_NO_LEGACY=1
47
/D_UNICODE
48
/DUNICODE
49
/DWINAPI_FAMILY=WINAPI_FAMILY_APP
50
/DDO_ITT_NOTIFY=0
51
/DUSE_WINTHREAD
52
) # defines were copied from windows.cl.inc
53
54
if (ARM)
55
add_definitions(/D_WIN32_WINNT=0x0602
56
/D__TBB_WIN32_USE_CL_BUILTINS
57
)
58
endif()
59
60
set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} /APPCONTAINER")
61
else()
62
add_definitions(-D__TBB_DYNAMIC_LOAD_ENABLED=0 #required
63
-D__TBB_WEAK_SYMBOLS_PRESENT=0 #required for 4.3
64
-D__TBB_BUILD=1 #required
65
-D__TBB_SURVIVE_THREAD_SWITCH=0 #no cilk support
66
-DTBB_USE_DEBUG=0 #just to be sure
67
-DTBB_NO_LEGACY=1 #don't need backward compatibility
68
-DDO_ITT_NOTIFY=0 #it seems that we don't need these notifications
69
)
70
endif()
71
72
if(HAVE_PTHREAD)
73
add_definitions(-DUSE_PTHREAD) #required for Unix
74
endif()
75
76
if(CV_GCC)
77
add_definitions(-DTBB_USE_GCC_BUILTINS=1) #required for ARM GCC
78
if(NOT CMAKE_CXX_COMPILER_VERSION LESS 6.0)
79
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flifetime-dse=1") # workaround for GCC 6.x
80
endif()
81
endif()
82
83
if(ANDROID_COMPILER_IS_CLANG)
84
add_definitions(-D__TBB_GCC_BUILTIN_ATOMICS_PRESENT=1)
85
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wmissing-prototypes)
86
endif()
87
88
set(TBB_SOURCE_FILES ${lib_srcs} ${lib_hdrs})
89
90
if (ARM AND NOT WIN32)
91
if (NOT ANDROID)
92
set(TBB_SOURCE_FILES ${TBB_SOURCE_FILES} "${CMAKE_CURRENT_SOURCE_DIR}/arm_linux_stub.cpp")
93
endif()
94
set(TBB_SOURCE_FILES ${TBB_SOURCE_FILES} "${CMAKE_CURRENT_SOURCE_DIR}/android_additional.h")
95
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include \"${CMAKE_CURRENT_SOURCE_DIR}/android_additional.h\"")
96
endif()
97
98
set(tbb_version_file "version_string.ver")
99
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/${tbb_version_file}.cmakein" "${CMAKE_CURRENT_BINARY_DIR}/${tbb_version_file}" @ONLY)
100
list(APPEND TBB_SOURCE_FILES "${CMAKE_CURRENT_BINARY_DIR}/${tbb_version_file}")
101
102
add_library(tbb ${TBB_SOURCE_FILES})
103
target_compile_definitions(tbb PUBLIC TBB_USE_GCC_BUILTINS=1 __TBB_GCC_BUILTIN_ATOMICS_PRESENT=1)
104
target_include_directories(tbb SYSTEM PUBLIC $<BUILD_INTERFACE:${tbb_src_dir}/include>
105
PRIVATE "${CMAKE_CURRENT_BINARY_DIR}"
106
)
107
108
if (WIN32)
109
if (ARM)
110
set(platform_macro /D_M_ARM=1)
111
endif()
112
113
add_custom_command(TARGET tbb
114
PRE_BUILD
115
COMMAND ${CMAKE_C_COMPILER} /nologo /TC /EP ${tbb_src_dir}\\src\\tbb\\win32-tbb-export.def /DTBB_NO_LEGACY=1 /D_CRT_SECURE_NO_DEPRECATE /D__TBB_BUILD=1 ${platform_macro} /I${tbb_src_dir}\\src /I${tbb_src_dir}\\include > "${tbb_src_dir}\\src\\tbb\\tbb.def"
116
WORKING_DIRECTORY ${tbb_src_dir}\\src\\tbb
117
COMMENT "Generating tbb.def file" VERBATIM
118
)
119
120
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEF:${tbb_src_dir}/src/tbb/tbb.def /DLL /MAP /fixed:no /INCREMENTAL:NO")
121
else()
122
target_link_libraries(tbb c m dl)
123
endif()
124
125
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef -Wmissing-declarations)
126
127
# filter out flags that are not handled well by the TBB code
128
foreach(var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG)
129
string(REPLACE "-Werror=non-virtual-dtor" "" ${var} "${${var}}")
130
string(REPLACE "-fvisibility=hidden" "" ${var} "${${var}}")
131
string(REPLACE "-fvisibility-inlines-hidden" "" ${var} "${${var}}")
132
endforeach()
133
134
if (WIN32)
135
set(tbb_debug_postfix "_debug") # to fit pragmas in _windef.h inside TBB
136
else()
137
set(tbb_debug_postfix ${OPENCV_DEBUG_POSTFIX})
138
endif()
139
140
set_target_properties(tbb
141
PROPERTIES OUTPUT_NAME tbb
142
DEBUG_POSTFIX "${tbb_debug_postfix}"
143
COMPILE_PDB_NAME tbb
144
COMPILE_PDB_NAME_DEBUG "tbb${OPENCV_DEBUG_POSTFIX}"
145
ARCHIVE_OUTPUT_DIRECTORY ${3P_LIBRARY_OUTPUT_PATH}
146
RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}
147
)
148
149
if(ENABLE_SOLUTION_FOLDERS)
150
set_target_properties(tbb PROPERTIES FOLDER "3rdparty")
151
endif()
152
153
ocv_install_target(tbb EXPORT OpenCVModules
154
RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT libs
155
LIBRARY DESTINATION ${OPENCV_LIB_INSTALL_PATH} COMPONENT libs
156
ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev
157
)
158
159
ocv_install_3rdparty_licenses(tbb "${tbb_src_dir}/LICENSE" "${tbb_src_dir}/README")
160
161
ocv_tbb_read_version("${tbb_src_dir}/include")
162
163