From 8a4cb9b3325783ddecb090abfc75b367b3e9da60 Mon Sep 17 00:00:00 2001 From: Ilya Lavrenov Date: Tue, 30 Aug 2022 22:23:14 +0400 Subject: [PATCH] Arm cross compilation (#12807) * Fixed ARM out-of-box cross-compilation * Improvements * Fixed HDDL plugin --- .../ncc_naming_style/ncc_naming_style.cmake | 4 +++ .../ncc_naming_style/requirements_dev.txt | 1 + cmake/features.cmake | 2 +- cmake/templates/OpenVINOConfig.cmake.in | 21 +++++++++++-- docs/snippets/CMakeLists.txt | 2 +- samples/cpp/CMakeLists.txt | 7 +++-- samples/cpp/benchmark_app/benchmark_app.hpp | 5 ++++ .../intel_myriad/myriad_dependencies.cmake | 2 +- .../third_party/XLink/CMakeLists.txt | 8 ++--- .../third_party/XLink/XLink.cmake | 30 +++++++++++++------ .../third_party/mvnc/CMakeLists.txt | 16 +++++----- .../functional/plugin/gpu/CMakeLists.txt | 2 +- thirdparty/CMakeLists.txt | 19 ++++++++---- tools/compile_tool/CMakeLists.txt | 4 +++ tools/legacy/benchmark_app/CMakeLists.txt | 5 +++- tools/legacy/benchmark_app/benchmark_app.hpp | 7 +++++ 16 files changed, 97 insertions(+), 38 deletions(-) diff --git a/cmake/developer_package/ncc_naming_style/ncc_naming_style.cmake b/cmake/developer_package/ncc_naming_style/ncc_naming_style.cmake index 5039fc2ccb1..add8b6fada6 100644 --- a/cmake/developer_package/ncc_naming_style/ncc_naming_style.cmake +++ b/cmake/developer_package/ncc_naming_style/ncc_naming_style.cmake @@ -19,12 +19,16 @@ endif() if(PYTHON_VERSION_MINOR EQUAL 6) set(clang_version 10) +elseif(PYTHON_VERSION_MINOR EQUAL 7) + set(clang_version 11) elseif(PYTHON_VERSION_MINOR EQUAL 8) set(clang_version 12) elseif(PYTHON_VERSION_MINOR EQUAL 9) set(clang_version 12) elseif(PYTHON_VERSION_MINOR EQUAL 10) set(clang_version 14) +else() + message(WARNING "Cannot suggest clang package for python ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}") endif() diff --git a/cmake/developer_package/ncc_naming_style/requirements_dev.txt b/cmake/developer_package/ncc_naming_style/requirements_dev.txt index 23d8c568c8f..fb57a4f6df1 100644 --- a/cmake/developer_package/ncc_naming_style/requirements_dev.txt +++ b/cmake/developer_package/ncc_naming_style/requirements_dev.txt @@ -1,4 +1,5 @@ clang==10.0.1; python_version == '3.6' +clang==11.1.0; python_version == '3.7' clang==12.0.1; python_version == '3.8' clang==12.0.1; python_version == '3.9' clang==14.0; python_version == '3.10' diff --git a/cmake/features.cmake b/cmake/features.cmake index b26e3e2ee68..b517af85632 100644 --- a/cmake/features.cmake +++ b/cmake/features.cmake @@ -120,7 +120,7 @@ set(IE_EXTRA_MODULES "" CACHE STRING "Extra paths for extra modules to include i ie_dependent_option(ENABLE_TBB_RELEASE_ONLY "Only Release TBB libraries are linked to the Inference Engine binaries" ON "THREADING MATCHES TBB;LINUX" OFF) get_linux_name(LINUX_OS_NAME) -if(LINUX_OS_NAME MATCHES "^Ubuntu [0-9]+\.[0-9]+$") +if(LINUX_OS_NAME MATCHES "(Ubuntu|Debian)") # Debian packages are enabled on Ubuntu systems # so, system TBB / pugixml can be tried for usage set(ENABLE_SYSTEM_LIBS_DEFAULT ON) diff --git a/cmake/templates/OpenVINOConfig.cmake.in b/cmake/templates/OpenVINOConfig.cmake.in index 0d492bd045c..f52ad9fdf56 100644 --- a/cmake/templates/OpenVINOConfig.cmake.in +++ b/cmake/templates/OpenVINOConfig.cmake.in @@ -195,9 +195,10 @@ endif() _ov_find_dependency(Threads) -set(ENABLE_INTEL_GNA "@ENABLE_INTEL_GNA@") -set(ENABLE_INTEL_GNA_SHARED "@BUILD_SHARED_LIBS@") -if(ENABLE_INTEL_GNA AND NOT ENABLE_INTEL_GNA_SHARED AND NOT libGNA_FOUND) +set(_OV_ENABLE_OPENVINO_BUILD_SHARED "@BUILD_SHARED_LIBS@") + +set(_OV_ENABLE_INTEL_GNA "@ENABLE_INTEL_GNA@") +if(_OV_ENABLE_INTEL_GNA AND NOT _OV_ENABLE_OPENVINO_BUILD_SHARED AND NOT libGNA_FOUND) set_and_check(GNA_PATH "@PACKAGE_GNA_PATH@") _ov_find_dependency(libGNA COMPONENTS KERNEL @@ -206,6 +207,20 @@ if(ENABLE_INTEL_GNA AND NOT ENABLE_INTEL_GNA_SHARED AND NOT libGNA_FOUND) NO_CMAKE_FIND_ROOT_PATH NO_DEFAULT_PATH) endif() +unset(_OV_ENABLE_INTEL_GNA) + +set(_OV_ENABLE_INTEL_MYRIAD "@ENABLE_INTEL_MYRIAD@") +if(_OV_ENABLE_INTEL_MYRIAD AND NOT _OV_ENABLE_OPENVINO_BUILD_SHARED) + find_package(PkgConfig QUIET) + if(PkgConfig_FOUND AND NOT ANDROID) + pkg_search_module(libusb REQUIRED + IMPORTED_TARGET GLOBAL + libusb-1.0) + message(STATUS "libusb-1.0 (${libusb_VERSION}) is found at ${libusb_PREFIX}") + endif() +endif() +unset(_OV_ENABLE_INTEL_MYRIAD) +unset(_OV_ENABLE_OPENVINO_BUILD_SHARED) if(NOT TARGET openvino) set(_ov_as_external_package ON) diff --git a/docs/snippets/CMakeLists.txt b/docs/snippets/CMakeLists.txt index 58aac1551a4..674ff72141c 100644 --- a/docs/snippets/CMakeLists.txt +++ b/docs/snippets/CMakeLists.txt @@ -54,7 +54,7 @@ endif() # try to find VA libraries if(NOT CMAKE_CROSSCOMPILING) - find_host_package(PkgConfig QUIET) + find_package(PkgConfig QUIET) if(PkgConfig_FOUND) pkg_search_module(libva QUIET IMPORTED_TARGET libva) endif() diff --git a/samples/cpp/CMakeLists.txt b/samples/cpp/CMakeLists.txt index 1c599cc552f..d6368fe5970 100644 --- a/samples/cpp/CMakeLists.txt +++ b/samples/cpp/CMakeLists.txt @@ -122,7 +122,7 @@ endif() if(NOT TARGET zlib::zlib) if(NOT CMAKE_CROSSCOMPILING) - find_host_package(PkgConfig QUIET) + find_package(PkgConfig QUIET) if(PkgConfig_FOUND) pkg_search_module(zlib QUIET IMPORTED_TARGET @@ -228,6 +228,9 @@ macro(ie_add_sample) set(folder_name c_samples) endif() + # for cross-compilation with gflags + find_package(Threads REQUIRED) + find_package(OpenVINO REQUIRED COMPONENTS Runtime) if(c_sample) set(ov_link_libraries openvino::runtime::c) @@ -243,7 +246,7 @@ macro(ie_add_sample) endif() target_include_directories(${IE_SAMPLE_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../common") - target_link_libraries(${IE_SAMPLE_NAME} PRIVATE ${ov_link_libraries} ${IE_SAMPLE_DEPENDENCIES}) + target_link_libraries(${IE_SAMPLE_NAME} PRIVATE ${ov_link_libraries} Threads::Threads ${IE_SAMPLE_DEPENDENCIES}) if(NOT c_sample) target_link_libraries(${IE_SAMPLE_NAME} PRIVATE gflags) endif() diff --git a/samples/cpp/benchmark_app/benchmark_app.hpp b/samples/cpp/benchmark_app/benchmark_app.hpp index 0d3d41f8c9b..d1d76fe3c8a 100644 --- a/samples/cpp/benchmark_app/benchmark_app.hpp +++ b/samples/cpp/benchmark_app/benchmark_app.hpp @@ -14,6 +14,11 @@ #include "gflags/gflags.h" +// gflags supports uint32 starting from v2.2 only +#ifndef DEFINE_uint32 +# define DEFINE_uint32(name, val, txt) DEFINE_VARIABLE(GFLAGS_NAMESPACE::uint32, U, name, val, txt) +#endif + /// @brief message for help argument static const char help_message[] = "Print a usage message"; diff --git a/src/plugins/intel_myriad/myriad_dependencies.cmake b/src/plugins/intel_myriad/myriad_dependencies.cmake index 5031b8abdbc..8eb21f39c4c 100644 --- a/src/plugins/intel_myriad/myriad_dependencies.cmake +++ b/src/plugins/intel_myriad/myriad_dependencies.cmake @@ -117,7 +117,7 @@ endif() if(LINUX AND NOT ARM AND NOT AARCH64 - AND LINUX_OS_NAME MATCHES "Ubuntu") + AND LINUX_OS_NAME MATCHES "(Ubuntu|Debian)") if(DEFINED ENV{THIRDPARTY_SERVER_PATH}) set(IE_PATH_TO_DEPS "$ENV{THIRDPARTY_SERVER_PATH}") diff --git a/src/plugins/intel_myriad/third_party/XLink/CMakeLists.txt b/src/plugins/intel_myriad/third_party/XLink/CMakeLists.txt index 64c4adf411b..6967ecce1aa 100644 --- a/src/plugins/intel_myriad/third_party/XLink/CMakeLists.txt +++ b/src/plugins/intel_myriad/third_party/XLink/CMakeLists.txt @@ -10,11 +10,11 @@ add_library(${TARGET_NAME} STATIC ${XLINK_SOURCES}) if(NOT WIN32) target_include_directories(${TARGET_NAME} - PRIVATE + PRIVATE "${LIBUSB_INCLUDE_DIR}") target_link_libraries(${TARGET_NAME} - PUBLIC + PRIVATE Threads::Threads ${LIBUSB_LIBRARY}) endif() @@ -25,7 +25,7 @@ foreach(dir IN LISTS XLINK_INCLUDE) endforeach() target_compile_definitions(${TARGET_NAME} - PRIVATE + PRIVATE __PC__ HAVE_STRUCT_TIMESPEC _CRT_SECURE_NO_WARNINGS @@ -34,7 +34,7 @@ target_compile_definitions(${TARGET_NAME} if (ENABLE_MYRIAD_NO_BOOT) target_compile_definitions(${TARGET_NAME} - PRIVATE + PRIVATE NO_BOOT) endif() diff --git a/src/plugins/intel_myriad/third_party/XLink/XLink.cmake b/src/plugins/intel_myriad/third_party/XLink/XLink.cmake index fe0860826a0..07ba5b8db23 100644 --- a/src/plugins/intel_myriad/third_party/XLink/XLink.cmake +++ b/src/plugins/intel_myriad/third_party/XLink/XLink.cmake @@ -28,19 +28,31 @@ if(WIN32) else() find_package(Threads REQUIRED) - find_path(LIBUSB_INCLUDE_DIR NAMES libusb.h PATH_SUFFIXES "include" "libusb" "libusb-1.0") - find_library(LIBUSB_LIBRARY NAMES usb-1.0 PATH_SUFFIXES "lib") + # TODO: need to pre-detect libusb before enabling ENABLE_INTEL_MYRIAD_COMMON - # TODO: need to detect libusb before enabling ENABLE_INTEL_MYRIAD_COMMON - if(NOT LIBUSB_INCLUDE_DIR OR NOT LIBUSB_LIBRARY) - message(FATAL_ERROR "libusb is required, please install it") + find_package(PkgConfig QUIET) + if(PkgConfig_FOUND AND NOT ANDROID) + pkg_search_module(libusb REQUIRED + IMPORTED_TARGET GLOBAL + libusb-1.0) + if(libusb_FOUND) + set(LIBUSB_LIBRARY "PkgConfig::libusb" CACHE STRING "libusb-1.0 imported target") + set(LIBUSB_INCLUDE_DIR "" CACHE PATH "libusb-1.0 include dirs") + + message(STATUS "libusb-1.0 (${libusb_VERSION}) is found at ${libusb_PREFIX}") + endif() + else() + find_path(LIBUSB_INCLUDE_DIR NAMES libusb.h PATH_SUFFIXES "include" "libusb" "libusb-1.0") + find_library(LIBUSB_LIBRARY NAMES usb-1.0 PATH_SUFFIXES "lib") + + if(NOT LIBUSB_INCLUDE_DIR OR NOT LIBUSB_LIBRARY) + message(FATAL_ERROR "libusb is required, please install it") + endif() endif() set(XLINK_PLATFORM_INCLUDE ${XLINK_ROOT_DIR}/pc/MacOS) list(APPEND XLINK_SOURCES "${XLINK_ROOT_DIR}/pc/MacOS/pthread_semaphore.c") endif() -#This is for the Movidius team -set(XLINK_INCLUDE_DIRECTORIES - ${XLINK_INCLUDE} - ${LIBUSB_INCLUDE_DIR}) +# This is for the Movidius team +set(XLINK_INCLUDE_DIRECTORIES ${XLINK_INCLUDE}) diff --git a/src/plugins/intel_myriad/third_party/mvnc/CMakeLists.txt b/src/plugins/intel_myriad/third_party/mvnc/CMakeLists.txt index 7af4e82e332..3e14c9d1d21 100644 --- a/src/plugins/intel_myriad/third_party/mvnc/CMakeLists.txt +++ b/src/plugins/intel_myriad/third_party/mvnc/CMakeLists.txt @@ -23,7 +23,7 @@ target_include_directories(${TARGET_NAME} ${XLINK_PLATFORM_INCLUDE}) target_compile_definitions(${TARGET_NAME} - PRIVATE + PRIVATE __PC__ HAVE_STRUCT_TIMESPEC _CRT_SECURE_NO_WARNINGS @@ -35,17 +35,17 @@ endif() if(NOT WIN32) target_compile_options(${TARGET_NAME} - PRIVATE + PRIVATE -Wformat -Wformat-security -Wall) if(CMAKE_C_COMPILER_VERSION VERSION_GREATER 4.8.5) target_compile_options(${TARGET_NAME} - PRIVATE + PRIVATE -fstack-protector-strong) else() target_compile_options(${TARGET_NAME} - PRIVATE + PRIVATE -fstack-protector) endif() @@ -57,19 +57,17 @@ if(NOT WIN32) endif() set_target_properties(${TARGET_NAME} PROPERTIES - POSITION_INDEPENDENT_CODE TRUE COMPILE_PDB_NAME ${TARGET_NAME}) target_link_libraries(${TARGET_NAME} - PRIVATE + PRIVATE XLink) if(NOT WIN32) target_link_libraries(${TARGET_NAME} - PUBLIC + PUBLIC Threads::Threads - ${CMAKE_DL_LIBS} - ${LIBUSB_LIBRARY}) + ${CMAKE_DL_LIBS}) endif() openvino_developer_export_targets(COMPONENT vpu TARGETS ${TARGET_NAME}) diff --git a/src/tests/functional/plugin/gpu/CMakeLists.txt b/src/tests/functional/plugin/gpu/CMakeLists.txt index 0356feb4e6e..2b0a9901625 100644 --- a/src/tests/functional/plugin/gpu/CMakeLists.txt +++ b/src/tests/functional/plugin/gpu/CMakeLists.txt @@ -23,7 +23,7 @@ addIeTargetTest( # try to find VA libraries if(NOT CMAKE_CROSSCOMPILING) - find_host_package(PkgConfig QUIET) + find_package(PkgConfig QUIET) if(PkgConfig_FOUND) pkg_search_module(libva QUIET IMPORTED_TARGET libva) endif() diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt index 57c5468bc3f..f6004e0db50 100644 --- a/thirdparty/CMakeLists.txt +++ b/thirdparty/CMakeLists.txt @@ -25,12 +25,12 @@ ov_install_static_lib(xbyak ${OV_CPACK_COMP_CORE}) # zlib # -if(NOT CMAKE_CROSSCOMPILING) - find_host_package(PkgConfig QUIET) +if(NOT ANDROID) + find_package(PkgConfig QUIET) if(PkgConfig_FOUND) pkg_search_module(zlib QUIET - IMPORTED_TARGET GLOBAL - zlib) + IMPORTED_TARGET GLOBAL + zlib) if(zlib_FOUND) add_library(zlib::zlib ALIAS PkgConfig::zlib) message(STATUS "zlib (${zlib_VERSION}) is found at ${zlib_PREFIX}") @@ -131,7 +131,14 @@ if(NOT APPLE) endif() if(gflags_FOUND) - set_target_properties(gflags PROPERTIES IMPORTED_GLOBAL ON) + if(TARGET gflags_nothreads-static) + set_target_properties(gflags_nothreads-static PROPERTIES IMPORTED_GLOBAL ON) + add_library(gflags ALIAS gflags_nothreads-static) + elseif(TARGET gflags) + set_target_properties(gflags PROPERTIES IMPORTED_GLOBAL ON) + else() + message(FATAL_ERROR "Internal error: failed to find imported target 'gflags'") + endif() message(STATUS "gflags (${gflags_VERSION}) is found at ${gflags_DIR}") else() add_subdirectory(gflags EXCLUDE_FROM_ALL) @@ -166,7 +173,7 @@ if(ENABLE_OV_PADDLE_FRONTEND OR ENABLE_OV_ONNX_FRONTEND OR ENABLE_OV_TF_FRONTEND set(PROTOC_EXECUTABLE ${SYSTEM_PROTOC}) foreach(target ${SYSTEM_PROTOC} ${Protobuf_LIBRARIES} ${Protobuf_LITE_LIBRARIES}) - set_property(TARGET ${target} PROPERTY IMPORTED_GLOBAL TRUE) + set_property(TARGET ${target} PROPERTY IMPORTED_GLOBAL ON) endforeach() else() add_subdirectory(protobuf EXCLUDE_FROM_ALL) diff --git a/tools/compile_tool/CMakeLists.txt b/tools/compile_tool/CMakeLists.txt index b461d5c8a52..c3c615e81fa 100644 --- a/tools/compile_tool/CMakeLists.txt +++ b/tools/compile_tool/CMakeLists.txt @@ -19,11 +19,15 @@ if (CMAKE_COMPILER_IS_GNUCXX) target_compile_options(${TARGET_NAME} PRIVATE -Wall) endif() +# for cross-compilation with gflags +find_package(Threads REQUIRED) + target_link_libraries(${TARGET_NAME} PRIVATE inference_engine inference_engine_plugin_api gflags ie_samples_utils + Threads::Threads ) set_target_properties(${TARGET_NAME} PROPERTIES diff --git a/tools/legacy/benchmark_app/CMakeLists.txt b/tools/legacy/benchmark_app/CMakeLists.txt index 7413928c8a8..58bedb0f759 100644 --- a/tools/legacy/benchmark_app/CMakeLists.txt +++ b/tools/legacy/benchmark_app/CMakeLists.txt @@ -27,7 +27,10 @@ if (CMAKE_COMPILER_IS_GNUCXX) target_compile_options(${TARGET_NAME} PRIVATE -Wall) endif() -target_link_libraries(${TARGET_NAME} PRIVATE openvino::runtime format_reader gflags) +# for cross-compilation with gflags +find_package(Threads REQUIRED) + +target_link_libraries(${TARGET_NAME} PRIVATE openvino::runtime format_reader gflags Threads::Threads) find_package(OpenCV QUIET COMPONENTS core) if(NOT OpenCV_FOUND) diff --git a/tools/legacy/benchmark_app/benchmark_app.hpp b/tools/legacy/benchmark_app/benchmark_app.hpp index af18c908e31..9c3580e3010 100644 --- a/tools/legacy/benchmark_app/benchmark_app.hpp +++ b/tools/legacy/benchmark_app/benchmark_app.hpp @@ -6,6 +6,13 @@ #include +// gflags supports uint32 starting from v2.2 only +#ifndef DEFINE_uint32 +# define DEFINE_uint32(name,val, txt) \ + DEFINE_VARIABLE(GFLAGS_NAMESPACE::uint32, U, \ + name, val, txt) +#endif + #include #include #include