OpenVINO requires TBB 2017.0 or higher (#12934)

* Added a error message if cmake < 3.16 is used with tbb.pc

* TBB

* Updates

* Ignore old TBBs

* Handle minimal version via pkg-config as well
This commit is contained in:
Ilya Lavrenov 2022-09-06 18:57:55 +04:00 committed by GitHub
parent 53319e60fc
commit 9d55355daf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 160 additions and 13 deletions

View File

@ -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()

View File

@ -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)

View File

@ -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()

View File

@ -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()

View File

@ -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()

View File

@ -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()