@@ -137,21 +137,27 @@ if(NOT TBB_FOUND)
137137 set (TBB_ARCHITECTURE "ia32" )
138138 endif ()
139139
140- # Set the TBB search library path search suffix based on the version of VC
140+ # Set the TBB search library/runtime path search suffix based on the version of VC
141141 if (WINDOWS_STORE)
142142 set (TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE} /vc11_ui" )
143+ set (TBB_RUNTIME_PATH_SUFFIX "bin/${TBB_ARCHITECTURE} /vc11_ui" )
143144 elseif (MSVC14)
144145 set (TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE} /vc14" )
146+ set (TBB_RUNTIME_PATH_SUFFIX "bin/${TBB_ARCHITECTURE} /vc14" )
145147 elseif (MSVC12)
146148 set (TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE} /vc12" )
149+ set (TBB_RUNTIME_PATH_SUFFIX "bin/${TBB_ARCHITECTURE} /vc12" )
147150 elseif (MSVC11)
148151 set (TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE} /vc11" )
152+ set (TBB_RUNTIME_PATH_SUFFIX "bin/${TBB_ARCHITECTURE} /vc11" )
149153 elseif (MSVC10)
150154 set (TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE} /vc10" )
155+ set (TBB_RUNTIME_PATH_SUFFIX "bin/${TBB_ARCHITECTURE} /vc10" )
151156 endif ()
152157
153- # Add the library path search suffix for the VC independent version of TBB
158+ # Add the library/runtime path search suffix for the VC independent version of TBB
154159 list (APPEND TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE} /vc_mt" )
160+ list (APPEND TBB_RUNTIME_PATH_SUFFIX "bin/${TBB_ARCHITECTURE} /vc_mt" )
155161
156162 elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin" )
157163 # OS X
@@ -176,12 +182,13 @@ if(NOT TBB_FOUND)
176182 endif ()
177183 endif ()
178184
179- # The above TBB_LIB_PATH_SUFFIX is based on where Intel puts the libraries
185+ # The above TBB_LIB_PATH_SUFFIX/TBB_RUNTIME_PATH_SUFFIX is based on where Intel puts the libraries
180186 # in the package of prebuilt libraries it distributes. However, users may
181- # install these shared libraries into the more conventional "lib" directory
187+ # install these shared libraries into the more conventional "lib"/"bin" directory
182188 # (especially when building from source), so we add that as an additional
183189 # location to search.
184190 list (APPEND TBB_LIB_PATH_SUFFIX "lib" )
191+ list (APPEND TBB_RUNTIME_PATH_SUFFIX "bin" )
185192
186193 ##################################
187194 # Find the TBB include dir
@@ -224,13 +231,13 @@ if(NOT TBB_FOUND)
224231 endif ()
225232
226233 if (TBB_VERSION VERSION_LESS 4.3)
227- set (TBB_SEARCH_COMPOMPONENTS tbb_preview tbbmalloc tbb)
234+ set (TBB_SEARCH_COMPONENTS tbb_preview tbbmalloc tbb)
228235 else ()
229- set (TBB_SEARCH_COMPOMPONENTS tbb_preview tbbmalloc_proxy tbbmalloc tbb)
236+ set (TBB_SEARCH_COMPONENTS tbb_preview tbbmalloc_proxy tbbmalloc tbb)
230237 endif ()
231238
232239 # Find each component
233- foreach (_comp ${TBB_SEARCH_COMPOMPONENTS } )
240+ foreach (_comp ${TBB_SEARCH_COMPONENTS } )
234241 if (";${TBB_FIND_COMPONENTS} ;tbb" MATCHES ";${_comp} ;" )
235242
236243 if (${_comp} STREQUAL tbb)
@@ -250,6 +257,32 @@ if(NOT TBB_FOUND)
250257 PATHS ${TBB_DEFAULT_SEARCH_DIR} ENV LIBRARY_PATH
251258 PATH_SUFFIXES ${TBB_LIB_PATH_SUFFIX} )
252259
260+ # On Windows platforms also looks for .dll binaries.
261+ # If we find some, assume TBB is built as a shared library with the .lib/.dll pair,
262+ # otherwise assume it is built as a static library
263+ set (TBB_${_comp} _TARGET_TYPE SHARED)
264+ if (WIN32 )
265+ find_file (TBB_${_comp} _SHARED_LIBRARY_RELEASE
266+ NAMES ${CMAKE_SHARED_LIBRARY_PREFIX}${_lib_name}${CMAKE_SHARED_LIBRARY_SUFFIX}
267+ HINTS ${TBB_LIBRARY} ${TBB_SEARCH_DIR}
268+ PATHS ${TBB_DEFAULT_SEARCH_DIR} ENV LIBRARY_PATH
269+ PATH_SUFFIXES ${TBB_RUNTIME_PATH_SUFFIX} )
270+
271+ find_file (TBB_${_comp} _SHARED_LIBRARY_DEBUG
272+ NAMES ${CMAKE_SHARED_LIBRARY_PREFIX}${_lib_name} _debug${CMAKE_SHARED_LIBRARY_SUFFIX}
273+ HINTS ${TBB_LIBRARY} ${TBB_SEARCH_DIR}
274+ PATHS ${TBB_DEFAULT_SEARCH_DIR} ENV LIBRARY_PATH
275+ PATH_SUFFIXES ${TBB_RUNTIME_PATH_SUFFIX} )
276+
277+ if (TBB_${_comp} _LIBRARY_RELEASE AND TBB_${_comp} _SHARED_LIBRARY_RELEASE)
278+ set (TBB_${_comp} _TARGET_TYPE SHARED)
279+ elseif (TBB_${_comp} _LIBRARY_DEBUG AND TBB_${_comp} _SHARED_LIBRARY_DEBUG)
280+ set (TBB_${_comp} _TARGET_TYPE SHARED)
281+ else ()
282+ set (TBB_${_comp} _TARGET_TYPE STATIC )
283+ endif ()
284+ endif ()
285+
253286 if (TBB_${_comp} _LIBRARY_DEBUG)
254287 list (APPEND TBB_LIBRARIES_DEBUG "${TBB_${_comp} _LIBRARY_DEBUG}" )
255288 endif ()
@@ -270,6 +303,7 @@ if(NOT TBB_FOUND)
270303 mark_as_advanced (TBB_${_comp} _LIBRARY_RELEASE)
271304 mark_as_advanced (TBB_${_comp} _LIBRARY_DEBUG)
272305 mark_as_advanced (TBB_${_comp} _LIBRARY)
306+ mark_as_advanced (TBB_${_comp} _TARGET_TYPE)
273307
274308 endif ()
275309 endforeach ()
@@ -302,26 +336,83 @@ if(NOT TBB_FOUND)
302336 ##################################
303337
304338 if (NOT CMAKE_VERSION VERSION_LESS 3.0 AND TBB_FOUND)
305- add_library (TBB::tbb SHARED IMPORTED )
306- set_target_properties (TBB::tbb PROPERTIES
307- INTERFACE_INCLUDE_DIRECTORIES ${TBB_INCLUDE_DIRS}
308- IMPORTED_LOCATION ${TBB_LIBRARIES} )
309- if (TBB_LIBRARIES_RELEASE AND TBB_LIBRARIES_DEBUG)
310- set_target_properties (TBB::tbb PROPERTIES
311- INTERFACE_COMPILE_DEFINITIONS "$<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:TBB_USE_DEBUG=1>"
312- IMPORTED_LOCATION_DEBUG ${TBB_LIBRARIES_DEBUG}
313- IMPORTED_LOCATION_RELWITHDEBINFO ${TBB_LIBRARIES_DEBUG}
314- IMPORTED_LOCATION_RELEASE ${TBB_LIBRARIES_RELEASE}
315- IMPORTED_LOCATION_MINSIZEREL ${TBB_LIBRARIES_RELEASE}
316- )
317- elseif (TBB_LIBRARIES_RELEASE)
318- set_target_properties (TBB::tbb PROPERTIES IMPORTED_LOCATION ${TBB_LIBRARIES_RELEASE} )
319- else ()
320- set_target_properties (TBB::tbb PROPERTIES
321- INTERFACE_COMPILE_DEFINITIONS "${TBB_DEFINITIONS_DEBUG} "
322- IMPORTED_LOCATION ${TBB_LIBRARIES_DEBUG}
323- )
324- endif ()
339+ foreach (_comp ${TBB_SEARCH_COMPONENTS} )
340+ if (";${TBB_FIND_COMPONENTS} ;tbb" MATCHES ";${_comp} ;" )
341+
342+ add_library (TBB::${_comp} ${TBB_${_comp} _TARGET_TYPE} IMPORTED )
343+ set_property (TARGET TBB::${_comp} APPEND PROPERTY
344+ INTERFACE_INCLUDE_DIRECTORIES ${TBB_INCLUDE_DIRS}
345+ )
346+
347+ set (TBB_LINK_DIR_DEBUG)
348+ set (TBB_LINK_DIR_RELEASE)
349+
350+ if (WIN32 AND TBB_${_comp} _SHARED_LIBRARY_${TBB_BUILD_TYPE} )
351+ set_target_properties (TBB::${_comp} PROPERTIES
352+ IMPORTED_IMPLIB ${TBB_${_comp} _LIBRARY_${TBB_BUILD_TYPE} }
353+ IMPORTED_LOCATION ${TBB_${_comp} _SHARED_LIBRARY_${TBB_BUILD_TYPE} })
354+ else ()
355+ set_target_properties (TBB::${_comp} PROPERTIES
356+ IMPORTED_LOCATION ${TBB_${_comp} _LIBRARY_${TBB_BUILD_TYPE} })
357+ endif ()
358+
359+ if (TBB_${_comp} _LIBRARY_DEBUG)
360+ set_property (TARGET TBB::${_comp} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
361+ set_property (TARGET TBB::${_comp} APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS "$<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:TBB_USE_DEBUG=1>" )
362+ cmake_path(GET TBB_${_comp} _LIBRARY_DEBUG PARENT_PATH TBB_LINK_DIR_DEBUG)
363+
364+ if (WIN32 AND TBB_${_comp} _SHARED_LIBRARY_DEBUG)
365+ set_target_properties (TBB::${_comp} PROPERTIES
366+ IMPORTED_IMPLIB_DEBUG ${TBB_${_comp} _LIBRARY_DEBUG}
367+ IMPORTED_IMPLIB_RELWITHDEBINFO ${TBB_${_comp} _LIBRARY_DEBUG}
368+
369+ IMPORTED_LOCATION_DEBUG ${TBB_${_comp} _SHARED_LIBRARY_DEBUG}
370+ IMPORTED_LOCATION_RELWITHDEBINFO ${TBB_${_comp} _SHARED_LIBRARY_DEBUG})
371+ else ()
372+ set_target_properties (TBB::${_comp} PROPERTIES
373+ IMPORTED_LOCATION_DEBUG ${TBB_${_comp} _LIBRARY_DEBUG}
374+ IMPORTED_LOCATION_RELWITHDEBINFO ${TBB_${_comp} _LIBRARY_DEBUG})
375+ endif ()
376+ endif ()
377+
378+ if (TBB_${_comp} _LIBRARY_RELEASE)
379+ set_property (TARGET TBB::${_comp} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
380+ cmake_path(GET TBB_${_comp} _LIBRARY_RELEASE PARENT_PATH TBB_LINK_DIR_RELEASE)
381+
382+ if (WIN32 AND TBB_${_comp} _SHARED_LIBRARY_RELEASE)
383+ set_target_properties (TBB::${_comp} PROPERTIES
384+ IMPORTED_IMPLIB_RELEASE ${TBB_${_comp} _LIBRARY_RELEASE}
385+ IMPORTED_IMPLIB_MINSIZEREL ${TBB_${_comp} _LIBRARY_RELEASE}
386+
387+ IMPORTED_LOCATION_RELEASE ${TBB_${_comp} _SHARED_LIBRARY_RELEASE}
388+ IMPORTED_LOCATION_MINSIZEREL ${TBB_${_comp} _SHARED_LIBRARY_RELEASE})
389+ else ()
390+ set_target_properties (TBB::${_comp} PROPERTIES
391+ IMPORTED_LOCATION_RELEASE ${TBB_${_comp} _LIBRARY_RELEASE}
392+ IMPORTED_LOCATION_MINSIZEREL ${TBB_${_comp} _LIBRARY_RELEASE})
393+ endif ()
394+ endif ()
395+
396+ endif ()
397+
398+ # Set the linker directory path for the target. This is specifically
399+ # used on linux so that the linker can find the appropriate
400+ # numbered shared object
401+ if (TBB_LINK_DIR_DEBUG AND TBB_LINK_DIR_RELEASE)
402+ set (TBB_LINK_DIRS "$<$<CONFIG:Debug>:${TBB_LINK_DIR_DEBUG} >;$<$<CONFIG:Release>:${TBB_LINK_DIR_RELEASE} >" )
403+ elseif (TBB_LINK_DIRS_DEBUG)
404+ set (TBB_LINK_DIRS ${TBB_LINK_DIR_DEBUG} )
405+ elseif (TBB_LINK_DIR_RELEASE)
406+ set (TBB_LINK_DIRS ${TBB_LINK_DIR_RELEASE} )
407+ endif ()
408+ if (TBB_LINK_DIRS)
409+ set_property (TARGET TBB::${_comp} APPEND PROPERTY INTERFACE_LINK_DIRECTORIES ${TBB_LINK_DIRS} )
410+ endif ()
411+
412+ unset (TBB_LINK_DIR_DEBUG)
413+ unset (TBB_LINK_DIR_RELEASE)
414+ unset (TBB_LINK_DIRS)
415+ endforeach ()
325416 endif ()
326417
327418 mark_as_advanced (TBB_INCLUDE_DIRS TBB_LIBRARIES)
@@ -330,5 +421,4 @@ if(NOT TBB_FOUND)
330421 unset (TBB_BUILD_TYPE)
331422 unset (TBB_LIB_PATH_SUFFIX)
332423 unset (TBB_DEFAULT_SEARCH_DIR)
333-
334- endif ()
424+ endif ()
0 commit comments