diff --git a/.ci/azure/linux.yml b/.ci/azure/linux.yml index 7cccd692c8f..3c580b98887 100644 --- a/.ci/azure/linux.yml +++ b/.ci/azure/linux.yml @@ -350,6 +350,7 @@ jobs: - script: | export PATH=$HOME/.local/bin:$PATH export IE_APP_PATH=$(INSTALL_DIR)/samples_bin + export LD_LIBRARY_PATH=$IE_APP_PATH:$LD_LIBRARY_PATH export IE_APP_PYTHON_PATH=$(INSTALL_DIR)/samples/python/ export SHARE=$(INSTALL_DIR)/tests/smoke_tests/samples_smoke_tests_data/ export WORKSPACE=$(INSTALL_DIR) diff --git a/CMakeLists.txt b/CMakeLists.txt index fb9dc63925e..beb02142840 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ if(DEFINED BUILD_SHARED_LIBS AND NOT BUILD_SHARED_LIBS) # 'target_link_libraries' does not work correctly when called from - # different directly where 'add_library' is called: CMake generates + # different directory where 'add_library' is called: CMake generates # incorrect OpenVINOConfig.cmake in this case cmake_minimum_required(VERSION 3.17) else() @@ -17,8 +17,6 @@ if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "CMake build type" FORCE) endif() -set(IE_MAIN_SOURCE_DIR ${OpenVINO_SOURCE_DIR}/inference-engine) - find_package(IEDevScripts REQUIRED PATHS "${OpenVINO_SOURCE_DIR}/cmake/developer_package" NO_CMAKE_FIND_ROOT_PATH diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index f2636136e26..b00d7e07e2c 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -23,9 +23,7 @@ message(STATUS "MODELS_PATH=" ${MODELS_PATH}) fetch_models_and_validation_set() -if(COMMAND get_linux_name) - get_linux_name(LINUX_OS_NAME) -endif() +get_linux_name(LINUX_OS_NAME) if(CMAKE_CROSSCOMPILING AND CMAKE_HOST_SYSTEM_NAME MATCHES Linux AND CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*") set(protoc_version "3.18.2") @@ -93,7 +91,7 @@ if(THREADING STREQUAL "OMP") endif() ## TBB package -if(THREADING STREQUAL "TBB" OR THREADING STREQUAL "TBB_AUTO") +if(THREADING STREQUAL "TBB" OR THREADING STREQUAL "TBB_AUTO" AND NOT ENABLE_SYSTEM_TBB) reset_deps_cache(TBBROOT TBB_DIR) if(DEFINED ENV{THIRDPARTY_SERVER_PATH}) @@ -109,16 +107,6 @@ if(THREADING STREQUAL "TBB" OR THREADING STREQUAL "TBB_AUTO") TARGET_PATH "${TEMP}/tbb" ENVIRONMENT "TBBROOT" SHA256 "f1c9b9e2861efdaa01552bd25312ccbc5feeb45551e5f91ae61e29221c5c1479") - if(ENABLE_TBBBIND_2_5) - RESOLVE_DEPENDENCY(TBBBIND_2_5 - ARCHIVE_WIN "tbbbind_2_5_static_win_v1.zip" - TARGET_PATH "${TEMP}/tbbbind_2_5" - ENVIRONMENT "TBBBIND_2_5_ROOT" - SHA256 "a67afeea8cf194f97968c800dab5b5459972908295242e282045d6b8953573c1") - else() - message(WARNING "prebuilt TBBBIND_2_5 is not available. - Build oneTBB from sources and set TBBROOT environment var before OpenVINO cmake configure") - endif() elseif(ANDROID) # Should be before LINUX due LINUX is detected as well RESOLVE_DEPENDENCY(TBB ARCHIVE_ANDROID "tbb2020_20200404_android.tgz" @@ -131,16 +119,6 @@ if(THREADING STREQUAL "TBB" OR THREADING STREQUAL "TBB_AUTO") TARGET_PATH "${TEMP}/tbb" ENVIRONMENT "TBBROOT" SHA256 "95b2f3b0b70c7376a0c7de351a355c2c514b42c4966e77e3e34271a599501008") - if(ENABLE_TBBBIND_2_5) - RESOLVE_DEPENDENCY(TBBBIND_2_5 - ARCHIVE_LIN "tbbbind_2_5_static_lin_v2.tgz" - TARGET_PATH "${TEMP}/tbbbind_2_5" - ENVIRONMENT "TBBBIND_2_5_ROOT" - SHA256 "865e7894c58402233caf0d1b288056e0e6ab2bf7c9d00c9dc60561c484bc90f4") - else() - message(WARNING "prebuilt TBBBIND_2_5 is not available. - Build oneTBB from sources and set TBBROOT environment var before OpenVINO cmake configure") - endif() elseif(LINUX AND AARCH64) RESOLVE_DEPENDENCY(TBB ARCHIVE_LIN "keembay/tbb2020_38404_kmb_lic.tgz" @@ -160,13 +138,54 @@ if(THREADING STREQUAL "TBB" OR THREADING STREQUAL "TBB_AUTO") update_deps_cache(TBBROOT "${TBB}" "Path to TBB root folder") if(EXISTS "${TBBROOT}/lib/cmake/TBB/TBBConfig.cmake") # oneTBB case - update_deps_cache(TBB_DIR "${TBB}/lib/cmake/TBB" "Path to TBB cmake folder") + update_deps_cache(TBB_DIR "${TBBROOT}/lib/cmake/TBB" "Path to TBB cmake folder") + elseif(EXISTS "${TBBROOT}/lib64/cmake/TBB/TBBConfig.cmake") + # 64-bits oneTBB case + update_deps_cache(TBB_DIR "${TBBROOT}/lib64/cmake/TBB" "Path to TBB cmake folder") + elseif(EXISTS "${TBBROOT}/cmake/TBBConfig.cmake") + # custom downloaded or user provided TBB + update_deps_cache(TBB_DIR "${TBBROOT}/cmake" "Path to TBB cmake folder") else() - update_deps_cache(TBB_DIR "${TBB}/cmake" "Path to TBB cmake folder") + message(FATAL_ERROR "Failed to find TBBConfig.cmake in ${TBBROOT} tree") endif() update_deps_cache(TBBBIND_2_5_DIR "${TBBBIND_2_5}/cmake" "Path to TBBBIND_2_5 cmake folder") + debug_message(STATUS "tbb=" ${TBB}) + debug_message(STATUS "tbb_dir=" ${TBB_DIR}) + debug_message(STATUS "tbbroot=" ${TBBROOT}) + + if(DEFINED IE_PATH_TO_DEPS) + unset(IE_PATH_TO_DEPS) + endif() +endif() + +## TBBBind_2_5 package +if(ENABLE_TBBBIND_2_5) + if(DEFINED ENV{THIRDPARTY_SERVER_PATH}) + set(IE_PATH_TO_DEPS "$ENV{THIRDPARTY_SERVER_PATH}") + elseif(DEFINED THIRDPARTY_SERVER_PATH) + set(IE_PATH_TO_DEPS "${THIRDPARTY_SERVER_PATH}") + endif() + + if(WIN32 AND X86_64) + RESOLVE_DEPENDENCY(TBBBIND_2_5 + ARCHIVE_WIN "tbbbind_2_5_static_win_v1.zip" + TARGET_PATH "${TEMP}/tbbbind_2_5" + ENVIRONMENT "TBBBIND_2_5_ROOT" + SHA256 "a67afeea8cf194f97968c800dab5b5459972908295242e282045d6b8953573c1") + elseif(LINUX AND X86_64) + RESOLVE_DEPENDENCY(TBBBIND_2_5 + ARCHIVE_LIN "tbbbind_2_5_static_lin_v2.tgz" + TARGET_PATH "${TEMP}/tbbbind_2_5" + ENVIRONMENT "TBBBIND_2_5_ROOT" + SHA256 "865e7894c58402233caf0d1b288056e0e6ab2bf7c9d00c9dc60561c484bc90f4") + else() + message(WARNING "prebuilt TBBBIND_2_5 is not available. +Build oneTBB from sources and set TBBROOT environment var before OpenVINO cmake configure") + endif() + + update_deps_cache(TBBBIND_2_5_DIR "${TBBBIND_2_5}/cmake" "Path to TBBBIND_2_5 cmake folder") if(DEFINED IE_PATH_TO_DEPS) unset(IE_PATH_TO_DEPS) @@ -265,8 +284,6 @@ else() reset_deps_cache(OpenCV_DIR) endif() -include(${OpenVINO_SOURCE_DIR}/src/cmake/ie_parallel.cmake) - if(ENABLE_INTEL_GNA) reset_deps_cache( GNA_EXT_DIR diff --git a/cmake/developer_package/TBBConfig.cmake b/cmake/developer_package/TBBConfig.cmake index 5df466eca6b..908125a8faf 100644 --- a/cmake/developer_package/TBBConfig.cmake +++ b/cmake/developer_package/TBBConfig.cmake @@ -26,10 +26,7 @@ endif() find_package(TBB CONFIG PATHS ${TBBROOT}/cmake - ${TBBROOT}/lib/cmake/TBB # oneTBB case ${IEDevScripts_DIR}/${IE_OWN_TBB_CONFIG} - NO_CMAKE_FIND_ROOT_PATH - NO_DEFAULT_PATH -) + NO_DEFAULT_PATH) find_package_handle_standard_args(TBB CONFIG_MODE) diff --git a/cmake/developer_package/features.cmake b/cmake/developer_package/features.cmake index a60802940ee..92096d49bd8 100644 --- a/cmake/developer_package/features.cmake +++ b/cmake/developer_package/features.cmake @@ -7,7 +7,7 @@ include(target_flags) # FIXME: there are compiler failures with LTO and Cross-Compile toolchains. Disabling for now, but # this must be addressed in a proper way -ie_dependent_option (ENABLE_LTO "Enable Link Time Optimization" OFF "LINUX;NOT CMAKE_CROSSCOMPILING; CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.9" OFF) +ie_dependent_option (ENABLE_LTO "Enable Link Time Optimization" OFF "LINUX;NOT CMAKE_CROSSCOMPILING;CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.9" OFF) ie_option (OS_FOLDER "create OS dedicated folder in output" OFF) @@ -79,6 +79,4 @@ if(ENABLE_AVX512F) endif() endif() -if (VERBOSE_BUILD) - set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "" FORCE) -endif() +set(CMAKE_VERBOSE_MAKEFILE ${VERBOSE_BUILD} CACHE BOOL "" FORCE) diff --git a/cmake/developer_package/linux_name.cmake b/cmake/developer_package/linux_name.cmake index 904cc63236a..d3a4f949395 100644 --- a/cmake/developer_package/linux_name.cmake +++ b/cmake/developer_package/linux_name.cmake @@ -31,4 +31,8 @@ if (LINUX) set(${res_var} NOTFOUND PARENT_SCOPE) endif () endfunction() +else() + function(get_linux_name res_var) + set(${res_var} NOTFOUND PARENT_SCOPE) + endfunction() endif () diff --git a/cmake/features.cmake b/cmake/features.cmake index a68bbdb65b9..d122a99e22d 100644 --- a/cmake/features.cmake +++ b/cmake/features.cmake @@ -82,7 +82,7 @@ else() set(ENABLE_TBBBIND_2_5_DEFAULT OFF) endif() -ie_dependent_option (ENABLE_TBBBIND_2_5 "Enable TBBBind_2_5 static usage in OpenVINO runtime" ON "ENABLE_TBBBIND_2_5_DEFAULT" OFF) +ie_dependent_option (ENABLE_TBBBIND_2_5 "Enable TBBBind_2_5 static usage in OpenVINO runtime" ${ENABLE_TBBBIND_2_5_DEFAULT} "THREADING MATCHES TBB" OFF) ie_dependent_option (ENABLE_INTEL_GNA "GNA support for inference engine" ON "NOT APPLE;NOT ANDROID;X86_64;CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 5.4" OFF) @@ -136,6 +136,31 @@ ie_dependent_option(ENABLE_TBB_RELEASE_ONLY "Only Release TBB libraries are link ie_dependent_option (ENABLE_SYSTEM_PUGIXML "use the system copy of pugixml" OFF "BUILD_SHARED_LIBS" OFF) +get_linux_name(LINUX_OS_NAME) +if(LINUX_OS_NAME MATCHES "^Ubuntu [0-9]+\.[0-9]+$" AND NOT DEFINED ENV{TBBROOT}) + # Debian packages are enabled on Ubuntu systems + set(ENABLE_SYSTEM_TBB_DEFAULT ON) + + # check whether "default" (customly provided or system one) is available + find_package(TBB QUIET) + if(NOT TBB_FOUND) + message(WARNING "System TBB is not found, custom TBB version will be downloaded from shared drive") + # we still need to download prebuilt version of TBB + set(ENABLE_SYSTEM_TBB_DEFAULT OFF) + endif() + + # remove found TBB (or invalid TBB_DIR-NOTFOUND) from cache + unset(TBB_DIR CACHE) + unset(TBB_DIR) + unset(TBB_FOUND) + unset(TBB_IMPORTED_TARGETS) + unset(TBB_VERSION) +else() + set(ENABLE_SYSTEM_TBB_DEFAULT OFF) +endif() + +ie_dependent_option (ENABLE_SYSTEM_TBB "use the system version of TBB" ${ENABLE_SYSTEM_TBB_DEFAULT} "THREADING MATCHES TBB;LINUX" OFF) + ie_option (ENABLE_DEBUG_CAPS "enable OpenVINO debug capabilities at runtime" OFF) ie_dependent_option (ENABLE_GPU_DEBUG_CAPS "enable GPU debug capabilities at runtime" ON "ENABLE_DEBUG_CAPS" OFF) diff --git a/cmake/templates/OpenVINOConfig.cmake.in b/cmake/templates/OpenVINOConfig.cmake.in index 2c755836a77..ddd051a20d8 100644 --- a/cmake/templates/OpenVINOConfig.cmake.in +++ b/cmake/templates/OpenVINOConfig.cmake.in @@ -12,7 +12,7 @@ # * `Runtime`: OpenVINO C++ and C Core & Inference Runtime, frontend common # * `ONNX`: OpenVINO ONNX frontend # * `Paddle`: OpenVINO Paddle frontend -# * `TF`: OpenVINO TensorFlow frontend +# * `TensorFlow`: OpenVINO TensorFlow frontend # # If no components are specified, `Runtime` component is provided: # @@ -147,14 +147,29 @@ set(_ov_package_prefix_dir "${PACKAGE_PREFIX_DIR}") set(THREADING "@THREADING@") if((THREADING STREQUAL "TBB" OR THREADING STREQUAL "TBB_AUTO") AND NOT TBB_FOUND) - set_and_check(_tbb_dir "@PACKAGE_IE_TBB_DIR@") + set(enable_system_tbb "@ENABLE_SYSTEM_TBB@") + if(NOT enable_system_tbb) + set_and_check(_tbb_dir "@PACKAGE_IE_TBB_DIR@") + set(find_package_tbb_extra_args + CONFIG + PATHS + # oneTBB case exposed via export TBBROOT= + "$ENV{TBBROOT}/lib64/cmake/TBB" + "$ENV{TBBROOT}/lib/cmake/TBB" + # "$ENV{TBB_DIR}" + # for custom TBB exposed via cmake -DTBBROOT= + "${TBBROOT}/cmake" + # _tbb_dir points to TBB_DIR (custom | temp | system) used to build OpenVINO + ${_tbb_dir} + NO_CMAKE_FIND_ROOT_PATH + NO_DEFAULT_PATH) + unset(_tbb_dir) + endif() + unset(enable_system_tbb) + _ov_find_dependency(TBB COMPONENTS tbb tbbmalloc - CONFIG - PATHS ${TBBROOT}/cmake - ${_tbb_dir} - NO_CMAKE_FIND_ROOT_PATH - NO_DEFAULT_PATH) + ${find_package_tbb_extra_args}) set(install_tbbbind "@install_tbbbind@") if(install_tbbbind) @@ -165,6 +180,7 @@ if((THREADING STREQUAL "TBB" OR THREADING STREQUAL "TBB_AUTO") AND NOT TBB_FOUND NO_DEFAULT_PATH) set_target_properties(${TBBBIND_2_5_IMPORTED_TARGETS} PROPERTIES IMPORTED_GLOBAL ON) endif() + unset(install_tbbbind) endif() _ov_find_dependency(Threads) @@ -176,7 +192,7 @@ if(ENABLE_INTEL_GNA AND NOT ENABLE_INTEL_GNA_SHARED AND NOT libGNA_FOUND) _ov_find_dependency(libGNA COMPONENTS KERNEL CONFIG - PATHS ${CMAKE_CURRENT_LIST_DIR} + PATHS "${CMAKE_CURRENT_LIST_DIR}" NO_CMAKE_FIND_ROOT_PATH NO_DEFAULT_PATH) endif() diff --git a/install_build_dependencies.sh b/install_build_dependencies.sh index 527f56980aa..8a7f11c6700 100755 --- a/install_build_dependencies.sh +++ b/install_build_dependencies.sh @@ -64,6 +64,7 @@ if [ -f /etc/lsb-release ]; then libgstreamer1.0-0 \ gstreamer1.0-plugins-base \ libusb-1.0-0-dev \ + libtbb-dev \ libtinfo5 \ libopenblas-dev if apt-cache search --names-only '^libjson-c2'| grep -q libjson-c2; then diff --git a/samples/c/common/opencv_c_wrapper/CMakeLists.txt b/samples/c/common/opencv_c_wrapper/CMakeLists.txt index a8e6e51721d..2755579a0fe 100644 --- a/samples/c/common/opencv_c_wrapper/CMakeLists.txt +++ b/samples/c/common/opencv_c_wrapper/CMakeLists.txt @@ -16,10 +16,10 @@ find_package(OpenCV COMPONENTS core imgproc imgcodecs QUIET) if(NOT OpenCV_FOUND) message(WARNING "OPENCV is disabled or not found, ${TARGET_NAME} is built without OPENCV support") else() - add_definitions(-DUSE_OPENCV) + target_compile_definitions(${TARGET_NAME} PRIVATE USE_OPENCV) endif() -target_link_libraries(${TARGET_NAME} PUBLIC ${OpenCV_LIBRARIES}) +target_link_libraries(${TARGET_NAME} PRIVATE ${OpenCV_LIBRARIES}) target_include_directories(${TARGET_NAME} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") diff --git a/samples/cpp/benchmark_app/README.md b/samples/cpp/benchmark_app/README.md index 1e9bc3345de..9935f322941 100644 --- a/samples/cpp/benchmark_app/README.md +++ b/samples/cpp/benchmark_app/README.md @@ -167,12 +167,8 @@ This section provides step-by-step instructions on how to run the Benchmark Tool ```sh omz_downloader --name googlenet-v1 -o ``` -<<<<<<< HEAD 3. Convert the model to the OpenVINO IR format. Run the Model Optimizer using the `mo` command with the path to the model, model format and output directory to generate the IR files: -======= -2. Convert the model to the OpenVINO IR format. Run the Model Optimizer using the `mo` command with the path to the model, model format (which must be FP32 for CPU and FPG) and output directory to generate the IR files: ->>>>>>> cf8ccb590a... Removed obsolete code snippets (#11061) ```sh mo --input_model /public/googlenet-v1/googlenet-v1.caffemodel --data_type FP32 --output_dir ``` diff --git a/src/cmake/ie_parallel.cmake b/src/cmake/ie_parallel.cmake index a036b019c84..b52d593a9ea 100644 --- a/src/cmake/ie_parallel.cmake +++ b/src/cmake/ie_parallel.cmake @@ -2,30 +2,26 @@ # SPDX-License-Identifier: Apache-2.0 # -function(set_ie_threading_interface_for TARGET_NAME) - macro(ext_message TRACE_LEVEL) - if (TRACE_LEVEL STREQUAL FATAL_ERROR) - if(InferenceEngine_FIND_REQUIRED) - message(FATAL_ERROR "${ARGN}") - elseif(NOT InferenceEngine_FIND_QUIETLY) - message(WARNING "${ARGN}") - endif() - return() - elseif(NOT InferenceEngine_FIND_QUIETLY) - message(${TRACE_LEVEL} "${ARGN}") - endif () - endmacro() +macro(ov_find_tbb) + if(THREADING STREQUAL "TBB" OR THREADING STREQUAL "TBB_AUTO" AND NOT TBB_FOUND) + find_package(TBB COMPONENTS tbb tbbmalloc) - if (THREADING STREQUAL "TBB" OR THREADING STREQUAL "TBB_AUTO" AND NOT TBB_FOUND) - if(IEDevScripts_DIR) + # try to find TBB via custom scripts if have not found by default + if(NOT TBB_FOUND AND IEDevScripts_DIR) + # remove invalid TBB_DIR=TBB_DIR-NOTFOUND from cache + unset(TBB_DIR CACHE) + unset(TBB_DIR) + + # use our custom scripts for old TBB versions + # which are exposed via `export TBBROOT=` + # see https://github.com/openvinotoolkit/openvino/pull/1288 find_package(TBB COMPONENTS tbb tbbmalloc - PATHS IEDevScripts_DIR + PATHS ${IEDevScripts_DIR} NO_CMAKE_FIND_ROOT_PATH NO_DEFAULT_PATH) - else() - find_dependency(TBB COMPONENTS tbb tbbmalloc) endif() - # oneTBB does not define TBB_IMPORTED_TARGETS + + # WA for oneTBB: it does not define TBB_IMPORTED_TARGETS if(TBB_FOUND AND NOT TBB_IMPORTED_TARGETS) foreach(target TBB::tbb TBB::tbbmalloc) if(TARGET ${target}) @@ -33,15 +29,23 @@ function(set_ie_threading_interface_for TARGET_NAME) endif() endforeach() endif() + + # set variables to parent scope to prevent multiple invocations of find_package(TBB) + # at the same CMakeLists.txt; invocations in different directories are allowed set(TBB_FOUND ${TBB_FOUND} PARENT_SCOPE) set(TBB_IMPORTED_TARGETS ${TBB_IMPORTED_TARGETS} PARENT_SCOPE) set(TBB_VERSION ${TBB_VERSION} PARENT_SCOPE) if (NOT TBB_FOUND) set(THREADING "SEQ" PARENT_SCOPE) - ext_message(WARNING "TBB was not found by the configured TBB_DIR/TBBROOT path.\ - SEQ method will be used.") + message(WARNING "TBB was not found by the configured TBB_DIR/TBBROOT path.\ + SEQ method will be used.") endif () endif() +endmacro() + +function(set_ie_threading_interface_for TARGET_NAME) + # find TBB + ov_find_tbb() get_target_property(target_type ${TARGET_NAME} TYPE) @@ -59,32 +63,11 @@ function(set_ie_threading_interface_for TARGET_NAME) # TODO: why TBB propogates its headers to inference_engine? set(LINK_TYPE "PRIVATE") else() - ext_message(WARNING "Unknown target type") + message(WARNING "Unknown target type") endif() function(ie_target_link_libraries TARGET_NAME LINK_TYPE) - if(CMAKE_VERSION VERSION_LESS "3.12.0") - if(NOT target_type STREQUAL "OBJECT_LIBRARY") - target_link_libraries(${TARGET_NAME} ${LINK_TYPE} ${ARGN}) - else() - # Object library may not link to anything. - # To add interface include definitions and compile options explicitly. - foreach(ITEM IN LISTS ARGN) - if(TARGET ${ITEM}) - get_target_property(compile_options ${ITEM} INTERFACE_COMPILE_OPTIONS) - if (compile_options) - target_compile_options(${TARGET_NAME} ${LINK_TYPE} ${compile_options}) - endif() - get_target_property(compile_definitions ${ITEM} INTERFACE_COMPILE_DEFINITIONS) - if (compile_definitions) - target_compile_definitions(${TARGET_NAME} ${LINK_TYPE} ${compile_definitions}) - endif() - endif() - endforeach() - endif() - else() - target_link_libraries(${TARGET_NAME} ${LINK_TYPE} ${ARGN}) - endif() + target_link_libraries(${TARGET_NAME} ${LINK_TYPE} ${ARGN}) # include directories as SYSTEM foreach(library IN LISTS ARGN) @@ -92,8 +75,11 @@ function(set_ie_threading_interface_for TARGET_NAME) get_target_property(include_directories ${library} INTERFACE_INCLUDE_DIRECTORIES) if(include_directories) foreach(include_directory IN LISTS include_directories) - target_include_directories(${TARGET_NAME} SYSTEM BEFORE - ${LINK_TYPE} $) + # cannot include /usr/include headers as SYSTEM + if(NOT "${include_directory}" MATCHES "^/usr.*$") + target_include_directories(${TARGET_NAME} SYSTEM BEFORE + ${LINK_TYPE} $) + endif() endforeach() endif() endif() @@ -108,8 +94,8 @@ function(set_ie_threading_interface_for TARGET_NAME) ie_target_link_libraries(${TARGET_NAME} ${LINK_TYPE} ${TBB_IMPORTED_TARGETS}) else () set(THREADING "SEQ" PARENT_SCOPE) - ext_message(WARNING "TBB was not found by the configured TBB_DIR path.\ - SEQ method will be used for ${TARGET_NAME}") + message(WARNING "TBB was not found by the configured TBB_DIR path.\ + SEQ method will be used for ${TARGET_NAME}") endif () elseif (THREADING STREQUAL "OMP") if (WIN32) @@ -133,19 +119,19 @@ function(set_ie_threading_interface_for TARGET_NAME) if (NOT OMP_LIBRARIES_RELEASE) find_library(OMP_LIBRARIES_RELEASE ${omp_lib_name} ${lib_rel_path} NO_DEFAULT_PATH) - ext_message(STATUS "OMP Release lib: ${OMP_LIBRARIES_RELEASE}") + message(STATUS "OMP Release lib: ${OMP_LIBRARIES_RELEASE}") if (NOT LINUX) find_library(OMP_LIBRARIES_DEBUG ${omp_lib_name} ${lib_dbg_path} NO_DEFAULT_PATH) if (OMP_LIBRARIES_DEBUG) - ext_message(STATUS "OMP Debug lib: ${OMP_LIBRARIES_DEBUG}") + message(STATUS "OMP Debug lib: ${OMP_LIBRARIES_DEBUG}") else () - ext_message(WARNING "OMP Debug binaries are missed.") + message(WARNING "OMP Debug binaries are missed.") endif () endif () endif () if (NOT OMP_LIBRARIES_RELEASE) - ext_message(WARNING "Intel OpenMP not found. Intel OpenMP support will be disabled. ${IE_THREAD_DEFINE} is defined") + message(WARNING "Intel OpenMP not found. Intel OpenMP support will be disabled. ${IE_THREAD_DEFINE} is defined") set(THREADING "SEQ" PARENT_SCOPE) else () set(IE_THREAD_DEFINE "IE_THREAD_OMP") @@ -174,7 +160,6 @@ function(set_ie_threading_interface_for TARGET_NAME) ie_target_link_libraries(${TARGET_NAME} ${LINK_TYPE} ${OMP_LIBRARIES_RELEASE}) endif () endif () - endif () target_compile_definitions(${TARGET_NAME} ${LINK_TYPE} -DIE_THREAD=${IE_THREAD_DEFINE}) diff --git a/src/cmake/install_tbb.cmake b/src/cmake/install_tbb.cmake index 6e1ab3f3982..7198b41da69 100644 --- a/src/cmake/install_tbb.cmake +++ b/src/cmake/install_tbb.cmake @@ -2,6 +2,11 @@ # SPDX-License-Identifier: Apache-2.0 # +include(cmake/ie_parallel.cmake) + +# pre-find TBB: need to provide TBB_IMPORTED_TARGETS used for installation +ov_find_tbb() + if(ENABLE_TBBBIND_2_5) # try to find prebuilt version of tbbbind_2_5 find_package(TBBBIND_2_5 QUIET) @@ -12,6 +17,8 @@ if(ENABLE_TBBBIND_2_5) if(NOT BUILD_SHARED_LIBS) set(install_tbbbind ON) endif() + else() + message(WARNING "Static tbbbind_2_5 package is not found") endif() endif() @@ -28,34 +35,93 @@ if(install_tbbbind) list(APPEND PATH_VARS "IE_TBBBIND_DIR") endif() -# install only downloaded TBB, system one is not installed -if(THREADING MATCHES "^(TBB|TBB_AUTO)$" AND TBBROOT MATCHES ${TEMP}) +# install only downloaded | custom TBB, system one is not installed +# - downloaded TBB should be a part of all packages +# - custom TBB provided by users, needs to be a part of wheel packages +# - TODO: system TBB also needs to be a part of wheel packages +if(THREADING MATCHES "^(TBB|TBB_AUTO)$" AND + (TBB MATCHES ${TEMP} OR DEFINED ENV{TBBROOT} OR ENABLE_SYSTEM_TBB)) ie_cpack_add_component(tbb REQUIRED) - ie_cpack_add_component(tbb_dev REQUIRED) list(APPEND core_components tbb) - list(APPEND core_dev_components tbb_dev) - install(DIRECTORY "${TBB}/lib" - DESTINATION runtime/3rdparty/tbb - COMPONENT tbb) - # Windows only - if(EXISTS "${TBB}/bin") - install(DIRECTORY "${TBB}/bin" + if(TBB MATCHES ${TEMP}) + set(tbb_downloaded ON) + elseif(DEFINED ENV{TBB}) + set(tbb_custom ON) + endif() + + if(tbb_custom OR ENABLE_SYSTEM_TBB) + # since the setup.py for pip installs tbb component + # explicitly, it's OK to put EXCLUDE_FROM_ALL to such component + # to ignore from IRC distribution + set(exclude_from_all EXCLUDE_FROM_ALL) + endif() + + if(ENABLE_SYSTEM_TBB) + # need to take locations of actual libraries and install them + foreach(tbb_lib IN LISTS TBB_IMPORTED_TARGETS) + get_target_property(tbb_loc ${tbb_lib} IMPORTED_LOCATION_RELEASE) + # depending on the TBB, tbb_loc can be in form: + # - libtbb.so.x.y + # - libtbb.so.x + # - libtbb.so + # We need to install such files + get_filename_component(name_we "${tbb_loc}" NAME_WE) + get_filename_component(dir "${tbb_loc}" DIRECTORY) + file(GLOB tbb_files "${dir}/${name_we}.*") + foreach(tbb_file IN LISTS tbb_files) + if(tbb_file MATCHES "^.*\.${CMAKE_SHARED_LIBRARY_SUFFIX}(\.[0-9]+)*$") + install(FILES "${tbb_file}" + DESTINATION runtime/3rdparty/tbb/lib + COMPONENT tbb ${exclude_from_all}) + endif() + endforeach() + endforeach() + else() + if(WIN32) + install(DIRECTORY "${TBB}/bin" + DESTINATION runtime/3rdparty/tbb + COMPONENT tbb ${exclude_from_all}) + elseif(tbb_custom OR tbb_downloaded) + install(DIRECTORY "${TBB}/lib" + DESTINATION runtime/3rdparty/tbb + COMPONENT tbb ${exclude_from_all} + FILES_MATCHING + # install only versioned shared libraries + REGEX "^.*\.${CMAKE_SHARED_LIBRARY_SUFFIX}(\.[0-9]+)*$") + endif() + endif() + + # development files are needed only for 'tbb_downloaded' case + # which we are going to distribute + if(tbb_downloaded) + ie_cpack_add_component(tbb_dev REQUIRED) + list(APPEND core_dev_components tbb_dev) + + install(FILES "${TBB}/LICENSE" DESTINATION runtime/3rdparty/tbb COMPONENT tbb) - endif() - install(FILES "${TBB}/LICENSE" - DESTINATION runtime/3rdparty/tbb - COMPONENT tbb) - set(IE_TBB_DIR_INSTALL "3rdparty/tbb/cmake") - install(FILES "${TBB}/cmake/TBBConfig.cmake" - "${TBB}/cmake/TBBConfigVersion.cmake" - DESTINATION runtime/${IE_TBB_DIR_INSTALL} - COMPONENT tbb_dev) - install(DIRECTORY "${TBB}/include" - DESTINATION runtime/3rdparty/tbb - COMPONENT tbb_dev) + set(IE_TBB_DIR_INSTALL "3rdparty/tbb/cmake") + install(FILES "${TBB}/cmake/TBBConfig.cmake" + "${TBB}/cmake/TBBConfigVersion.cmake" + DESTINATION runtime/${IE_TBB_DIR_INSTALL} + COMPONENT tbb_dev) + install(DIRECTORY "${TBB}/include" + DESTINATION runtime/3rdparty/tbb + COMPONENT tbb_dev) + + if(WIN32) + # .lib files are needed only for Windows + install(DIRECTORY "${TBB}/lib" + DESTINATION runtime/3rdparty/tbb + COMPONENT tbb) + endif() + endif() + + unset(tbb_downloaded) + unset(tbb_custom) + unset(exclude_from_all) endif() # install tbbbind for static OpenVINO case diff --git a/src/core/tests/CMakeLists.txt b/src/core/tests/CMakeLists.txt index 96ac8b23f60..0c857836eaa 100644 --- a/src/core/tests/CMakeLists.txt +++ b/src/core/tests/CMakeLists.txt @@ -421,7 +421,7 @@ set(SRC # For type relaxed types set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/threading.cpp - PROPERTIES INCLUDE_DIRECTORIES $) + PROPERTIES INCLUDE_DIRECTORIES $) if(SUGGEST_OVERRIDE_SUPPORTED) set_source_files_properties(ov_tensor_test.cpp diff --git a/src/inference/CMakeLists.txt b/src/inference/CMakeLists.txt index ddd2fdcbc86..767fbc1b81d 100644 --- a/src/inference/CMakeLists.txt +++ b/src/inference/CMakeLists.txt @@ -123,22 +123,27 @@ ie_faster_build(${TARGET_NAME}_obj UNITY PCH PRIVATE "src/precomp.hpp" ) -target_compile_definitions(${TARGET_NAME}_obj PRIVATE IMPLEMENT_INFERENCE_ENGINE_API - $ - $ - $) +target_compile_definitions(${TARGET_NAME}_obj PRIVATE + IMPLEMENT_INFERENCE_ENGINE_API + $ + $ + $) -target_include_directories(${TARGET_NAME}_obj SYSTEM PRIVATE $ - $ - $ - $) +target_include_directories(${TARGET_NAME}_obj SYSTEM PRIVATE + $ + $ + $ + $) -target_include_directories(${TARGET_NAME}_obj PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/src" - "${CMAKE_CURRENT_BINARY_DIR}" # for static ie_plugins.hpp - $<$:$> # for ie_ir_version.hpp - $ - $ - $) +target_include_directories(${TARGET_NAME}_obj PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}/src" + # for static ie_plugins.hpp + "${CMAKE_CURRENT_BINARY_DIR}" + # for ie_ir_version.hpp + $<$:$> + $ + $ + $) target_link_libraries(${TARGET_NAME}_obj PRIVATE openvino::itt openvino::util ov_core_dev) diff --git a/src/plugins/intel_cpu/CMakeLists.txt b/src/plugins/intel_cpu/CMakeLists.txt index b802cd52729..02fff2aa30d 100644 --- a/src/plugins/intel_cpu/CMakeLists.txt +++ b/src/plugins/intel_cpu/CMakeLists.txt @@ -70,13 +70,16 @@ if(BUILD_SHARED_LIBS) add_library(${TARGET_NAME}_obj OBJECT ${SOURCES} ${HEADERS}) link_system_libraries(${TARGET_NAME}_obj PUBLIC mkldnn) - target_include_directories(${TARGET_NAME}_obj PRIVATE $ - $ - $ - $ - $ - PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src - $) + target_include_directories(${TARGET_NAME}_obj + PRIVATE + $ + $ + $ + $ + $ + PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/src + $) target_include_directories(${TARGET_NAME}_obj SYSTEM PUBLIC $) @@ -85,8 +88,7 @@ if(BUILD_SHARED_LIBS) target_compile_definitions(${TARGET_NAME}_obj PRIVATE USE_STATIC_IE IMPLEMENT_INFERENCE_ENGINE_PLUGIN IMPLEMENT_INFERENCE_EXTENSION_API $ - $ - ) + $) set_target_properties(${TARGET_NAME}_obj PROPERTIES EXCLUDE_FROM_ALL ON) diff --git a/src/plugins/intel_cpu/thirdparty/CMakeLists.txt b/src/plugins/intel_cpu/thirdparty/CMakeLists.txt index 651f6738e57..394fb548bd9 100644 --- a/src/plugins/intel_cpu/thirdparty/CMakeLists.txt +++ b/src/plugins/intel_cpu/thirdparty/CMakeLists.txt @@ -23,12 +23,13 @@ function(ie_add_mkldnn) set(DNNL_ENABLE_CONCURRENT_EXEC ON CACHE BOOL "" FORCE) set(DNNL_ENABLE_PRIMITIVE_CACHE OFF CACHE BOOL "" FORCE) ## TODO: try it later set(DNNL_ENABLE_MAX_CPU_ISA ON CACHE BOOL "" FORCE) - set(DNNL_LIBRARY_TYPE STATIC CACHE BOOL "" FORCE) + set(DNNL_LIBRARY_TYPE "STATIC" CACHE STRING "" FORCE) set(DNNL_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) set(DNNL_BUILD_TESTS OFF CACHE BOOL "" FORCE) set(DNNL_CPU_RUNTIME "${THREADING}" CACHE STRING "" FORCE) set(DNNL_GPU_RUNTIME "NONE" CACHE STRING "" FORCE) set(DNNL_BLAS_VENDOR "NONE" CACHE STRING "" FORCE) + set(DNNL_VERBOSE "OFF" CACHE STRING "" FORCE) set(SDL_cmake_included ON) ## to skip internal SDL flags. SDL flags are already set on IE level if (ANDROID OR ((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") AND NOT (THREADING STREQUAL "OMP"))) set(OpenMP_cmake_included ON) ## to skip "omp simd" inside a code. Lead to some crashes inside NDK LLVM.. diff --git a/src/plugins/intel_gna/CMakeLists.txt b/src/plugins/intel_gna/CMakeLists.txt index 1641aec0183..310ac7581db 100644 --- a/src/plugins/intel_gna/CMakeLists.txt +++ b/src/plugins/intel_gna/CMakeLists.txt @@ -79,7 +79,7 @@ foreach(gna_lib IN LISTS gna_libraries) # and don't install global symlink libgna.so. Exceptions: # 1. On Windows we don't have libraries versioning and need to install all .dlls # 2. For case of static libraries we also need to install .so since it's required for linkage with final application - if(gna_lib MATCHES "^.*${CMAKE_SHARED_LIBRARY_SUFFIX}(\.[0-9]+)+$" OR + if(gna_lib MATCHES "^.*\.${CMAKE_SHARED_LIBRARY_SUFFIX}(\.[0-9]+)+$" OR WIN32 OR NOT BUILD_SHARED_LIBS) install(FILES ${gna_lib} DESTINATION ${IE_CPACK_RUNTIME_PATH} diff --git a/src/tests/functional/inference_engine/CMakeLists.txt b/src/tests/functional/inference_engine/CMakeLists.txt index f9d0bd5df51..ef19096d7c8 100644 --- a/src/tests/functional/inference_engine/CMakeLists.txt +++ b/src/tests/functional/inference_engine/CMakeLists.txt @@ -282,8 +282,14 @@ ie_headers_compilation_with_custom_flags(TEST_SUFFIX PluginApiCxx17 CXX_STANDARD 17 PLUGIN_API) if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0) + if(TBB_VERSION VERSION_EQUAL 2021.2) + # TBB 2021.2 has a bug in headers with CXX_STANDARD 20 + # see https://github.com/oneapi-src/oneTBB/issues/379 + set(skip_headers_list HEADERS_TO_SKIP "threading/ie_thread_local.hpp") + endif() ie_headers_compilation_with_custom_flags(TEST_SUFFIX PluginApiCxx20 - CXX_STANDARD 20 PLUGIN_API) + ${skip_headers_list} + CXX_STANDARD 20 PLUGIN_API) endif() if(UNIX) diff --git a/src/tests_deprecated/helpers/CMakeLists.txt b/src/tests_deprecated/helpers/CMakeLists.txt index 454d07b7bd3..dbea59733e0 100644 --- a/src/tests_deprecated/helpers/CMakeLists.txt +++ b/src/tests_deprecated/helpers/CMakeLists.txt @@ -13,7 +13,7 @@ file (GLOB HELPERS_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) -## Enable Models multiple search pathes +## Enable Models multiple search paths message("configuring file: ${CMAKE_CURRENT_BINARY_DIR}/test_model_repo.h") function(add_helpers target_name)