2018-02-06 16:57:35 +08:00
# The script detects Intel(R) Inference Engine installation
#
2018-07-30 23:21:17 +08:00
# Cache variables:
# INF_ENGINE_RELEASE - a number reflecting IE source interface (linked with OpenVINO release)
2018-02-06 16:57:35 +08:00
#
2018-07-30 23:21:17 +08:00
# Detect parameters:
# 1. Native cmake IE package:
2019-08-15 01:33:49 +08:00
# - environment variable InferenceEngine_DIR is set to location of cmake module
2018-07-30 23:21:17 +08:00
# 2. Custom location:
# - INF_ENGINE_INCLUDE_DIRS - headers search location
# - INF_ENGINE_LIB_DIRS - library search location
# 3. OpenVINO location:
2019-03-21 23:58:22 +08:00
# - environment variable INTEL_OPENVINO_DIR is set to location of OpenVINO installation dir
# - INF_ENGINE_PLATFORM - part of name of library directory representing its platform
2018-02-06 16:57:35 +08:00
#
2018-07-30 23:21:17 +08:00
# Result:
# INF_ENGINE_TARGET - set to name of imported library target representing InferenceEngine
2018-02-06 16:57:35 +08:00
#
2018-07-16 18:58:59 +08:00
2020-03-25 10:23:39 +08:00
macro ( ocv_ie_find_extra_libraries find_prefix find_suffix )
file ( GLOB libraries "${INF_ENGINE_LIB_DIRS}/${find_prefix}inference_engine*${find_suffix}" )
foreach ( full_path IN LISTS libraries )
get_filename_component ( library "${full_path}" NAME_WE )
string ( REPLACE "${find_prefix}" "" library "${library}" )
if ( library STREQUAL "inference_engine" OR library STREQUAL "inference_engined" )
# skip
else ( )
add_library ( ${ library } UNKNOWN IMPORTED )
set_target_properties ( ${ library } PROPERTIES
I M P O R T E D _ L O C A T I O N " $ { f u l l _ p a t h } " )
list ( APPEND custom_libraries ${ library } )
endif ( )
endforeach ( )
endmacro ( )
2018-07-30 23:21:17 +08:00
function ( add_custom_ie_build _inc _lib _lib_rel _lib_dbg _msg )
if ( NOT _inc OR NOT ( _lib OR _lib_rel OR _lib_dbg ) )
return ( )
endif ( )
2020-03-25 10:23:39 +08:00
if ( NOT _lib )
if ( _lib_rel )
set ( _lib "${_lib_rel}" )
else ( )
set ( _lib "${_lib_dbg}" )
endif ( )
endif ( )
2018-07-30 23:21:17 +08:00
add_library ( inference_engine UNKNOWN IMPORTED )
set_target_properties ( inference_engine PROPERTIES
I M P O R T E D _ L O C A T I O N " $ { _ l i b } "
I M P O R T E D _ I M P L I B _ R E L E A S E " $ { _ l i b _ r e l } "
I M P O R T E D _ I M P L I B _ D E B U G " $ { _ l i b _ d b g } "
I N T E R F A C E _ I N C L U D E _ D I R E C T O R I E S " $ { _ i n c } "
)
2019-12-02 21:16:06 +08:00
2020-02-07 23:10:14 +08:00
set ( custom_libraries "" )
2020-03-25 10:23:39 +08:00
set ( __prefixes "${CMAKE_FIND_LIBRARY_PREFIXES}" )
if ( NOT __prefixes )
set ( __prefixes "_empty_" )
endif ( )
foreach ( find_prefix ${ __prefixes } )
if ( find_prefix STREQUAL "_empty_" ) # foreach doesn't iterate over empty elements
set ( find_prefix "" )
endif ( )
2020-12-23 14:51:23 +08:00
if ( NOT DEFINED INFERENCE_ENGINE_FIND_LIBRARY_SUFFIXES ) # allow custom override
set ( INFERENCE_ENGINE_FIND_LIBRARY_SUFFIXES ${ CMAKE_FIND_LIBRARY_SUFFIXES } )
if ( APPLE )
ocv_list_filterout ( INFERENCE_ENGINE_FIND_LIBRARY_SUFFIXES "^.so$" ) # skip plugins (can't be linked)
endif ( )
endif ( )
foreach ( find_suffix ${ INFERENCE_ENGINE_FIND_LIBRARY_SUFFIXES } )
2020-03-25 10:23:39 +08:00
ocv_ie_find_extra_libraries ( "${find_prefix}" "${find_suffix}" )
endforeach ( )
if ( NOT CMAKE_FIND_LIBRARY_SUFFIXES )
ocv_ie_find_extra_libraries ( "${find_prefix}" "" )
endif ( )
2020-02-07 23:10:14 +08:00
endforeach ( )
2019-12-02 21:16:06 +08:00
2019-03-21 23:58:22 +08:00
if ( NOT INF_ENGINE_RELEASE VERSION_GREATER "2018050000" )
find_library ( INF_ENGINE_OMP_LIBRARY iomp5 PATHS "${INF_ENGINE_OMP_DIR}" NO_DEFAULT_PATH )
if ( NOT INF_ENGINE_OMP_LIBRARY )
message ( WARNING "OpenMP for IE have not been found. Set INF_ENGINE_OMP_DIR variable if you experience build errors." )
endif ( )
2018-07-30 23:21:17 +08:00
endif ( )
2020-03-25 10:23:39 +08:00
if ( EXISTS "${INF_ENGINE_OMP_LIBRARY}" )
set_target_properties ( inference_engine PROPERTIES IMPORTED_LINK_INTERFACE_LIBRARIES "${INF_ENGINE_OMP_LIBRARY}" )
endif ( )
2018-07-30 23:21:17 +08:00
set ( INF_ENGINE_VERSION "Unknown" CACHE STRING "" )
2020-02-07 23:10:14 +08:00
set ( INF_ENGINE_TARGET "inference_engine;${custom_libraries}" PARENT_SCOPE )
2018-07-30 23:21:17 +08:00
message ( STATUS "Detected InferenceEngine: ${_msg}" )
endfunction ( )
2018-02-06 16:57:35 +08:00
2018-07-30 23:21:17 +08:00
# ======================
2018-02-06 16:57:35 +08:00
2018-07-30 23:21:17 +08:00
find_package ( InferenceEngine QUIET )
if ( InferenceEngine_FOUND )
2019-08-23 17:54:07 +08:00
set ( INF_ENGINE_TARGET ${ InferenceEngine_LIBRARIES } )
2018-07-30 23:21:17 +08:00
set ( INF_ENGINE_VERSION "${InferenceEngine_VERSION}" CACHE STRING "" )
2019-12-02 21:16:06 +08:00
message ( STATUS "Detected InferenceEngine: cmake package (${InferenceEngine_VERSION})" )
2018-02-06 16:57:35 +08:00
endif ( )
2018-07-30 23:21:17 +08:00
if ( NOT INF_ENGINE_TARGET AND INF_ENGINE_LIB_DIRS AND INF_ENGINE_INCLUDE_DIRS )
find_path ( ie_custom_inc "inference_engine.hpp" PATHS "${INF_ENGINE_INCLUDE_DIRS}" NO_DEFAULT_PATH )
2020-03-25 10:23:39 +08:00
if ( CMAKE_BUILD_TYPE STREQUAL "Debug" )
find_library ( ie_custom_lib_dbg "inference_engined" PATHS "${INF_ENGINE_LIB_DIRS}" NO_DEFAULT_PATH ) # Win32 and MacOSX
endif ( )
2018-07-30 23:21:17 +08:00
find_library ( ie_custom_lib "inference_engine" PATHS "${INF_ENGINE_LIB_DIRS}" NO_DEFAULT_PATH )
find_library ( ie_custom_lib_rel "inference_engine" PATHS "${INF_ENGINE_LIB_DIRS}/Release" NO_DEFAULT_PATH )
find_library ( ie_custom_lib_dbg "inference_engine" PATHS "${INF_ENGINE_LIB_DIRS}/Debug" NO_DEFAULT_PATH )
add_custom_ie_build ( "${ie_custom_inc}" "${ie_custom_lib}" "${ie_custom_lib_rel}" "${ie_custom_lib_dbg}" "INF_ENGINE_{INCLUDE,LIB}_DIRS" )
2018-02-06 16:57:35 +08:00
endif ( )
2019-03-21 23:58:22 +08:00
set ( _loc "$ENV{INTEL_OPENVINO_DIR}" )
if ( NOT _loc AND DEFINED ENV{INTEL_CVSDK_DIR} )
set ( _loc "$ENV{INTEL_CVSDK_DIR}" ) # OpenVINO 2018.x
endif ( )
2018-07-30 23:21:17 +08:00
if ( NOT INF_ENGINE_TARGET AND _loc )
2019-03-21 23:58:22 +08:00
if ( NOT INF_ENGINE_RELEASE VERSION_GREATER "2018050000" )
set ( INF_ENGINE_PLATFORM_DEFAULT "ubuntu_16.04" )
else ( )
set ( INF_ENGINE_PLATFORM_DEFAULT "" )
endif ( )
set ( INF_ENGINE_PLATFORM "${INF_ENGINE_PLATFORM_DEFAULT}" CACHE STRING "InferenceEngine platform (library dir)" )
2018-07-30 23:21:17 +08:00
find_path ( ie_custom_env_inc "inference_engine.hpp" PATHS "${_loc}/deployment_tools/inference_engine/include" NO_DEFAULT_PATH )
2020-03-25 10:23:39 +08:00
if ( CMAKE_BUILD_TYPE STREQUAL "Debug" )
find_library ( ie_custom_env_lib_dbg "inference_engined" PATHS "${_loc}/deployment_tools/inference_engine/lib/${INF_ENGINE_PLATFORM}/intel64" NO_DEFAULT_PATH )
endif ( )
2018-07-30 23:21:17 +08:00
find_library ( ie_custom_env_lib "inference_engine" PATHS "${_loc}/deployment_tools/inference_engine/lib/${INF_ENGINE_PLATFORM}/intel64" NO_DEFAULT_PATH )
find_library ( ie_custom_env_lib_rel "inference_engine" PATHS "${_loc}/deployment_tools/inference_engine/lib/intel64/Release" NO_DEFAULT_PATH )
find_library ( ie_custom_env_lib_dbg "inference_engine" PATHS "${_loc}/deployment_tools/inference_engine/lib/intel64/Debug" NO_DEFAULT_PATH )
add_custom_ie_build ( "${ie_custom_env_inc}" "${ie_custom_env_lib}" "${ie_custom_env_lib_rel}" "${ie_custom_env_lib_dbg}" "OpenVINO (${_loc})" )
2018-07-16 18:58:59 +08:00
endif ( )
2018-07-30 23:21:17 +08:00
# Add more features to the target
2018-02-06 16:57:35 +08:00
2018-07-30 23:21:17 +08:00
if ( INF_ENGINE_TARGET )
2021-07-03 05:37:37 +08:00
if ( DEFINED InferenceEngine_VERSION )
message ( STATUS "InferenceEngine: ${InferenceEngine_VERSION}" )
if ( NOT INF_ENGINE_RELEASE AND NOT ( InferenceEngine_VERSION VERSION_LESS "2021.4" ) )
math ( EXPR INF_ENGINE_RELEASE_INIT "${InferenceEngine_VERSION_MAJOR} * 1000000 + ${InferenceEngine_VERSION_MINOR} * 10000 + ${InferenceEngine_VERSION_PATCH} * 100" )
endif ( )
2021-05-25 00:19:07 +08:00
endif ( )
2021-07-03 05:37:37 +08:00
if ( NOT INF_ENGINE_RELEASE AND NOT INF_ENGINE_RELEASE_INIT )
2021-06-30 02:48:21 +08:00
message ( WARNING "InferenceEngine version has not been set, 2021.4 will be used by default. Set INF_ENGINE_RELEASE variable if you experience build errors." )
2021-07-03 05:37:37 +08:00
set ( INF_ENGINE_RELEASE_INIT "2021040000" )
elseif ( DEFINED INF_ENGINE_RELEASE )
set ( INF_ENGINE_RELEASE_INIT "${INF_ENGINE_RELEASE}" )
2018-07-30 23:21:17 +08:00
endif ( )
2021-07-03 05:37:37 +08:00
set ( INF_ENGINE_RELEASE "${INF_ENGINE_RELEASE_INIT}" CACHE STRING "Force IE version, should be in form YYYYAABBCC (e.g. 2020.1.0.2 -> 2020010002)" )
2018-07-30 23:21:17 +08:00
set_target_properties ( ${ INF_ENGINE_TARGET } PROPERTIES
2021-07-03 05:37:37 +08:00
I N T E R F A C E _ C O M P I L E _ D E F I N I T I O N S " H A V E _ I N F _ E N G I N E = 1 ; I N F _ E N G I N E _ R E L E A S E = $ { I N F _ E N G I N E _ R E L E A S E } "
2018-07-30 23:21:17 +08:00
)
endif ( )
2019-12-02 21:16:06 +08:00
if ( WITH_NGRAPH )
find_package ( ngraph QUIET )
if ( ngraph_FOUND )
ocv_assert ( TARGET ngraph::ngraph )
if ( INF_ENGINE_RELEASE VERSION_LESS "2019039999" )
message ( WARNING "nGraph is not tested with current InferenceEngine version: INF_ENGINE_RELEASE=${INF_ENGINE_RELEASE}" )
endif ( )
message ( STATUS "Detected ngraph: cmake package (${ngraph_VERSION})" )
set ( HAVE_NGRAPH ON )
endif ( )
endif ( )