mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-26 22:57:00 +02:00
534 lines
22 KiB
CMake
534 lines
22 KiB
CMake
#.rst:
|
|
# FindTBB
|
|
# -------
|
|
#
|
|
# Find Intel's Threading Building Blocks (TBB) include path and libraries.
|
|
#
|
|
# This module reads hints about search locations from variables:
|
|
#
|
|
# ::
|
|
#
|
|
# TBB_ROOT - Root directory of pre-built TBB package.
|
|
# Can be an environment variable instead. It is
|
|
# derived from the found TBB_INCLUDE_DIR if unset.
|
|
# TBB_ARCH_PLATFORM - Environment variable which can be used to specify
|
|
# architecture and platform specific library path
|
|
# suffix (excluding "/lib/" suffix or prefix).
|
|
# For MSVC, the appropriate link library path of the
|
|
# official pre-built download package from the TBB
|
|
# web site is chosen by this module. The path suffix
|
|
# derived from this variable takes precedence.
|
|
#
|
|
# This module considers the following CMake variables set by find_package:
|
|
#
|
|
# ::
|
|
#
|
|
# TBB_FIND_COMPONENTS - Case-insensitive names of requested libraries:
|
|
# tbb, [tbb]malloc, [tbb]malloc_proxy
|
|
# TBB_FIND_REQUIRED_<C> - Whether TBB library component <C> is required.
|
|
# TBB is considered to be not found when at least
|
|
# one required library or its include path is missing.
|
|
# When no TBB_FIND_COMPONENTS are specified, only the
|
|
# threading library "tbb" is required.
|
|
# TBB_FIND_REQUIRED - Raise FATAL_ERROR when required components not found.
|
|
# TBB_FIND_QUIETLY - Suppress all other (status) messages.
|
|
#
|
|
# The TBB_DEBUG variable can be set to TRUE before find_package(TBB) to
|
|
# enable verbose output which helps to debug the processing of this module:
|
|
#
|
|
# ::
|
|
#
|
|
# set(TBB_DEBUG TRUE)
|
|
# find_package(TBB)
|
|
#
|
|
# This module defines the following variables:
|
|
#
|
|
# ::
|
|
#
|
|
# TBB_FOUND - Whether TBB libraries were found.
|
|
# TBB_INCLUDE_DIR - TBB library include path where tbb/tbb_stddef.h is located.
|
|
# Used as HINTS for find_path of TBB_<C>_INCLUDE_DIR.
|
|
# TBB_INCLUDE_DIRS - Include paths of found TBB libraries.
|
|
# TBB_LIBRARIES - File paths of found TBB libraries.
|
|
# TBB_VERSION - Version for use in VERSION_LESS et al. comparisons.
|
|
# TBB_VERSION_MAJOR - Major library version number.
|
|
# TBB_VERSION_MINOR - Minor library version number.
|
|
# TBB_VERSION_STRING - Version string for output messages.
|
|
# TBB_INTERFACE_VERSION - API version number.
|
|
# TBB_COMPATIBLE_INTERFACE_VERSION - The oldest major version still supported.
|
|
#
|
|
# Additionally, for each requested component, this module defines the following variables:
|
|
#
|
|
# ::
|
|
#
|
|
# TBB_TBB_FOUND - Whether TBB threading library was found.
|
|
# TBB_TBB_INCLUDE_DIR - Include path of TBB threading library.
|
|
# TBB_TBB_INCLUDE_DIRS - Include paths for use of TBB library.
|
|
# TBB_TBB_LIBRARIES - TBB threading library and transitive link dependencies.
|
|
# TBB_TBB_LIBRARY_RELEASE - File path of optimized TBB link library.
|
|
# TBB_TBB_LIBRARY_DEBUG - File path of TBB link library with debug symbols.
|
|
# TBB_TBB_LIBRARY - File paths of both "optimized" and "debug" TBB threading link libraries.
|
|
# When only one of these is found, this variable is set to either
|
|
# TBB_TBB_LIBRARY_RELEASE or TBB_TBB_LIBRARY_DEBUG.
|
|
#
|
|
# TBB_MALLOC_FOUND - Whether TBB malloc library was found.
|
|
# TBB_MALLOC_INCLUDE_DIR - Include path of TBB malloc library.
|
|
# TBB_MALLOC_INCLUDE_DIRS - Include paths for use of TBB malloc library.
|
|
# TBB_MALLOC_LIBRARIES - TBB malloc library and transitive link dependencies.
|
|
# TBB_MALLOC_LIBRARY_RELEASE - File path of optimized TBB malloc link library.
|
|
# TBB_MALLOC_LIBRARY_DEBUG - File path of TBB malloc link library with debug symbols.
|
|
# TBB_MALLOC_LIBRARY - File paths of both "optimized" and "debug" TBB malloc link libraries.
|
|
# When only one of these is found, this variable is set to either
|
|
# TBB_MALLOC_LIBRARY_RELEASE or TBB_MALLOC_LIBRARY_DEBUG.
|
|
#
|
|
# TBB_MALLOC_PROXY_FOUND - Whether TBB malloc proxy library was found.
|
|
# TBB_MALLOC_PROXY_INCLUDE_DIR - Include path of TBB malloc proxy library.
|
|
# TBB_MALLOC_PROXY_INCLUDE_DIRS - Include paths for use of TBB malloc proxy library.
|
|
# TBB_MALLOC_PROXY_LIBRARIES - TBB malloc proxy library and transitive link dependencies.
|
|
# TBB_MALLOC_PROXY_LIBRARY_RELEASE - File path of optimized TBB malloc proxy link library.
|
|
# TBB_MALLOC_PROXY_LIBRARY_DEBUG - File path of TBB malloc proxy link library with debug symbols.
|
|
# TBB_MALLOC_PROXY_LIBRARY - File paths of both "optimized" and "debug" TBB malloc proxy link libraries.
|
|
# When only one of these is found, this variable is set to either
|
|
# TBB_MALLOC_PROXY_LIBRARY_RELEASE or TBB_MALLOC_PROXY_LIBRARY_DEBUG.
|
|
#
|
|
# of these, the following variables are added as advanced cache entries:
|
|
#
|
|
# ::
|
|
#
|
|
# TBB_INCLUDE_DIR
|
|
# TBB_<C>_INCLUDE_DIR
|
|
# TBB_<C>_LIBRARY_RELEASE
|
|
# TBB_<C>_LIBRARY_DEBUG
|
|
#
|
|
# This module further defines the following import targets with the IMPORTED and INTERFACE
|
|
# properties set appropriately such that only a target_link_libraries command is required
|
|
# to declare the dependency of another target on the respective TBB library component.
|
|
# The use of these import targets instead of above defined variables is recommended.
|
|
#
|
|
# ::
|
|
#
|
|
# TBB::tbb - TBB threading library.
|
|
# TBB::malloc - TBB malloc library.
|
|
# TBB::malloc_proxy - TBB malloc proxy library.
|
|
#
|
|
# Example usage:
|
|
#
|
|
# ::
|
|
#
|
|
# find_package(TBB REQUIRED COMPONENTS tbb OPTIONAL_COMPONENTS malloc)
|
|
#
|
|
# add_executable(foo foo.cc)
|
|
# target_link_libraries(foo TBB::tbb)
|
|
# if (TARGET TBB::malloc)
|
|
# # or if (TBB_MALLOC_FOUND)
|
|
# target_link_libraries(foo TBB::malloc)
|
|
# endif ()
|
|
#
|
|
# This module was written by Andreas Schuh for CMake BASIS with inspiration
|
|
# from the FindTBB module which was originally part of the Object-oriented
|
|
# Graphics Rendering Engine (OGRE) project with modifications by Robert Maynard.
|
|
|
|
#=============================================================================
|
|
# Copyright 2016 Andreas Schuh <andreas.schuh.84@gmail.com>
|
|
#
|
|
# Distributed under the OSI-approved BSD License (the "License");
|
|
# see accompanying file Copyright.txt for details.
|
|
#
|
|
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
# See the License for more information.
|
|
#=============================================================================
|
|
# (To distribute this file outside of CMake, substitute the full
|
|
# License text for the above reference.)
|
|
|
|
if (NOT TBB_FIND_QUIETLY)
|
|
set(_TBB_FIND_STATUS "Looking for TBB")
|
|
if (TBB_FIND_COMPONENTS)
|
|
set(_TBB_FIND_STATUS "${_TBB_FIND_STATUS} [${TBB_FIND_COMPONENTS}]")
|
|
endif ()
|
|
if (NOT TBB_FIND_REQUIRED)
|
|
set(_TBB_FIND_STATUS "${_TBB_FIND_STATUS} (optional)")
|
|
endif ()
|
|
message(STATUS "${_TBB_FIND_STATUS}...")
|
|
endif ()
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Default required/optional components
|
|
if (NOT TBB_FIND_COMPONENTS)
|
|
set(TBB_FIND_COMPONENTS tbb malloc malloc_proxy)
|
|
set(TBB_FIND_REQUIRED_tbb TRUE)
|
|
set(TBB_FIND_REQUIRED_malloc FALSE)
|
|
set(TBB_FIND_REQUIRED_malloc_proxy FALSE)
|
|
endif ()
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Normalize component names
|
|
set(_TBB_FIND_COMPONENTS)
|
|
foreach (__TBB_COMPONENT IN LISTS TBB_FIND_COMPONENTS)
|
|
string(TOUPPER "${__TBB_COMPONENT}" _TBB_COMPONENT)
|
|
string(REGEX REPLACE "^TBB_?([A-Z_]+)$" "\\1" _TBB_COMPONENT "${_TBB_COMPONENT}")
|
|
if (_TBB_COMPONENT MATCHES "^(TBB|MALLOC|MALLOC_PROXY)$")
|
|
set(_TBB_${_TBB_COMPONENT}_NAME ${__TBB_COMPONENT})
|
|
list(APPEND _TBB_FIND_COMPONENTS ${_TBB_COMPONENT})
|
|
if (TBB_FIND_REQUIRED_${__TBB_COMPONENT})
|
|
set(_TBB_FIND_REQUIRED_${_TBB_COMPONENT} TRUE)
|
|
else ()
|
|
set(_TBB_FIND_REQUIRED_${_TBB_COMPONENT} FALSE)
|
|
endif ()
|
|
else ()
|
|
message(FATAL_ERROR "Unknown TBB library component: ${__TBB_COMPONENT}\n"
|
|
"Valid component names are: tbb, [tbb]malloc, [tbb]malloc_proxy")
|
|
endif ()
|
|
endforeach ()
|
|
unset(__TBB_COMPONENT)
|
|
|
|
if (TBB_DEBUG)
|
|
message("** FindTBB: Components = [${_TBB_FIND_COMPONENTS}]")
|
|
endif ()
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Names of headers and libraries for each component
|
|
set(_TBB_TBB_LIB_NAMES_RELEASE tbb)
|
|
set(_TBB_TBB_LIB_NAMES_DEBUG tbb_debug)
|
|
set(_TBB_TBB_INC_NAMES tbb/tbb.h)
|
|
|
|
set(_TBB_MALLOC_LIB_NAMES_RELEASE tbbmalloc)
|
|
set(_TBB_MALLOC_LIB_NAMES_DEBUG tbbmalloc_debug)
|
|
set(_TBB_MALLOC_INC_NAMES tbb/tbb.h)
|
|
|
|
set(_TBB_MALLOC_PROXY_LIB_NAMES_RELEASE tbbmalloc_proxy)
|
|
set(_TBB_MALLOC_PROXY_LIB_NAMES_DEBUG tbbmalloc_proxy_debug)
|
|
set(_TBB_MALLOC_PROXY_INC_NAMES tbb/tbbmalloc_proxy.h)
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Transitive link dependencies
|
|
set(_TBB_TBB_LIB_LINK_DEPENDS)
|
|
set(_TBB_MALLOC_LIB_LINK_DEPENDS)
|
|
set(_TBB_MALLOC_PROXY_LIB_LINK_DEPENDS)
|
|
|
|
if (UNIX AND NOT APPLE)
|
|
# On Linux, the TBB threading library requires librt.so
|
|
list(APPEND _TBB_TBB_LIB_LINK_DEPENDS rt)
|
|
endif ()
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Construct a set of search paths
|
|
set(_TBB_ARCH_PLATFORM $ENV{TBB_ARCH_PLATFORM})
|
|
|
|
if (NOT TBB_ROOT)
|
|
file(TO_CMAKE_PATH "$ENV{TBB_ROOT}" TBB_ROOT)
|
|
endif ()
|
|
|
|
set(_TBB_INC_PATH_SUFFIXES include)
|
|
|
|
set(_TBB_LIB_PATH_SUFFIXES)
|
|
if (_TBB_ARCH_PLATFORM)
|
|
list(APPEND _TBB_LIB_PATH_SUFFIXES lib/${_TBB_ARCH_PLATFORM})
|
|
list(APPEND _TBB_LIB_PATH_SUFFIXES ${_TBB_ARCH_PLATFORM}/lib)
|
|
endif ()
|
|
list(APPEND _TBB_LIB_PATH_SUFFIXES lib)
|
|
|
|
if (WIN32 AND MSVC AND CMAKE_GENERATOR MATCHES "Visual Studio ([0-9]+)")
|
|
set(_TBB_MSVS_VERSION ${CMAKE_MATCH_1})
|
|
if (CMAKE_CL_64)
|
|
list(APPEND _TBB_LIB_PATH_SUFFIXES lib/intel64/vc${_TBB_MSVS_VERSION})
|
|
list(APPEND _TBB_LIB_PATH_SUFFIXES intel64/vc${_TBB_MSVS_VERSION}/lib)
|
|
list(APPEND _TBB_LIB_PATH_SUFFIXES lib/ia64/vc${_TBB_MSVS_VERSION})
|
|
list(APPEND _TBB_LIB_PATH_SUFFIXES ia64/vc${_TBB_MSVS_VERSION}/lib)
|
|
else ()
|
|
list(APPEND _TBB_LIB_PATH_SUFFIXES lib/ia32/vc${_TBB_MSVS_VERSION})
|
|
list(APPEND _TBB_LIB_PATH_SUFFIXES ia32/vc${_TBB_MSVS_VERSION}/lib)
|
|
endif ()
|
|
unset(_TBB_MSVS_VERSION)
|
|
endif ()
|
|
|
|
if (TBB_DEBUG)
|
|
message("** FindTBB: Initial search paths:")
|
|
message("** FindTBB: - Root directory hints = [${TBB_ROOT}]")
|
|
message("** FindTBB: - Include path suffixes = [${_TBB_INC_PATH_SUFFIXES}]")
|
|
message("** FindTBB: - Library path suffixes = [${_TBB_LIB_PATH_SUFFIXES}]")
|
|
endif ()
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Find common include directory
|
|
#
|
|
# Looking for tbb/tbb_stddef.h because we use this path later to read this file
|
|
# in order to extract the version information. The tbb.h header should be in the
|
|
# same directory and is searched for separately as part of the "tbb" and "malloc"
|
|
# component search. The TBB_INCLUDE_DIR is then used as HINTS.
|
|
find_path(TBB_INCLUDE_DIR
|
|
NAMES tbb/tbb_stddef.h
|
|
HINTS ${TBB_ROOT}
|
|
PATH_SUFFIXES ${_TBB_INC_PATH_SUFFIXES}
|
|
)
|
|
|
|
mark_as_advanced(TBB_INCLUDE_DIR)
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Derive TBB_ROOT from TBB_INCLUDE_DIR if unset
|
|
if (TBB_INCLUDE_DIR AND NOT TBB_ROOT)
|
|
if (_TBB_INC_PATH_SUFFIXES MATCHES "[^/;]/[^/;]")
|
|
string(LENGTH "${TBB_INCLUDE_DIR}" _TBB_INCLUDE_DIR_LENGTH)
|
|
foreach (_TBB_INC_PATH_SUFFIX IN LISTS _TBB_INC_PATH_SUFFIXES)
|
|
string(LENGTH "${_TBB_INC_PATH_SUFFIX}" _TBB_INC_PATH_SUFFIX_LENGTH)
|
|
if (_TBB_INC_PATH_SUFFIX_LENGTH GREATER 0)
|
|
math(EXPR _TBB_SUBSTRING_START "${_TBB_INCLUDE_DIR_LENGTH} - ${_TBB_INC_PATH_SUFFIX_LENGTH}")
|
|
string(SUBSTRING "${TBB_INCLUDE_DIR}" _TBB_SUBSTRING_START -1 _TBB_SUBSTRING)
|
|
if (_TBB_SUBSTRING STREQUAL _TBB_INC_PATH_SUFFIX)
|
|
if (_TBB_SUBSTRING_START GREATER 0)
|
|
string(SUBSTRING "${TBB_INCLUDE_DIR}" 0 _TBB_SUBSTRING_START TBB_ROOT)
|
|
string(REGEX REPLACE "/+$" "" TBB_ROOT "${TBB_ROOT}")
|
|
else ()
|
|
set(TBB_ROOT "/")
|
|
endif ()
|
|
break()
|
|
endif ()
|
|
endif ()
|
|
endforeach ()
|
|
unset(_TBB_SUBSTRING)
|
|
unset(_TBB_SUBSTRING_START)
|
|
unset(_TBB_INCLUDE_DIR_LENGTH)
|
|
unset(_TBB_INC_PATH_SUFFIX_LENGTH)
|
|
else ()
|
|
get_filename_component(TBB_ROOT "${TBB_INCLUDE_DIR}" DIRECTORY)
|
|
endif ()
|
|
endif ()
|
|
|
|
if (TBB_DEBUG)
|
|
message("** FindTBB: After initial search of TBB include path")
|
|
message("** FindTBB: - TBB_INCLUDE_DIR = ${TBB_INCLUDE_DIR}")
|
|
message("** FindTBB: - TBB_ROOT = [${TBB_ROOT}]")
|
|
endif ()
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Find library components
|
|
set(TBB_INCLUDE_DIRS)
|
|
set(TBB_LIBRARIES)
|
|
|
|
foreach (_TBB_COMPONENT IN LISTS _TBB_FIND_COMPONENTS)
|
|
if (TBB_DEBUG)
|
|
message("** FindTBB: Looking for component ${_TBB_COMPONENT}...")
|
|
endif ()
|
|
|
|
# Find include path and library files of this component
|
|
find_path(TBB_${_TBB_COMPONENT}_INCLUDE_DIR
|
|
NAMES ${_TBB_${_TBB_COMPONENT}_INC_NAMES}
|
|
HINTS ${TBB_INCLUDE_DIR} ${TBB_ROOT}
|
|
PATH_SUFFIXES ${_TBB_INC_PATH_SUFFIXES}
|
|
)
|
|
|
|
find_library(TBB_${_TBB_COMPONENT}_LIBRARY_RELEASE
|
|
NAMES ${_TBB_${_TBB_COMPONENT}_LIB_NAMES_RELEASE}
|
|
HINTS ${TBB_ROOT}
|
|
PATH_SUFFIXES ${_TBB_LIB_PATH_SUFFIXES}
|
|
)
|
|
|
|
find_library(TBB_${_TBB_COMPONENT}_LIBRARY_DEBUG
|
|
NAMES ${_TBB_${_TBB_COMPONENT}_LIB_NAMES_DEBUG}
|
|
HINTS ${TBB_ROOT}
|
|
PATH_SUFFIXES ${_TBB_LIB_PATH_SUFFIXES}
|
|
)
|
|
|
|
if (TBB_DEBUG)
|
|
message("** FindTBB: - TBB_${_TBB_COMPONENT}_INCLUDE_DIR = ${TBB_${_TBB_COMPONENT}_INCLUDE_DIR}")
|
|
message("** FindTBB: - TBB_${_TBB_COMPONENT}_LIBRARY_RELEASE = ${TBB_${_TBB_COMPONENT}_LIBRARY_RELEASE}")
|
|
message("** FindTBB: - TBB_${_TBB_COMPONENT}_LIBRARY_DEBUG = ${TBB_${_TBB_COMPONENT}_LIBRARY_DEBUG}")
|
|
endif ()
|
|
|
|
# Mark cache entries as advanced
|
|
mark_as_advanced(TBB_${_TBB_COMPONENT}_INCLUDE_DIR)
|
|
mark_as_advanced(TBB_${_TBB_COMPONENT}_LIBRARY_RELEASE)
|
|
mark_as_advanced(TBB_${_TBB_COMPONENT}_LIBRARY_DEBUG)
|
|
|
|
# Set TBB_<C>_LIBRARY
|
|
if (TBB_${_TBB_COMPONENT}_LIBRARY_RELEASE AND TBB_${_TBB_COMPONENT}_LIBRARY_DEBUG)
|
|
set(TBB_${_TBB_COMPONENT}_LIBRARY
|
|
optimized ${TBB_${_TBB_COMPONENT}_LIBRARY_RELEASE}
|
|
debug ${TBB_${_TBB_COMPONENT}_LIBRARY_DEBUG}
|
|
)
|
|
elseif (TBB_${_TBB_COMPONENT}_LIBRARY_RELEASE)
|
|
set(TBB_${_TBB_COMPONENT}_LIBRARY ${TBB_${_TBB_COMPONENT}_LIBRARY_RELEASE})
|
|
elseif (TBB_${_TBB_COMPONENT}_LIBRARY_DEBUG)
|
|
set(TBB_${_TBB_COMPONENT}_LIBRARY ${TBB_${_TBB_COMPONENT}_LIBRARY_DEBUG})
|
|
else ()
|
|
set(TBB_${_TBB_COMPONENT}_LIBRARY TBB_${_TBB_COMPONENT}_LIBRARY-NOTFOUND)
|
|
endif ()
|
|
|
|
# Set TBB_<C>_FOUND
|
|
if (TBB_${_TBB_COMPONENT}_INCLUDE_DIR AND TBB_${_TBB_COMPONENT}_LIBRARY)
|
|
set(TBB_${_TBB_COMPONENT}_FOUND TRUE)
|
|
else ()
|
|
set(TBB_${_TBB_COMPONENT}_FOUND FALSE)
|
|
endif ()
|
|
set(TBB_${_TBB_${_TBB_COMPONENT}_NAME}_FOUND ${TBB_${_TBB_COMPONENT}_FOUND})
|
|
|
|
if (TBB_${_TBB_COMPONENT}_FOUND)
|
|
|
|
# Add transitive dependencies
|
|
set(TBB_${_TBB_COMPONENT}_INCLUDE_DIRS ${TBB_${_TBB_COMPONENT}_INCLUDE_DIR})
|
|
set(TBB_${_TBB_COMPONENT}_LIBRARIES ${TBB_${_TBB_COMPONENT}_LIBRARY})
|
|
if (_TBB_${_TBB_COMPONENT}_LIB_LINK_DEPENDS)
|
|
list(APPEND TBB_${_TBB_COMPONENT}_LIBRARIES "${_TBB_${_TBB_COMPONENT}_LIB_LINK_DEPENDS}")
|
|
endif ()
|
|
|
|
if (TBB_DEBUG)
|
|
message("** FindTBB: - TBB_${_TBB_COMPONENT}_INCLUDE_DIRS = [${TBB_${_TBB_COMPONENT}_INCLUDE_DIRS}]")
|
|
message("** FindTBB: - TBB_${_TBB_COMPONENT}_LIBRARIES = [${TBB_${_TBB_COMPONENT}_LIBRARIES}]")
|
|
endif ()
|
|
|
|
# Add to TBB_INCLUDE_DIRS and TBB_LIBRARIES
|
|
list(APPEND TBB_INCLUDE_DIRS ${TBB_${_TBB_COMPONENT}_INCLUDE_DIRS})
|
|
list(APPEND TBB_LIBRARIES ${TBB_${_TBB_COMPONENT}_LIBRARIES})
|
|
|
|
# Add TBB::<C> import target
|
|
string(TOLOWER ${_TBB_COMPONENT} _TBB_TARGET_NAME)
|
|
set(_TBB_TARGET_NAME "TBB::${_TBB_TARGET_NAME}")
|
|
add_library(${_TBB_TARGET_NAME} SHARED IMPORTED)
|
|
|
|
set_target_properties(${_TBB_TARGET_NAME} PROPERTIES
|
|
INTERFACE_INCLUDE_DIRECTORIES "${TBB_${_TBB_COMPONENT}_INCLUDE_DIRS}"
|
|
IMPORTED_LINK_INTERFACE_LANGUAGES CXX
|
|
IMPORTED_NO_SONAME TRUE
|
|
)
|
|
if (_TBB_${_TBB_COMPONENT}_LIB_LINK_DEPENDS)
|
|
set_target_properties(${_TBB_TARGET_NAME} PROPERTIES
|
|
INTERFACE_LINK_LIBRARIES "${_TBB_${_TBB_COMPONENT}_LIB_LINK_DEPENDS}"
|
|
)
|
|
endif ()
|
|
|
|
foreach (_TBB_CONFIGURATION IN ITEMS DEBUG RELEASE)
|
|
if (TBB_${_TBB_COMPONENT}_LIBRARY_${_TBB_CONFIGURATION})
|
|
set_property(TARGET ${_TBB_TARGET_NAME} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${_TBB_CONFIGURATION})
|
|
if (WIN32)
|
|
set_target_properties(${_TBB_TARGET_NAME} PROPERTIES
|
|
IMPORTED_IMPLIB_${_TBB_CONFIGURATION} "${TBB_${_TBB_COMPONENT}_LIBRARY_${_TBB_CONFIGURATION}}"
|
|
)
|
|
string(REPLACE "/lib/" "/bin/" _TBB_LIB_PATH_DLL "${TBB_${_TBB_COMPONENT}_LIBRARY_${_TBB_CONFIGURATION}}")
|
|
string(REGEX REPLACE "\\.lib$" ".dll" _TBB_LIB_PATH_DLL "${_TBB_LIB_PATH_DLL}")
|
|
if (EXISTS "${_TBB_LIB_PATH_DLL}")
|
|
set_target_properties(${_TBB_TARGET_NAME} PROPERTIES
|
|
IMPORTED_LOCATION_${_TBB_CONFIGURATION} "${_TBB_LIB_PATH_DLL}"
|
|
)
|
|
if (TBB_DEBUG)
|
|
message("** FindTBB: - IMPORTED_LOCATION_${_TBB_CONFIGURATION} = ${_TBB_LIB_PATH_DLL}")
|
|
endif ()
|
|
elseif (TBB_DEBUG)
|
|
message("** FindTBB: Could not determine ${_TBB_CONFIGURATION} DLL path from import library, tried: "
|
|
"\n\t${_TBB_LIB_PATH_DLL}")
|
|
endif ()
|
|
else ()
|
|
set_target_properties(${_TBB_TARGET_NAME} PROPERTIES
|
|
IMPORTED_LOCATION_${_TBB_CONFIGURATION} "${TBB_${_TBB_COMPONENT}_LIBRARY_${_TBB_CONFIGURATION}}"
|
|
)
|
|
endif ()
|
|
endif ()
|
|
endforeach ()
|
|
|
|
if (TBB_DEBUG)
|
|
message("** FindTBB: Looking for component ${_TBB_COMPONENT}... - found")
|
|
endif ()
|
|
|
|
else ()
|
|
|
|
if (TBB_DEBUG)
|
|
message("** FindTBB: Looking for component ${_TBB_COMPONENT}... - not found")
|
|
endif ()
|
|
unset(TBB_${_TBB_COMPONENT}_INCLUDE_DIRS)
|
|
unset(TBB_${_TBB_COMPONENT}_LIBRARIES)
|
|
|
|
endif ()
|
|
endforeach ()
|
|
|
|
if (TBB_INCLUDE_DIRS)
|
|
list(REMOVE_DUPLICATES TBB_INCLUDE_DIRS)
|
|
endif ()
|
|
|
|
if (TBB_DEBUG)
|
|
message("** FindTBB: Include paths and libraries of all found components:")
|
|
message("** FindTBB: - TBB_INCLUDE_DIRS = [${TBB_INCLUDE_DIRS}]")
|
|
message("** FindTBB: - TBB_LIBRARIES = [${TBB_LIBRARIES}]")
|
|
endif ()
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Extract library version from start of tbb_stddef.h
|
|
if (TBB_INCLUDE_DIR)
|
|
if (NOT DEFINED TBB_VERSION_MAJOR OR
|
|
NOT DEFINED TBB_VERSION_MINOR OR
|
|
NOT DEFINED TBB_INTERFACE_VERSION OR
|
|
NOT DEFINED TBB_COMPATIBLE_INTERFACE_VERSION)
|
|
file(READ "${TBB_INCLUDE_DIR}/tbb/tbb_stddef.h" _TBB_VERSION_CONTENTS LIMIT 2048)
|
|
string(REGEX REPLACE
|
|
".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1"
|
|
TBB_VERSION_MAJOR "${_TBB_VERSION_CONTENTS}"
|
|
)
|
|
string(REGEX REPLACE
|
|
".*#define TBB_VERSION_MINOR ([0-9]+).*" "\\1"
|
|
TBB_VERSION_MINOR "${_TBB_VERSION_CONTENTS}"
|
|
)
|
|
string(REGEX REPLACE
|
|
".*#define TBB_INTERFACE_VERSION ([0-9]+).*" "\\1"
|
|
TBB_INTERFACE_VERSION "${_TBB_VERSION_CONTENTS}"
|
|
)
|
|
string(REGEX REPLACE
|
|
".*#define TBB_COMPATIBLE_INTERFACE_VERSION ([0-9]+).*" "\\1"
|
|
TBB_COMPATIBLE_INTERFACE_VERSION "${_TBB_VERSION_CONTENTS}"
|
|
)
|
|
unset(_TBB_VERSION_CONTENTS)
|
|
endif ()
|
|
set(TBB_VERSION "${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR}")
|
|
set(TBB_VERSION_STRING "${TBB_VERSION}")
|
|
else ()
|
|
unset(TBB_VERSION)
|
|
unset(TBB_VERSION_MAJOR)
|
|
unset(TBB_VERSION_MINOR)
|
|
unset(TBB_VERSION_STRING)
|
|
unset(TBB_INTERFACE_VERSION)
|
|
unset(TBB_COMPATIBLE_INTERFACE_VERSION)
|
|
endif ()
|
|
|
|
if (TBB_DEBUG)
|
|
message("** FindTBB: Version information from ${TBB_INCLUDE_DIR}/tbb/tbb_stddef.h")
|
|
message("** FindTBB: - TBB_VERSION_STRING = ${TBB_VERSION_STRING}")
|
|
message("** FindTBB: - TBB_VERSION_MAJOR = ${TBB_VERSION_MAJOR}")
|
|
message("** FindTBB: - TBB_VERSION_MINOR = ${TBB_VERSION_MINOR}")
|
|
message("** FindTBB: - TBB_INTERFACE_VERSION = ${TBB_INTERFACE_VERSION}")
|
|
message("** FindTBB: - TBB_COMPATIBLE_INTERFACE_VERSION = ${TBB_COMPATIBLE_INTERFACE_VERSION}")
|
|
endif ()
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Handle QUIET, REQUIRED, and [EXACT] VERSION arguments and set TBB_FOUND
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(TBB
|
|
REQUIRED_VARS TBB_INCLUDE_DIR
|
|
VERSION_VAR TBB_VERSION
|
|
HANDLE_COMPONENTS
|
|
)
|
|
|
|
if (NOT TBB_FIND_QUIETLY)
|
|
if (TBB_FOUND)
|
|
message(STATUS "${_TBB_FIND_STATUS}... - found v${TBB_VERSION_STRING}")
|
|
else ()
|
|
message(STATUS "${_TBB_FIND_STATUS}... - not found")
|
|
endif ()
|
|
endif ()
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Unset local auxiliary variables
|
|
foreach (_TBB_COMPONENT IN ITEMS TBB MALLOC MALLOC_PROXY)
|
|
unset(_TBB_FIND_REQUIRED_${_TBB_COMPONENT})
|
|
unset(_TBB_${_TBB_COMPONENT}_LIB_NAMES_RELEASE)
|
|
unset(_TBB_${_TBB_COMPONENT}_LIB_NAMES_DEBUG)
|
|
unset(_TBB_${_TBB_COMPONENT}_LIB_LINK_DEPENDS)
|
|
unset(_TBB_${_TBB_COMPONENT}_INC_NAMES)
|
|
unset(_TBB_${_TBB_COMPONENT}_NAME)
|
|
endforeach ()
|
|
|
|
unset(_TBB_COMPONENT)
|
|
unset(_TBB_TARGET_NAME)
|
|
unset(_TBB_FIND_COMPONENTS)
|
|
unset(_TBB_FIND_STATUS)
|
|
unset(_TBB_INC_PATH_SUFFIXES)
|
|
unset(_TBB_LIB_PATH_SUFFIXES)
|
|
unset(_TBB_LIB_PATH_DLL)
|
|
unset(_TBB_LIB_NAME)
|
|
unset(_TBB_ARCH_PLATFORM) |