From 258c51bd1f2f5b274403bb171b745c08a3ef1454 Mon Sep 17 00:00:00 2001 From: Ilya Lavrenov Date: Fri, 23 Oct 2020 08:54:48 +0300 Subject: [PATCH] Openvino extra module adding - refactored (#2754) * Rename plugin to module * Added openvino_contrib handling * Moved NEON flags to common place * Fixed -Werror=catch-value= gcc-9 error --- cmake/os_flags.cmake | 22 ++++++++ inference-engine/CMakeLists.txt | 64 +++++++++++++++-------- inference-engine/cmake/features_ie.cmake | 2 +- inference-engine/samples/speech_sample/main.cpp | 2 +- inference-engine/src/preprocessing/CMakeLists.txt | 21 +------- 5 files changed, 68 insertions(+), 43 deletions(-) diff --git a/cmake/os_flags.cmake b/cmake/os_flags.cmake index 8353bd7..c91aaa9 100644 --- a/cmake/os_flags.cmake +++ b/cmake/os_flags.cmake @@ -126,6 +126,28 @@ function(ie_avx512_optimization_flags flags) endif() endfunction() +function(ie_arm_neon_optimization_flags flags) + if(WIN32 OR CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + message(WARNING "Unsupported CXX compiler ${CMAKE_CXX_COMPILER_ID}") + elseif(ANDROID) + if(ANDROID_ABI STREQUAL "arm64-v8a") + set(${flags} "-mfpu=neon" PARENT_SCOPE) + elseif(ANDROID_ABI STREQUAL "armeabi-v7a-hard with NEON") + set(${flags} "-march=armv7-a -mfloat-abi=hard -mhard-float -D_NDK_MATH_NO_SOFTFP=1 -mfpu=neon" PARENT_SCOPE) + elseif((ANDROID_ABI STREQUAL "armeabi-v7a with NEON") OR + (ANDROID_ABI STREQUAL "armeabi-v7a" AND + DEFINED CMAKE_ANDROID_ARM_NEON AND CMAKE_ANDROID_ARM_NEON)) + set(${flags} "-march=armv7-a -mfloat-abi=softfp -mfpu=neon" PARENT_SCOPE) + endif() + else() + if(AARCH64) + set(${flags} "-O2 -ftree-vectorize" PARENT_SCOPE) + elseif(ARM) + set(${flags} "-mfpu=neon" PARENT_SCOPE) + endif() + endif() +endfunction() + # # Enables Link Time Optimization compilation # diff --git a/inference-engine/CMakeLists.txt b/inference-engine/CMakeLists.txt index 7f45ab0..2e01504 100644 --- a/inference-engine/CMakeLists.txt +++ b/inference-engine/CMakeLists.txt @@ -10,8 +10,7 @@ include(features_ie) # include developer package include(developer_package_ie) -# These options are shared with 3rdparty plugins -# by means of developer package +# These options are shared with 3rdparty plugins by means of developer package include(check_features_ie) # resolving dependencies for the project @@ -209,34 +208,57 @@ if(ENABLE_COVERAGE) endif() # -# Add plugins +# Add extra modules # -function(register_extra_plugins) - set(InferenceEngineDeveloperPackage_DIR "${CMAKE_CURRENT_BINARY_DIR}/build-plugins") - set(iedevconfig_file "${InferenceEngineDeveloperPackage_DIR}/InferenceEngineDeveloperPackageConfig.cmake") - file(REMOVE "${iedevconfig_file}") +function(register_extra_modules) + set(InferenceEngineDeveloperPackage_DIR "${CMAKE_CURRENT_BINARY_DIR}/build-modules") - file(WRITE "${iedevconfig_file}" "\# !! AUTOGENERATED: DON'T EDIT !!\n\n") - file(APPEND "${iedevconfig_file}" "ie_deprecated_no_errors()\n") + function(generate_fake_dev_package) + set(iedevconfig_file "${InferenceEngineDeveloperPackage_DIR}/InferenceEngineDeveloperPackageConfig.cmake") + file(REMOVE "${iedevconfig_file}") - foreach(target IN LISTS OpenVINODeveloperPackageTargets IEDeveloperPackageTargets) - if(target) - file(APPEND "${iedevconfig_file}" "add_library(IE::${target} ALIAS ${target})\n") - endif() - endforeach() + file(WRITE "${iedevconfig_file}" "\# !! AUTOGENERATED: DON'T EDIT !!\n\n") + file(APPEND "${iedevconfig_file}" "ie_deprecated_no_errors()\n") + + foreach(target IN LISTS OpenVINODeveloperPackageTargets IEDeveloperPackageTargets) + if(target) + file(APPEND "${iedevconfig_file}" "add_library(IE::${target} ALIAS ${target})\n") + endif() + endforeach() + endfunction() + + generate_fake_dev_package() # automatically import plugins from the 'plugins' folder - file(GLOB local_extra_plugins "plugins/*") + file(GLOB local_extra_modules "plugins/*") if(NGRAPH_INTERPRETER_ENABLE) - list(APPEND local_extra_plugins "${OpenVINO_MAIN_SOURCE_DIR}/docs/template_plugin") + list(APPEND local_extra_modules "${OpenVINO_MAIN_SOURCE_DIR}/docs/template_plugin") endif() - foreach(plugin_path IN LISTS IE_EXTRA_PLUGINS local_extra_plugins) - get_filename_component(plugin_dir "${plugin_path}" NAME) - message(STATUS "Register ${plugin_dir} to be built in build-plugins/${plugin_dir}") - add_subdirectory("${plugin_path}" "build-plugins/${plugin_dir}") + # detect where IE_EXTRA_MODULES contains folders with CMakeLists.txt + # other folders are supposed to have sub-folders with CMakeLists.txt + foreach(module_path IN LISTS IE_EXTRA_MODULES) + if(EXISTS "${module_path}/CMakeLists.txt") + list(APPEND extra_modules "${module_path}") + elseif(module_path) + file(GLOB extra_modules ${extra_modules} "${module_path}/*") + endif() + endforeach() + + # add each extra module + foreach(module_path IN LISTS extra_modules local_extra_modules) + if(module_path) + get_filename_component(module_name "${module_path}" NAME) + if(NOT DEFINED BUILD_${module_name}) + set(BUILD_${module_name} ON CACHE BOOL "Build ${module_name} extra module" FORCE) + endif() + if(BUILD_${module_name}) + message(STATUS "Register ${module_name} to be built in build-modules/${module_name}") + add_subdirectory("${module_path}" "build-modules/${module_name}") + endif() + endif() endforeach() endfunction() -register_extra_plugins() +register_extra_modules() diff --git a/inference-engine/cmake/features_ie.cmake b/inference-engine/cmake/features_ie.cmake index b4936f4..ded5e71 100644 --- a/inference-engine/cmake/features_ie.cmake +++ b/inference-engine/cmake/features_ie.cmake @@ -106,7 +106,7 @@ ie_dependent_option(ENABLE_CPPLINT_REPORT "Build cpplint report instead of faili ie_option(ENABLE_CLANG_FORMAT "Enable clang-format checks during the build" ON) -set(IE_EXTRA_PLUGINS "" CACHE STRING "Extra paths for plugins to include into DLDT build tree") +set(IE_EXTRA_MODULES "" CACHE STRING "Extra paths for extra modules to include into OpenVINO build") ie_dependent_option(ENABLE_TBB_RELEASE_ONLY "Only Release TBB libraries are linked to the Inference Engine binaries" ON "THREADING MATCHES TBB;LINUX" OFF) diff --git a/inference-engine/samples/speech_sample/main.cpp b/inference-engine/samples/speech_sample/main.cpp index 5bae50b..44fc1a5 100644 --- a/inference-engine/samples/speech_sample/main.cpp +++ b/inference-engine/samples/speech_sample/main.cpp @@ -702,7 +702,7 @@ int main(int argc, char *argv[]) { outputs.push_back(outBlobName.substr(0, pos_layer)); try { ports.push_back(std::stoi(outBlobName.substr(pos_layer + 1))); - } catch (std::exception) { + } catch (const std::exception &) { throw std::logic_error("Ports should have integer type"); } } diff --git a/inference-engine/src/preprocessing/CMakeLists.txt b/inference-engine/src/preprocessing/CMakeLists.txt index 70bab36..478735d 100644 --- a/inference-engine/src/preprocessing/CMakeLists.txt +++ b/inference-engine/src/preprocessing/CMakeLists.txt @@ -85,26 +85,7 @@ if(ENABLE_AVX512F AND NOT GNU_5_DEBUG_CASE) endif() if(ARM OR AARCH64) - set(neon_flags "") - if(WIN32 OR CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - message(WARNING "Unsupported CXX compiler ${CMAKE_CXX_COMPILER_ID}") - elseif(ANDROID) - if(ANDROID_ABI STREQUAL "arm64-v8a") - set(neon_flags "-mfpu=neon") - elseif(ANDROID_ABI STREQUAL "armeabi-v7a-hard with NEON") - set(neon_flags "-march=armv7-a -mfloat-abi=hard -mhard-float -D_NDK_MATH_NO_SOFTFP=1 -mfpu=neon") - elseif((ANDROID_ABI STREQUAL "armeabi-v7a with NEON") OR - (ANDROID_ABI STREQUAL "armeabi-v7a" AND - DEFINED CMAKE_ANDROID_ARM_NEON AND CMAKE_ANDROID_ARM_NEON)) - set(neon_flags "-march=armv7-a -mfloat-abi=softfp -mfpu=neon") - endif() - else() - if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64") - set(neon_flags "-O2 -ftree-vectorize") - elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "armv7-a") - set(neon_flags "-mfpu=neon") - endif() - endif() + ie_arm_neon_optimization_flags(neon_flags) if(neon_flags) file(GLOB NEON_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/arm_neon/*.hpp) -- 2.7.4