0024023: Revamp the OCCT Handle - non-cost reference cast
[occt.git] / adm / templates / tbb.cmake
1 # tbb
2
3 OCCT_MAKE_BUILD_POSTFIX()
4
5 if (NOT DEFINED INSTALL_TBB)
6   set (INSTALL_TBB OFF CACHE BOOL "Is tbb required to be copied into install directory")
7 endif()
8
9 # tbb directory
10 if (NOT DEFINED 3RDPARTY_TBB_DIR)
11   set (3RDPARTY_TBB_DIR "" CACHE PATH "The directory containing tbb")
12 endif()
13
14 # tbb include directory
15 if (NOT DEFINED 3RDPARTY_TBB_INCLUDE_DIR)
16   set (3RDPARTY_TBB_INCLUDE_DIR "" CACHE FILEPATH "The directory containing headers of the tbb")
17 endif()
18
19 # tbb library file (with absolute path)
20 if (NOT DEFINED 3RDPARTY_TBB_LIBRARY OR NOT 3RDPARTY_TBB_LIBRARY_DIR)
21   set (3RDPARTY_TBB_LIBRARY "" CACHE FILEPATH "tbb library" FORCE)
22 endif()
23
24 # tbb library directory
25 if (NOT DEFINED 3RDPARTY_TBB_LIBRARY_DIR)
26   set (3RDPARTY_TBB_LIBRARY_DIR "" CACHE FILEPATH "The directory containing tbb library")
27 endif()
28
29 # tbb malloc library file (with absolute path)
30 if (NOT DEFINED 3RDPARTY_TBBMALLOC_LIBRARY OR NOT 3RDPARTY_TBBMALLOC_LIBRARY_DIR)
31   set (3RDPARTY_TBBMALLOC_LIBRARY "" CACHE FILEPATH "tbb malloc library" FORCE)
32 endif()
33
34 # tbb malloc library directory
35 if (NOT DEFINED 3RDPARTY_TBBMALLOC_LIBRARY_DIR)
36   set (3RDPARTY_TBBMALLOC_LIBRARY_DIR "" CACHE FILEPATH "The directory containing tbb malloc library")
37 endif()
38
39 # tbb shared library (with absolute path)
40 if (WIN32)
41   if (NOT DEFINED 3RDPARTY_TBB_DLL OR NOT 3RDPARTY_TBB_DLL_DIR)
42     set (3RDPARTY_TBB_DLL "" CACHE FILEPATH "tbb shared library" FORCE)
43   endif()
44 endif()
45
46 # tbb shared library directory
47 if (WIN32 AND NOT DEFINED 3RDPARTY_TBB_DLL_DIR)
48   set (3RDPARTY_TBB_DLL_DIR "" CACHE FILEPATH "The directory containing tbb shared library")
49 endif()
50
51 # tbb malloc shared library (with absolute path)
52 if (WIN32)
53   if (NOT DEFINED 3RDPARTY_TBBMALLOC_DLL OR NOT 3RDPARTY_TBBMALLOC_DLL_DIR)
54     set (3RDPARTY_TBBMALLOC_DLL "" CACHE FILEPATH "tbb malloc shared library" FORCE)
55   endif()
56 endif()
57
58 # tbb malloc shared library directory
59 if (NOT DEFINED 3RDPARTY_TBBMALLOC_DLL_DIR)
60   set (3RDPARTY_TBBMALLOC_DLL_DIR "" CACHE FILEPATH "The directory containing tbb malloc shared library")
61 endif()
62
63 # include occt macros. compiler_bitness, os_wiht_bit, compiler and build_postfix
64 OCCT_INCLUDE_CMAKE_FILE ("adm/templates/occt_macros")
65
66 # search for product directory inside 3RDPARTY_DIR directory
67 if (NOT 3RDPARTY_TBB_DIR AND 3RDPARTY_DIR)
68   FIND_PRODUCT_DIR ("${3RDPARTY_DIR}" "TBB" TBB_DIR_NAME)
69   if (TBB_DIR_NAME)
70     message (STATUS "Info: TBB: ${TBB_DIR_NAME} folder is used")
71     set (3RDPARTY_TBB_DIR "${3RDPARTY_DIR}/${TBB_DIR_NAME}" CACHE PATH "The directory containing tbb" FORCE)
72   endif()
73 endif()
74
75 OCCT_MAKE_COMPILER_BITNESS()
76
77 if (${COMPILER_BITNESS} STREQUAL 32)
78   set (TBB_ARCH_NAME ia32)
79 else()
80   set (TBB_ARCH_NAME intel64)
81 endif()
82
83 # search for include directory in defined 3rdparty directory
84 if (NOT 3RDPARTY_TBB_INCLUDE_DIR OR NOT EXISTS "${3RDPARTY_TBB_INCLUDE_DIR}")
85   set (3RDPARTY_TBB_INCLUDE_DIR "3RDPARTY_TBB_INCLUDE_DIR-NOTFOUND" CACHE FILEPATH "The directory containing the headers of tbb" FORCE)
86   find_path (3RDPARTY_TBB_INCLUDE_DIR tbb/tbb.h PATHS "${3RDPARTY_TBB_DIR}/include")
87 endif()
88
89 if (NOT 3RDPARTY_TBB_INCLUDE_DIR OR NOT EXISTS "${3RDPARTY_TBB_INCLUDE_DIR}")
90   set (3RDPARTY_TBB_INCLUDE_DIR "" CACHE FILEPATH "The directory containing the headers of tbb" FORCE)
91 endif()
92
93 OCCT_MAKE_COMPILER_SHORT_NAME()
94
95 # TBB_COMPILER_FOLER
96 #if (WIN32)
97   set (TBB_COMPILER_FOLER ${COMPILER})
98 #else()
99 #  set (TBB_COMPILER_FOLER ${COMPILER})
100 #endif()
101
102 OCCT_MAKE_BUILD_POSTFIX()
103
104 # search for tbb and tbb malloc library in defined 3rdparty directory
105 foreach (LIBRARY_NAME TBB TBBMALLOC)
106   if (NOT 3RDPARTY_${LIBRARY_NAME}_LIBRARY_DIR)
107     set (3RDPARTY_${LIBRARY_NAME}_LIBRARY "" CACHE FILEPATH "${LIBRARY_NAME} library" FORCE)
108   elseif (3RDPARTY_${LIBRARY_NAME}_LIBRARY AND EXISTS "${3RDPARTY_${LIBRARY_NAME}_LIBRARY}")
109     get_filename_component(3RDPARTY_${LIBRARY_NAME}_LIBRARY_DIR_TMP "${3RDPARTY_${LIBRARY_NAME}_LIBRARY}" PATH)
110     if (NOT "${3RDPARTY_${LIBRARY_NAME}_LIBRARY_DIR}" STREQUAL "${3RDPARTY_${LIBRARY_NAME}_LIBRARY_DIR_TMP}")
111       set (3RDPARTY_${LIBRARY_NAME}_LIBRARY "" CACHE FILEPATH "${LIBRARY_NAME} library" FORCE)
112     endif()
113   endif()
114
115   if (NOT 3RDPARTY_${LIBRARY_NAME}_LIBRARY OR NOT EXISTS "${3RDPARTY_${LIBRARY_NAME}_LIBRARY}")
116     set (3RDPARTY_${LIBRARY_NAME}_LIBRARY "3RDPARTY_${LIBRARY_NAME}_LIBRARY-NOTFOUND" CACHE FILEPATH "Path to library of ${LIBRARY_NAME}" FORCE)
117
118     # first of all, search for debug version of a library if build type is debug
119     if (DEFINED IS_BUILD_DEBUG)
120       find_library (3RDPARTY_${LIBRARY_NAME}_LIBRARY ${LIBRARY_NAME}_debug
121                                                      PATHS
122                                                       "${3RDPARTY_${LIBRARY_NAME}_LIBRARY_DIR}"
123                                                       "${3RDPARTY_TBB_DIR}/libd/${TBB_ARCH_NAME}/${TBB_COMPILER_FOLER}"
124                                                       "${3RDPARTY_TBB_DIR}/lib/${TBB_ARCH_NAME}/${TBB_COMPILER_FOLER}"
125                                                      NO_DEFAULT_PATH)
126
127       # second search if previous one do not find anything
128       find_library (3RDPARTY_${LIBRARY_NAME}_LIBRARY ${LIBRARY_NAME}_debug)
129     endif()
130
131     # if build type is release or debug version of library isn't found - search for release version of one
132     if (NOT 3RDPARTY_${LIBRARY_NAME}_LIBRARY OR NOT EXISTS "${3RDPARTY_${LIBRARY_NAME}_LIBRARY}")
133       set (3RDPARTY_${LIBRARY_NAME}_LIBRARY "3RDPARTY_${LIBRARY_NAME}_LIBRARY-NOTFOUND" CACHE FILEPATH "Path to library of ${LIBRARY_NAME}" FORCE)
134
135       if (DEFINED IS_BUILD_DEBUG)
136         message (STATUS "Warning: debug version of ${LIBRARY_NAME} library isn't found (${LIBRARY_NAME}_debug) in ${3RDPARTY_TBB_DIR}/lib(d). Search for release one")
137       endif()
138
139       find_library (3RDPARTY_${LIBRARY_NAME}_LIBRARY ${LIBRARY_NAME}
140                                                      PATHS
141                                                       "${3RDPARTY_${LIBRARY_NAME}_LIBRARY_DIR}"
142                                                       "${3RDPARTY_TBB_DIR}/lib/${TBB_ARCH_NAME}/${TBB_COMPILER_FOLER}"
143                                                      NO_DEFAULT_PATH)
144
145       # second search if previous one do not find anything
146       find_library (3RDPARTY_${LIBRARY_NAME}_LIBRARY ${LIBRARY_NAME})
147     endif()
148   endif()
149
150   if (NOT 3RDPARTY_${LIBRARY_NAME}_LIBRARY_DIR OR NOT EXISTS "${3RDPARTY_${LIBRARY_NAME}_LIBRARY_DIR}")
151     get_filename_component(3RDPARTY_${LIBRARY_NAME}_LIBRARY_DIR "${3RDPARTY_${LIBRARY_NAME}_LIBRARY}" PATH)
152     set (3RDPARTY_${LIBRARY_NAME}_LIBRARY_DIR "${3RDPARTY_${LIBRARY_NAME}_LIBRARY_DIR}" CACHE FILEPATH "The directory containing ${LIBRARY_NAME} library" FORCE)
153   endif()
154
155   # search for dll in defined 3rdparty directory (just for win case)
156   if (WIN32)
157     set (CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".dll")
158     
159     if (NOT 3RDPARTY_${LIBRARY_NAME}_DLL_DIR)
160       set (3RDPARTY_${LIBRARY_NAME}_DLL "" CACHE FILEPATH "${LIBRARY_NAME} shared library" FORCE)
161     elseif (3RDPARTY_${LIBRARY_NAME}_DLL AND EXISTS "${3RDPARTY_${LIBRARY_NAME}_DLL}")
162       get_filename_component(3RDPARTY_${LIBRARY_NAME}_DLL_DIR_TMP "${3RDPARTY_${LIBRARY_NAME}_DLL}" PATH)
163       if (NOT "${3RDPARTY_${LIBRARY_NAME}_DLL_DIR}" STREQUAL "${3RDPARTY_${LIBRARY_NAME}_DLL_DIR_TMP}")
164         set (3RDPARTY_${LIBRARY_NAME}_DLL "" CACHE FILEPATH "${LIBRARY_NAME} shared library" FORCE)
165       endif()
166     endif()
167
168     if (NOT 3RDPARTY_${LIBRARY_NAME}_DLL OR NOT EXISTS "${3RDPARTY_${LIBRARY_NAME}_DLL}")
169       set (3RDPARTY_${LIBRARY_NAME}_DLL "3RDPARTY_${LIBRARY_NAME}_DLL-NOTFOUND" CACHE FILEPATH "Path to shared library of ${LIBRARY_NAME}" FORCE)
170
171       if (DEFINED IS_BUILD_DEBUG)
172         find_library (3RDPARTY_${LIBRARY_NAME}_DLL ${LIBRARY_NAME}_debug
173                                        PATHS
174                                         "${3RDPARTY_${LIBRARY_NAME}_DLL_DIR}"
175                                         "${3RDPARTY_TBB_DIR}/bind/${TBB_ARCH_NAME}/${TBB_COMPILER_FOLER}"
176                                         "${3RDPARTY_TBB_DIR}/bin/${TBB_ARCH_NAME}/${TBB_COMPILER_FOLER}"
177                                        NO_DEFAULT_PATH)
178
179         # second search if previous one do not find anything
180         find_library (3RDPARTY_${LIBRARY_NAME}_DLL ${LIBRARY_NAME}_debug)
181       endif()
182
183       if (NOT 3RDPARTY_${LIBRARY_NAME}_DLL OR NOT EXISTS "${3RDPARTY_${LIBRARY_NAME}_DLL}")
184         set (3RDPARTY_${LIBRARY_NAME}_DLL "3RDPARTY_${LIBRARY_NAME}_DLL-NOTFOUND" CACHE FILEPATH "Path to shared library of ${LIBRARY_NAME}" FORCE)
185
186         if (DEFINED IS_BUILD_DEBUG)
187           message (STATUS "Warning: debug version of ${LIBRARY_NAME} dll isn't found (${LIBRARY_NAME}_debug) in ${3RDPARTY_TBB_DIR}/bin(d). Search for release one")
188         endif()
189
190         find_library (3RDPARTY_${LIBRARY_NAME}_DLL ${LIBRARY_NAME}
191                                                    PATHS
192                                                     "${3RDPARTY_${LIBRARY_NAME}_DLL_DIR}"
193                                                     "${3RDPARTY_TBB_DIR}/bin/${TBB_ARCH_NAME}/${TBB_COMPILER_FOLER}"
194                                                    NO_DEFAULT_PATH)
195
196         # second search if previous one do not find anything
197         find_library (3RDPARTY_${LIBRARY_NAME}_DLL ${LIBRARY_NAME})
198       endif()
199     endif()
200     
201     if (NOT 3RDPARTY_${LIBRARY_NAME}_DLL_DIR OR NOT EXISTS "${3RDPARTY_${LIBRARY_NAME}_DLL_DIR}")
202       get_filename_component(3RDPARTY_${LIBRARY_NAME}_DLL_DIR "${3RDPARTY_${LIBRARY_NAME}_DLL}" PATH)
203       set (3RDPARTY_${LIBRARY_NAME}_DLL_DIR "${3RDPARTY_${LIBRARY_NAME}_DLL_DIR}" CACHE FILEPATH "The directory containing ${LIBRARY_NAME} shared library" FORCE)
204     endif()
205   endif() # end dll search
206 endforeach() # end tbb / tbbmalloc
207
208 # include found paths to common variables
209 if (3RDPARTY_TBB_INCLUDE_DIR AND EXISTS "${3RDPARTY_TBB_INCLUDE_DIR}")
210   list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_TBB_INCLUDE_DIR}")
211 else()
212   list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_TBB_INCLUDE_DIR)
213 endif()
214
215 foreach (LIBRARY_NAME TBB TBBMALLOC)
216   if (3RDPARTY_${LIBRARY_NAME}_LIBRARY AND EXISTS "${3RDPARTY_${LIBRARY_NAME}_LIBRARY}")
217     list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_${LIBRARY_NAME}_LIBRARY_DIR}")
218   else()
219     list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_${LIBRARY_NAME}_LIBRARY_DIR)
220   endif()
221
222   if (WIN32)
223     if (NOT 3RDPARTY_${LIBRARY_NAME}_DLL OR NOT EXISTS "${3RDPARTY_${LIBRARY_NAME}_DLL}")
224       list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_${LIBRARY_NAME}_DLL_DIR)
225     endif()
226   endif()
227 endforeach()
228
229 # install tbb
230 if (INSTALL_TBB)
231   OCCT_MAKE_OS_WITH_BITNESS()
232   OCCT_MAKE_COMPILER_SHORT_NAME()
233
234   if (WIN32)
235     install (FILES ${3RDPARTY_TBB_DLL} ${3RDPARTY_TBBMALLOC_DLL} DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BUILD_POSTFIX}")
236   else()
237     install (FILES ${3RDPARTY_TBB_LIBRARY} ${3RDPARTY_TBBMALLOC_LIBRARY} DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib${BUILD_POSTFIX}")
238   endif()
239
240   set (USED_3RDPARTY_TBB_DIR "")
241 else()
242   # the library directory for using by the executable
243   if (WIN32)
244     set (USED_3RDPARTY_TBB_DIR ${3RDPARTY_TBB_DLL_DIR})
245   else()
246     set (USED_3RDPARTY_TBB_DIR ${3RDPARTY_TBB_LIBRARY_DIR})
247   endif()
248 endif()
249
250 mark_as_advanced (3RDPARTY_TBB_LIBRARY 3RDPARTY_TBBMALLOC_LIBRARY 3RDPARTY_TBB_DLL 3RDPARTY_TBBMALLOC_DLL)