diff options
author | cybaol | 2023-01-26 20:29:39 +0800 |
---|---|---|
committer | cybaol | 2023-01-26 20:29:39 +0800 |
commit | 44ce5631afef94aea0d87dd1e6ed4112e1d2ae79 (patch) | |
tree | 76e51d494a45ba30dc41625373ed5f63d3c9fc50 /ceres-solver-fix-cmake-findtbb.patch | |
parent | 5005bfb16d58ddfb291462ad7a819a7fbd97658a (diff) | |
download | aur-44ce5631afef94aea0d87dd1e6ed4112e1d2ae79.tar.gz |
fix FindTBB.cmake
Diffstat (limited to 'ceres-solver-fix-cmake-findtbb.patch')
-rw-r--r-- | ceres-solver-fix-cmake-findtbb.patch | 711 |
1 files changed, 711 insertions, 0 deletions
diff --git a/ceres-solver-fix-cmake-findtbb.patch b/ceres-solver-fix-cmake-findtbb.patch new file mode 100644 index 000000000000..5fe7ffce4759 --- /dev/null +++ b/ceres-solver-fix-cmake-findtbb.patch @@ -0,0 +1,711 @@ +diff -ruN ceres-solver-1.14.0/cmake/FindTBB.cmake ceres-solver-1.14.0_/cmake/FindTBB.cmake +--- ceres-solver-1.14.0/cmake/FindTBB.cmake 2018-03-23 22:44:35.000000000 +0800 ++++ ceres-solver-1.14.0_/cmake/FindTBB.cmake 2022-03-28 22:02:35.000000000 +0800 +@@ -1,245 +1,468 @@ +-# The MIT License (MIT) +-# +-# Copyright (c) 2015 Justus Calvin ++# - Find ThreadingBuildingBlocks include dirs and libraries ++# Use this module by invoking find_package with the form: ++# find_package(TBB ++# [REQUIRED] # Fail with error if TBB is not found ++# ) # ++# Once done, this will define ++# ++# TBB_FOUND - system has TBB ++# TBB_INCLUDE_DIRS - the TBB include directories ++# TBB_LIBRARIES - TBB libraries to be lined, doesn't include malloc or ++# malloc proxy ++# TBB::tbb - imported target for the TBB library ++# ++# TBB_VERSION_MAJOR - Major Product Version Number ++# TBB_VERSION_MINOR - Minor Product Version Number ++# TBB_INTERFACE_VERSION - Engineering Focused Version Number ++# TBB_COMPATIBLE_INTERFACE_VERSION - The oldest major interface version ++# still supported. This uses the engineering ++# focused interface version numbers. ++# ++# TBB_MALLOC_FOUND - system has TBB malloc library ++# TBB_MALLOC_INCLUDE_DIRS - the TBB malloc include directories ++# TBB_MALLOC_LIBRARIES - The TBB malloc libraries to be lined ++# TBB::malloc - imported target for the TBB malloc library ++# ++# TBB_MALLOC_PROXY_FOUND - system has TBB malloc proxy library ++# TBB_MALLOC_PROXY_INCLUDE_DIRS = the TBB malloc proxy include directories ++# TBB_MALLOC_PROXY_LIBRARIES - The TBB malloc proxy libraries to be lined ++# TBB::malloc_proxy - imported target for the TBB malloc proxy library ++# ++# ++# This module reads hints about search locations from variables: ++# ENV TBB_ARCH_PLATFORM - for eg. set it to "mic" for Xeon Phi builds ++# ENV TBB_ROOT or just TBB_ROOT - root directory of tbb installation ++# ENV TBB_BUILD_PREFIX - specifies the build prefix for user built tbb ++# libraries. Should be specified with ENV TBB_ROOT ++# and optionally... ++# ENV TBB_BUILD_DIR - if build directory is different than ${TBB_ROOT}/build ++# ++# ++# Modified by Robert Maynard from the original OGRE source ++# ++#------------------------------------------------------------------- ++# This file is part of the CMake build system for OGRE ++# (Object-oriented Graphics Rendering Engine) ++# For the latest info, see http://www.ogre3d.org/ ++# ++# The contents of this file are placed in the public domain. Feel ++# free to make use of it in any way you like. ++#------------------------------------------------------------------- ++# ++# ========================================================================= ++# Taken from Copyright.txt in the root of the VTK source tree as per ++# instructions to substitute the full license in place of the summary ++# reference when distributing outside of VTK ++# ========================================================================= ++# ++# Program: Visualization Toolkit ++# Module: Copyright.txt ++# ++# Copyright (c) 1993-2015 Ken Martin, Will Schroeder, Bill Lorensen ++# All rights reserved. ++# ++# Redistribution and use in source and binary forms, with or without ++# modification, are permitted provided that the following conditions are met: ++# ++# * Redistributions of source code must retain the above copyright notice, ++# this list of conditions and the following disclaimer. ++# ++# * Redistributions in binary form must reproduce the above copyright notice, ++# this list of conditions and the following disclaimer in the documentation ++# and/or other materials provided with the distribution. ++# ++# * Neither name of Ken Martin, Will Schroeder, or Bill Lorensen nor the names ++# of any contributors may be used to endorse or promote products derived ++# from this software without specific prior written permission. ++# ++# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' ++# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ++# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ++# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ++# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ++# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR ++# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER ++# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, ++# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ++# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++# ++# =========================================================================*/ ++ ++#============================================================================= ++# FindTBB helper functions and macros ++# ++ ++#==================================================== ++# Fix the library path in case it is a linker script ++#==================================================== ++function(tbb_extract_real_library library real_library) ++ if(NOT UNIX OR NOT EXISTS ${library}) ++ set(${real_library} "${library}" PARENT_SCOPE) ++ return() ++ endif() ++ ++ #Read in the first 4 bytes and see if they are the ELF magic number ++ set(_elf_magic "7f454c46") ++ file(READ ${library} _hex_data OFFSET 0 LIMIT 4 HEX) ++ if(_hex_data STREQUAL _elf_magic) ++ #we have opened a elf binary so this is what ++ #we should link to ++ set(${real_library} "${library}" PARENT_SCOPE) ++ return() ++ endif() ++ ++ file(READ ${library} _data OFFSET 0 LIMIT 1024) ++ if("${_data}" MATCHES "INPUT \\(([^(]+)\\)") ++ #extract out the .so name from REGEX MATCH command ++ set(_proper_so_name "${CMAKE_MATCH_1}") ++ ++ #construct path to the real .so which is presumed to be in the same directory ++ #as the input file ++ get_filename_component(_so_dir "${library}" DIRECTORY) ++ set(${real_library} "${_so_dir}/${_proper_so_name}" PARENT_SCOPE) ++ else() ++ #unable to determine what this library is so just hope everything works ++ #and pass it unmodified. ++ set(${real_library} "${library}" PARENT_SCOPE) ++ endif() ++endfunction() ++ ++#=============================================== ++# Do the final processing for the package find. ++#=============================================== ++macro(findpkg_finish PREFIX TARGET_NAME) ++ if (${PREFIX}_INCLUDE_DIR AND ${PREFIX}_LIBRARY) ++ set(${PREFIX}_FOUND TRUE) ++ set (${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIR}) ++ set (${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARY}) ++ else () ++ if (${PREFIX}_FIND_REQUIRED AND NOT ${PREFIX}_FIND_QUIETLY) ++ message(FATAL_ERROR "Required library ${PREFIX} not found.") ++ endif () ++ endif () ++ ++ if (NOT TARGET "TBB::${TARGET_NAME}") ++ if (${PREFIX}_LIBRARY_RELEASE) ++ tbb_extract_real_library(${${PREFIX}_LIBRARY_RELEASE} real_release) ++ endif () ++ if (${PREFIX}_LIBRARY_DEBUG) ++ tbb_extract_real_library(${${PREFIX}_LIBRARY_DEBUG} real_debug) ++ endif () ++ add_library(TBB::${TARGET_NAME} UNKNOWN IMPORTED) ++ set_target_properties(TBB::${TARGET_NAME} PROPERTIES ++ INTERFACE_INCLUDE_DIRECTORIES "${${PREFIX}_INCLUDE_DIR}") ++ if (${PREFIX}_LIBRARY_DEBUG AND ${PREFIX}_LIBRARY_RELEASE) ++ set_target_properties(TBB::${TARGET_NAME} PROPERTIES ++ IMPORTED_LOCATION "${real_release}" ++ IMPORTED_LOCATION_DEBUG "${real_debug}" ++ IMPORTED_LOCATION_RELEASE "${real_release}") ++ elseif (${PREFIX}_LIBRARY_RELEASE) ++ set_target_properties(TBB::${TARGET_NAME} PROPERTIES ++ IMPORTED_LOCATION "${real_release}") ++ elseif (${PREFIX}_LIBRARY_DEBUG) ++ set_target_properties(TBB::${TARGET_NAME} PROPERTIES ++ IMPORTED_LOCATION "${real_debug}") ++ endif () ++ endif () ++ ++ #mark the following variables as internal variables ++ mark_as_advanced(${PREFIX}_INCLUDE_DIR ++ ${PREFIX}_LIBRARY ++ ${PREFIX}_LIBRARY_DEBUG ++ ${PREFIX}_LIBRARY_RELEASE) ++endmacro() ++ ++#=============================================== ++# Generate debug names from given release names ++#=============================================== ++macro(get_debug_names PREFIX) ++ foreach(i ${${PREFIX}}) ++ set(${PREFIX}_DEBUG ${${PREFIX}_DEBUG} ${i}d ${i}D ${i}_d ${i}_D ${i}_debug ${i}) ++ endforeach() ++endmacro() ++ ++#=============================================== ++# See if we have env vars to help us find tbb ++#=============================================== ++macro(getenv_path VAR) ++ set(ENV_${VAR} $ENV{${VAR}}) ++ # replace won't work if var is blank ++ if (ENV_${VAR}) ++ string( REGEX REPLACE "\\\\" "/" ENV_${VAR} ${ENV_${VAR}} ) ++ endif () ++endmacro() ++ ++#=============================================== ++# Couple a set of release AND debug libraries ++#=============================================== ++macro(make_library_set PREFIX) ++ if (${PREFIX}_RELEASE AND ${PREFIX}_DEBUG) ++ set(${PREFIX} optimized ${${PREFIX}_RELEASE} debug ${${PREFIX}_DEBUG}) ++ elseif (${PREFIX}_RELEASE) ++ set(${PREFIX} ${${PREFIX}_RELEASE}) ++ elseif (${PREFIX}_DEBUG) ++ set(${PREFIX} ${${PREFIX}_DEBUG}) ++ endif () ++endmacro() ++ ++#=============================================== ++# Ensure that the release & debug libraries found are from the same installation. ++#=============================================== ++macro(find_tbb_library_verifying_release_debug_locations PREFIX) ++ find_library(${PREFIX}_RELEASE ++ NAMES ${${PREFIX}_NAMES} ++ HINTS ${TBB_LIB_SEARCH_PATH}) ++ if (${PREFIX}_RELEASE) ++ # To avoid finding a mismatched set of release & debug libraries from ++ # different installations if the first found does not have debug libraries ++ # by forcing the search for debug to only occur within the detected release ++ # library directory (if found). Although this would break detection if the ++ # release & debug libraries were shipped in different directories, this is ++ # not the case in the official TBB releases for any platform. ++ get_filename_component( ++ FOUND_RELEASE_LIB_DIR "${${PREFIX}_RELEASE}" DIRECTORY) ++ find_library(${PREFIX}_DEBUG ++ NAMES ${${PREFIX}_NAMES_DEBUG} ++ HINTS ${FOUND_RELEASE_LIB_DIR} ++ NO_DEFAULT_PATH) ++ else() ++ find_library(${PREFIX}_DEBUG ++ NAMES ${${PREFIX}_NAMES_DEBUG} ++ HINTS ${TBB_LIB_SEARCH_PATH}) ++ endif() ++endmacro() ++ ++#============================================================================= ++# Now to actually find TBB + # +-# Permission is hereby granted, free of charge, to any person obtaining a copy +-# of this software and associated documentation files (the "Software"), to deal +-# in the Software without restriction, including without limitation the rights +-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +-# copies of the Software, and to permit persons to whom the Software is +-# furnished to do so, subject to the following conditions: +-# +-# The above copyright notice and this permission notice shall be included in all +-# copies or substantial portions of the Software. +-# +-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +-# SOFTWARE. +- +-# +-# FindTBB +-# ------- +-# +-# Find TBB include directories and libraries. +-# +-# Usage: +-# +-# find_package(TBB [major[.minor]] [EXACT] +-# [QUIET] [REQUIRED] +-# [[COMPONENTS] [components...]] +-# [OPTIONAL_COMPONENTS components...]) +-# +-# where the allowed components are tbbmalloc and tbb_preview. Users may modify +-# the behavior of this module with the following variables: +-# +-# * TBB_ROOT_DIR - The base directory the of TBB installation. +-# * TBB_INCLUDE_DIR - The directory that contains the TBB headers files. +-# * TBB_LIBRARY - The directory that contains the TBB library files. +-# * TBB_<library>_LIBRARY - The path of the TBB the corresponding TBB library. +-# These libraries, if specified, override the +-# corresponding library search results, where <library> +-# may be tbb, tbb_debug, tbbmalloc, tbbmalloc_debug, +-# tbb_preview, or tbb_preview_debug. +-# * TBB_USE_DEBUG_BUILD - The debug version of tbb libraries, if present, will +-# be used instead of the release version. +-# +-# Users may modify the behavior of this module with the following environment +-# variables: +-# +-# * TBB_INSTALL_DIR +-# * TBBROOT +-# * LIBRARY_PATH +-# +-# This module will set the following variables: +-# +-# * TBB_FOUND - Set to false, or undefined, if we haven’t found, or +-# don’t want to use TBB. +-# * TBB_<component>_FOUND - If False, optional <component> part of TBB sytem is +-# not available. +-# * TBB_VERSION - The full version string +-# * TBB_VERSION_MAJOR - The major version +-# * TBB_VERSION_MINOR - The minor version +-# * TBB_INTERFACE_VERSION - The interface version number defined in +-# tbb/tbb_stddef.h. +-# * TBB_<library>_LIBRARY_RELEASE - The path of the TBB release version of +-# <library>, where <library> may be tbb, tbb_debug, +-# tbbmalloc, tbbmalloc_debug, tbb_preview, or +-# tbb_preview_debug. +-# * TBB_<library>_LIBRARY_DEGUG - The path of the TBB release version of +-# <library>, where <library> may be tbb, tbb_debug, +-# tbbmalloc, tbbmalloc_debug, tbb_preview, or +-# tbb_preview_debug. +-# +-# The following varibles should be used to build and link with TBB: +-# +-# * TBB_INCLUDE_DIRS - The include directory for TBB. +-# * TBB_LIBRARIES - The libraries to link against to use TBB. +-# * TBB_DEFINITIONS - Definitions to use when compiling code that uses TBB. +- +-include(FindPackageHandleStandardArgs) +- +-if(NOT TBB_FOUND) +- +- ################################## +- # Check the build type +- ################################## +- +- if(NOT DEFINED TBB_USE_DEBUG_BUILD) +- if(CMAKE_BUILD_TYPE MATCHES "(Debug|DEBUG|debug|RelWithDebInfo|RELWITHDEBINFO|relwithdebinfo)") +- set(TBB_USE_DEBUG_BUILD TRUE) +- else() +- set(TBB_USE_DEBUG_BUILD FALSE) +- endif() +- endif() +- +- ################################## +- # Set the TBB search directories +- ################################## +- +- # Define search paths based on user input and environment variables +- set(TBB_SEARCH_DIR ${TBB_ROOT_DIR} $ENV{TBB_INSTALL_DIR} $ENV{TBBROOT}) +- +- # Define the search directories based on the current platform +- if(CMAKE_SYSTEM_NAME STREQUAL "Windows") +- set(TBB_DEFAULT_SEARCH_DIR "C:/Program Files/Intel/TBB" +- "C:/Program Files (x86)/Intel/TBB") +- +- # Set the target architecture +- if(CMAKE_SIZEOF_VOID_P EQUAL 8) +- set(TBB_ARCHITECTURE "intel64") +- else() +- set(TBB_ARCHITECTURE "ia32") +- endif() +- +- # Set the TBB search library path search suffix based on the version of VC +- if(WINDOWS_STORE) +- set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc11_ui") +- elseif(MSVC14) +- set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc14") +- elseif(MSVC12) +- set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc12") +- elseif(MSVC11) +- set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc11") +- elseif(MSVC10) +- set(TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc10") +- endif() +- +- # Add the library path search suffix for the VC independent version of TBB +- list(APPEND TBB_LIB_PATH_SUFFIX "lib/${TBB_ARCHITECTURE}/vc_mt") +- +- elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") +- # OS X +- set(TBB_DEFAULT_SEARCH_DIR "/opt/intel/tbb") +- +- # TODO: Check to see which C++ library is being used by the compiler. +- if(NOT ${CMAKE_SYSTEM_VERSION} VERSION_LESS 13.0) +- # The default C++ library on OS X 10.9 and later is libc++ +- set(TBB_LIB_PATH_SUFFIX "lib/libc++") +- else() +- set(TBB_LIB_PATH_SUFFIX "lib") +- endif() +- elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") +- # Linux +- set(TBB_DEFAULT_SEARCH_DIR "/opt/intel/tbb") +- +- # TODO: Check compiler version to see the suffix should be <arch>/gcc4.1 or +- # <arch>/gcc4.1. For now, assume that the compiler is more recent than +- # gcc 4.4.x or later. +- if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") +- set(TBB_LIB_PATH_SUFFIX "lib/intel64/gcc4.4") +- elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$") +- set(TBB_LIB_PATH_SUFFIX "lib/ia32/gcc4.4") +- endif() +- endif() +- +- ################################## +- # Find the TBB include dir +- ################################## +- +- find_path(TBB_INCLUDE_DIRS tbb/tbb.h +- HINTS ${TBB_INCLUDE_DIR} ${TBB_SEARCH_DIR} +- PATHS ${TBB_DEFAULT_SEARCH_DIR} +- PATH_SUFFIXES include) +- +- ################################## +- # Find TBB components +- ################################## +- +- # Find each component +- foreach(_comp tbb_preview tbbmalloc tbb) +- # Search for the libraries +- find_library(TBB_${_comp}_LIBRARY_RELEASE ${_comp} +- HINTS ${TBB_LIBRARY} ${TBB_SEARCH_DIR} +- PATHS ${TBB_DEFAULT_SEARCH_DIR} +- PATH_SUFFIXES ${TBB_LIB_PATH_SUFFIX}) +- +- find_library(TBB_${_comp}_LIBRARY_DEBUG ${_comp}_debug +- HINTS ${TBB_LIBRARY} ${TBB_SEARCH_DIR} +- PATHS ${TBB_DEFAULT_SEARCH_DIR} ENV LIBRARY_PATH +- PATH_SUFFIXES ${TBB_LIB_PATH_SUFFIX}) +- +- +- # Set the library to be used for the component +- if(NOT TBB_${_comp}_LIBRARY) +- if(TBB_USE_DEBUG_BUILD AND TBB_${_comp}_LIBRARY_DEBUG) +- set(TBB_${_comp}_LIBRARY "${TBB_${_comp}_LIBRARY_DEBUG}") +- elseif(TBB_${_comp}_LIBRARY_RELEASE) +- set(TBB_${_comp}_LIBRARY "${TBB_${_comp}_LIBRARY_RELEASE}") +- elseif(TBB_${_comp}_LIBRARY_DEBUG) +- set(TBB_${_comp}_LIBRARY "${TBB_${_comp}_LIBRARY_DEBUG}") +- endif() +- endif() +- +- # Set the TBB library list and component found variables +- if(TBB_${_comp}_LIBRARY) +- list(APPEND TBB_LIBRARIES "${TBB_${_comp}_LIBRARY}") +- set(TBB_${_comp}_FOUND TRUE) +- else() +- set(TBB_${_comp}_FOUND FALSE) +- endif() +- +- mark_as_advanced(TBB_${_comp}_LIBRARY_RELEASE) +- mark_as_advanced(TBB_${_comp}_LIBRARY_DEBUG) +- mark_as_advanced(TBB_${_comp}_LIBRARY) + ++# Get path, convert backslashes as ${ENV_${var}} ++getenv_path(TBB_ROOT) ++ ++# initialize search paths ++set(TBB_PREFIX_PATH ${TBB_ROOT} ${ENV_TBB_ROOT}) ++set(TBB_INC_SEARCH_PATH "") ++set(TBB_LIB_SEARCH_PATH "") ++ ++ ++# If user built from sources ++set(TBB_BUILD_PREFIX $ENV{TBB_BUILD_PREFIX}) ++if (TBB_BUILD_PREFIX AND ENV_TBB_ROOT) ++ getenv_path(TBB_BUILD_DIR) ++ if (NOT ENV_TBB_BUILD_DIR) ++ set(ENV_TBB_BUILD_DIR ${ENV_TBB_ROOT}/build) ++ endif () ++ ++ # include directory under ${ENV_TBB_ROOT}/include ++ list(APPEND TBB_LIB_SEARCH_PATH ++ ${ENV_TBB_BUILD_DIR}/${TBB_BUILD_PREFIX}_release ++ ${ENV_TBB_BUILD_DIR}/${TBB_BUILD_PREFIX}_debug) ++endif () ++ ++ ++# For Windows, let's assume that the user might be using the precompiled ++# TBB packages from the main website. These use a rather awkward directory ++# structure (at least for automatically finding the right files) depending ++# on platform and compiler, but we'll do our best to accommodate it. ++# Not adding the same effort for the precompiled linux builds, though. Those ++# have different versions for CC compiler versions and linux kernels which ++# will never adequately match the user's setup, so there is no feasible way ++# to detect the "best" version to use. The user will have to manually ++# select the right files. (Chances are the distributions are shipping their ++# custom version of tbb, anyway, so the problem is probably nonexistent.) ++if (WIN32 AND MSVC) ++ set(COMPILER_PREFIX "vc7.1") ++ if (MSVC_VERSION EQUAL 1400) ++ set(COMPILER_PREFIX "vc8") ++ elseif(MSVC_VERSION EQUAL 1500) ++ set(COMPILER_PREFIX "vc9") ++ elseif(MSVC_VERSION EQUAL 1600) ++ set(COMPILER_PREFIX "vc10") ++ elseif(MSVC_VERSION EQUAL 1700) ++ set(COMPILER_PREFIX "vc11") ++ elseif(MSVC_VERSION EQUAL 1800) ++ set(COMPILER_PREFIX "vc12") ++ elseif(MSVC_VERSION GREATER_EQUAL 1900) ++ set(COMPILER_PREFIX "vc14") ++ endif () ++ ++ # for each prefix path, add ia32/64\${COMPILER_PREFIX}\lib to the lib search path ++ foreach (dir IN LISTS TBB_PREFIX_PATH) ++ if (CMAKE_CL_64) ++ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/ia64/${COMPILER_PREFIX}/lib) ++ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/ia64/${COMPILER_PREFIX}) ++ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/intel64/${COMPILER_PREFIX}/lib) ++ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/intel64/${COMPILER_PREFIX}) ++ else () ++ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/ia32/${COMPILER_PREFIX}/lib) ++ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/ia32/${COMPILER_PREFIX}) ++ endif () ++ endforeach () ++endif () ++ ++# For OS X binary distribution, choose libc++ based libraries for Mavericks (10.9) ++# and above and AppleClang ++if (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND ++ NOT CMAKE_SYSTEM_VERSION VERSION_LESS 13.0) ++ set (USE_LIBCXX OFF) ++ cmake_policy(GET CMP0025 POLICY_VAR) ++ ++ if (POLICY_VAR STREQUAL "NEW") ++ if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") ++ set (USE_LIBCXX ON) ++ endif () ++ else () ++ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") ++ set (USE_LIBCXX ON) ++ endif () ++ endif () ++ ++ if (USE_LIBCXX) ++ foreach (dir IN LISTS TBB_PREFIX_PATH) ++ list (APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/libc++ ${dir}/libc++/lib) ++ endforeach () ++ endif () ++endif () ++ ++# check compiler ABI ++if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") ++ set(COMPILER_PREFIX) ++ if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8) ++ list(APPEND COMPILER_PREFIX "gcc4.8") ++ endif() ++ if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7) ++ list(APPEND COMPILER_PREFIX "gcc4.7") ++ endif() ++ if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.4) ++ list(APPEND COMPILER_PREFIX "gcc4.4") ++ endif() ++ list(APPEND COMPILER_PREFIX "gcc4.1") ++elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") ++ set(COMPILER_PREFIX) ++ if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0) # Complete guess ++ list(APPEND COMPILER_PREFIX "gcc4.8") ++ endif() ++ if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.6) ++ list(APPEND COMPILER_PREFIX "gcc4.7") ++ endif() ++ list(APPEND COMPILER_PREFIX "gcc4.4") ++else() # Assume compatibility with 4.4 for other compilers ++ list(APPEND COMPILER_PREFIX "gcc4.4") ++endif () ++ ++# if platform architecture is explicitly specified ++set(TBB_ARCH_PLATFORM $ENV{TBB_ARCH_PLATFORM}) ++if (TBB_ARCH_PLATFORM) ++ foreach (dir IN LISTS TBB_PREFIX_PATH) ++ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/${TBB_ARCH_PLATFORM}/lib) ++ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/${TBB_ARCH_PLATFORM}) ++ endforeach () ++endif () ++ ++foreach (dir IN LISTS TBB_PREFIX_PATH) ++ foreach (prefix IN LISTS COMPILER_PREFIX) ++ if (CMAKE_SIZEOF_VOID_P EQUAL 8) ++ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/intel64) ++ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/intel64/${prefix}) ++ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/intel64/lib) ++ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/intel64/${prefix}/lib) ++ else () ++ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/ia32) ++ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/ia32/${prefix}) ++ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/ia32/lib) ++ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/ia32/${prefix}/lib) ++ endif () + endforeach() ++endforeach () ++ ++# add general search paths ++foreach (dir IN LISTS TBB_PREFIX_PATH) ++ list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib ${dir}/Lib ${dir}/lib/tbb ++ ${dir}/Libs) ++ list(APPEND TBB_INC_SEARCH_PATH ${dir}/include ${dir}/Include ++ ${dir}/include/tbb) ++endforeach () ++ ++set(TBB_LIBRARY_NAMES tbb) ++get_debug_names(TBB_LIBRARY_NAMES) ++ ++find_path(TBB_INCLUDE_DIR ++ NAMES tbb/tbb.h ++ HINTS ${TBB_INC_SEARCH_PATH}) ++find_tbb_library_verifying_release_debug_locations(TBB_LIBRARY) ++make_library_set(TBB_LIBRARY) ++ ++findpkg_finish(TBB tbb) ++ ++#if we haven't found TBB no point on going any further ++if (NOT TBB_FOUND) ++ return() ++endif () ++ ++#============================================================================= ++# Look for TBB's malloc package ++set(TBB_MALLOC_LIBRARY_NAMES tbbmalloc) ++get_debug_names(TBB_MALLOC_LIBRARY_NAMES) ++ ++find_path(TBB_MALLOC_INCLUDE_DIR ++ NAMES tbb/tbb.h ++ HINTS ${TBB_INC_SEARCH_PATH}) ++find_tbb_library_verifying_release_debug_locations(TBB_MALLOC_LIBRARY) ++make_library_set(TBB_MALLOC_LIBRARY) ++ ++findpkg_finish(TBB_MALLOC tbbmalloc) ++ ++#============================================================================= ++# Look for TBB's malloc proxy package ++set(TBB_MALLOC_PROXY_LIBRARY_NAMES tbbmalloc_proxy) ++get_debug_names(TBB_MALLOC_PROXY_LIBRARY_NAMES) ++ ++find_path(TBB_MALLOC_PROXY_INCLUDE_DIR ++ NAMES tbb/tbbmalloc_proxy.h ++ HINTS ${TBB_INC_SEARCH_PATH}) ++find_tbb_library_verifying_release_debug_locations(TBB_MALLOC_PROXY_LIBRARY) ++make_library_set(TBB_MALLOC_PROXY_LIBRARY) ++ ++findpkg_finish(TBB_MALLOC_PROXY tbbmalloc_proxy) ++ ++ ++#============================================================================= ++#parse all the version numbers from tbb ++if(NOT TBB_VERSION) ++ set(TBB_VERSION_FILE_PRIOR_TO_TBB_2021_1 ++ "${TBB_INCLUDE_DIR}/tbb/tbb_stddef.h") ++ set(TBB_VERSION_FILE_AFTER_TBB_2021_1 ++ "${TBB_INCLUDE_DIR}/oneapi/tbb/version.h") ++ ++ if (EXISTS "${TBB_VERSION_FILE_PRIOR_TO_TBB_2021_1}") ++ set(TBB_VERSION_FILE "${TBB_VERSION_FILE_PRIOR_TO_TBB_2021_1}") ++ elseif (EXISTS "${TBB_VERSION_FILE_AFTER_TBB_2021_1}") ++ set(TBB_VERSION_FILE "${TBB_VERSION_FILE_AFTER_TBB_2021_1}") ++ else() ++ message(FATAL_ERROR "Found TBB installation: ${TBB_INCLUDE_DIR} " ++ "missing version header.") ++ endif() + +- ################################## +- # Set compile flags +- ################################## +- +- if(TBB_tbb_LIBRARY MATCHES "debug") +- set(TBB_DEFINITIONS "-DTBB_USE_DEBUG=1") +- endif() +- +- ################################## +- # Set version strings +- ################################## +- +- if(TBB_INCLUDE_DIRS) +- file(READ "${TBB_INCLUDE_DIRS}/tbb/tbb_stddef.h" _tbb_version_file) +- string(REGEX REPLACE ".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1" +- TBB_VERSION_MAJOR "${_tbb_version_file}") +- string(REGEX REPLACE ".*#define TBB_VERSION_MINOR ([0-9]+).*" "\\1" +- TBB_VERSION_MINOR "${_tbb_version_file}") +- string(REGEX REPLACE ".*#define TBB_INTERFACE_VERSION ([0-9]+).*" "\\1" +- TBB_INTERFACE_VERSION "${_tbb_version_file}") +- set(TBB_VERSION "${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR}") +- endif() +- +- find_package_handle_standard_args(TBB +- REQUIRED_VARS TBB_INCLUDE_DIRS TBB_LIBRARIES +- HANDLE_COMPONENTS +- VERSION_VAR TBB_VERSION) +- +- mark_as_advanced(TBB_INCLUDE_DIRS TBB_LIBRARIES) +- +- unset(TBB_ARCHITECTURE) +- unset(TBB_LIB_PATH_SUFFIX) +- unset(TBB_DEFAULT_SEARCH_DIR) ++ #only read the start of the file ++ file(STRINGS ++ "${TBB_VERSION_FILE}" ++ TBB_VERSION_CONTENTS ++ REGEX "VERSION") ++ ++ 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}") + + endif() |