CMake を使用してプラグインをビルド

OpenVINO ビルド基盤は、プラグイン開発用の OpenVINO デベロッパー・パッケージを提供します。

OpenVINO デベロッパー・パッケージ

OpenVINO 開発者パッケージを自動的に生成するには、OpenVINO ビルド中に cmake ツールを実行します。

$ mkdir openvino-release-build
$ cd openvino-release-build
$ cmake -DCMAKE_BUILD_TYPE=Release ../openvino

上記のコマンドを実行すると、OpenVINO デベロッパー・パッケージが openvino-release-build フォルダーに生成されます。これはいくつかのファイルで構成されています。

  • OpenVINODeveloperPackageConfig.cmake - ターゲットをインポートし、コンパイルフラグと CMake オプションを提供するメインの CMake スクリプト。

  • OpenVINODeveloperPackageConfig-version.cmake - パッケージのバージョンを含むファイル。

  • targets_developer.cmake - OpenVINO ビルドツリーからエクスポートされたすべてのターゲットを含む、自動生成されたファイル。このファイルは、次のターゲットをインポートするため OpenVINODeveloperPackageConfig.cmake に組み込まれます。

    • プラグイン開発用のライブラリー:

      • openvino::runtime - 共有 OpenVINO ライブラリー

      • openvino::runtime::dev - OpenVINO デベロッパー API を使用したインターフェース・ライブラリー

      • openvino::pugixml - 静的 Pugixml ライブラリー

      • openvino::xbyak - Xbyak ヘッダーを備えたインターフェース・ライブラリー

      • openvino::itt - インテル ITT を使用したパフォーマンス測定ツールを備えた静的ライブラリー

    • テスト開発用のライブラリー:

      • openvino::gtestopenvino::gtest_mainopenvino::gmock - Google テスト・フレームワーク・ライブラリー

      • openvino::common_test_utils - 一般的なテスト・ユーティリティーを備えた静的ライブラリー

      • openvino::func_test_utils - 機能テスト・ユーティリティーを備えた静的ライブラリー

      • openvino::unit_test_utils - ユニット・テスト・ユーティリティーを備えた静的ライブラリー

      • openvino::ov_models - ov::Model ビルダーのセットを含む静的ライブラリー

      • openvino::funcSharedTests - 一般的な機能テストを備えた静的ライブラリー

cmake --build . --target ov_dev_targets コマンドを実行して、OpenVINO デベロッパー・パッケージからターゲットのみをビルドするだけで十分です。

OpenVINO デベロッパー・パッケージを使用してプラグインをビルド

OpenVINO デベロッパー・パッケージを使用してプラグイン・ソース・ツリーをビルドするには、以下のコマンドを実行します。

$ mkdir template-plugin-release-build
$ cd template-plugin-release-build
$ cmake -DOpenVINODeveloperPackage_DIR=../openvino-release-build ../template-plugin

一般的なプラグインは次のコンポーネントで構成されます。

  1. src フォルダー内のプラグインコード

  2. tests フォルダー内のテストのコード

プラグインとそのテストをビルドするには、次の CMake スクリプトを実行します。

  • ルート CMakeLists.txt は、find_package CMake コマンドを使用して OpenVINO デベロッパー・パッケージを検索し、プラグインソースとそのテストをそれぞれ含む src サブディレクトリーと tests サブディレクトリーを追加します。

cmake_minimum_required(VERSION 3.13)

project(OpenVINOTemplatePlugin)

find_package(OpenVINODeveloperPackage REQUIRED)

ov_option(ENABLE_TEMPLATE_REGISTRATION "Enables registration of TEMPLATE plugin" OFF)

if(CMAKE_COMPILER_IS_GNUCXX)
    ov_add_compiler_flags(-Wall)
endif()

add_subdirectory(src)

if(ENABLE_TESTS)
    include(CTest)
    enable_testing()

    if(ENABLE_FUNCTIONAL_TESTS)
        add_subdirectory(tests/functional)
    endif()
endif()

# install

if(OpenVINODeveloperPackage_FOUND)
    ov_cpack(template)
endif()

ENABLE_TESTSENABLE_FUNCTIONAL_TESTS オプションのデフォルト値は OpenVINO デベロッパー・パッケージを介して共有され、メインの OpenVINO ビルドツリーと同一になります。以下のコマンドでプラグインのビルド中にそれらをオーバーライドできます。

$ cmake -DENABLE_FUNCTIONAL_TESTS=OFF -DOpenVINODeveloperPackage_DIR=../openvino-release-build ../template-plugin
  • src/CMakeLists.txt は、ソースからプラグイン共有ライブラリーをビルドします。

set(TARGET_NAME "openvino_template_plugin")

file(GLOB_RECURSE SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
file(GLOB_RECURSE HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp)

if (NOT ENABLE_TEMPLATE_REGISTRATION)
    # Skip install and registration of template component
    set(skip_plugin SKIP_INSTALL SKIP_REGISTRATION)
endif()

# adds a shared library with plugin
ov_add_plugin(NAME ${TARGET_NAME}
              DEVICE_NAME "TEMPLATE"
              SOURCES ${SOURCES} ${HEADERS}
              ${skip_plugin}
              VERSION_DEFINES_FOR plugin.cpp
              ADD_CLANG_FORMAT)

# Enable support of CC for the plugin
ov_mark_target_as_cc(${TARGET_NAME})

target_include_directories(${TARGET_NAME} PRIVATE
    "${CMAKE_CURRENT_SOURCE_DIR}"
    "${OpenVINOTemplatePlugin_SOURCE_DIR}/include")

# link common OpenVINO Runtime libraries
target_link_libraries(${TARGET_NAME} PRIVATE
    openvino::interpreter_backend
    openvino::reference)

set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE ${ENABLE_LTO})

if (ENABLE_TEMPLATE_REGISTRATION)
    # Update the plugins.xml file
    ov_register_plugins(MAIN_TARGET ${TARGET_NAME})
endif()

openvino::... ターゲットは OpenVINO デベロッパー・パッケージからインポートされます。

  • tests/functional/CMakeLists.txt は一連の機能プラグインテストをビルドします。

set(TARGET_NAME ov_template_func_tests)

if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
    ov_add_compiler_flags(/wd4305)
endif()

ov_add_test_target(
        NAME ${TARGET_NAME}
        ROOT ${CMAKE_CURRENT_SOURCE_DIR}
        DEPENDENCIES
            openvino_template_plugin
        LINK_LIBRARIES
            openvino::funcSharedTests
            openvino::runtime::dev
        INCLUDES
            "${OpenVINOTemplatePlugin_SOURCE_DIR}/include"
            "${CMAKE_CURRENT_SOURCE_DIR}/op_reference"
        ADD_CLANG_FORMAT
        LABELS
            OV UNIT TEMPLATE
)

find_package(OpenCV QUIET COMPONENTS core imgproc)

if(OpenCV_FOUND AND OpenCV_VERSION VERSION_GREATER_EQUAL 3.4)
    message(STATUS "Reference preprocessing: OpenCV tests are enabled")
    target_compile_definitions(${TARGET_NAME} PRIVATE OPENCV_TEMPLATE_TESTS)
    target_link_libraries(${TARGET_NAME} PRIVATE opencv_imgproc opencv_core)
else()
    message(WARNING "Reference preprocessing: OpenCV tests are disabled, because OpenCV ver. 3.4+ is not found")
endif()

if (ENABLE_INTEL_CPU)
    set_source_files_properties(
        "${CMAKE_CURRENT_SOURCE_DIR}/shared_tests_instances/behavior/executable_network/get_metric.cpp"
        PROPERTIES COMPILE_DEFINITIONS ENABLE_INTEL_CPU=1)
endif()

共通の機能 OpenVINO プラグインテストを含む openvino::funcSharedTests 静的ライブラリーは、OpenVINO デベロッパー・パッケージ経由でインポートされます。