3 if (NOT DEFINED INSTALL_TBB)
4 set (INSTALL_TBB OFF CACHE BOOL "${INSTALL_TBB_DESCR}")
8 if (NOT DEFINED 3RDPARTY_TBB_DIR)
9 set (3RDPARTY_TBB_DIR "" CACHE PATH "The directory containing tbb")
13 add_definitions (-D__TBB_NO_IMPLICIT_LINKAGE)
14 add_definitions (-D__TBBMALLOC_NO_IMPLICIT_LINKAGE)
17 # include occt macros. compiler_bitness, os_wiht_bit, compiler
18 OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/occt_macros")
20 # specify TBB folder in connectin with 3RDPARTY_DIR
21 if (3RDPARTY_DIR AND EXISTS "${3RDPARTY_DIR}")
22 #CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_DIR 3RDPARTY_TBB_DIR PATH "The directory containing tbb")
24 if (NOT 3RDPARTY_TBB_DIR OR NOT EXISTS "${3RDPARTY_TBB_DIR}")
25 FIND_PRODUCT_DIR ("${3RDPARTY_DIR}" TBB TBB_DIR_NAME)
27 set (3RDPARTY_TBB_DIR "${3RDPARTY_DIR}/${TBB_DIR_NAME}" CACHE PATH "The directory containing tbb" FORCE)
31 #set (3RDPARTY_TBB_DIR "" CACHE PATH "The directory containing TBB" FORCE)
34 if (NOT DEFINED 3RDPARTY_TBB_INCLUDE_DIR)
35 set (3RDPARTY_TBB_INCLUDE_DIR "" CACHE PATH "The directory containing headers of the TBB")
38 if (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")
44 if (NOT 3RDPARTY_TBB_INCLUDE_DIR OR NOT EXISTS "${3RDPARTY_TBB_INCLUDE_DIR}")
46 set (HEADER_NAMES tbb.h tbb/tbb.h)
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)
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}
55 CMAKE_FIND_ROOT_PATH_BOTH
58 find_path (3RDPARTY_TBB_INCLUDE_DIR NAMES ${HEADER_NAMES}
60 CMAKE_FIND_ROOT_PATH_BOTH)
64 if (3RDPARTY_TBB_INCLUDE_DIR AND EXISTS "${3RDPARTY_TBB_INCLUDE_DIR}")
65 list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_TBB_INCLUDE_DIR}")
67 list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_TBB_INCLUDE_DIR)
69 set (3RDPARTY_TBB_INCLUDE_DIR "" CACHE PATH "the path to tbb.h" FORCE)
72 # common steps for tbb and tbbmalloc
73 macro (TBB_PRODUCT_SEARCH PRODUCT_NAME)
75 string (TOLOWER ${PRODUCT_NAME} lower_PRODUCT_NAME)
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)
82 if (NOT DEFINED 3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR)
83 set (3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR "" CACHE PATH "The directory containing ${PRODUCT_NAME} library")
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)
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")
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")
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)
104 CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_TBB_DIR 3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR PATH "The directory containing ${PRODUCT_NAME} library")
108 CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_TBB_DIR 3RDPARTY_${PRODUCT_NAME}_DLL FILEPATH "the path to ${PRODUCT_NAME} shared library")
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)
115 CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_TBB_DIR 3RDPARTY_${PRODUCT_NAME}_DLL_DIR PATH "The directory containing ${PRODUCT_NAME} shared library")
120 OCCT_MAKE_COMPILER_SHORT_NAME()
121 OCCT_MAKE_COMPILER_BITNESS()
123 if (${COMPILER_BITNESS} EQUAL 32)
124 set (${PRODUCT_NAME}_ARCH_NAME ia32)
126 set (${PRODUCT_NAME}_ARCH_NAME intel64)
129 # tbb/tbbmalloc library
130 if (NOT 3RDPARTY_${PRODUCT_NAME}_LIBRARY OR NOT EXISTS "${3RDPARTY_${PRODUCT_NAME}_LIBRARY}")
132 set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .so .dylib)
133 set (PRODUCT_PATH_SUFFIXES lib ${lower_PRODUCT_NAME})
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)
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})
151 set (PRODUCT_PATH_SUFFIXES lib ${lower_PRODUCT_NAME} lib/${${PRODUCT_NAME}_ARCH_NAME}/${COMPILER})
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
160 find_library (3RDPARTY_${PRODUCT_NAME}_LIBRARY ${lower_PRODUCT_NAME}
161 PATH_SUFFIXES ${PRODUCT_PATH_SUFFIXES}
162 CMAKE_FIND_ROOT_PATH_BOTH)
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)
169 set (3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR "" CACHE PATH "The directory containing ${PRODUCT_NAME} library" FORCE)
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}")
176 list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR)
178 set (3RDPARTY_${PRODUCT_NAME}_LIBRARY "" CACHE FILEPATH "The path to ${PRODUCT_NAME} library" FORCE)
181 # tbb/tbbmalloc shared library
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)
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)
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})
203 set (PRODUCT_PATH_SUFFIXES bin bin/${${PRODUCT_NAME}_ARCH_NAME}/${COMPILER})
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}
212 find_library (3RDPARTY_${PRODUCT_NAME}_DLL ${lower_PRODUCT_NAME} PATH_SUFFIXES ${PRODUCT_PATH_SUFFIXES})
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)
219 set (3RDPARTY_${PRODUCT_NAME}_DLL_DIR "" CACHE PATH "The directory containing ${PRODUCT_NAME} shared library" FORCE)
221 set (3RDPARTY_${PRODUCT_NAME}_DLL "" CACHE FILEPATH "${PRODUCT_NAME} shared library" FORCE)
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}")
229 list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_${PRODUCT_NAME}_DLL_DIR)
233 # install tbb/tbbmalloc
234 if (INSTALL_${PRODUCT_NAME})
235 OCCT_MAKE_OS_WITH_BITNESS()
236 OCCT_MAKE_COMPILER_SHORT_NAME()
239 install (FILES ${3RDPARTY_${PRODUCT_NAME}_DLL}
240 CONFIGURATIONS Release
241 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bin")
242 install (FILES ${3RDPARTY_${PRODUCT_NAME}_DLL}
243 CONFIGURATIONS RelWithDebInfo
244 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bini")
245 install (FILES ${3RDPARTY_${PRODUCT_NAME}_DLL}
247 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bind")
249 get_filename_component (PRODUCT_LIBRARY_NAME ${3RDPARTY_${PRODUCT_NAME}_LIBRARY} NAME)
251 install (FILES ${3RDPARTY_${PRODUCT_NAME}_LIBRARY}.2
252 CONFIGURATIONS Release
253 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib"
254 RENAME ${PRODUCT_LIBRARY_NAME}.2)
255 install (FILES ${3RDPARTY_${PRODUCT_NAME}_LIBRARY}.2
256 CONFIGURATIONS RelWithDebInfo
257 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/libi"
258 RENAME ${PRODUCT_LIBRARY_NAME}.2)
259 install (FILES ${3RDPARTY_${PRODUCT_NAME}_LIBRARY}.2
261 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/libd"
262 RENAME ${PRODUCT_LIBRARY_NAME}.2)
265 mark_as_advanced (3RDPARTY_${PRODUCT_NAME}_LIBRARY 3RDPARTY_${PRODUCT_NAME}_DLL)
269 TBB_PRODUCT_SEARCH (TBB)
270 TBB_PRODUCT_SEARCH (TBBMALLOC)
274 set (USED_3RDPARTY_TBB_DIR "")
276 # the library directory for using by the executable
278 set (USED_3RDPARTY_TBB_DIR ${3RDPARTY_TBB_DLL_DIR})
280 set (USED_3RDPARTY_TBB_DIR ${3RDPARTY_TBB_LIBRARY_DIR})