Skip to content

Commit d17762c

Browse files
Implement heuristic to resolve import/shared libraries on Windows
1 parent 2181637 commit d17762c

File tree

1 file changed

+77
-20
lines changed

1 file changed

+77
-20
lines changed

cmake/modules/FindTBB.cmake

Lines changed: 77 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,36 @@ if(NOT TBB_FOUND)
250250
PATHS ${TBB_DEFAULT_SEARCH_DIR} ENV LIBRARY_PATH
251251
PATH_SUFFIXES ${TBB_LIB_PATH_SUFFIX})
252252

253+
# On Windows platforms also looks for .dll binaries.
254+
# If we find some, assume TBB is built as a shared library with the .lib/.dll pair,
255+
# otherwise assume it is built as a static library
256+
set(TBB_${_comp}_TARGET_TYPE SHARED)
257+
if(WIN32)
258+
find_library(TBB_${_comp}_SHARED_LIBRARY_RELEASE
259+
NAMES ${_lib_name}${CMAKE_SHARED_LIBRARY_SUFFIX}
260+
HINTS ${TBB_LIBRARY} ${TBB_SEARCH_DIR}
261+
PATHS ${TBB_DEFAULT_SEARCH_DIR} ENV LIBRARY_PATH
262+
PATH_SUFFIXES
263+
"bin" ${TBB_LIB_PATH_SUFFIX}
264+
)
265+
266+
find_library(TBB_${_comp}_SHARED_LIBRARY_RELEASE
267+
NAMES ${_lib_name}${CMAKE_SHARED_LIBRARY_SUFFIX}
268+
HINTS ${TBB_LIBRARY} ${TBB_SEARCH_DIR}
269+
PATHS ${TBB_DEFAULT_SEARCH_DIR} ENV LIBRARY_PATH
270+
PATH_SUFFIXES
271+
"bin" ${TBB_LIB_PATH_SUFFIX}
272+
)
273+
274+
if(TBB_${_comp}_LIBRARY_RELEASE AND TBB_${_comp}_SHARED_LIBRARY_RELEASE)
275+
set(TBB_${_comp}_TARGET_TYPE SHARED)
276+
elseif(TBB_${_comp}_LIBRARY_DEBUG AND TBB_${_comp}_SHARED_LIBRARY_DEBUG)
277+
set(TBB_${_comp}_TARGET_TYPE SHARED)
278+
else()
279+
set(TBB_${_comp}_TARGET_TYPE STATIC)
280+
endif()
281+
endif()
282+
253283
if(TBB_${_comp}_LIBRARY_DEBUG)
254284
list(APPEND TBB_LIBRARIES_DEBUG "${TBB_${_comp}_LIBRARY_DEBUG}")
255285
endif()
@@ -270,6 +300,7 @@ if(NOT TBB_FOUND)
270300
mark_as_advanced(TBB_${_comp}_LIBRARY_RELEASE)
271301
mark_as_advanced(TBB_${_comp}_LIBRARY_DEBUG)
272302
mark_as_advanced(TBB_${_comp}_LIBRARY)
303+
mark_as_advanced(TBB_${_comp}_TARGET_TYPE)
273304

274305
endif()
275306
endforeach()
@@ -302,26 +333,52 @@ if(NOT TBB_FOUND)
302333
##################################
303334

304335
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()
336+
337+
foreach(_comp ${TBB_SEARCH_COMPONENTS})
338+
if(";${TBB_FIND_COMPONENTS};tbb" MATCHES ";${_comp};")
339+
340+
add_library(TBB::${_comp} ${TBB_${_comp}_TARGET_TYPE} IMPORTED)
341+
set_property(TARGET TBB::${_comp} APPEND PROPERTY
342+
INTERFACE_INCLUDE_DIRECTORIES ${TBB_INCLUDE_DIRS}
343+
)
344+
345+
if(TBB_${_comp}_LIBRARY_DEBUG)
346+
set_property(TARGET TBB::${_comp} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
347+
set_property(TARGET TBB::${_comp} APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS "$<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:TBB_USE_DEBUG=1>")
348+
349+
if(WIN32 AND TBB_${_comp}_SHARED_LIBRARY_DEBUG)
350+
set_target_properties(TBB::${_comp} PROPERTIES
351+
IMPORTED_IMPLIB_LOCATION_DEBUG ${TBB_${_comp}_LIBRARY_DEBUG}
352+
IMPORTED_IMPLIB_LOCATION_RELWITHDEBINFO ${TBB_${_comp}_LIBRARY_DEBUG}
353+
354+
IMPORTED_LOCATION_DEBUG ${TBB_${_comp}_SHARED_LIBRARY_DEBUG}
355+
IMPORTED_LOCATION_RELWITHDEBINFO ${TBB_${_comp}_SHARED_LIBRARY_DEBUG})
356+
else()
357+
set_target_properties(TBB::${_comp} PROPERTIES
358+
IMPORTED_LOCATION_DEBUG ${TBB_${_comp}_LIBRARY_DEBUG}
359+
IMPORTED_LOCATION_RELWITHDEBINFO ${TBB_${_comp}_LIBRARY_DEBUG})
360+
endif()
361+
endif()
362+
363+
if(TBB_${_comp}_LIBRARY_RELEASE)
364+
set_property(TARGET TBB::${_comp} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
365+
366+
if(WIN32 AND TBB_${_comp}_SHARED_LIBRARY_RELEASE)
367+
set_target_properties(TBB::${_comp} PROPERTIES
368+
IMPORTED_IMPLIB_LOCATION_RELEASE ${TBB_${_comp}_LIBRARY_RELEASE}
369+
IMPORTED_IMPLIB_LOCATION_MINSIZEREL ${TBB_${_comp}_LIBRARY_RELEASE}
370+
371+
IMPORTED_LOCATION_RELEASE ${TBB_${_comp}_SHARED_LIBRARY_RELEASE}
372+
IMPORTED_LOCATION_MINSIZEREL ${TBB_${_comp}_SHARED_LIBRARY_RELEASE})
373+
else()
374+
set_target_properties(TBB::${_comp} PROPERTIES
375+
IMPORTED_LOCATION_RELEASE ${TBB_${_comp}_LIBRARY_RELEASE}
376+
IMPORTED_LOCATION_MINSIZEREL ${TBB_${_comp}_LIBRARY_RELEASE})
377+
endif()
378+
endif()
379+
380+
endif()
381+
endforeach()
325382
endif()
326383

327384
mark_as_advanced(TBB_INCLUDE_DIRS TBB_LIBRARIES)

0 commit comments

Comments
 (0)