Skip to content

CMakeOptionsForCustomCompilation

Ilya Lavrenov edited this page Aug 30, 2022 · 24 revisions

CMake Options for Custom Compilation

This document provides description and default values for CMake options that can be used to build a custom OpenVINO runtime using the open source version. For instructions on how to create a custom runtime from the prebuilt OpenVINO release package, refer to the deployment manager documentation. To understand all the dependencies when creating a custom runtime from the open source repository, refer to the OpenVINO Runtime Introduction.

Table of contents:

Disable / enable plugins build and other components

  • Inference plugins:
    • ENABLE_INTEL_CPU enables CPU plugin compilation:
      • ON is default for x86 platforms; OFF, otherwise.
    • ENABLE_INTEL_GPU enables Intel GPU plugin compilation:
      • ON is default for x86 platforms; not available, otherwise.
    • ENABLE_INTEL_GNA enables GNA plugin compilation:
      • ON is default for x86 platforms; not available, otherwise.
    • ENABLE_INTEL_MYRIAD_COMMON enables Myriad (Myriad and HDDL only) common components build:
      • ON is default.
    • ENABLE_INTEL_MYRIAD enables Myriad plugin components build:
      • ON is default.
      • Depends on ENABLE_INTEL_MYRIAD_COMMON.
    • ENABLE_HETERO enables HETERO plugin build:
      • ON is default.
    • ENABLE_MULTI enables MULTI plugin build:
      • ON is default.
    • ENABLE_AUTO enables AUTO plugin build:
      • ON is default.
    • ENABLE_TEMPLATE enables TEMPLATE plugin build:
      • ON is default.
    • ENABLE_AUTO_BATCH enables Auto Batch plugin build:
      • ON is default.
  • Frontends to work with models from frameworks:
    • ENABLE_OV_ONNX_FRONTEND enables ONNX frontend plugin for OpenVINO Runtime:
      • ON is default.
    • ENABLE_OV_PDPD_FRONTEND enables PDPD frontend plugin for OpenVINO Runtime:
      • ON is default.
    • ENABLE_OV_TF_FRONTEND enables TensorFlow frontend plugin for OpenVINO Runtime:
      • ON is default.
    • ENABLE_OV_IR_FRONTEND enables OpenVINO Intermediate Representation frontend plugin for OpenVINO Runtime:
      • ON is default.
  • ENABLE_GAPI_PREPROCESSING enables G-API preprocessing:
    • ON is default.
  • IE_EXTRA_MODULES specifies path to add extra OpenVINO modules to the build.
  • ENABLE_SAMPLES enables OpenVINO Runtime samples build:
    • ON is default.
  • ENABLE_PYTHON enables Python API build:
    • ON if python requirements are satisfied (auto-discovered by CMake).
  • ENABLE_WHEEL enables Python OpenVINO Runtime and Development wheels build:
    • ON if requirements are satisfied (auto-discovered by CMake).
  • ENABLE_TESTS enables tests compilation:
    • OFF is default.
  • ENABLE_IR_V7_READER enables IR v7 reader:
    • ON is default. Note: must be turned OFF when building OpenVINO runtime as static
  • ENABLE_OV_CORE_UNIT_TEST enables ngraph unit tests:
    • The value is the same as for the ENABLE_TESTS option.
  • ENABLE_DOCS enables building the OpenVINO documentation:
    • OFF is on Debian (Ubuntu) OSes
    • OFF is in other cases.
  • ENABLE_SYSTEM_PUGIXML builds with system version of pugixml if it is available on the system.
  • ENABLE_SYSTEM_PROTOBUF use protobuf installed on the system:
    • OFF is default.
  • ENABLE_SYSTEM_TBB use TBB installed on the system:
    • ON is on Debian (Ubuntu) OSes.
    • OFF is in other cases.

Options affecting binary size

  • ENABLE_LTO boolean option to enable Link Time Optimizations:
    • OFF is default, because it takes longer time to link binaries.
    • ON is enabled for OpenVINO release binaries.
    • Available on Unix* compilers only like GCC or CLANG.
    • Gives 30% decrease in binary size together with other optimization options used to build OpenVINO.
  • THREADING points to the OpenVINO threading interface:
    • TBB is the default option, which enables build with Intel TBB and tbb::static_partitioner.
    • TBB_AUTO enables building with Intel TBB.
    • OMP enables building with Intel OpenMP.
    • SEQ disables threading optimizations. Can be used in cases when TBB binaries are absent.
    • Note: because TBB is a template library, it increases binary size because of multiple instantiations of tbb::parallel_for
  • ENABLE_TBBBIND_2_5 enables prebuilt static TBBBind 2.5 usage:
    • ON is default, because OpenVINO Runtime should be generic out of box.

Note: TBBBind 2.5 is needed when OpenVINO inference targets CPUs with:

  • NUMA support (Non-Unified Memory Architecture), e.g. to detect a number of NUMA nodes
  • Hybrid architecture to separate Performance / Efficiency cores and schedule tasks in the optimal way.

Note: if you build OpenVINO runtime with oneTBB support where TBBBind 2.5 is automatically loaded by TBB in runtime, then set ENABLE_TBBBIND_2_5 to OFF

  • ENABLE_SSE42 enables SSE4.2 optimizations:
    • ON is default for x86 platforms; not available for other platforms.
    • Affects only OpenVINO Runtime common part and preprocessing plugin, does not affect the oneDNN library
  • ENABLE_AVX2 enables AVX2 optimizations:
    • ON is default for x86 platforms, not available for other platforms.
    • Affects only OpenVINO Runtime common part and preprocessing plugin, does not affect the oneDNN library
  • ENABLE_AVX512F enables AVX512 optimizations:
    • ON is default for x86 platforms, not available for other platforms.
    • Affects only OpenVINO Runtime common part and preprocessing plugin, does not affect the oneDNN library
  • ENABLE_PROFILING_ITT enables profiling with Intel ITT and VTune.
    • OFF is default, because it increases binary size.
  • SELECTIVE_BUILD enables Conditional compilation feature.
    • OFF is default.

Building with custom OpenCV

When OpenVINO CMake scripts are run with enabled OpenCV (-DENABLE_OPENCV=ON which is default), CMake OpenVINO scripts automatically download prebuilt OpenCV from shared drive, such OpenCV is ABI-compatible with the default compiler of your system. If you have a non-default compiler or want to use custom version of OpenCV, you can pass it via CMake option:

cmake -DOpenCV_DIR=<path to OpenCVConfig.cmake> ...

In this case, default OpenCV will not downloaded and provided one will be used.

Building with custom TBB

When OpenVINO CMake scripts are run with TBB enabled (-DTHREADING=TBB which is default, or -DTHREADING=TBB_AUTO), CMake OpenVINO scripts automatically download prebuilt version of TBB which is ABI-compatible with the default compiler of your system. If you have a non-default compiler or want to use custom TBB, you can use:

export TBBROOT=<path to TBB install root>
cmake ...

In this case OpenVINO CMake scripts take TBBROOT environment variable into account and provided TBB will be used.

Note: if you are building TBB from source files, please install TBB after and use TBBROOT to point to installation root.

Test capabilities

  • ENABLE_SANITIZER builds with clang address sanitizer support:
    • OFF is default.
  • ENABLE_THREAD_SANITIZER builds with clang thread-sanitizer support:
    • OFF is default.
  • ENABLE_COVERAGE adds option to enable coverage. See dedicated guide how to measure test coverage:
    • OFF is default.
  • ENABLE_FUZZING enables instrumentation of code for fuzzing:
    • OFF is default.

Other options

  • ENABLE_CPPLINT enables code style check using cpplint static code checker:
    • ON is default.
  • ENABLE_CLANG_FORMAT enables Clang format code style check:
    • ON is default.
    • Used only for ngraph component.
  • TREAT_WARNING_AS_ERROR treats all warnings as an error:
    • OFF is default.
  • ENABLE_FASTER_BUILD enables precompiled headers and unity build using CMake:
    • OFF is default.
  • ENABLE_INTEGRITYCHECK builds DLLs with /INTEGRITYCHECK flag:
    • OFF is default.
    • Available on MSVC compiler only.
Clone this wiki locally