Ability to build OpenVINO wheel based on OV developer package (#13197)
* Allow to compile wheel package based on OpenVINO developer package * Added wheel specific runtime dir to avoid issues with generator expressions * Added backward compatibility * Trying to fix RHEL, U20 * Fixed cmake options in setup.py
This commit is contained in:
@@ -12,11 +12,9 @@ project(OpenVINOPython DESCRIPTION "OpenVINO Runtime Python bindings")
|
||||
|
||||
if(NOT DEFINED OpenVINO_SOURCE_DIR)
|
||||
find_package(InferenceEngineDeveloperPackage REQUIRED)
|
||||
set(OpenVINO_BINARY_DIR "${InferenceEngineDeveloperPackage_DIR}")
|
||||
endif()
|
||||
|
||||
set(PYTHON_SOURCE_DIR ${OpenVINOPython_SOURCE_DIR}/src)
|
||||
|
||||
|
||||
#
|
||||
# Check python requirements
|
||||
#
|
||||
@@ -128,15 +126,9 @@ 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 wheel_req_FOUND
|
||||
RESULT_VAR ENABLE_WHEEL_DEFAULT
|
||||
MESSAGE_MODE WARNING)
|
||||
|
||||
if(wheel_req_FOUND AND "${CMAKE_SOURCE_DIR}" STREQUAL "${OpenVINO_SOURCE_DIR}")
|
||||
set(ENABLE_WHEEL_DEFAULT ON)
|
||||
else()
|
||||
set(ENABLE_WHEEL_DEFAULT OFF)
|
||||
endif()
|
||||
|
||||
if(LINUX)
|
||||
find_host_program(patchelf_program
|
||||
NAMES patchelf
|
||||
@@ -154,6 +146,7 @@ ie_dependent_option(ENABLE_WHEEL "Build wheel packages for PyPI" ${ENABLE_WHEEL_
|
||||
#
|
||||
# Build the code
|
||||
#
|
||||
|
||||
add_subdirectory(thirdparty/pybind11 EXCLUDE_FROM_ALL)
|
||||
add_subdirectory(src/compatibility/pyngraph)
|
||||
add_subdirectory(src/pyopenvino)
|
||||
|
||||
@@ -96,7 +96,7 @@ if(OpenVINO_SOURCE_DIR OR InferenceEngineDeveloperPackage_FOUND)
|
||||
ie_cpack_add_component(${OV_CPACK_COMP_PYTHON_OPENVINO}_${pyversion}
|
||||
HIDDEN)
|
||||
|
||||
install(DIRECTORY ${PYTHON_SOURCE_DIR}/openvino
|
||||
install(DIRECTORY ${OpenVINOPython_SOURCE_DIR}/src/openvino
|
||||
DESTINATION ${OV_CPACK_PYTHONDIR}/${pyversion}
|
||||
COMPONENT ${OV_CPACK_COMP_PYTHON_OPENVINO}_${pyversion}
|
||||
USE_SOURCE_PERMISSIONS
|
||||
|
||||
@@ -25,7 +25,7 @@ function(frontend_module TARGET FRAMEWORK INSTALL_COMPONENT)
|
||||
add_dependencies(py_ov_frontends ${TARGET_NAME})
|
||||
|
||||
target_include_directories(${TARGET_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
"${PYTHON_SOURCE_DIR}/pyopenvino/utils/")
|
||||
"${OpenVINOPython_SOURCE_DIR}/src/pyopenvino/utils/")
|
||||
target_link_libraries(${TARGET_NAME} PRIVATE openvino::runtime openvino::frontend::${FRAMEWORK})
|
||||
|
||||
set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE ${ENABLE_LTO})
|
||||
@@ -37,7 +37,7 @@ function(frontend_module TARGET FRAMEWORK INSTALL_COMPONENT)
|
||||
|
||||
# perform copy
|
||||
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${PYTHON_SOURCE_DIR}/openvino/frontend/${FRAMEWORK}/__init__.py
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${OpenVINOPython_SOURCE_DIR}/src/openvino/frontend/${FRAMEWORK}/__init__.py
|
||||
${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/__init__.py)
|
||||
|
||||
install(TARGETS ${TARGET_NAME}
|
||||
|
||||
@@ -40,7 +40,7 @@ endif()
|
||||
# perform copy
|
||||
add_custom_command(TARGET ${TARGET_NAME}
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${PYTHON_SOURCE_DIR}/openvino/test_utils/__init__.py ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/__init__.py
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${OpenVINOPython_SOURCE_DIR}/src/openvino/test_utils/__init__.py ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/__init__.py
|
||||
)
|
||||
|
||||
add_clang_format_target(${TARGET_NAME}_clang FOR_TARGETS ${TARGET_NAME}
|
||||
@@ -54,7 +54,7 @@ install(TARGETS ${TARGET_NAME}
|
||||
LIBRARY DESTINATION ${PYTHON_BRIDGE_CPACK_PATH}/${pyversion}/openvino/test_utils
|
||||
COMPONENT tests EXCLUDE_FROM_ALL)
|
||||
|
||||
install(PROGRAMS ${PYTHON_SOURCE_DIR}/openvino/test_utils/__init__.py
|
||||
install(PROGRAMS ${OpenVINOPython_SOURCE_DIR}/src/openvino/test_utils/__init__.py
|
||||
DESTINATION ${PYTHON_BRIDGE_CPACK_PATH}/${pyversion}/openvino/test_utils
|
||||
COMPONENT tests
|
||||
EXCLUDE_FROM_ALL)
|
||||
|
||||
@@ -45,19 +45,20 @@ set(openvino_wheel_path "${openvino_wheels_output_dir}/${openvino_wheel_name}")
|
||||
|
||||
add_custom_command(OUTPUT ${openvino_wheel_path}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/licensing" "${CMAKE_BINARY_DIR}/licensing"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${OpenVINO_SOURCE_DIR}/licensing" "${CMAKE_BINARY_DIR}/licensing"
|
||||
COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/site-packages"
|
||||
COMMAND ${CMAKE_COMMAND} -E env WHEEL_VERSION=${WHEEL_VERSION}
|
||||
WHEEL_BUILD=${WHEEL_BUILD}
|
||||
CMAKE_BUILD_DIR=${CMAKE_BINARY_DIR}
|
||||
OV_RUNTIME_LIBS_DIR=${OV_CPACK_RUNTIMEDIR}
|
||||
TBB_LIBS_DIR=${TBB_LIBS_DIR}
|
||||
PUGIXML_LIBS_DIR=${PUGIXML_LIBS_DIR}
|
||||
PY_PACKAGES_DIR=${PY_PACKAGES_DIR}
|
||||
WHEEL_BUILD=${WHEEL_BUILD}
|
||||
OPENVINO_BUILD_DIR=${OpenVINO_BINARY_DIR}
|
||||
OPENVINO_PYTHON_BUILD_DIR=${OpenVINOPython_BINARY_DIR}
|
||||
OV_RUNTIME_LIBS_DIR=${OV_WHEEL_RUNTIMEDIR}
|
||||
TBB_LIBS_DIR=${TBB_LIBS_DIR}
|
||||
PUGIXML_LIBS_DIR=${PUGIXML_LIBS_DIR}
|
||||
PY_PACKAGES_DIR=${PY_PACKAGES_DIR}
|
||||
${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/setup.py" clean bdist_wheel
|
||||
--dist-dir ${openvino_wheels_output_dir}
|
||||
--build=${WHEEL_BUILD}
|
||||
--plat-name=${WHEEL_PLATFORM}
|
||||
--dist-dir ${openvino_wheels_output_dir}
|
||||
--build=${WHEEL_BUILD}
|
||||
--plat-name=${WHEEL_PLATFORM}
|
||||
DEPENDS ${openvino_wheel_deps}
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/setup.py"
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
||||
|
||||
@@ -42,6 +42,8 @@ elif machine == "aarch64" or machine == "arm64":
|
||||
# The following variables can be defined in environment or .env file
|
||||
SCRIPT_DIR = Path(__file__).resolve().parents[0]
|
||||
CMAKE_BUILD_DIR = os.getenv("CMAKE_BUILD_DIR", ".")
|
||||
OPENVINO_BUILD_DIR = os.getenv("OPENVINO_BUILD_DIR", CMAKE_BUILD_DIR)
|
||||
OPENVINO_PYTHON_BUILD_DIR = os.getenv("OPENVINO_PYTHON_BUILD_DIR", CMAKE_BUILD_DIR)
|
||||
OV_RUNTIME_LIBS_DIR = os.getenv("OV_RUNTIME_LIBS_DIR", f"runtime/{LIBS_DIR}/{ARCH}/{CONFIG}")
|
||||
TBB_LIBS_DIR = os.getenv("TBB_LIBS_DIR", f"runtime/3rdparty/tbb/{LIBS_DIR}")
|
||||
PUGIXML_LIBS_DIR = os.getenv("PUGIXML_LIBS_DIR", f"runtime/3rdparty/pugixml/{LIBS_DIR}")
|
||||
@@ -54,70 +56,82 @@ LIB_INSTALL_CFG = {
|
||||
"prefix": "libs.core",
|
||||
"install_dir": OV_RUNTIME_LIBS_DIR,
|
||||
"rpath": LIBS_RPATH,
|
||||
"binary_dir": OPENVINO_BUILD_DIR,
|
||||
},
|
||||
"hetero_plugin": {
|
||||
"name": "hetero",
|
||||
"prefix": "libs.core",
|
||||
"install_dir": OV_RUNTIME_LIBS_DIR,
|
||||
"rpath": LIBS_RPATH,
|
||||
"binary_dir": OPENVINO_BUILD_DIR,
|
||||
},
|
||||
"gpu_plugin": {
|
||||
"name": "gpu",
|
||||
"prefix": "libs.core",
|
||||
"install_dir": OV_RUNTIME_LIBS_DIR,
|
||||
"rpath": LIBS_RPATH,
|
||||
"binary_dir": OPENVINO_BUILD_DIR,
|
||||
},
|
||||
"cpu_plugin": {
|
||||
"name": "cpu",
|
||||
"prefix": "libs.core",
|
||||
"install_dir": OV_RUNTIME_LIBS_DIR,
|
||||
"rpath": LIBS_RPATH,
|
||||
"binary_dir": OPENVINO_BUILD_DIR,
|
||||
},
|
||||
"multi_plugin": {
|
||||
"name": "multi",
|
||||
"prefix": "libs.core",
|
||||
"install_dir": OV_RUNTIME_LIBS_DIR,
|
||||
"rpath": LIBS_RPATH,
|
||||
"binary_dir": OPENVINO_BUILD_DIR,
|
||||
},
|
||||
"batch_plugin": {
|
||||
"name": "batch",
|
||||
"prefix": "libs.core",
|
||||
"install_dir": OV_RUNTIME_LIBS_DIR,
|
||||
"rpath": LIBS_RPATH,
|
||||
"binary_dir": OPENVINO_BUILD_DIR,
|
||||
},
|
||||
"tbb_libs": {
|
||||
"name": "tbb",
|
||||
"prefix": "libs.tbb",
|
||||
"install_dir": TBB_LIBS_DIR,
|
||||
"binary_dir": OPENVINO_BUILD_DIR,
|
||||
},
|
||||
"pugixml_libs": {
|
||||
"name": "pugixml",
|
||||
"prefix": "libs.pugixml",
|
||||
"install_dir": PUGIXML_LIBS_DIR,
|
||||
"binary_dir": OPENVINO_BUILD_DIR,
|
||||
},
|
||||
"ir_libs": {
|
||||
"name": "ir",
|
||||
"prefix": "libs.core",
|
||||
"install_dir": OV_RUNTIME_LIBS_DIR,
|
||||
"rpath": LIBS_RPATH,
|
||||
"binary_dir": OPENVINO_BUILD_DIR,
|
||||
},
|
||||
"paddle_libs": {
|
||||
"name": "paddle",
|
||||
"prefix": "libs.core",
|
||||
"install_dir": OV_RUNTIME_LIBS_DIR,
|
||||
"rpath": LIBS_RPATH,
|
||||
"binary_dir": OPENVINO_BUILD_DIR,
|
||||
},
|
||||
"onnx_libs": {
|
||||
"name": "onnx",
|
||||
"prefix": "libs.core",
|
||||
"install_dir": OV_RUNTIME_LIBS_DIR,
|
||||
"rpath": LIBS_RPATH,
|
||||
"binary_dir": OPENVINO_BUILD_DIR,
|
||||
},
|
||||
# uncomment once TF FE will be used in MO
|
||||
# "tensorflow_libs": { # noqa: E800
|
||||
# "name": "tensorflow", # noqa: E800
|
||||
# "prefix": "libs.core", # noqa: E800
|
||||
# "install_dir": OV_RUNTIME_LIBS_DIR, # noqa: E800
|
||||
# "binary_dir": OPENVINO_BUILD_DIR, # noqa: E800
|
||||
# }, # noqa: E800
|
||||
}
|
||||
|
||||
@@ -126,16 +140,19 @@ PY_INSTALL_CFG = {
|
||||
"name": f"pyie_{PYTHON_VERSION}",
|
||||
"prefix": "site-packages",
|
||||
"install_dir": PY_PACKAGES_DIR,
|
||||
"binary_dir": OPENVINO_PYTHON_BUILD_DIR,
|
||||
},
|
||||
"ngraph_py": {
|
||||
"name": f"pyngraph_{PYTHON_VERSION}",
|
||||
"prefix": "site-packages",
|
||||
"install_dir": PY_PACKAGES_DIR,
|
||||
"binary_dir": OPENVINO_PYTHON_BUILD_DIR,
|
||||
},
|
||||
"pyopenvino": {
|
||||
"name": f"pyopenvino_{PYTHON_VERSION}",
|
||||
"prefix": "site-packages",
|
||||
"install_dir": PY_PACKAGES_DIR,
|
||||
"binary_dir": OPENVINO_PYTHON_BUILD_DIR,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -193,24 +210,26 @@ class CustomBuild(build):
|
||||
self.jobs = multiprocessing.cpu_count() if self.jobs is None else int(self.jobs)
|
||||
|
||||
def run(self):
|
||||
global CMAKE_BUILD_DIR
|
||||
global OPENVINO_BUILD_DIR
|
||||
self.jobs = multiprocessing.cpu_count()
|
||||
plat_specifier = ".{0}-{1}.{2}".format(self.plat_name, *sys.version_info[:2])
|
||||
self.build_temp = os.path.join(self.build_base, "temp" + plat_specifier, self.config)
|
||||
|
||||
# if setup.py is directly called use CMake to build product
|
||||
if CMAKE_BUILD_DIR == ".":
|
||||
if OPENVINO_BUILD_DIR == ".":
|
||||
# set path to the root of OpenVINO CMakeList file
|
||||
openvino_root_dir = Path(__file__).resolve().parents[4]
|
||||
self.announce(f"Configuring cmake project: {openvino_root_dir}", level=3)
|
||||
self.spawn(["cmake", "-H" + str(openvino_root_dir), "-B" + self.build_temp,
|
||||
"-DCMAKE_BUILD_TYPE={type}".format(type=self.config),
|
||||
"-DENABLE_PYTHON=ON"])
|
||||
self.spawn(["cmake", "-S" + str(openvino_root_dir),
|
||||
"-B" + self.build_temp,
|
||||
"-DCMAKE_BUILD_TYPE={type}".format(type=self.config),
|
||||
"-DENABLE_PYTHON=ON"])
|
||||
|
||||
self.announce("Building binaries", level=3)
|
||||
self.spawn(["cmake", "--build", self.build_temp,
|
||||
"--config", self.config, "-j", str(self.jobs)])
|
||||
CMAKE_BUILD_DIR = self.build_temp
|
||||
"--config", self.config,
|
||||
"-j", str(self.jobs)])
|
||||
OPENVINO_BUILD_DIR = self.build_temp
|
||||
self.run_command("build_clib")
|
||||
|
||||
build.run(self)
|
||||
@@ -239,10 +258,15 @@ class PrepareLibs(build_clib):
|
||||
for comp, comp_data in install_cfg.items():
|
||||
install_prefix = comp_data.get("prefix")
|
||||
install_dir = comp_data.get("install_dir")
|
||||
binary_dir = comp_data.get("binary_dir")
|
||||
if install_dir and not os.path.isabs(install_dir):
|
||||
install_dir = os.path.join(install_prefix, install_dir)
|
||||
self.announce(f"Installing {comp}", level=3)
|
||||
self.spawn(["cmake", "--install", CMAKE_BUILD_DIR, "--prefix", install_prefix, "--component", comp_data.get("name")])
|
||||
self.spawn(["cmake", "--install", binary_dir,
|
||||
"--prefix", install_prefix,
|
||||
"--config", "Release",
|
||||
"--strip",
|
||||
"--component", comp_data.get("name")])
|
||||
# set rpath if applicable
|
||||
if sys.platform != "win32" and comp_data.get("rpath"):
|
||||
for path in filter(
|
||||
|
||||
Reference in New Issue
Block a user