0027176: Configuration, CMake - INSTALL_DIR is a common prefix for all other install...
[occt.git] / adm / cmake / tbb.cmake
CommitLineData
9f33b387 1# tbb
2
9f33b387 3if (NOT DEFINED INSTALL_TBB)
316d77d9 4 set (INSTALL_TBB OFF CACHE BOOL "${INSTALL_TBB_DESCR}")
9f33b387 5endif()
6
7# tbb directory
8if (NOT DEFINED 3RDPARTY_TBB_DIR)
9 set (3RDPARTY_TBB_DIR "" CACHE PATH "The directory containing tbb")
10endif()
11
e713baee 12if (MSVC)
13 add_definitions (-D__TBB_NO_IMPLICIT_LINKAGE)
14 add_definitions (-D__TBBMALLOC_NO_IMPLICIT_LINKAGE)
9f33b387 15endif()
16
e713baee 17# include occt macros. compiler_bitness, os_wiht_bit, compiler
18OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/occt_macros")
9f33b387 19
e713baee 20# specify TBB folder in connectin with 3RDPARTY_DIR
21if (3RDPARTY_DIR AND EXISTS "${3RDPARTY_DIR}")
22 #CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_DIR 3RDPARTY_TBB_DIR PATH "The directory containing tbb")
9f33b387 23
e713baee 24 if (NOT 3RDPARTY_TBB_DIR OR NOT EXISTS "${3RDPARTY_TBB_DIR}")
25 FIND_PRODUCT_DIR ("${3RDPARTY_DIR}" TBB TBB_DIR_NAME)
26 if (TBB_DIR_NAME)
27 set (3RDPARTY_TBB_DIR "${3RDPARTY_DIR}/${TBB_DIR_NAME}" CACHE PATH "The directory containing tbb" FORCE)
28 endif()
9f33b387 29 endif()
e713baee 30else()
31 #set (3RDPARTY_TBB_DIR "" CACHE PATH "The directory containing TBB" FORCE)
9f33b387 32endif()
33
e713baee 34if (NOT DEFINED 3RDPARTY_TBB_INCLUDE_DIR)
35 set (3RDPARTY_TBB_INCLUDE_DIR "" CACHE PATH "The directory containing headers of the TBB")
9f33b387 36endif()
37
e713baee 38if (3RDPARTY_TBB_DIR AND EXISTS "${3RDPARTY_TBB_DIR}")
39 # check 3RDPARTY_TBB_INCLUDE_DIR for consictency with specified 3RDPARTY_TBB_DIR
40 CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_TBB_DIR 3RDPARTY_TBB_INCLUDE_DIR PATH "The directory containing headers of the TBB")
9f33b387 41endif()
42
e713baee 43# tbb.h
44if (NOT 3RDPARTY_TBB_INCLUDE_DIR OR NOT EXISTS "${3RDPARTY_TBB_INCLUDE_DIR}")
9f33b387 45
e713baee 46 set (HEADER_NAMES tbb.h tbb/tbb.h)
fd7a842b 47
e713baee 48 # set 3RDPARTY_TBB_INCLUDE_DIR as notfound, otherwise find_library can't assign a new value to 3RDPARTY_TBB_INCLUDE_DIR
49 set (3RDPARTY_TBB_INCLUDE_DIR "3RDPARTY_TBB_INCLUDE_DIR-NOTFOUND" CACHE PATH "the path to tbb.h" FORCE)
9f33b387 50
e713baee 51 if (3RDPARTY_TBB_DIR AND EXISTS "${3RDPARTY_TBB_DIR}")
52 find_path (3RDPARTY_TBB_INCLUDE_DIR NAMES ${HEADER_NAMES}
53 PATHS ${3RDPARTY_TBB_DIR}
54 PATH_SUFFIXES include
55 CMAKE_FIND_ROOT_PATH_BOTH
56 NO_DEFAULT_PATH)
57 else()
58 find_path (3RDPARTY_TBB_INCLUDE_DIR NAMES ${HEADER_NAMES}
59 PATH_SUFFIXES include
60 CMAKE_FIND_ROOT_PATH_BOTH)
9f33b387 61 endif()
62endif()
63
e713baee 64if (3RDPARTY_TBB_INCLUDE_DIR AND EXISTS "${3RDPARTY_TBB_INCLUDE_DIR}")
65 list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_TBB_INCLUDE_DIR}")
9f33b387 66else()
e713baee 67 list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_TBB_INCLUDE_DIR)
9f33b387 68
e713baee 69 set (3RDPARTY_TBB_INCLUDE_DIR "" CACHE PATH "the path to tbb.h" FORCE)
9f33b387 70endif()
71
e713baee 72# common steps for tbb and tbbmalloc
73macro (TBB_PRODUCT_SEARCH PRODUCT_NAME)
9f33b387 74
e713baee 75 string (TOLOWER ${PRODUCT_NAME} lower_PRODUCT_NAME)
76
77 # define required tbb/tbbmalloc variables
78 if (NOT DEFINED 3RDPARTY_${PRODUCT_NAME}_LIBRARY OR NOT 3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR OR NOT EXISTS "${3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR}")
79 set (3RDPARTY_${PRODUCT_NAME}_LIBRARY "" CACHE FILEPATH "${PRODUCT_NAME} library" FORCE)
19286d7c 80 endif()
e713baee 81
82 if (NOT DEFINED 3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR)
83 set (3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR "" CACHE PATH "The directory containing ${PRODUCT_NAME} library")
84 endif()
85
86 if (WIN32)
87 if (NOT DEFINED 3RDPARTY_${PRODUCT_NAME}_DLL OR NOT 3RDPARTY_${PRODUCT_NAME}_DLL_DIR OR NOT EXISTS "${3RDPARTY_${PRODUCT_NAME}_DLL_DIR}")
88 set (3RDPARTY_${PRODUCT_NAME}_DLL "" CACHE FILEPATH "${PRODUCT_NAME} shared library" FORCE)
9f33b387 89 endif()
90 endif()
91
e713baee 92 if (WIN32 AND NOT DEFINED 3RDPARTY_${PRODUCT_NAME}_DLL_DIR)
93 set (3RDPARTY_${PRODUCT_NAME}_DLL_DIR "" CACHE PATH "The directory containing ${PRODUCT_NAME} shared library")
94 endif()
9f33b387 95
e713baee 96 # check 3RDPARTY_${PRODUCT_NAME}_ paths for consistency with specified 3RDPARTY_TBB_DIR
97 if (3RDPARTY_TBB_DIR AND EXISTS "${3RDPARTY_TBB_DIR}")
98 CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_TBB_DIR 3RDPARTY_${PRODUCT_NAME}_LIBRARY FILEPATH "the path to ${PRODUCT_NAME} library")
9f33b387 99
e713baee 100 if (3RDPARTY_${PRODUCT_NAME}_LIBRARY AND EXISTS "${3RDPARTY_${PRODUCT_NAME}_LIBRARY}")
101 get_filename_component (3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR "${3RDPARTY_${PRODUCT_NAME}_LIBRARY}" PATH)
102 set (3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR "${3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR}" CACHE PATH "The directory containing ${PRODUCT_NAME} library" FORCE)
103 else()
104 CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_TBB_DIR 3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR PATH "The directory containing ${PRODUCT_NAME} library")
105 endif()
9f33b387 106
e713baee 107 if (WIN32)
108 CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_TBB_DIR 3RDPARTY_${PRODUCT_NAME}_DLL FILEPATH "the path to ${PRODUCT_NAME} shared library")
9f33b387 109
e713baee 110 if (3RDPARTY_${PRODUCT_NAME}_DLL AND EXISTS "${3RDPARTY_${PRODUCT_NAME}_DLL}")
111 get_filename_component (3RDPARTY_${PRODUCT_NAME}_DLL_DIR "${3RDPARTY_${PRODUCT_NAME}_DLL}" PATH)
112 set (3RDPARTY_${PRODUCT_NAME}_DLL_DIR "${3RDPARTY_${PRODUCT_NAME}_DLL_DIR}" CACHE PATH "The directory containing ${PRODUCT_NAME} shared library" FORCE)
113 else()
114
115 CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_TBB_DIR 3RDPARTY_${PRODUCT_NAME}_DLL_DIR PATH "The directory containing ${PRODUCT_NAME} shared library")
9f33b387 116 endif()
117 endif()
e713baee 118 endif()
9f33b387 119
e713baee 120 OCCT_MAKE_COMPILER_SHORT_NAME()
121 OCCT_MAKE_COMPILER_BITNESS()
9f33b387 122
e713baee 123 if (${COMPILER_BITNESS} EQUAL 32)
124 set (${PRODUCT_NAME}_ARCH_NAME ia32)
125 else()
126 set (${PRODUCT_NAME}_ARCH_NAME intel64)
127 endif()
9f33b387 128
e713baee 129 # tbb/tbbmalloc library
130 if (NOT 3RDPARTY_${PRODUCT_NAME}_LIBRARY OR NOT EXISTS "${3RDPARTY_${PRODUCT_NAME}_LIBRARY}")
131
132 set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .so .dylib)
133 set (PRODUCT_PATH_SUFFIXES lib ${lower_PRODUCT_NAME})
134
135 # set 3RDPARTY_${PRODUCT_NAME}_LIBRARY as notfound, otherwise find_library can't assign a new value to 3RDPARTY_${PRODUCT_NAME}_LIBRARY
136 set (3RDPARTY_${PRODUCT_NAME}_LIBRARY "3RDPARTY_${PRODUCT_NAME}_LIBRARY-NOTFOUND" CACHE FILEPATH "The path to ${PRODUCT_NAME} library" FORCE)
137
138 if (3RDPARTY_TBB_DIR AND EXISTS "${3RDPARTY_TBB_DIR}")
139 if (NOT EXISTS "${3RDPARTY_TBB_DIR}/lib/${${PRODUCT_NAME}_ARCH_NAME}/${COMPILER}")
140 if (EXISTS "${3RDPARTY_TBB_DIR}/lib/${${PRODUCT_NAME}_ARCH_NAME}")
141 file (GLOB ${PRODUCT_NAME}_COMPILER_LIST "${3RDPARTY_TBB_DIR}/lib/${${PRODUCT_NAME}_ARCH_NAME}/*")
142 if (${PRODUCT_NAME}_COMPILER_LIST)
143 list (GET ${PRODUCT_NAME}_COMPILER_LIST -1 THE_MOST_FRESH_COMPILER_VERSION)
144 if (THE_MOST_FRESH_COMPILER_VERSION)
145 get_filename_component (THE_MOST_FRESH_COMPILER_VERSION_NAME "${THE_MOST_FRESH_COMPILER_VERSION}" NAME)
146 set (PRODUCT_PATH_SUFFIXES lib ${lower_PRODUCT_NAME} lib/${${PRODUCT_NAME}_ARCH_NAME}/${THE_MOST_FRESH_COMPILER_VERSION_NAME})
147 endif()
148 endif()
149 endif()
150 else()
151 set (PRODUCT_PATH_SUFFIXES lib ${lower_PRODUCT_NAME} lib/${${PRODUCT_NAME}_ARCH_NAME}/${COMPILER})
152 endif()
19286d7c 153
e713baee 154 find_library (3RDPARTY_${PRODUCT_NAME}_LIBRARY ${lower_PRODUCT_NAME}
155 PATHS "${3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR}" "${3RDPARTY_TBB_DIR}"
156 PATH_SUFFIXES ${PRODUCT_PATH_SUFFIXES}
157 CMAKE_FIND_ROOT_PATH_BOTH
158 NO_DEFAULT_PATH)
159 else()
160 find_library (3RDPARTY_${PRODUCT_NAME}_LIBRARY ${lower_PRODUCT_NAME}
161 PATH_SUFFIXES ${PRODUCT_PATH_SUFFIXES}
162 CMAKE_FIND_ROOT_PATH_BOTH)
9f33b387 163 endif()
9f33b387 164
e713baee 165 if (3RDPARTY_${PRODUCT_NAME}_LIBRARY AND EXISTS "${3RDPARTY_${PRODUCT_NAME}_LIBRARY}")
166 get_filename_component (3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR "${3RDPARTY_${PRODUCT_NAME}_LIBRARY}" PATH)
167 set (3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR "${3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR}" CACHE PATH "The directory containing ${PRODUCT_NAME} library" FORCE)
168 else()
169 set (3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR "" CACHE PATH "The directory containing ${PRODUCT_NAME} library" FORCE)
170 endif()
171 endif()
9f33b387 172
e713baee 173 if (3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR AND EXISTS "${3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR}")
174 list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR}")
9f33b387 175 else()
e713baee 176 list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR)
177
178 set (3RDPARTY_${PRODUCT_NAME}_LIBRARY "" CACHE FILEPATH "The path to ${PRODUCT_NAME} library" FORCE)
9f33b387 179 endif()
180
e713baee 181 # tbb/tbbmalloc shared library
9f33b387 182 if (WIN32)
e713baee 183 if (NOT 3RDPARTY_${PRODUCT_NAME}_DLL OR NOT EXISTS "${3RDPARTY_${PRODUCT_NAME}_DLL}")
184 set (CMAKE_FIND_LIBRARY_SUFFIXES .dll)
185 set (PRODUCT_PATH_SUFFIXES bin)
186
187 # set 3RDPARTY_${PRODUCT_NAME}_DLL as notfound, otherwise find_library can't assign a new value to 3RDPARTY_${PRODUCT_NAME}_DLL
188 set (3RDPARTY_${PRODUCT_NAME}_DLL "3RDPARTY_${PRODUCT_NAME}_DLL-NOTFOUND" CACHE FILEPATH "${PRODUCT_NAME} shared library" FORCE)
189
190 if (3RDPARTY_TBB_DIR AND EXISTS "${3RDPARTY_TBB_DIR}")
191 if (NOT EXISTS "${3RDPARTY_TBB_DIR}/bin/${${PRODUCT_NAME}_ARCH_NAME}/${COMPILER}")
192 if (EXISTS "${3RDPARTY_TBB_DIR}/bin/${${PRODUCT_NAME}_ARCH_NAME}")
193 file (GLOB ${PRODUCT_NAME}_COMPILER_LIST "${3RDPARTY_TBB_DIR}/bin/${${PRODUCT_NAME}_ARCH_NAME}/*")
194 if (${PRODUCT_NAME}_COMPILER_LIST)
195 list (GET ${PRODUCT_NAME}_COMPILER_LIST -1 THE_MOST_FRESH_COMPILER_VERSION)
196 if (THE_MOST_FRESH_COMPILER_VERSION)
197 get_filename_component (THE_MOST_FRESH_COMPILER_VERSION_NAME "${THE_MOST_FRESH_COMPILER_VERSION}" NAME)
198 set (PRODUCT_PATH_SUFFIXES bin bin/${${PRODUCT_NAME}_ARCH_NAME}/${THE_MOST_FRESH_COMPILER_VERSION_NAME})
199 endif()
200 endif()
201 endif()
202 else()
203 set (PRODUCT_PATH_SUFFIXES bin bin/${${PRODUCT_NAME}_ARCH_NAME}/${COMPILER})
204 endif()
205
206 if (3RDPARTY_TBB_DIR AND EXISTS "${3RDPARTY_TBB_DIR}")
207 find_library (3RDPARTY_${PRODUCT_NAME}_DLL ${lower_PRODUCT_NAME}
208 PATHS "${3RDPARTY_TBB_DIR}"
209 PATH_SUFFIXES ${PRODUCT_PATH_SUFFIXES}
210 NO_DEFAULT_PATH)
211 else()
212 find_library (3RDPARTY_${PRODUCT_NAME}_DLL ${lower_PRODUCT_NAME} PATH_SUFFIXES ${PRODUCT_PATH_SUFFIXES})
213 endif()
214
215 if (3RDPARTY_${PRODUCT_NAME}_DLL AND EXISTS "${3RDPARTY_${PRODUCT_NAME}_DLL}")
216 get_filename_component (3RDPARTY_${PRODUCT_NAME}_DLL_DIR "${3RDPARTY_${PRODUCT_NAME}_DLL}" PATH)
217 set (3RDPARTY_${PRODUCT_NAME}_DLL_DIR "${3RDPARTY_${PRODUCT_NAME}_DLL_DIR}" CACHE PATH "The directory containing ${PRODUCT_NAME} library" FORCE)
218 else()
219 set (3RDPARTY_${PRODUCT_NAME}_DLL_DIR "" CACHE PATH "The directory containing ${PRODUCT_NAME} shared library" FORCE)
220
221 set (3RDPARTY_${PRODUCT_NAME}_DLL "" CACHE FILEPATH "${PRODUCT_NAME} shared library" FORCE)
222 endif()
223 endif()
224 endif()
225
226 if (3RDPARTY_${PRODUCT_NAME}_DLL_DIR OR EXISTS "${3RDPARTY_${PRODUCT_NAME}_DLL_DIR}")
227 list (APPEND 3RDPARTY_DLL_DIRS "${3RDPARTY_${PRODUCT_NAME}_DLL_DIR}")
94829f84 228 else()
e713baee 229 list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_${PRODUCT_NAME}_DLL_DIR)
9f33b387 230 endif()
231 endif()
9f33b387 232
e713baee 233 # install tbb/tbbmalloc
234 if (INSTALL_${PRODUCT_NAME})
235 OCCT_MAKE_OS_WITH_BITNESS()
236 OCCT_MAKE_COMPILER_SHORT_NAME()
237
238 if (WIN32)
4b3541c6 239 if (SINGLE_GENERATOR)
240 install (FILES ${3RDPARTY_${PRODUCT_NAME}_DLL} DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_BIN}")
096ef695 241 else()
242 install (FILES ${3RDPARTY_${PRODUCT_NAME}_DLL}
243 CONFIGURATIONS Release
4b3541c6 244 DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_BIN}")
096ef695 245 install (FILES ${3RDPARTY_${PRODUCT_NAME}_DLL}
246 CONFIGURATIONS RelWithDebInfo
4b3541c6 247 DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_BIN}i")
096ef695 248 install (FILES ${3RDPARTY_${PRODUCT_NAME}_DLL}
249 CONFIGURATIONS Debug
4b3541c6 250 DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_BIN}d")
096ef695 251 endif()
e713baee 252 else()
253 get_filename_component (PRODUCT_LIBRARY_NAME ${3RDPARTY_${PRODUCT_NAME}_LIBRARY} NAME)
254
4b3541c6 255 if (SINGLE_GENERATOR)
096ef695 256 install (FILES ${3RDPARTY_${PRODUCT_NAME}_LIBRARY}.2
4b3541c6 257 DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_LIB}"
096ef695 258 RENAME ${PRODUCT_LIBRARY_NAME}.2)
259 else()
260 install (FILES ${3RDPARTY_${PRODUCT_NAME}_LIBRARY}.2
261 CONFIGURATIONS Release
4b3541c6 262 DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_LIB}"
096ef695 263 RENAME ${PRODUCT_LIBRARY_NAME}.2)
264 install (FILES ${3RDPARTY_${PRODUCT_NAME}_LIBRARY}.2
265 CONFIGURATIONS RelWithDebInfo
4b3541c6 266 DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_LIB}i"
096ef695 267 RENAME ${PRODUCT_LIBRARY_NAME}.2)
268 install (FILES ${3RDPARTY_${PRODUCT_NAME}_LIBRARY}.2
269 CONFIGURATIONS Debug
4b3541c6 270 DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_LIB}d"
096ef695 271 RENAME ${PRODUCT_LIBRARY_NAME}.2)
272 endif()
e713baee 273 endif()
9f33b387 274 endif()
e713baee 275 mark_as_advanced (3RDPARTY_${PRODUCT_NAME}_LIBRARY 3RDPARTY_${PRODUCT_NAME}_DLL)
276endmacro()
277
0a66e59d 278
e713baee 279TBB_PRODUCT_SEARCH (TBB)
280TBB_PRODUCT_SEARCH (TBBMALLOC)
281
282
283if (INSTALL_TBB)
0a66e59d 284 set (USED_3RDPARTY_TBB_DIR "")
285else()
286 # the library directory for using by the executable
287 if (WIN32)
288 set (USED_3RDPARTY_TBB_DIR ${3RDPARTY_TBB_DLL_DIR})
289 else()
290 set (USED_3RDPARTY_TBB_DIR ${3RDPARTY_TBB_LIBRARY_DIR})
291 endif()
9f33b387 292endif()