diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index e297d0a462c..13e90683dab 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -118,7 +118,7 @@ function(ov_download_tbb) ENVIRONMENT "TBBROOT" SHA256 "ad9cf52e657660058aa6c6844914bc0fc66241fec89a392d8b79a7ff69c3c7f6") else() - message(WARNING "TBB is not available on current platform") + message(WARNING "Prebuilt TBB is not available on current platform") return() endif() diff --git a/cmake/developer_package/TBBConfig.cmake b/cmake/developer_package/tbb/TBBConfig.cmake similarity index 92% rename from cmake/developer_package/TBBConfig.cmake rename to cmake/developer_package/tbb/TBBConfig.cmake index 0ee8060a6e6..28813754a30 100644 --- a/cmake/developer_package/TBBConfig.cmake +++ b/cmake/developer_package/tbb/TBBConfig.cmake @@ -27,9 +27,9 @@ unset(TBB_DIR) unset(TBB_DIR CACHE) find_package(TBB + 2017.0 CONFIG - PATHS ${TBBROOT}/cmake - ${IEDevScripts_DIR}/${IE_OWN_TBB_CONFIG} + PATHS "${IEDevScripts_DIR}/${IE_OWN_TBB_CONFIG}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) diff --git a/cmake/developer_package/tbb/lnx/TBBConfig-version.cmake b/cmake/developer_package/tbb/lnx/TBBConfig-version.cmake new file mode 100644 index 00000000000..45a6f0b7420 --- /dev/null +++ b/cmake/developer_package/tbb/lnx/TBBConfig-version.cmake @@ -0,0 +1,45 @@ +# Copyright (C) 2018-2022 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 +# + +if (NOT TBBROOT) + if(DEFINED ENV{TBBROOT}) + set (TBBROOT $ENV{TBBROOT}) + endif() +endif() + +set(_tbb_root ${TBBROOT}) + +# detect version +find_file(_tbb_def_header tbb_stddef.h HINTS "${_tbb_root}/include/tbb") + +if (_tbb_def_header) + file(READ "${_tbb_def_header}" _tbb_def_content) + string(REGEX MATCH "TBB_VERSION_MAJOR[ ]*[0-9]*" _tbb_version_major ${_tbb_def_content}) + string(REGEX MATCH "[0-9][0-9]*" _tbb_version_major ${_tbb_version_major}) + + string(REGEX MATCH "TBB_VERSION_MINOR[ ]*[0-9]" _tbb_version_minor ${_tbb_def_content}) + string(REGEX MATCH "[0-9][0-9]*" _tbb_version_minor ${_tbb_version_minor}) + + set(PACKAGE_VERSION_MAJOR ${_tbb_version_major}) + set(PACKAGE_VERSION_MINOR ${_tbb_version_minor}) + set(PACKAGE_VERSION_PATCH 0) +else() + set(PACKAGE_VERSION_MAJOR 0) + set(PACKAGE_VERSION_MINOR 0) + set(PACKAGE_VERSION_PATCH 0) +endif() + +set(PACKAGE_VERSION "${PACKAGE_VERSION_MAJOR}.${PACKAGE_VERSION_MINOR}.${PACKAGE_VERSION_PATCH}") + +set(PACKAGE_VERSION_EXACT False) +set(PACKAGE_VERSION_COMPATIBLE False) + +if(PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT True) + set(PACKAGE_VERSION_COMPATIBLE True) +endif() + +if(PACKAGE_FIND_VERSION_MAJOR VERSION_LESS_EQUAL PACKAGE_VERSION_MAJOR) + set(PACKAGE_VERSION_COMPATIBLE True) +endif() diff --git a/cmake/developer_package/tbb/mac/TBBConfig-version.cmake b/cmake/developer_package/tbb/mac/TBBConfig-version.cmake new file mode 100644 index 00000000000..45a6f0b7420 --- /dev/null +++ b/cmake/developer_package/tbb/mac/TBBConfig-version.cmake @@ -0,0 +1,45 @@ +# Copyright (C) 2018-2022 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 +# + +if (NOT TBBROOT) + if(DEFINED ENV{TBBROOT}) + set (TBBROOT $ENV{TBBROOT}) + endif() +endif() + +set(_tbb_root ${TBBROOT}) + +# detect version +find_file(_tbb_def_header tbb_stddef.h HINTS "${_tbb_root}/include/tbb") + +if (_tbb_def_header) + file(READ "${_tbb_def_header}" _tbb_def_content) + string(REGEX MATCH "TBB_VERSION_MAJOR[ ]*[0-9]*" _tbb_version_major ${_tbb_def_content}) + string(REGEX MATCH "[0-9][0-9]*" _tbb_version_major ${_tbb_version_major}) + + string(REGEX MATCH "TBB_VERSION_MINOR[ ]*[0-9]" _tbb_version_minor ${_tbb_def_content}) + string(REGEX MATCH "[0-9][0-9]*" _tbb_version_minor ${_tbb_version_minor}) + + set(PACKAGE_VERSION_MAJOR ${_tbb_version_major}) + set(PACKAGE_VERSION_MINOR ${_tbb_version_minor}) + set(PACKAGE_VERSION_PATCH 0) +else() + set(PACKAGE_VERSION_MAJOR 0) + set(PACKAGE_VERSION_MINOR 0) + set(PACKAGE_VERSION_PATCH 0) +endif() + +set(PACKAGE_VERSION "${PACKAGE_VERSION_MAJOR}.${PACKAGE_VERSION_MINOR}.${PACKAGE_VERSION_PATCH}") + +set(PACKAGE_VERSION_EXACT False) +set(PACKAGE_VERSION_COMPATIBLE False) + +if(PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT True) + set(PACKAGE_VERSION_COMPATIBLE True) +endif() + +if(PACKAGE_FIND_VERSION_MAJOR VERSION_LESS_EQUAL PACKAGE_VERSION_MAJOR) + set(PACKAGE_VERSION_COMPATIBLE True) +endif() diff --git a/cmake/developer_package/tbb/win/TBBConfig-version.cmake b/cmake/developer_package/tbb/win/TBBConfig-version.cmake new file mode 100644 index 00000000000..45a6f0b7420 --- /dev/null +++ b/cmake/developer_package/tbb/win/TBBConfig-version.cmake @@ -0,0 +1,45 @@ +# Copyright (C) 2018-2022 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 +# + +if (NOT TBBROOT) + if(DEFINED ENV{TBBROOT}) + set (TBBROOT $ENV{TBBROOT}) + endif() +endif() + +set(_tbb_root ${TBBROOT}) + +# detect version +find_file(_tbb_def_header tbb_stddef.h HINTS "${_tbb_root}/include/tbb") + +if (_tbb_def_header) + file(READ "${_tbb_def_header}" _tbb_def_content) + string(REGEX MATCH "TBB_VERSION_MAJOR[ ]*[0-9]*" _tbb_version_major ${_tbb_def_content}) + string(REGEX MATCH "[0-9][0-9]*" _tbb_version_major ${_tbb_version_major}) + + string(REGEX MATCH "TBB_VERSION_MINOR[ ]*[0-9]" _tbb_version_minor ${_tbb_def_content}) + string(REGEX MATCH "[0-9][0-9]*" _tbb_version_minor ${_tbb_version_minor}) + + set(PACKAGE_VERSION_MAJOR ${_tbb_version_major}) + set(PACKAGE_VERSION_MINOR ${_tbb_version_minor}) + set(PACKAGE_VERSION_PATCH 0) +else() + set(PACKAGE_VERSION_MAJOR 0) + set(PACKAGE_VERSION_MINOR 0) + set(PACKAGE_VERSION_PATCH 0) +endif() + +set(PACKAGE_VERSION "${PACKAGE_VERSION_MAJOR}.${PACKAGE_VERSION_MINOR}.${PACKAGE_VERSION_PATCH}") + +set(PACKAGE_VERSION_EXACT False) +set(PACKAGE_VERSION_COMPATIBLE False) + +if(PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT True) + set(PACKAGE_VERSION_COMPATIBLE True) +endif() + +if(PACKAGE_FIND_VERSION_MAJOR VERSION_LESS_EQUAL PACKAGE_VERSION_MAJOR) + set(PACKAGE_VERSION_COMPATIBLE True) +endif() diff --git a/src/cmake/ie_parallel.cmake b/src/cmake/ie_parallel.cmake index 8b551895b87..a9951e62a23 100644 --- a/src/cmake/ie_parallel.cmake +++ b/src/cmake/ie_parallel.cmake @@ -4,6 +4,7 @@ macro(ov_find_package_tbb) if(THREADING STREQUAL "TBB" OR THREADING STREQUAL "TBB_AUTO" AND NOT TBB_FOUND) + set(_ov_minimal_tbb_version 2017.0) if(NOT ENABLE_SYSTEM_TBB) if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.24) @@ -24,7 +25,7 @@ macro(ov_find_package_tbb) unset(_no_cmake_install_prefix) endif() - find_package(TBB QUIET COMPONENTS tbb tbbmalloc + find_package(TBB ${_ov_minimal_tbb_version} QUIET COMPONENTS tbb tbbmalloc ${_find_package_no_args}) if(NOT TBB_FOUND) @@ -36,19 +37,27 @@ macro(ov_find_package_tbb) if(NOT ANDROID AND ENABLE_SYSTEM_TBB) find_package(PkgConfig QUIET) if(PkgConfig_FOUND) + macro(_ov_pkg_config_tbb_unset) + # unset since it affects OpenVINOConfig.cmake.in + unset(tbb_FOUND) + unset(tbb_FOUND CACHE) + endmacro() pkg_search_module(tbb QUIET IMPORTED_TARGET GLOBAL tbb) if(tbb_FOUND) - if(TARGET PkgConfig::tbb) + # parse version + string(REGEX REPLACE "~.*" "" tbb_VERSION_PATCHED "${tbb_VERSION}") + if(tbb_VERSION_PATCHED VERSION_LESS _ov_minimal_tbb_version) + _ov_pkg_config_tbb_unset() + message(WARNING "Found TBB ${tbb_VERSION} via ${PKG_CONFIG_EXECUTABLE} while OpenVINO requies ${_ov_minimal_tbb_version} at least") + elseif(TARGET PkgConfig::tbb) add_library(TBB::tbb ALIAS PkgConfig::tbb) set(TBB_VERSION ${tbb_VERSION}) set(TBB_FOUND ${tbb_FOUND}) message(STATUS "${PKG_CONFIG_EXECUTABLE}: tbb (${tbb_VERSION}) is found at ${tbb_PREFIX}") else() - # unset since it affects OpenVINOConfig.cmake.in - unset(tbb_FOUND) - unset(tbb_FOUND CACHE) + _ov_pkg_config_tbb_unset() if(CPACK_GENERATOR STREQUAL "DEB") # debian cpack generator requires system TBB @@ -72,15 +81,18 @@ macro(ov_find_package_tbb) # fallback variant for TBB 2018 and older where TBB have not had cmake interface if(DEFINED TBBROOT OR DEFINED ENV{TBBROOT}) - set(_tbb_paths PATHS ${IEDevScripts_DIR}) + # note: if TBB older than 2017.0 is passed, cmake will skip it and THREADING=SEQ will be used + set(_tbb_paths PATHS "${IEDevScripts_DIR}/tbb") endif() # try to find one more time find_package(TBB QUIET COMPONENTS tbb tbbmalloc - # can be provided by ov_download_tbb - HINTS ${TBB_DIR} - ${_tbb_paths} - ${_find_package_no_args}) + # TBB_DIR can be provided by ov_download_tbb + HINTS ${TBB_DIR} + ${_tbb_paths} + ${_find_package_no_args} + NO_CMAKE_PATH + NO_CMAKE_ENVIRONMENT_PATH) endif() endif()