Warning, /sdk/codevis/cmake/FindTBB.cmake is written in an unsupported language. File is not indexed.
0001 #.rst: 0002 # FindTBB 0003 # ------- 0004 # 0005 # Find Intel's Threading Building Blocks (TBB) include path and libraries. 0006 # 0007 # This module reads hints about search locations from variables: 0008 # 0009 # :: 0010 # 0011 # TBB_ROOT - Root directory of pre-built TBB package. 0012 # Can be an environment variable instead. It is 0013 # derived from the found TBB_INCLUDE_DIR if unset. 0014 # TBB_ARCH_PLATFORM - Environment variable which can be used to specify 0015 # architecture and platform specific library path 0016 # suffix (excluding "/lib/" suffix or prefix). 0017 # For MSVC, the appropriate link library path of the 0018 # official pre-built download package from the TBB 0019 # web site is chosen by this module. The path suffix 0020 # derived from this variable takes precedence. 0021 # 0022 # This module considers the following CMake variables set by find_package: 0023 # 0024 # :: 0025 # 0026 # TBB_FIND_COMPONENTS - Case-insensitive names of requested libraries: 0027 # tbb, [tbb]malloc, [tbb]malloc_proxy 0028 # TBB_FIND_REQUIRED_<C> - Whether TBB library component <C> is required. 0029 # TBB is considered to be not found when at least 0030 # one required library or its include path is missing. 0031 # When no TBB_FIND_COMPONENTS are specified, only the 0032 # threading library "tbb" is required. 0033 # TBB_FIND_REQUIRED - Raise FATAL_ERROR when required components not found. 0034 # TBB_FIND_QUIETLY - Suppress all other (status) messages. 0035 # 0036 # The TBB_DEBUG variable can be set to TRUE before find_package(TBB) to 0037 # enable verbose output which helps to debug the processing of this module: 0038 # 0039 # :: 0040 # 0041 # set(TBB_DEBUG TRUE) 0042 # find_package(TBB) 0043 # 0044 # This module defines the following variables: 0045 # 0046 # :: 0047 # 0048 # TBB_FOUND - Whether TBB libraries were found. 0049 # TBB_INCLUDE_DIR - TBB library include path where tbb/tbb_stddef.h is located. 0050 # Used as HINTS for find_path of TBB_<C>_INCLUDE_DIR. 0051 # TBB_INCLUDE_DIRS - Include paths of found TBB libraries. 0052 # TBB_LIBRARIES - File paths of found TBB libraries. 0053 # TBB_VERSION - Version for use in VERSION_LESS et al. comparisons. 0054 # TBB_VERSION_MAJOR - Major library version number. 0055 # TBB_VERSION_MINOR - Minor library version number. 0056 # TBB_VERSION_STRING - Version string for output messages. 0057 # TBB_INTERFACE_VERSION - API version number. 0058 # TBB_COMPATIBLE_INTERFACE_VERSION - The oldest major version still supported. 0059 # 0060 # Additionally, for each requested component, this module defines the following variables: 0061 # 0062 # :: 0063 # 0064 # TBB_TBB_FOUND - Whether TBB threading library was found. 0065 # TBB_TBB_INCLUDE_DIR - Include path of TBB threading library. 0066 # TBB_TBB_INCLUDE_DIRS - Include paths for use of TBB library. 0067 # TBB_TBB_LIBRARIES - TBB threading library and transitive link dependencies. 0068 # TBB_TBB_LIBRARY_RELEASE - File path of optimized TBB link library. 0069 # TBB_TBB_LIBRARY_DEBUG - File path of TBB link library with debug symbols. 0070 # TBB_TBB_LIBRARY - File paths of both "optimized" and "debug" TBB threading link libraries. 0071 # When only one of these is found, this variable is set to either 0072 # TBB_TBB_LIBRARY_RELEASE or TBB_TBB_LIBRARY_DEBUG. 0073 # 0074 # TBB_MALLOC_FOUND - Whether TBB malloc library was found. 0075 # TBB_MALLOC_INCLUDE_DIR - Include path of TBB malloc library. 0076 # TBB_MALLOC_INCLUDE_DIRS - Include paths for use of TBB malloc library. 0077 # TBB_MALLOC_LIBRARIES - TBB malloc library and transitive link dependencies. 0078 # TBB_MALLOC_LIBRARY_RELEASE - File path of optimized TBB malloc link library. 0079 # TBB_MALLOC_LIBRARY_DEBUG - File path of TBB malloc link library with debug symbols. 0080 # TBB_MALLOC_LIBRARY - File paths of both "optimized" and "debug" TBB malloc link libraries. 0081 # When only one of these is found, this variable is set to either 0082 # TBB_MALLOC_LIBRARY_RELEASE or TBB_MALLOC_LIBRARY_DEBUG. 0083 # 0084 # TBB_MALLOC_PROXY_FOUND - Whether TBB malloc proxy library was found. 0085 # TBB_MALLOC_PROXY_INCLUDE_DIR - Include path of TBB malloc proxy library. 0086 # TBB_MALLOC_PROXY_INCLUDE_DIRS - Include paths for use of TBB malloc proxy library. 0087 # TBB_MALLOC_PROXY_LIBRARIES - TBB malloc proxy library and transitive link dependencies. 0088 # TBB_MALLOC_PROXY_LIBRARY_RELEASE - File path of optimized TBB malloc proxy link library. 0089 # TBB_MALLOC_PROXY_LIBRARY_DEBUG - File path of TBB malloc proxy link library with debug symbols. 0090 # TBB_MALLOC_PROXY_LIBRARY - File paths of both "optimized" and "debug" TBB malloc proxy link libraries. 0091 # When only one of these is found, this variable is set to either 0092 # TBB_MALLOC_PROXY_LIBRARY_RELEASE or TBB_MALLOC_PROXY_LIBRARY_DEBUG. 0093 # 0094 # of these, the following variables are added as advanced cache entries: 0095 # 0096 # :: 0097 # 0098 # TBB_INCLUDE_DIR 0099 # TBB_<C>_INCLUDE_DIR 0100 # TBB_<C>_LIBRARY_RELEASE 0101 # TBB_<C>_LIBRARY_DEBUG 0102 # 0103 # This module further defines the following import targets with the IMPORTED and INTERFACE 0104 # properties set appropriately such that only a target_link_libraries command is required 0105 # to declare the dependency of another target on the respective TBB library component. 0106 # The use of these import targets instead of above defined variables is recommended. 0107 # 0108 # :: 0109 # 0110 # TBB::tbb - TBB threading library. 0111 # TBB::malloc - TBB malloc library. 0112 # TBB::malloc_proxy - TBB malloc proxy library. 0113 # 0114 # Example usage: 0115 # 0116 # :: 0117 # 0118 # find_package(TBB REQUIRED COMPONENTS tbb OPTIONAL_COMPONENTS malloc) 0119 # 0120 # add_executable(foo foo.cc) 0121 # target_link_libraries(foo TBB::tbb) 0122 # if (TARGET TBB::malloc) 0123 # # or if (TBB_MALLOC_FOUND) 0124 # target_link_libraries(foo TBB::malloc) 0125 # endif () 0126 # 0127 # This module was written by Andreas Schuh for CMake BASIS with inspiration 0128 # from the FindTBB module which was originally part of the Object-oriented 0129 # Graphics Rendering Engine (OGRE) project with modifications by Robert Maynard. 0130 0131 #============================================================================= 0132 # Copyright 2016 Andreas Schuh <andreas.schuh.84@gmail.com> 0133 # 0134 # Distributed under the OSI-approved BSD License (the "License"); 0135 # see accompanying file Copyright.txt for details. 0136 # 0137 # This software is distributed WITHOUT ANY WARRANTY; without even the 0138 # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 0139 # See the License for more information. 0140 #============================================================================= 0141 # (To distribute this file outside of CMake, substitute the full 0142 # License text for the above reference.) 0143 0144 if (NOT TBB_FIND_QUIETLY) 0145 set(_TBB_FIND_STATUS "Looking for TBB") 0146 if (TBB_FIND_COMPONENTS) 0147 set(_TBB_FIND_STATUS "${_TBB_FIND_STATUS} [${TBB_FIND_COMPONENTS}]") 0148 endif () 0149 if (NOT TBB_FIND_REQUIRED) 0150 set(_TBB_FIND_STATUS "${_TBB_FIND_STATUS} (optional)") 0151 endif () 0152 message(STATUS "${_TBB_FIND_STATUS}...") 0153 endif () 0154 0155 # ------------------------------------------------------------------------------ 0156 # Default required/optional components 0157 if (NOT TBB_FIND_COMPONENTS) 0158 set(TBB_FIND_COMPONENTS tbb malloc malloc_proxy) 0159 set(TBB_FIND_REQUIRED_tbb TRUE) 0160 set(TBB_FIND_REQUIRED_malloc FALSE) 0161 set(TBB_FIND_REQUIRED_malloc_proxy FALSE) 0162 endif () 0163 0164 # ------------------------------------------------------------------------------ 0165 # Normalize component names 0166 set(_TBB_FIND_COMPONENTS) 0167 foreach (__TBB_COMPONENT IN LISTS TBB_FIND_COMPONENTS) 0168 string(TOUPPER "${__TBB_COMPONENT}" _TBB_COMPONENT) 0169 string(REGEX REPLACE "^TBB_?([A-Z_]+)$" "\\1" _TBB_COMPONENT "${_TBB_COMPONENT}") 0170 if (_TBB_COMPONENT MATCHES "^(TBB|MALLOC|MALLOC_PROXY)$") 0171 set(_TBB_${_TBB_COMPONENT}_NAME ${__TBB_COMPONENT}) 0172 list(APPEND _TBB_FIND_COMPONENTS ${_TBB_COMPONENT}) 0173 if (TBB_FIND_REQUIRED_${__TBB_COMPONENT}) 0174 set(_TBB_FIND_REQUIRED_${_TBB_COMPONENT} TRUE) 0175 else () 0176 set(_TBB_FIND_REQUIRED_${_TBB_COMPONENT} FALSE) 0177 endif () 0178 else () 0179 message(FATAL_ERROR "Unknown TBB library component: ${__TBB_COMPONENT}\n" 0180 "Valid component names are: tbb, [tbb]malloc, [tbb]malloc_proxy") 0181 endif () 0182 endforeach () 0183 unset(__TBB_COMPONENT) 0184 0185 if (TBB_DEBUG) 0186 message("** FindTBB: Components = [${_TBB_FIND_COMPONENTS}]") 0187 endif () 0188 0189 # ------------------------------------------------------------------------------ 0190 # Names of headers and libraries for each component 0191 set(_TBB_TBB_LIB_NAMES_RELEASE tbb) 0192 set(_TBB_TBB_LIB_NAMES_DEBUG tbb_debug) 0193 set(_TBB_TBB_INC_NAMES tbb/tbb.h) 0194 0195 set(_TBB_MALLOC_LIB_NAMES_RELEASE tbbmalloc) 0196 set(_TBB_MALLOC_LIB_NAMES_DEBUG tbbmalloc_debug) 0197 set(_TBB_MALLOC_INC_NAMES tbb/tbb.h) 0198 0199 set(_TBB_MALLOC_PROXY_LIB_NAMES_RELEASE tbbmalloc_proxy) 0200 set(_TBB_MALLOC_PROXY_LIB_NAMES_DEBUG tbbmalloc_proxy_debug) 0201 set(_TBB_MALLOC_PROXY_INC_NAMES tbb/tbbmalloc_proxy.h) 0202 0203 # ------------------------------------------------------------------------------ 0204 # Transitive link dependencies 0205 set(_TBB_TBB_LIB_LINK_DEPENDS) 0206 set(_TBB_MALLOC_LIB_LINK_DEPENDS) 0207 set(_TBB_MALLOC_PROXY_LIB_LINK_DEPENDS) 0208 0209 if (UNIX AND NOT APPLE) 0210 # On Linux, the TBB threading library requires librt.so 0211 list(APPEND _TBB_TBB_LIB_LINK_DEPENDS rt) 0212 endif () 0213 0214 # ------------------------------------------------------------------------------ 0215 # Construct a set of search paths 0216 set(_TBB_ARCH_PLATFORM $ENV{TBB_ARCH_PLATFORM}) 0217 0218 if (NOT TBB_ROOT) 0219 file(TO_CMAKE_PATH "$ENV{TBB_ROOT}" TBB_ROOT) 0220 endif () 0221 0222 set(_TBB_INC_PATH_SUFFIXES include) 0223 0224 set(_TBB_LIB_PATH_SUFFIXES) 0225 if (_TBB_ARCH_PLATFORM) 0226 list(APPEND _TBB_LIB_PATH_SUFFIXES lib/${_TBB_ARCH_PLATFORM}) 0227 list(APPEND _TBB_LIB_PATH_SUFFIXES ${_TBB_ARCH_PLATFORM}/lib) 0228 endif () 0229 list(APPEND _TBB_LIB_PATH_SUFFIXES lib) 0230 0231 if (WIN32 AND MSVC AND CMAKE_GENERATOR MATCHES "Visual Studio ([0-9]+)") 0232 set(_TBB_MSVS_VERSION ${CMAKE_MATCH_1}) 0233 if (CMAKE_CL_64) 0234 list(APPEND _TBB_LIB_PATH_SUFFIXES lib/intel64/vc${_TBB_MSVS_VERSION}) 0235 list(APPEND _TBB_LIB_PATH_SUFFIXES intel64/vc${_TBB_MSVS_VERSION}/lib) 0236 list(APPEND _TBB_LIB_PATH_SUFFIXES lib/ia64/vc${_TBB_MSVS_VERSION}) 0237 list(APPEND _TBB_LIB_PATH_SUFFIXES ia64/vc${_TBB_MSVS_VERSION}/lib) 0238 else () 0239 list(APPEND _TBB_LIB_PATH_SUFFIXES lib/ia32/vc${_TBB_MSVS_VERSION}) 0240 list(APPEND _TBB_LIB_PATH_SUFFIXES ia32/vc${_TBB_MSVS_VERSION}/lib) 0241 endif () 0242 unset(_TBB_MSVS_VERSION) 0243 endif () 0244 0245 if (TBB_DEBUG) 0246 message("** FindTBB: Initial search paths:") 0247 message("** FindTBB: - Root directory hints = [${TBB_ROOT}]") 0248 message("** FindTBB: - Include path suffixes = [${_TBB_INC_PATH_SUFFIXES}]") 0249 message("** FindTBB: - Library path suffixes = [${_TBB_LIB_PATH_SUFFIXES}]") 0250 endif () 0251 0252 # ------------------------------------------------------------------------------ 0253 # Find common include directory 0254 # 0255 # Looking for tbb/tbb_stddef.h because we use this path later to read this file 0256 # in order to extract the version information. The tbb.h header should be in the 0257 # same directory and is searched for separately as part of the "tbb" and "malloc" 0258 # component search. The TBB_INCLUDE_DIR is then used as HINTS. 0259 find_path(TBB_INCLUDE_DIR 0260 NAMES tbb/tbb_stddef.h 0261 HINTS ${TBB_ROOT} 0262 PATH_SUFFIXES ${_TBB_INC_PATH_SUFFIXES} 0263 ) 0264 0265 mark_as_advanced(TBB_INCLUDE_DIR) 0266 0267 # ------------------------------------------------------------------------------ 0268 # Derive TBB_ROOT from TBB_INCLUDE_DIR if unset 0269 if (TBB_INCLUDE_DIR AND NOT TBB_ROOT) 0270 if (_TBB_INC_PATH_SUFFIXES MATCHES "[^/;]/[^/;]") 0271 string(LENGTH "${TBB_INCLUDE_DIR}" _TBB_INCLUDE_DIR_LENGTH) 0272 foreach (_TBB_INC_PATH_SUFFIX IN LISTS _TBB_INC_PATH_SUFFIXES) 0273 string(LENGTH "${_TBB_INC_PATH_SUFFIX}" _TBB_INC_PATH_SUFFIX_LENGTH) 0274 if (_TBB_INC_PATH_SUFFIX_LENGTH GREATER 0) 0275 math(EXPR _TBB_SUBSTRING_START "${_TBB_INCLUDE_DIR_LENGTH} - ${_TBB_INC_PATH_SUFFIX_LENGTH}") 0276 string(SUBSTRING "${TBB_INCLUDE_DIR}" _TBB_SUBSTRING_START -1 _TBB_SUBSTRING) 0277 if (_TBB_SUBSTRING STREQUAL _TBB_INC_PATH_SUFFIX) 0278 if (_TBB_SUBSTRING_START GREATER 0) 0279 string(SUBSTRING "${TBB_INCLUDE_DIR}" 0 _TBB_SUBSTRING_START TBB_ROOT) 0280 string(REGEX REPLACE "/+$" "" TBB_ROOT "${TBB_ROOT}") 0281 else () 0282 set(TBB_ROOT "/") 0283 endif () 0284 break() 0285 endif () 0286 endif () 0287 endforeach () 0288 unset(_TBB_SUBSTRING) 0289 unset(_TBB_SUBSTRING_START) 0290 unset(_TBB_INCLUDE_DIR_LENGTH) 0291 unset(_TBB_INC_PATH_SUFFIX_LENGTH) 0292 else () 0293 get_filename_component(TBB_ROOT "${TBB_INCLUDE_DIR}" DIRECTORY) 0294 endif () 0295 endif () 0296 0297 if (TBB_DEBUG) 0298 message("** FindTBB: After initial search of TBB include path") 0299 message("** FindTBB: - TBB_INCLUDE_DIR = ${TBB_INCLUDE_DIR}") 0300 message("** FindTBB: - TBB_ROOT = [${TBB_ROOT}]") 0301 endif () 0302 0303 # ------------------------------------------------------------------------------ 0304 # Find library components 0305 set(TBB_INCLUDE_DIRS) 0306 set(TBB_LIBRARIES) 0307 0308 foreach (_TBB_COMPONENT IN LISTS _TBB_FIND_COMPONENTS) 0309 if (TBB_DEBUG) 0310 message("** FindTBB: Looking for component ${_TBB_COMPONENT}...") 0311 endif () 0312 0313 # Find include path and library files of this component 0314 find_path(TBB_${_TBB_COMPONENT}_INCLUDE_DIR 0315 NAMES ${_TBB_${_TBB_COMPONENT}_INC_NAMES} 0316 HINTS ${TBB_INCLUDE_DIR} ${TBB_ROOT} 0317 PATH_SUFFIXES ${_TBB_INC_PATH_SUFFIXES} 0318 ) 0319 0320 find_library(TBB_${_TBB_COMPONENT}_LIBRARY_RELEASE 0321 NAMES ${_TBB_${_TBB_COMPONENT}_LIB_NAMES_RELEASE} 0322 HINTS ${TBB_ROOT} 0323 PATH_SUFFIXES ${_TBB_LIB_PATH_SUFFIXES} 0324 ) 0325 0326 find_library(TBB_${_TBB_COMPONENT}_LIBRARY_DEBUG 0327 NAMES ${_TBB_${_TBB_COMPONENT}_LIB_NAMES_DEBUG} 0328 HINTS ${TBB_ROOT} 0329 PATH_SUFFIXES ${_TBB_LIB_PATH_SUFFIXES} 0330 ) 0331 0332 if (TBB_DEBUG) 0333 message("** FindTBB: - TBB_${_TBB_COMPONENT}_INCLUDE_DIR = ${TBB_${_TBB_COMPONENT}_INCLUDE_DIR}") 0334 message("** FindTBB: - TBB_${_TBB_COMPONENT}_LIBRARY_RELEASE = ${TBB_${_TBB_COMPONENT}_LIBRARY_RELEASE}") 0335 message("** FindTBB: - TBB_${_TBB_COMPONENT}_LIBRARY_DEBUG = ${TBB_${_TBB_COMPONENT}_LIBRARY_DEBUG}") 0336 endif () 0337 0338 # Mark cache entries as advanced 0339 mark_as_advanced(TBB_${_TBB_COMPONENT}_INCLUDE_DIR) 0340 mark_as_advanced(TBB_${_TBB_COMPONENT}_LIBRARY_RELEASE) 0341 mark_as_advanced(TBB_${_TBB_COMPONENT}_LIBRARY_DEBUG) 0342 0343 # Set TBB_<C>_LIBRARY 0344 if (TBB_${_TBB_COMPONENT}_LIBRARY_RELEASE AND TBB_${_TBB_COMPONENT}_LIBRARY_DEBUG) 0345 set(TBB_${_TBB_COMPONENT}_LIBRARY 0346 optimized ${TBB_${_TBB_COMPONENT}_LIBRARY_RELEASE} 0347 debug ${TBB_${_TBB_COMPONENT}_LIBRARY_DEBUG} 0348 ) 0349 elseif (TBB_${_TBB_COMPONENT}_LIBRARY_RELEASE) 0350 set(TBB_${_TBB_COMPONENT}_LIBRARY ${TBB_${_TBB_COMPONENT}_LIBRARY_RELEASE}) 0351 elseif (TBB_${_TBB_COMPONENT}_LIBRARY_DEBUG) 0352 set(TBB_${_TBB_COMPONENT}_LIBRARY ${TBB_${_TBB_COMPONENT}_LIBRARY_DEBUG}) 0353 else () 0354 set(TBB_${_TBB_COMPONENT}_LIBRARY TBB_${_TBB_COMPONENT}_LIBRARY-NOTFOUND) 0355 endif () 0356 0357 # Set TBB_<C>_FOUND 0358 if (TBB_${_TBB_COMPONENT}_INCLUDE_DIR AND TBB_${_TBB_COMPONENT}_LIBRARY) 0359 set(TBB_${_TBB_COMPONENT}_FOUND TRUE) 0360 else () 0361 set(TBB_${_TBB_COMPONENT}_FOUND FALSE) 0362 endif () 0363 set(TBB_${_TBB_${_TBB_COMPONENT}_NAME}_FOUND ${TBB_${_TBB_COMPONENT}_FOUND}) 0364 0365 if (TBB_${_TBB_COMPONENT}_FOUND) 0366 0367 # Add transitive dependencies 0368 set(TBB_${_TBB_COMPONENT}_INCLUDE_DIRS ${TBB_${_TBB_COMPONENT}_INCLUDE_DIR}) 0369 set(TBB_${_TBB_COMPONENT}_LIBRARIES ${TBB_${_TBB_COMPONENT}_LIBRARY}) 0370 if (_TBB_${_TBB_COMPONENT}_LIB_LINK_DEPENDS) 0371 list(APPEND TBB_${_TBB_COMPONENT}_LIBRARIES "${_TBB_${_TBB_COMPONENT}_LIB_LINK_DEPENDS}") 0372 endif () 0373 0374 if (TBB_DEBUG) 0375 message("** FindTBB: - TBB_${_TBB_COMPONENT}_INCLUDE_DIRS = [${TBB_${_TBB_COMPONENT}_INCLUDE_DIRS}]") 0376 message("** FindTBB: - TBB_${_TBB_COMPONENT}_LIBRARIES = [${TBB_${_TBB_COMPONENT}_LIBRARIES}]") 0377 endif () 0378 0379 # Add to TBB_INCLUDE_DIRS and TBB_LIBRARIES 0380 list(APPEND TBB_INCLUDE_DIRS ${TBB_${_TBB_COMPONENT}_INCLUDE_DIRS}) 0381 list(APPEND TBB_LIBRARIES ${TBB_${_TBB_COMPONENT}_LIBRARIES}) 0382 0383 # Add TBB::<C> import target 0384 string(TOLOWER ${_TBB_COMPONENT} _TBB_TARGET_NAME) 0385 set(_TBB_TARGET_NAME "TBB::${_TBB_TARGET_NAME}") 0386 add_library(${_TBB_TARGET_NAME} SHARED IMPORTED) 0387 0388 set_target_properties(${_TBB_TARGET_NAME} PROPERTIES 0389 INTERFACE_INCLUDE_DIRECTORIES "${TBB_${_TBB_COMPONENT}_INCLUDE_DIRS}" 0390 IMPORTED_LINK_INTERFACE_LANGUAGES CXX 0391 IMPORTED_NO_SONAME TRUE 0392 ) 0393 if (_TBB_${_TBB_COMPONENT}_LIB_LINK_DEPENDS) 0394 set_target_properties(${_TBB_TARGET_NAME} PROPERTIES 0395 INTERFACE_LINK_LIBRARIES "${_TBB_${_TBB_COMPONENT}_LIB_LINK_DEPENDS}" 0396 ) 0397 endif () 0398 0399 foreach (_TBB_CONFIGURATION IN ITEMS DEBUG RELEASE) 0400 if (TBB_${_TBB_COMPONENT}_LIBRARY_${_TBB_CONFIGURATION}) 0401 set_property(TARGET ${_TBB_TARGET_NAME} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${_TBB_CONFIGURATION}) 0402 if (WIN32) 0403 set_target_properties(${_TBB_TARGET_NAME} PROPERTIES 0404 IMPORTED_IMPLIB_${_TBB_CONFIGURATION} "${TBB_${_TBB_COMPONENT}_LIBRARY_${_TBB_CONFIGURATION}}" 0405 ) 0406 string(REPLACE "/lib/" "/bin/" _TBB_LIB_PATH_DLL "${TBB_${_TBB_COMPONENT}_LIBRARY_${_TBB_CONFIGURATION}}") 0407 string(REGEX REPLACE "\\.lib$" ".dll" _TBB_LIB_PATH_DLL "${_TBB_LIB_PATH_DLL}") 0408 if (EXISTS "${_TBB_LIB_PATH_DLL}") 0409 set_target_properties(${_TBB_TARGET_NAME} PROPERTIES 0410 IMPORTED_LOCATION_${_TBB_CONFIGURATION} "${_TBB_LIB_PATH_DLL}" 0411 ) 0412 if (TBB_DEBUG) 0413 message("** FindTBB: - IMPORTED_LOCATION_${_TBB_CONFIGURATION} = ${_TBB_LIB_PATH_DLL}") 0414 endif () 0415 elseif (TBB_DEBUG) 0416 message("** FindTBB: Could not determine ${_TBB_CONFIGURATION} DLL path from import library, tried: " 0417 "\n\t${_TBB_LIB_PATH_DLL}") 0418 endif () 0419 else () 0420 set_target_properties(${_TBB_TARGET_NAME} PROPERTIES 0421 IMPORTED_LOCATION_${_TBB_CONFIGURATION} "${TBB_${_TBB_COMPONENT}_LIBRARY_${_TBB_CONFIGURATION}}" 0422 ) 0423 endif () 0424 endif () 0425 endforeach () 0426 0427 if (TBB_DEBUG) 0428 message("** FindTBB: Looking for component ${_TBB_COMPONENT}... - found") 0429 endif () 0430 0431 else () 0432 0433 if (TBB_DEBUG) 0434 message("** FindTBB: Looking for component ${_TBB_COMPONENT}... - not found") 0435 endif () 0436 unset(TBB_${_TBB_COMPONENT}_INCLUDE_DIRS) 0437 unset(TBB_${_TBB_COMPONENT}_LIBRARIES) 0438 0439 endif () 0440 endforeach () 0441 0442 if (TBB_INCLUDE_DIRS) 0443 list(REMOVE_DUPLICATES TBB_INCLUDE_DIRS) 0444 endif () 0445 0446 if (TBB_DEBUG) 0447 message("** FindTBB: Include paths and libraries of all found components:") 0448 message("** FindTBB: - TBB_INCLUDE_DIRS = [${TBB_INCLUDE_DIRS}]") 0449 message("** FindTBB: - TBB_LIBRARIES = [${TBB_LIBRARIES}]") 0450 endif () 0451 0452 # ------------------------------------------------------------------------------ 0453 # Extract library version from start of tbb_stddef.h 0454 if (TBB_INCLUDE_DIR) 0455 if (NOT DEFINED TBB_VERSION_MAJOR OR 0456 NOT DEFINED TBB_VERSION_MINOR OR 0457 NOT DEFINED TBB_INTERFACE_VERSION OR 0458 NOT DEFINED TBB_COMPATIBLE_INTERFACE_VERSION) 0459 file(READ "${TBB_INCLUDE_DIR}/tbb/tbb_stddef.h" _TBB_VERSION_CONTENTS LIMIT 2048) 0460 string(REGEX REPLACE 0461 ".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1" 0462 TBB_VERSION_MAJOR "${_TBB_VERSION_CONTENTS}" 0463 ) 0464 string(REGEX REPLACE 0465 ".*#define TBB_VERSION_MINOR ([0-9]+).*" "\\1" 0466 TBB_VERSION_MINOR "${_TBB_VERSION_CONTENTS}" 0467 ) 0468 string(REGEX REPLACE 0469 ".*#define TBB_INTERFACE_VERSION ([0-9]+).*" "\\1" 0470 TBB_INTERFACE_VERSION "${_TBB_VERSION_CONTENTS}" 0471 ) 0472 string(REGEX REPLACE 0473 ".*#define TBB_COMPATIBLE_INTERFACE_VERSION ([0-9]+).*" "\\1" 0474 TBB_COMPATIBLE_INTERFACE_VERSION "${_TBB_VERSION_CONTENTS}" 0475 ) 0476 unset(_TBB_VERSION_CONTENTS) 0477 endif () 0478 set(TBB_VERSION "${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR}") 0479 set(TBB_VERSION_STRING "${TBB_VERSION}") 0480 else () 0481 unset(TBB_VERSION) 0482 unset(TBB_VERSION_MAJOR) 0483 unset(TBB_VERSION_MINOR) 0484 unset(TBB_VERSION_STRING) 0485 unset(TBB_INTERFACE_VERSION) 0486 unset(TBB_COMPATIBLE_INTERFACE_VERSION) 0487 endif () 0488 0489 if (TBB_DEBUG) 0490 message("** FindTBB: Version information from ${TBB_INCLUDE_DIR}/tbb/tbb_stddef.h") 0491 message("** FindTBB: - TBB_VERSION_STRING = ${TBB_VERSION_STRING}") 0492 message("** FindTBB: - TBB_VERSION_MAJOR = ${TBB_VERSION_MAJOR}") 0493 message("** FindTBB: - TBB_VERSION_MINOR = ${TBB_VERSION_MINOR}") 0494 message("** FindTBB: - TBB_INTERFACE_VERSION = ${TBB_INTERFACE_VERSION}") 0495 message("** FindTBB: - TBB_COMPATIBLE_INTERFACE_VERSION = ${TBB_COMPATIBLE_INTERFACE_VERSION}") 0496 endif () 0497 0498 # ------------------------------------------------------------------------------ 0499 # Handle QUIET, REQUIRED, and [EXACT] VERSION arguments and set TBB_FOUND 0500 include(FindPackageHandleStandardArgs) 0501 find_package_handle_standard_args(TBB 0502 REQUIRED_VARS TBB_INCLUDE_DIR 0503 VERSION_VAR TBB_VERSION 0504 HANDLE_COMPONENTS 0505 ) 0506 0507 if (NOT TBB_FIND_QUIETLY) 0508 if (TBB_FOUND) 0509 message(STATUS "${_TBB_FIND_STATUS}... - found v${TBB_VERSION_STRING}") 0510 else () 0511 message(STATUS "${_TBB_FIND_STATUS}... - not found") 0512 endif () 0513 endif () 0514 0515 # ------------------------------------------------------------------------------ 0516 # Unset local auxiliary variables 0517 foreach (_TBB_COMPONENT IN ITEMS TBB MALLOC MALLOC_PROXY) 0518 unset(_TBB_FIND_REQUIRED_${_TBB_COMPONENT}) 0519 unset(_TBB_${_TBB_COMPONENT}_LIB_NAMES_RELEASE) 0520 unset(_TBB_${_TBB_COMPONENT}_LIB_NAMES_DEBUG) 0521 unset(_TBB_${_TBB_COMPONENT}_LIB_LINK_DEPENDS) 0522 unset(_TBB_${_TBB_COMPONENT}_INC_NAMES) 0523 unset(_TBB_${_TBB_COMPONENT}_NAME) 0524 endforeach () 0525 0526 unset(_TBB_COMPONENT) 0527 unset(_TBB_TARGET_NAME) 0528 unset(_TBB_FIND_COMPONENTS) 0529 unset(_TBB_FIND_STATUS) 0530 unset(_TBB_INC_PATH_SUFFIXES) 0531 unset(_TBB_LIB_PATH_SUFFIXES) 0532 unset(_TBB_LIB_PATH_DLL) 0533 unset(_TBB_LIB_NAME) 0534 unset(_TBB_ARCH_PLATFORM)