123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468 |
- function(tbb_extract_real_library library real_library)
- if(NOT UNIX OR NOT EXISTS ${library})
- set(${real_library} "${library}" PARENT_SCOPE)
- return()
- endif()
-
- set(_elf_magic "7f454c46")
- file(READ ${library} _hex_data OFFSET 0 LIMIT 4 HEX)
- if(_hex_data STREQUAL _elf_magic)
-
-
- set(${real_library} "${library}" PARENT_SCOPE)
- return()
- endif()
- file(READ ${library} _data OFFSET 0 LIMIT 1024)
- if("${_data}" MATCHES "INPUT \\(([^(]+)\\)")
-
- set(_proper_so_name "${CMAKE_MATCH_1}")
-
-
- get_filename_component(_so_dir "${library}" DIRECTORY)
- set(${real_library} "${_so_dir}/${_proper_so_name}" PARENT_SCOPE)
- else()
-
-
- set(${real_library} "${library}" PARENT_SCOPE)
- endif()
- endfunction()
- 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_as_advanced(${PREFIX}_INCLUDE_DIR
- ${PREFIX}_LIBRARY
- ${PREFIX}_LIBRARY_DEBUG
- ${PREFIX}_LIBRARY_RELEASE)
- endmacro()
- 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()
- macro(getenv_path VAR)
- set(ENV_${VAR} $ENV{${VAR}})
-
- if (ENV_${VAR})
- string( REGEX REPLACE "\\\\" "/" ENV_${VAR} ${ENV_${VAR}} )
- endif ()
- endmacro()
- 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()
- macro(find_tbb_library_verifying_release_debug_locations PREFIX)
- find_library(${PREFIX}_RELEASE
- NAMES ${${PREFIX}_NAMES}
- HINTS ${TBB_LIB_SEARCH_PATH})
- if (${PREFIX}_RELEASE)
-
-
-
-
-
-
- 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()
- getenv_path(TBB_ROOT)
- set(TBB_PREFIX_PATH ${TBB_ROOT} ${ENV_TBB_ROOT})
- set(TBB_INC_SEARCH_PATH "")
- set(TBB_LIB_SEARCH_PATH "")
- 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 ()
-
- list(APPEND TBB_LIB_SEARCH_PATH
- ${ENV_TBB_BUILD_DIR}/${TBB_BUILD_PREFIX}_release
- ${ENV_TBB_BUILD_DIR}/${TBB_BUILD_PREFIX}_debug)
- endif ()
- 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 ()
-
- 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 ()
- 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 ()
- 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)
- 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()
- list(APPEND COMPILER_PREFIX "gcc4.4")
- endif ()
- 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 ()
- 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 (NOT TBB_FOUND)
- return()
- endif ()
- 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)
- 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)
- 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()
-
- 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()
|