Geant4 Cross Reference |
1 # - Find ThreadingBuildingBlocks include dirs << 1 # Module for locating Intel's Threading Building Blocks (TBB). 2 # Use this module by invoking find_package wit << 2 # 3 # find_package(TBB << 3 # Customizable variables: 4 # [REQUIRED] # Fail with error << 4 # TBB_ROOT_DIR 5 # ) # << 5 # Specifies TBB's root directory. 6 # Once done, this will define << 6 # 7 # << 7 # Read-only variables: 8 # TBB_FOUND - system has TBB << 8 # TBB_FOUND 9 # TBB_INCLUDE_DIRS - the TBB include director << 9 # Indicates whether the library has been found. 10 # TBB_LIBRARIES - TBB libraries to be lined, << 10 # 11 # malloc proxy << 11 # TBB_INCLUDE_DIRS 12 # TBB::tbb - imported target for the TBB libr << 12 # Specifies TBB's include directory. 13 # << 13 # 14 # TBB_VERSION_MAJOR - Major Product Version N << 14 # TBB_LIBRARIES 15 # TBB_VERSION_MINOR - Minor Product Version N << 15 # Specifies TBB libraries that should be passed to target_link_libararies. 16 # TBB_INTERFACE_VERSION - Engineering Focused << 16 # 17 # TBB_COMPATIBLE_INTERFACE_VERSION - The olde << 17 # TBB_<COMPONENT>_LIBRARIES 18 # still su << 18 # Specifies the libraries of a specific <COMPONENT>. 19 # focused << 19 # 20 # << 20 # TBB_<COMPONENT>_FOUND 21 # TBB_MALLOC_FOUND - system has TBB malloc li << 21 # Indicates whether the specified <COMPONENT> was found. 22 # TBB_MALLOC_INCLUDE_DIRS - the TBB malloc in << 22 # 23 # TBB_MALLOC_LIBRARIES - The TBB malloc libra << 23 # 24 # TBB::malloc - imported target for the TBB m << 24 # Copyright (c) 2012 Sergiu Dotenco 25 # << 25 # 26 # TBB_MALLOC_PROXY_FOUND - system has TBB mal << 26 # Permission is hereby granted, free of charge, to any person obtaining a copy 27 # TBB_MALLOC_PROXY_INCLUDE_DIRS = the TBB mal << 27 # of this software and associated documentation files (the "Software"), to deal 28 # TBB_MALLOC_PROXY_LIBRARIES - The TBB malloc << 28 # in the Software without restriction, including without limitation the rights 29 # TBB::malloc_proxy - imported target for the << 29 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 30 # << 30 # copies of the Software, and to permit persons to whom the Software is 31 # << 31 # furnished to do so, subject to the following conditions: 32 # This module reads hints about search locatio << 32 # 33 # ENV TBB_ARCH_PLATFORM - for eg. set it to " << 33 # The above copyright notice and this permission notice shall be included in all 34 # ENV TBB_ROOT or just TBB_ROOT - root direct << 34 # copies or substantial portions of the Software. 35 # ENV TBB_BUILD_PREFIX - specifies the build << 35 # 36 # libraries. Should be << 36 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 37 # and optionally... << 37 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 38 # ENV TBB_BUILD_DIR - if build directory is d << 38 # FITNESS FOR A PARTTBBLAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 39 # << 39 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 40 # << 40 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 41 # Modified by Robert Maynard from the original << 41 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 42 # << 42 # SOFTWARE. 43 #--------------------------------------------- << 43 44 # This file is part of the CMake build system << 44 INCLUDE (FindPackageHandleStandardArgs) 45 # (Object-oriented Graphics Rendering Engi << 45 46 # For the latest info, see http://www.ogre3d.o << 46 #------------------------------------------------------------------------------# 47 # << 47 # 48 # The contents of this file are placed in the << 48 # Paths 49 # free to make use of it in any way you like. << 49 # 50 #--------------------------------------------- << 50 #------------------------------------------------------------------------------# 51 # << 51 52 #============================================= << 52 IF(CMAKE_VERSION VERSION_GREATER 2.8.7) 53 # Copyright 2010-2012 Kitware, Inc. << 53 SET(_TBB_CHECK_COMPONENTS ON) 54 # Copyright 2012 Rolf Eike Beer <eike@sf- << 54 ELSE() 55 # << 55 SET(_TBB_CHECK_COMPONENTS OFF) 56 # Distributed under the OSI-approved BSD Licen << 56 ENDIF() 57 # see accompanying file COPYING-CMAKE-SCRIPTS << 57 58 # << 58 FIND_PATH(TBB_ROOT_DIR 59 # This software is distributed WITHOUT ANY WAR << 59 NAMES include/tbb/tbb.h 60 # implied warranty of MERCHANTABILITY or FITNE << 60 PATHS ENV TBBROOT 61 # See the License for more information. << 61 ENV TBB40_INSTALL_DIR 62 #============================================= << 62 ENV TBB30_INSTALL_DIR 63 << 63 ENV TBB22_INSTALL_DIR 64 #============================================= << 64 ENV TBB21_INSTALL_DIR 65 # FindTBB helper functions and macros << 65 ENV TBB_ROOT_DIR 66 # << 66 DOC "TBB root directory") 67 << 67 68 # Use TBBConfig.cmake if possible. << 68 FIND_PATH(TBB_INCLUDE_DIR 69 << 69 NAMES tbb/tbb.h 70 set(_tbb_find_quiet) << 70 HINTS ${TBB_ROOT_DIR} 71 if (TBB_FIND_QUIETLY) << 71 PATH_SUFFIXES include 72 set(_tbb_find_quiet QUIET) << 72 DOC "TBB include directory") 73 endif () << 73 74 set(_tbb_find_components) << 74 #------------------------------------------------------------------------------# 75 set(_tbb_find_optional_components) << 75 # 76 foreach (_tbb_find_component IN LISTS TBB_FIND << 76 # Library suffixes 77 if (TBB_FIND_REQUIRED_${_tbb_find_component} << 77 # 78 list(APPEND _tbb_find_components "${_tbb_f << 78 #------------------------------------------------------------------------------# 79 else () << 79 80 list(APPEND _tbb_find_optional_components << 80 IF(MSVC11) 81 endif () << 81 SET(_TBB_COMPILER vc11) 82 endforeach () << 82 ELSEIF(MSVC10) 83 unset(_tbb_find_component) << 83 SET(_TBB_COMPILER vc10) 84 find_package(TBB CONFIG ${_tbb_find_quiet} << 84 ELSEIF(MSVC90) 85 COMPONENTS ${_tbb_find_components} << 85 SET(_TBB_COMPILER vc9) 86 OPTIONAL_COMPONENTS ${_tbb_find_optional_com << 86 ELSEIF(MSVC80) 87 unset(_tbb_find_quiet) << 87 SET(_TBB_COMPILER vc8) 88 unset(_tbb_find_components) << 88 ELSEIF(WIN32) 89 unset(_tbb_find_optional_components) << 89 SET(_TBB_COMPILER vc_mt) 90 if (TBB_FOUND) << 90 ENDIF(MSVC11) 91 return () << 91 92 endif () << 92 IF(CMAKE_SIZEOF_VOID_P EQUAL 8) 93 << 93 SET(_TBB_POSSIBLE_LIB_SUFFIXES lib/intel64/${_TBB_COMPILER}) 94 #============================================= << 94 SET(_TBB_POSSIBLE_BIN_SUFFIXES bin/intel64/${_TBB_COMPILER}) 95 # Fix the library path in case it is a linker << 95 ELSE(CMAKE_SIZEOF_VOID_P EQUAL 8) 96 #============================================= << 96 SET(_TBB_POSSIBLE_LIB_SUFFIXES lib/ia32/${_TBB_COMPILER}) 97 function(tbb_extract_real_library library real << 97 SET(_TBB_POSSIBLE_BIN_SUFFIXES bin/ia32/${_TBB_COMPILER}) 98 if(NOT UNIX OR NOT EXISTS ${library}) << 98 ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 8) 99 set(${real_library} "${library}" PARENT_SC << 99 100 return() << 100 LIST(APPEND _TBB_POSSIBLE_LIB_SUFFIXES lib/$ENV{TBB_ARCH_PLATFORM}) 101 endif() << 101 102 << 102 IF(UNIX) 103 #Read in the first 4 bytes and see if they a << 103 FOREACH(_VERSION 4.7 4.4 4.1) 104 set(_elf_magic "7f454c46") << 104 IF(CMAKE_SIZEOF_VOID_P EQUAL 8) 105 file(READ ${library} _hex_data OFFSET 0 LIMI << 105 LIST(APPEND _TBB_POSSIBLE_LIB_SUFFIXES lib/intel64/gcc${_VERSION}) 106 if(_hex_data STREQUAL _elf_magic) << 106 ELSE() 107 #we have opened a elf binary so this is wh << 107 LIST(APPEND _TBB_POSSIBLE_LIB_SUFFIXES lib/ia32/gcc${_VERSION}) 108 #we should link to << 108 ENDIF() 109 set(${real_library} "${library}" PARENT_SC << 109 ENDFOREACH() 110 return() << 110 ENDIF() 111 endif() << 111 112 << 112 #------------------------------------------------------------------------------# 113 file(READ ${library} _data OFFSET 0 LIMIT 10 << 113 # 114 if("${_data}" MATCHES "INPUT \\(([^(]+)\\)") << 114 # TBB library 115 #extract out the .so name from REGEX MATCH << 115 # 116 set(_proper_so_name "${CMAKE_MATCH_1}") << 116 #------------------------------------------------------------------------------# 117 << 117 118 #construct path to the real .so which is p << 118 FIND_LIBRARY(TBB_LIBRARY_RELEASE 119 #as the input file << 119 NAMES tbb 120 get_filename_component(_so_dir "${library} << 120 HINTS ${TBB_ROOT_DIR} 121 set(${real_library} "${_so_dir}/${_proper_ << 121 PATH_SUFFIXES ${_TBB_POSSIBLE_LIB_SUFFIXES} 122 else() << 122 DOC "TBB release library") 123 #unable to determine what this library is << 123 124 #and pass it unmodified. << 124 FIND_LIBRARY(TBB_LIBRARY_DEBUG 125 set(${real_library} "${library}" PARENT_SC << 125 NAMES tbb_debug 126 endif() << 126 HINTS ${TBB_ROOT_DIR} 127 endfunction() << 127 PATH_SUFFIXES ${_TBB_POSSIBLE_LIB_SUFFIXES} 128 << 128 DOC "TBB debug library") 129 #============================================= << 129 130 # Do the final processing for the package find << 130 IF(TBB_LIBRARY_RELEASE AND TBB_LIBRARY_DEBUG) 131 #============================================= << 131 IF(NOT TBB_LIBRARY) 132 macro(findpkg_finish PREFIX TARGET_NAME) << 132 SET(TBB_LIBRARY optimized ${TBB_LIBRARY_RELEASE} debug ${TBB_LIBRARY_DEBUG} 133 if (${PREFIX}_INCLUDE_DIR AND ${PREFIX}_LIBR << 133 CACHE DOC "TBB library" FORCE) 134 set(${PREFIX}_FOUND TRUE) << 134 ENDIF(NOT TBB_LIBRARY) 135 set (${PREFIX}_INCLUDE_DIRS ${${PREFIX}_IN << 135 LIST(APPEND _TBB_ALL_LIBS optimized ${TBB_LIBRARY_RELEASE} debug ${TBB_LIBRARY_DEBUG}) 136 set (${PREFIX}_LIBRARIES ${${PREFIX}_LIBRA << 136 ELSE() 137 else () << 137 IF(TBB_LIBRARY_DEBUG) 138 if (${PREFIX}_FIND_REQUIRED AND NOT ${PREF << 138 IF(NOT TBB_LIBRARY) 139 message(FATAL_ERROR "Required library ${ << 139 SET(TBB_LIBRARY ${TBB_LIBRARY_DEBUG} CACHE FILEPATH "TBB library" FORCE) 140 endif () << 140 ENDIF(NOT TBB_LIBRARY) 141 endif () << 141 LIST(APPEND _TBB_ALL_LIBS ${TBB_LIBRARY_DEBUG}) 142 << 142 ENDIF(TBB_LIBRARY_DEBUG) 143 if (NOT TARGET "TBB::${TARGET_NAME}") << 143 144 if (${PREFIX}_LIBRARY_RELEASE) << 144 IF(TBB_LIBRARY_RELEASE) 145 tbb_extract_real_library(${${PREFIX}_LIB << 145 IF(NOT TBB_LIBRARY) 146 endif () << 146 SET(TBB_LIBRARY ${TBB_LIBRARY_RELEASE} CACHE FILEPATH "TBB library" FORCE) 147 if (${PREFIX}_LIBRARY_DEBUG) << 147 ENDIF(NOT TBB_LIBRARY) 148 tbb_extract_real_library(${${PREFIX}_LIB << 148 LIST(APPEND _TBB_ALL_LIBS ${TBB_LIBRARY_RELEASE}) 149 endif () << 149 ENDIF() 150 add_library(TBB::${TARGET_NAME} UNKNOWN IM << 150 ENDIF(TBB_LIBRARY_RELEASE AND TBB_LIBRARY_DEBUG) 151 set_target_properties(TBB::${TARGET_NAME} << 151 152 INTERFACE_INCLUDE_DIRECTORIES "${${PREFI << 152 153 if (${PREFIX}_LIBRARY_DEBUG AND ${PREFIX}_ << 153 #------------------------------------------------------------------------------# 154 set_target_properties(TBB::${TARGET_NAME << 154 # 155 IMPORTED_LOCATION "${real_release}" << 155 # Components 156 IMPORTED_LOCATION_DEBUG "${real_debug} << 156 # 157 IMPORTED_LOCATION_RELEASE "${real_rele << 157 #------------------------------------------------------------------------------# 158 elseif (${PREFIX}_LIBRARY_RELEASE) << 158 159 set_target_properties(TBB::${TARGET_NAME << 159 SET(_TBB_POSSIBLE_COMPONENTS preview malloc malloc_proxy) 160 IMPORTED_LOCATION "${real_release}") << 160 161 elseif (${PREFIX}_LIBRARY_DEBUG) << 161 FOREACH(_TBB_COMPONENT ${TBB_FIND_COMPONENTS}) 162 set_target_properties(TBB::${TARGET_NAME << 162 163 IMPORTED_LOCATION "${real_debug}") << 163 STRING(REPLACE "_debug" "" _TBB_COMPONENT ${_TBB_COMPONENT}) 164 endif () << 164 STRING(TOUPPER ${_TBB_COMPONENT} _TBB_COMPONENT_UPPER) 165 endif () << 165 SET(_TBB_LIBRARY_BASE TBB_${_TBB_COMPONENT_UPPER}_LIBRARY) 166 << 166 167 #mark the following variables as internal va << 167 IF(${_TBB_COMPONENT} MATCHES "malloc*") 168 mark_as_advanced(${PREFIX}_INCLUDE_DIR << 168 SET(_TBB_LIBRARY_NAME tbb${_TBB_COMPONENT}) 169 ${PREFIX}_LIBRARY << 169 ELSE() 170 ${PREFIX}_LIBRARY_DEBUG << 170 SET(_TBB_LIBRARY_NAME tbb_${_TBB_COMPONENT}) 171 ${PREFIX}_LIBRARY_RELEASE) << 171 ENDIF() 172 endmacro() << 172 173 << 173 FIND_LIBRARY(${_TBB_LIBRARY_BASE}_RELEASE 174 #============================================= << 174 NAMES ${_TBB_LIBRARY_NAME} 175 # Generate debug names from given release name << 175 HINTS ${TBB_ROOT_DIR} 176 #============================================= << 176 PATH_SUFFIXES ${_TBB_POSSIBLE_LIB_SUFFIXES} 177 macro(get_debug_names PREFIX) << 177 DOC "TBB ${_TBB_COMPONENT} release library") 178 foreach(i ${${PREFIX}}) << 178 179 set(${PREFIX}_DEBUG ${${PREFIX}_DEBUG} ${i << 179 FIND_LIBRARY(${_TBB_LIBRARY_BASE}_DEBUG 180 endforeach() << 180 NAMES ${_TBB_LIBRARY_NAME}_debug 181 endmacro() << 181 HINTS ${TBB_ROOT_DIR} 182 << 182 PATH_SUFFIXES ${_TBB_POSSIBLE_LIB_SUFFIXES} 183 #============================================= << 183 DOC "TBB ${_TBB_COMPONENT} debug library") 184 # See if we have env vars to help us find tbb << 184 185 #============================================= << 185 MARK_AS_ADVANCED (${_TBB_LIBRARY_BASE} ${_TBB_LIBRARY_BASE}_DEBUG) 186 macro(getenv_path VAR) << 186 187 set(ENV_${VAR} $ENV{${VAR}}) << 187 # default assumption 188 # replace won't work if var is blank << 188 SET(TBB_${_TBB_COMPONENT_UPPER}_FOUND ON) 189 if (ENV_${VAR}) << 189 SET(TBB_${_TBB_COMPONENT}_FOUND ON) 190 string( REGEX REPLACE "\\\\" "/" ENV_${VA << 190 191 endif () << 191 IF(${_TBB_LIBRARY_BASE}_DEBUG AND ${_TBB_LIBRARY_BASE}_RELEASE) 192 endmacro() << 192 SET(${_TBB_LIBRARY_BASE} 193 << 193 debug ${${_TBB_LIBRARY_BASE}_DEBUG} 194 #============================================= << 194 optimized ${${_TBB_LIBRARY_BASE}_RELEASE} CACHE STRING 195 # Couple a set of release AND debug libraries << 195 "TBB ${_TBB_COMPONENT} library") 196 #============================================= << 196 LIST(APPEND _TBB_ALL_LIBS 197 macro(make_library_set PREFIX) << 197 optimized ${${_TBB_LIBRARY_BASE}_RELEASE} 198 if (${PREFIX}_RELEASE AND ${PREFIX}_DEBUG) << 198 debug ${${_TBB_LIBRARY_BASE}_DEBUG}) 199 set(${PREFIX} optimized ${${PREFIX}_RELEAS << 199 LIST(APPEND TBB_FOUND_COMPONENTS ${_TBB_LIBRARY_BASE} ${_TBB_LIBRARY_BASE}_debug) 200 elseif (${PREFIX}_RELEASE) << 200 SET(TBB_${_TBB_COMPONENT_UPPER}_LIBRARY ${${_TBB_LIBRARY_BASE}_RELEASE}) 201 set(${PREFIX} ${${PREFIX}_RELEASE}) << 201 ELSEIF(${_TBB_LIBRARY_BASE}_DEBUG) 202 elseif (${PREFIX}_DEBUG) << 202 SET(${_TBB_LIBRARY_BASE} ${${_TBB_LIBRARY_BASE}_DEBUG}) 203 set(${PREFIX} ${${PREFIX}_DEBUG}) << 203 LIST(APPEND _TBB_ALL_LIBS ${${_TBB_LIBRARY_BASE}_DEBUG}) 204 endif () << 204 LIST(APPEND TBB_FOUND_COMPONENTS ${_TBB_LIBRARY_BASE}) 205 endmacro() << 205 SET(TBB_${_TBB_COMPONENT_UPPER}_LIBRARY ${${_TBB_LIBRARY_BASE}_DEBUG}) 206 << 206 ELSEIF(${_TBB_LIBRARY_BASE}_RELEASE) 207 << 207 SET(${_TBB_LIBRARY_BASE} ${${_TBB_LIBRARY_BASE}_RELEASE} 208 #============================================= << 208 CACHE FILEPATH "TBB ${_TBB_COMPONENT} library") 209 # Now to actually find TBB << 209 LIST(APPEND _TBB_ALL_LIBS ${${_TBB_LIBRARY_BASE}_RELEASE}) 210 # << 210 LIST(APPEND TBB_FOUND_COMPONENTS ${_TBB_LIBRARY_BASE}_debug) 211 << 211 SET(TBB_${_TBB_COMPONENT_UPPER}_LIBRARY ${${_TBB_LIBRARY_BASE}_RELEASE}) 212 # Get path, convert backslashes as ${ENV_${var << 212 ELSE() 213 getenv_path(TBB_ROOT) << 213 # Component missing: record it for a later report 214 << 214 LIST(APPEND _TBB_MISSING_COMPONENTS ${_TBB_COMPONENT}) 215 # initialize search paths << 215 SET(TBB_${_TBB_COMPONENT}_FOUND OFF) 216 set(TBB_PREFIX_PATH ${TBB_ROOT} ${ENV_TBB_ROOT << 216 SET(TBB_${_TBB_COMPONENT_UPPER}_FOUND OFF) 217 set(TBB_INC_SEARCH_PATH "") << 217 ENDIF() 218 set(TBB_LIB_SEARCH_PATH "") << 218 219 << 219 IF(${_TBB_LIBRARY_BASE}) 220 << 220 # setup the TBB_<COMPONENT>_LIBRARIES variable 221 # If user built from sources << 221 SET(TBB_${_TBB_COMPONENT_UPPER}_LIBRARIES ${${_TBB_LIBRARY_BASE}}) 222 set(TBB_BUILD_PREFIX $ENV{TBB_BUILD_PREFIX}) << 222 ELSE() 223 if (TBB_BUILD_PREFIX AND ENV_TBB_ROOT) << 223 LIST(APPEND _TBB_MISSING_LIBRARIES ${_TBB_LIBRARY_BASE}) 224 getenv_path(TBB_BUILD_DIR) << 224 ENDIF() 225 if (NOT ENV_TBB_BUILD_DIR) << 225 226 set(ENV_TBB_BUILD_DIR ${ENV_TBB_ROOT}/buil << 226 ENDFOREACH(_TBB_COMPONENT ${TBB_FIND_COMPONENTS}) 227 endif () << 227 228 << 228 #------------------------------------------------------------------------------# 229 # include directory under ${ENV_TBB_ROOT}/in << 229 # 230 list(APPEND TBB_LIB_SEARCH_PATH << 230 # Standard variables 231 ${ENV_TBB_BUILD_DIR}/${TBB_BUILD_PREFIX}_r << 231 # 232 ${ENV_TBB_BUILD_DIR}/${TBB_BUILD_PREFIX}_d << 232 #------------------------------------------------------------------------------# 233 endif () << 233 IF(_TBB_ALL_LIBS) 234 << 234 SET(TBB_LIBRARIES ${_TBB_ALL_LIBS}) 235 << 235 ENDIF() 236 # For Windows, let's assume that the user migh << 236 237 # TBB packages from the main website. These us << 237 IF(TBB_INCLUDE_DIR) 238 # structure (at least for automatically findin << 238 SET(TBB_INCLUDE_DIRS ${TBB_INCLUDE_DIR}) 239 # on platform and compiler, but we'll do our b << 239 ENDIF() 240 # Not adding the same effort for the precompil << 240 241 # have different versions for CC compiler vers << 241 IF(DEFINED _TBB_MISSING_COMPONENTS AND _TBB_CHECK_COMPONENTS) 242 # will never adequately match the user's setup << 242 IF(NOT TBB_FIND_QUIETLY) 243 # to detect the "best" version to use. The use << 243 MESSAGE(STATUS "One or more TBB components were not found:") 244 # select the right files. (Chances are the dis << 244 # Display missing components indented, each on a separate line 245 # custom version of tbb, anyway, so the proble << 245 FOREACH(_TBB_MISSING_COMPONENT ${_TBB_MISSING_COMPONENTS}) 246 if (WIN32 AND MSVC) << 246 MESSAGE(STATUS " " ${_TBB_MISSING_COMPONENT}) 247 set(COMPILER_PREFIX "vc7.1") << 247 ENDFOREACH(_TBB_MISSING_COMPONENT ${_TBB_MISSING_COMPONENTS}) 248 if (MSVC_VERSION EQUAL 1400) << 248 ENDIF(NOT TBB_FIND_QUIETLY) 249 set(COMPILER_PREFIX "vc8") << 249 ENDIF(DEFINED _TBB_MISSING_COMPONENTS AND _TBB_CHECK_COMPONENTS) 250 elseif(MSVC_VERSION EQUAL 1500) << 250 251 set(COMPILER_PREFIX "vc9") << 251 #------------------------------------------------------------------------------# 252 elseif(MSVC_VERSION EQUAL 1600) << 252 # 253 set(COMPILER_PREFIX "vc10") << 253 # Library's version 254 elseif(MSVC_VERSION EQUAL 1700) << 254 # 255 set(COMPILER_PREFIX "vc11") << 255 #------------------------------------------------------------------------------# 256 elseif(MSVC_VERSION EQUAL 1800) << 256 257 set(COMPILER_PREFIX "vc12") << 257 SET(_TBB_VERSION_HEADER ${TBB_INCLUDE_DIR}/tbb/tbb_stddef.h) 258 elseif(MSVC_VERSION GREATER_EQUAL 1900) << 258 259 set(COMPILER_PREFIX "vc14") << 259 IF(EXISTS ${_TBB_VERSION_HEADER}) 260 endif () << 260 FILE(READ ${_TBB_VERSION_HEADER} _TBB_VERSION_CONTENTS) 261 << 261 262 # for each prefix path, add ia32/64\${COMPIL << 262 STRING(REGEX REPLACE ".*#define TBB_VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" 263 foreach (dir IN LISTS TBB_PREFIX_PATH) << 263 TBB_VERSION_MAJOR "${_TBB_VERSION_CONTENTS}") 264 if (CMAKE_CL_64) << 264 STRING(REGEX REPLACE ".*#define TBB_VERSION_MINOR[ \t]+([0-9]+).*" "\\1" 265 list(APPEND TBB_LIB_SEARCH_PATH ${dir}/i << 265 TBB_VERSION_MINOR "${_TBB_VERSION_CONTENTS}") 266 list(APPEND TBB_LIB_SEARCH_PATH ${dir}/l << 266 267 list(APPEND TBB_LIB_SEARCH_PATH ${dir}/i << 267 SET(TBB_VERSION ${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR}) 268 list(APPEND TBB_LIB_SEARCH_PATH ${dir}/l << 268 SET(TBB_VERSION_COMPONENTS 2) 269 else () << 269 ENDIF() 270 list(APPEND TBB_LIB_SEARCH_PATH ${dir}/i << 270 271 list(APPEND TBB_LIB_SEARCH_PATH ${dir}/l << 271 IF(WIN32) 272 endif () << 272 FIND_PROGRAM(LIB_EXECUTABLE NAMES lib 273 endforeach () << 273 HINTS 274 endif () << 274 "$ENV{VS110COMNTOOLS}/../../VC/bin" 275 << 275 "$ENV{VS100COMNTOOLS}/../../VC/bin" 276 # For OS X binary distribution, choose libc++ << 276 "$ENV{VS90COMNTOOLS}/../../VC/bin" 277 # and above and AppleClang << 277 "$ENV{VS71COMNTOOLS}/../../VC/bin" 278 if (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND << 278 "$ENV{VS80COMNTOOLS}/../../VC/bin" 279 NOT CMAKE_SYSTEM_VERSION VERSION_LESS 13.0 << 279 DOC "Library manager") 280 set (USE_LIBCXX OFF) << 280 281 cmake_policy(GET CMP0025 POLICY_VAR) << 281 MARK_AS_ADVANCED (LIB_EXECUTABLE) 282 << 282 ENDIF() 283 if (POLICY_VAR STREQUAL "NEW") << 283 284 if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleC << 284 MACRO(GET_LIB_REQUISITES LIB REQUISITES) 285 set (USE_LIBCXX ON) << 285 IF(LIB_EXECUTABLE) 286 endif () << 286 GET_FILENAME_COMPONENT(_LIB_PATH ${LIB_EXECUTABLE} PATH) 287 else () << 287 288 if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" << 288 IF(MSVC) 289 set (USE_LIBCXX ON) << 289 # Do not redirect the output 290 endif () << 290 UNSET(ENV{VS_UNICODE_OUTPUT}) 291 endif () << 291 ENDIF() 292 << 292 293 if (USE_LIBCXX) << 293 EXECUTE_PROCESS(COMMAND ${LIB_EXECUTABLE} /nologo /list ${LIB} 294 foreach (dir IN LISTS TBB_PREFIX_PATH) << 294 WORKING_DIRECTORY ${_LIB_PATH}/../../Common7/IDE 295 list (APPEND TBB_LIB_SEARCH_PATH ${dir}/ << 295 OUTPUT_VARIABLE _LIB_OUTPUT ERROR_QUIET) 296 endforeach () << 296 297 endif () << 297 STRING(REPLACE "\n" ";" "${REQUISITES}" "${_LIB_OUTPUT}") 298 endif () << 298 LIST(REMOVE_DUPLICATES ${REQUISITES}) 299 << 299 ENDIF() 300 # check compiler ABI << 300 ENDMACRO() 301 if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") << 301 302 set(COMPILER_PREFIX) << 302 IF(_TBB_ALL_LIBS) 303 if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_L << 303 # collect lib requisites using the lib tool 304 list(APPEND COMPILER_PREFIX "gcc4.8") << 304 FOREACH(_TBB_COMPONENT ${_TBB_ALL_LIBS}) 305 endif() << 305 GET_LIB_REQUISITES(${_TBB_COMPONENT} _TBB_REQUISITES) 306 if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_L << 306 ENDFOREACH(_TBB_COMPONENT) 307 list(APPEND COMPILER_PREFIX "gcc4.7") << 307 ENDIF() 308 endif() << 308 309 if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_L << 309 IF(NOT TBB_BINARY_DIR) 310 list(APPEND COMPILER_PREFIX "gcc4.4") << 310 SET(_TBB_UPDATE_BINARY_DIR ON) 311 endif() << 311 ELSE() 312 list(APPEND COMPILER_PREFIX "gcc4.1") << 312 SET(_TBB_UPDATE_BINARY_DIR OFF) 313 elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") << 313 ENDIF() 314 set(COMPILER_PREFIX) << 314 315 if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_L << 315 SET(_TBB_BINARY_DIR_HINTS ${_TBB_POSSIBLE_BIN_SUFFIXES}) 316 list(APPEND COMPILER_PREFIX "gcc4.8") << 316 317 endif() << 317 IF(_TBB_REQUISITES) 318 if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_L << 318 FIND_FILE(TBB_BINARY_DIR NAMES ${_TBB_REQUISITES} 319 list(APPEND COMPILER_PREFIX "gcc4.7") << 319 HINTS ${TBB_ROOT_DIR} 320 endif() << 320 PATH_SUFFIXES ${_TBB_BINARY_DIR_HINTS} NO_DEFAULT_PATH) 321 list(APPEND COMPILER_PREFIX "gcc4.4") << 321 ENDIF() 322 else() # Assume compatibility with 4.4 for oth << 322 323 list(APPEND COMPILER_PREFIX "gcc4.4") << 323 IF(TBB_BINARY_DIR AND _TBB_UPDATE_BINARY_DIR) 324 endif () << 324 SET(_TBB_BINARY_DIR ${TBB_BINARY_DIR}) 325 << 325 UNSET(TBB_BINARY_DIR CACHE) 326 # if platform architecture is explicitly speci << 326 327 set(TBB_ARCH_PLATFORM $ENV{TBB_ARCH_PLATFORM}) << 327 IF(_TBB_BINARY_DIR) 328 if (TBB_ARCH_PLATFORM) << 328 GET_FILENAME_COMPONENT(TBB_BINARY_DIR ${_TBB_BINARY_DIR} PATH) 329 foreach (dir IN LISTS TBB_PREFIX_PATH) << 329 ENDIF() 330 list(APPEND TBB_LIB_SEARCH_PATH ${dir}/${T << 330 ENDIF() 331 list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib << 331 332 endforeach () << 332 SET(TBB_BINARY_DIR ${TBB_BINARY_DIR} CACHE PATH "TBB binary directory") 333 endif () << 333 334 << 334 MARK_AS_ADVANCED(TBB_INCLUDE_DIR TBB_LIBRARY TBB_LIBRARY_RELEASE 335 foreach (dir IN LISTS TBB_PREFIX_PATH) << 335 TBB_LIBRARY_DEBUG TBB_BINARY_DIR) 336 foreach (prefix IN LISTS COMPILER_PREFIX) << 336 337 if (CMAKE_SIZEOF_VOID_P EQUAL 8) << 337 IF(NOT _TBB_CHECK_COMPONENTS) 338 list(APPEND TBB_LIB_SEARCH_PATH ${dir}/l << 338 SET(_TBB_FPHSA_ADDITIONAL_ARGS HANDLE_COMPONENTS) 339 list(APPEND TBB_LIB_SEARCH_PATH ${dir}/l << 339 ENDIF() 340 list(APPEND TBB_LIB_SEARCH_PATH ${dir}/i << 340 341 list(APPEND TBB_LIB_SEARCH_PATH ${dir}/i << 341 LIST(APPEND _TBB_FPHSA_ADDITIONAL_ARGS VERSION_VAR TBB_VERSION) 342 else () << 342 343 list(APPEND TBB_LIB_SEARCH_PATH ${dir}/l << 343 FIND_PACKAGE_HANDLE_STANDARD_ARGS(TBB 344 list(APPEND TBB_LIB_SEARCH_PATH ${dir}/l << 344 REQUIRED_VARS 345 list(APPEND TBB_LIB_SEARCH_PATH ${dir}/i << 345 TBB_ROOT_DIR 346 list(APPEND TBB_LIB_SEARCH_PATH ${dir}/i << 346 TBB_INCLUDE_DIR 347 endif () << 347 TBB_LIBRARY 348 endforeach() << 348 ${_TBB_MISSING_LIBRARIES} 349 endforeach () << 349 HANDLE_COMPONENTS 350 << 350 ${_TBB_FPHSA_ADDITIONAL_ARGS}) 351 # add general search paths << 352 foreach (dir IN LISTS TBB_PREFIX_PATH) << 353 list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib $ << 354 ${dir}/Libs) << 355 list(APPEND TBB_INC_SEARCH_PATH ${dir}/inclu << 356 ${dir}/include/tbb) << 357 endforeach () << 358 << 359 set(TBB_LIBRARY_NAMES tbb) << 360 get_debug_names(TBB_LIBRARY_NAMES) << 361 << 362 << 363 find_path(TBB_INCLUDE_DIR << 364 NAMES tbb/tbb.h << 365 PATHS ${TBB_INC_SEARCH_PATH}) << 366 << 367 find_library(TBB_LIBRARY_RELEASE << 368 NAMES ${TBB_LIBRARY_NAMES} << 369 PATHS ${TBB_LIB_SEARCH_PATH}) << 370 find_library(TBB_LIBRARY_DEBUG << 371 NAMES ${TBB_LIBRARY_NAMES_DEBUG} << 372 PATHS ${TBB_LIB_SEARCH_PATH}) << 373 make_library_set(TBB_LIBRARY) << 374 << 375 findpkg_finish(TBB tbb) << 376 << 377 #if we haven't found TBB no point on going any << 378 if (NOT TBB_FOUND) << 379 return() << 380 endif () << 381 << 382 #============================================= << 383 # Look for TBB's malloc package << 384 set(TBB_MALLOC_LIBRARY_NAMES tbbmalloc) << 385 get_debug_names(TBB_MALLOC_LIBRARY_NAMES) << 386 << 387 find_path(TBB_MALLOC_INCLUDE_DIR << 388 NAMES tbb/tbb.h << 389 PATHS ${TBB_INC_SEARCH_PATH}) << 390 << 391 find_library(TBB_MALLOC_LIBRARY_RELEASE << 392 NAMES ${TBB_MALLOC_LIBRARY_NAMES} << 393 PATHS ${TBB_LIB_SEARCH_PATH}) << 394 find_library(TBB_MALLOC_LIBRARY_DEBUG << 395 NAMES ${TBB_MALLOC_LIBRARY_NAMES_ << 396 PATHS ${TBB_LIB_SEARCH_PATH}) << 397 make_library_set(TBB_MALLOC_LIBRARY) << 398 << 399 findpkg_finish(TBB_MALLOC tbbmalloc) << 400 << 401 #============================================= << 402 # Look for TBB's malloc proxy package << 403 set(TBB_MALLOC_PROXY_LIBRARY_NAMES tbbmalloc_p << 404 get_debug_names(TBB_MALLOC_PROXY_LIBRARY_NAMES << 405 << 406 find_path(TBB_MALLOC_PROXY_INCLUDE_DIR << 407 NAMES tbb/tbbmalloc_proxy.h << 408 PATHS ${TBB_INC_SEARCH_PATH}) << 409 << 410 find_library(TBB_MALLOC_PROXY_LIBRARY_RELEASE << 411 NAMES ${TBB_MALLOC_PROXY_LIBRARY_ << 412 PATHS ${TBB_LIB_SEARCH_PATH}) << 413 find_library(TBB_MALLOC_PROXY_LIBRARY_DEBUG << 414 NAMES ${TBB_MALLOC_PROXY_LIBRARY_ << 415 PATHS ${TBB_LIB_SEARCH_PATH}) << 416 make_library_set(TBB_MALLOC_PROXY_LIBRARY) << 417 << 418 findpkg_finish(TBB_MALLOC_PROXY tbbmalloc_prox << 419 << 420 << 421 #============================================= << 422 #parse all the version numbers from tbb << 423 if(NOT TBB_VERSION) << 424 if (EXISTS "${TBB_INCLUDE_DIR}/oneapi/tbb/ve << 425 file(STRINGS << 426 "${TBB_INCLUDE_DIR}/oneapi/tbb/version.h << 427 TBB_VERSION_CONTENTS << 428 REGEX "VERSION") << 429 else() << 430 #only read the start of the file << 431 file(STRINGS << 432 "${TBB_INCLUDE_DIR}/tbb/tbb_stddef.h" << 433 TBB_VERSION_CONTENTS << 434 REGEX "VERSION") << 435 endif() << 436 << 437 string(REGEX REPLACE << 438 ".*#define TBB_VERSION_MAJOR ([0-9]+).*" " << 439 TBB_VERSION_MAJOR "${TBB_VERSION_CONTENTS} << 440 << 441 string(REGEX REPLACE << 442 ".*#define TBB_VERSION_MINOR ([0-9]+).*" " << 443 TBB_VERSION_MINOR "${TBB_VERSION_CONTENTS} << 444 << 445 string(REGEX REPLACE << 446 ".*#define TBB_INTERFACE_VERSION ([0-9 << 447 TBB_INTERFACE_VERSION "${TBB_VERSION_C << 448 << 449 string(REGEX REPLACE << 450 ".*#define TBB_COMPATIBLE_INTERFACE_VE << 451 TBB_COMPATIBLE_INTERFACE_VERSION "${TB << 452 << 453 set(TBB_VERSION "${TBB_VERSION_MAJOR}.${TBB_ << 454 << 455 endif() << 456 << 457 include(FindPackageHandleStandardArgs) << 458 find_package_handle_standard_args(TBB << 459 REQUIRED_VARS TBB_INCLUDE_DIR TBB_LIBRARY << 460 VERSION_VAR TBB_VERSION) <<