forked from openvinotoolkit/openvino
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
210 lines (178 loc) · 7.75 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
# Copyright (C) 2018-2023 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
#
cmake_minimum_required (VERSION 3.13)
project(OpenVINOPython DESCRIPTION "OpenVINO Runtime Python bindings")
#
# Packages & settings
#
if(NOT DEFINED OpenVINO_SOURCE_DIR)
find_package(OpenVINODeveloperPackage REQUIRED
PATHS "${InferenceEngineDeveloperPackage_DIR}")
set(OpenVINO_BINARY_DIR "${OpenVINODeveloperPackage_DIR}")
endif()
#
# Check python requirements
#
set(ov_python_req "${OpenVINOPython_SOURCE_DIR}/requirements.txt")
set(ie_python_req "${OpenVINOPython_SOURCE_DIR}/src/compatibility/openvino/requirements-dev.txt")
function(ov_check_python_build_conditions)
# user explicitly specified ENABLE_PYTHON=ON
if(ENABLE_PYTHON)
set(find_package_mode REQUIRED)
set(message_mode FATAL_ERROR)
else()
set(find_package_mode QUIET)
set(message_mode WARNING)
endif()
# Try to find python3 and its libs
find_host_package(PythonInterp 3 ${find_package_mode})
if(PYTHONINTERP_FOUND)
if(PYTHON_VERSION_MINOR GREATER_EQUAL 11)
set(pybind11_min_version 2.9.2)
else()
set(pybind11_min_version 2.8.0)
endif()
if(CMAKE_CROSSCOMPILING)
# since this version pybind11 has PYBIND11_PYTHONLIBS_OVERWRITE option
# to properly cross-compile, users need to set:
# -DPYTHON_EXECUTABLE=<python interpreter of our choice version 3.X>
# -DPYTHON_LIBRARY=/usr/lib/aarch64-linux-gnu/libc-2.31.so
# -DPYTHON_INCLUDE_DIR=<path to includes for python 3.X>
# -DPYBIND11_PYTHONLIBS_OVERWRITE=OFF
# -DPYTHON_MODULE_EXTENSION=$(aarch64-linux-gnu-python3-config --extension-suffix)
set(pybind11_min_version 2.10.1)
endif()
function(_ov_find_python_libs_new)
set(pybind11_tools_dir "${OpenVINOPython_SOURCE_DIR}/thirdparty/pybind11/tools")
if(EXISTS ${pybind11_tools_dir})
list(APPEND CMAKE_MODULE_PATH ${pybind11_tools_dir})
else()
find_host_package(pybind11 ${pybind11_min_version} QUIET)
if(pybind11_FOUND)
list(APPEND CMAKE_MODULE_PATH "${pybind11_DIR}")
endif()
endif()
# use libraries with the same version as python itself
set(PYBIND11_PYTHON_VERSION ${PYTHON_VERSION_STRING})
find_host_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} EXACT ${find_package_mode})
set(PYTHONLIBSNEW_FOUND ${PYTHONLIBS_FOUND} PARENT_SCOPE)
endfunction()
# try to find python libraries
_ov_find_python_libs_new()
if(PYTHONLIBSNEW_FOUND)
# clear Python_ADDITIONAL_VERSIONS to find only python library matching PYTHON_EXECUTABLE
unset(Python_ADDITIONAL_VERSIONS CACHE)
find_host_package(PythonLibs ${PYTHON_VERSION_STRING} EXACT ${find_package_mode})
endif()
if(NOT PYTHONLIBS_FOUND)
message(${message_mode} "Python development libraries are not found. OpenVINO Python API will be turned off (ENABLE_PYTHON is OFF)")
endif()
else()
message(${message_mode} "Python 3.x interpreter is not found. OpenVINO Python API will be turned off (ENABLE_PYTHON is OFF)")
endif()
# check pyopenvino requirements to OV 2.0 API
ov_check_pip_packages(REQUIREMENTS_FILE ${ov_python_req}
RESULT_VAR ov_python_req_FOUND
WARNING_MESSAGE "install python3 -m pip install -r ${ov_python_req} for OV API 2.0 requirements"
MESSAGE_MODE TRACE)
# ov_python_req are not mandatory for build
set(ov_python_req_FOUND ON)
# check for Cython requirement for build IE API 1.0
ov_check_pip_packages(REQUIREMENTS_FILE ${ie_python_req}
RESULT_VAR ie_python_req_FOUND
WARNING_MESSAGE "install python3 -m pip install -r ${ie_python_req} for IE API 1.0 requirements"
MESSAGE_MODE TRACE)
# cython can be installed as a debian package, so pip requirements can be unsatisfied
# so, let's check to find cython anyway
if(NOT ie_python_req_FOUND)
find_package(Cython QUIET
PATHS "${OpenVINOPython_SOURCE_DIR}/src/compatibility/openvino/cmake"
NO_CMAKE_FIND_ROOT_PATH
NO_DEFAULT_PATH)
if(CYTHON_VERSION VERSION_GREATER_EQUAL 0.29)
set(ie_python_req_FOUND ON)
else()
message(${message_mode} "Python requirements '${ie_python_req}' are missed, IE Python API 1.0 will not be built (ENABLE_PYTHON is OFF)")
endif()
endif()
if(NOT OV_GENERATOR_MULTI_CONFIG AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND CMAKE_DEBUG_POSTFIX)
set(python_debug ON)
message(${message_mode} "Building python bindings in debug configuration is not supported on your platform (ENABLE_PYTHON is OFF)")
else()
set(python_debug OFF)
endif()
if(PYTHONLIBS_FOUND AND ov_python_req_FOUND AND ie_python_req_FOUND AND NOT python_debug)
set(ENABLE_PYTHON_DEFAULT ON PARENT_SCOPE)
else()
set(ENABLE_PYTHON_DEFAULT OFF PARENT_SCOPE)
endif()
# to disable API 1.0
set(ie_python_req_FOUND ${ie_python_req_FOUND} PARENT_SCOPE)
# set pybind11 minimal version
set(pybind11_min_version ${pybind11_min_version} PARENT_SCOPE)
endfunction()
ov_check_python_build_conditions()
ie_option(ENABLE_PYTHON "Enables OpenVINO Python API build" ${ENABLE_PYTHON_DEFAULT})
#
# Check for wheel package
#
# user explicitly specified ENABLE_WHEEL=ON
if(ENABLE_WHEEL)
set(find_package_mode REQUIRED)
set(message_mode FATAL_ERROR)
else()
set(find_package_mode QUIET)
set(message_mode WARNING)
endif()
set(wheel_reqs "${OpenVINOPython_SOURCE_DIR}/wheel/requirements-dev.txt")
ov_check_pip_packages(REQUIREMENTS_FILE "${OpenVINOPython_SOURCE_DIR}/wheel/requirements-dev.txt"
RESULT_VAR ENABLE_WHEEL_DEFAULT
MESSAGE_MODE WARNING)
if(LINUX)
find_host_program(patchelf_program
NAMES patchelf
DOC "Path to patchelf tool")
if(NOT patchelf_program)
set(ENABLE_WHEEL_DEFAULT OFF)
message(${message_mode} "patchelf is not found. It is required to build OpenVINO Runtime wheel. Install via apt-get install patchelf")
endif()
endif()
if(CMAKE_VERSION VERSION_LESS 3.15)
message(${message_mode} "Cmake version 3.15 and higher is required to build 'openvino' wheel. Provided version ${CMAKE_VERSION}")
set(ENABLE_WHEEL_DEFAULT OFF)
endif()
# this option should not be a part of OpenVINODeveloperPackage
# since wheels can be built only together with main OV build
ie_dependent_option(ENABLE_WHEEL "Build wheel packages for PyPI" ${ENABLE_WHEEL_DEFAULT} "ENABLE_PYTHON" OFF)
if(NOT ENABLE_PYTHON)
if(CMAKE_SOURCE_DIR STREQUAL OpenVINOPython_SOURCE_DIR)
message(FATAL_ERROR "Python OpenVINO API requirements are not satisfied. Please, install ${ie_python_req} and ${ov_python_req}")
else()
return()
endif()
endif()
#
# Build the code
#
find_package(pybind11 ${pybind11_min_version} QUIET)
if(NOT pybind11_FOUND)
add_subdirectory(thirdparty/pybind11 EXCLUDE_FROM_ALL)
endif()
add_subdirectory(src/compatibility/pyngraph)
add_subdirectory(src/pyopenvino)
if(ie_python_req_FOUND)
add_subdirectory(src/compatibility/openvino)
else()
message(WARNING "NOTE: Python API for OpenVINO 1.0 is disabled")
endif()
if(ENABLE_WHEEL)
add_subdirectory(wheel)
endif()
if(ENABLE_TESTS)
add_subdirectory(tests/mock/mock_py_frontend)
add_subdirectory(tests/mock/pyngraph_fe_mock_api)
endif()
if(OpenVINODeveloperPackage_FOUND)
ie_cpack(${IE_CPACK_COMPONENTS_ALL})
endif()