From 7938c18b7c03ba5fec777d7b4a1d27be5838c059 Mon Sep 17 00:00:00 2001 From: Ilya Lavrenov Date: Thu, 23 Sep 2021 10:41:57 +0300 Subject: [PATCH] Improved openvino runtime python wheel build (#7604) * Proper dependencies for ie_wheel * Used version information when building wheels --- .../IEDevScriptsConfig.cmake | 2 +- cmake/developer_package/version.cmake | 4 +- .../ie_bridges/python/CMakeLists.txt | 4 +- .../ie_bridges/python/wheel/.env.in | 1 + .../ie_bridges/python/wheel/CMakeLists.txt | 58 ++++++++++--------- .../ie_bridges/python/wheel/setup.py | 1 + 6 files changed, 39 insertions(+), 31 deletions(-) diff --git a/cmake/developer_package/IEDevScriptsConfig.cmake b/cmake/developer_package/IEDevScriptsConfig.cmake index febe20339bb..aeecdf9db3d 100644 --- a/cmake/developer_package/IEDevScriptsConfig.cmake +++ b/cmake/developer_package/IEDevScriptsConfig.cmake @@ -14,7 +14,7 @@ set(CMAKE_MODULE_PATH "${IEDevScripts_DIR}") function(set_ci_build_number) set(repo_root "${CMAKE_SOURCE_DIR}") include(version) - foreach(var CI_BUILD_NUMBER IE_VERSION + foreach(var CI_BUILD_NUMBER IE_VERSION IE_VERSION_BUILD IE_VERSION_MAJOR IE_VERSION_MINOR IE_VERSION_PATCH) if(NOT DEFINED ${var}) message(FATAL_ERROR "${var} version component is not defined") diff --git a/cmake/developer_package/version.cmake b/cmake/developer_package/version.cmake index cfd3e22e71a..799912b4619 100644 --- a/cmake/developer_package/version.cmake +++ b/cmake/developer_package/version.cmake @@ -27,10 +27,12 @@ function (commitHash VAR) endfunction() macro(ie_parse_ci_build_number) - if(CI_BUILD_NUMBER MATCHES "^([0-9]+)\.([0-9]+)\.([0-9]+)\-.*") + set(IE_VERSION_BUILD 000) + if(CI_BUILD_NUMBER MATCHES "^([0-9]+)\.([0-9]+)\.([0-9]+)\-([0-9]+)\-.*") set(IE_VERSION_MAJOR ${CMAKE_MATCH_1}) set(IE_VERSION_MINOR ${CMAKE_MATCH_2}) set(IE_VERSION_PATCH ${CMAKE_MATCH_3}) + set(IE_VERSION_BUILD ${CMAKE_MATCH_4}) endif() if(NOT DEFINED repo_root) diff --git a/inference-engine/ie_bridges/python/CMakeLists.txt b/inference-engine/ie_bridges/python/CMakeLists.txt index a320d71a523..7691ca71bed 100644 --- a/inference-engine/ie_bridges/python/CMakeLists.txt +++ b/inference-engine/ie_bridges/python/CMakeLists.txt @@ -34,7 +34,9 @@ else() endif() if(PYTHONLIBS_VERSION_STRING MATCHES "^([0-9]+)\.([0-9]+).*") - set(PYTHON_VERSION python${CMAKE_MATCH_1}.${CMAKE_MATCH_2}) + set(PYTHON_VERSION_MAJOR ${CMAKE_MATCH_1}) + set(PYTHON_VERSION_MINOR ${CMAKE_MATCH_2}) + set(PYTHON_VERSION python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}) else() message(FATAL_ERROR "Failed to extract python major.minor from ${PYTHONLIBS_VERSION_STRING}") endif() diff --git a/inference-engine/ie_bridges/python/wheel/.env.in b/inference-engine/ie_bridges/python/wheel/.env.in index 760f8bcb358..5dc313f6b1d 100644 --- a/inference-engine/ie_bridges/python/wheel/.env.in +++ b/inference-engine/ie_bridges/python/wheel/.env.in @@ -1,5 +1,6 @@ WHEEL_PACKAGE_NAME=@WHEEL_PACKAGE_NAME@ WHEEL_VERSION=@WHEEL_VERSION@ +WHEEL_BUILD=@WHEEL_BUILD@ WHEEL_LICENCE_TYPE=@WHEEL_LICENCE_TYPE@ WHEEL_AUTHOR=@WHEEL_AUTHOR@ WHEEL_AUTHOR_EMAIL=@WHEEL_AUTHOR_EMAIL@ diff --git a/inference-engine/ie_bridges/python/wheel/CMakeLists.txt b/inference-engine/ie_bridges/python/wheel/CMakeLists.txt index 00deb5b0887..ce1306f3f69 100644 --- a/inference-engine/ie_bridges/python/wheel/CMakeLists.txt +++ b/inference-engine/ie_bridges/python/wheel/CMakeLists.txt @@ -9,14 +9,15 @@ set(WHEEL_AUTHOR_EMAIL "openvino_pushbot@intel.com" CACHE STRING "Email address set(WHEEL_DESC "Inference Engine Python* API" CACHE STRING "Short, summary description of the package") set(WHEEL_URL "https://docs.openvinotoolkit.org/latest/index.html" CACHE STRING "Home page url") set(WHEEL_DOWNLOAD_URL "https://github.com/openvinotoolkit/openvino/tags" CACHE STRING "Download page url") -set(WHEEL_VERSION "0.0.0" CACHE STRING "Version of this release") -set(WHEEL_BUILD "000" CACHE STRING "Build number of this release") +set(WHEEL_VERSION "${IE_VERSION}" CACHE STRING "Version of this release" FORCE) +set(WHEEL_BUILD "${IE_VERSION_BUILD}" CACHE STRING "Build number of this release" FORCE) set(WHEEL_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE" CACHE STRING "Wheel license file") set(WHEEL_REQUIREMENTS "${CMAKE_CURRENT_SOURCE_DIR}/meta/openvino.requirements.txt" CACHE STRING "Wheel requirements.txt file") set(WHEEL_OVERVIEW "${CMAKE_CURRENT_SOURCE_DIR}/meta/pypi_overview.md" CACHE STRING "Detailed description") set(SETUP_PY "${CMAKE_CURRENT_SOURCE_DIR}/setup.py") set(SETUP_ENV "${CMAKE_CURRENT_SOURCE_DIR}/.env.in") +set(SETUP_ENV_OUT "${CMAKE_CURRENT_SOURCE_DIR}/.env") set(PY_PACKAGES_DIR ${PYTHON_BRIDGE_CPACK_PATH}/${PYTHON_VERSION}) set(TBB_LIBS_DIR runtime/3rdparty/tbb/lib) @@ -32,15 +33,7 @@ else() message(FATAL_ERROR "This platform is not supported") endif() -configure_file(${SETUP_ENV} "${CMAKE_CURRENT_SOURCE_DIR}/.env" @ONLY) - -add_custom_target(ie_wheel ALL DEPENDS ie_api offline_transformations_api) - -foreach(_target ie_libraries ie_plugins _pyngraph) - if(TARGET ${_target}) - add_dependencies(ie_wheel ${_target}) - endif() -endforeach() +configure_file(${SETUP_ENV} ${SETUP_ENV_OUT} @ONLY) if(LINUX) find_host_program(patchelf_program @@ -51,21 +44,30 @@ if(LINUX) endif() endif() -add_custom_command(TARGET ie_wheel - PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/site-packages" - COMMAND ${PYTHON_EXECUTABLE} ${SETUP_PY} clean bdist_wheel - --dist-dir ${CMAKE_BINARY_DIR}/wheels - --build=${WHEEL_BUILD} - --plat-name=${WHEEL_PLATFORM} - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_CURRENT_SOURCE_DIR}/.env" - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" - COMMENT "Building Python wheel ${WHEEL_PACKAGE_NAME}" - VERBATIM -) +# create target for openvino.wheel -set_property(TARGET ie_wheel - APPEND - PROPERTY ADDITIONAL_CLEAN_FILES "${CMAKE_BINARY_DIR}/wheels" -) +set(openvino_wheel_deps ie_api offline_transformations_api) +foreach(_target ie_libraries ie_plugins _pyngraph) + if(TARGET ${_target}) + list(APPEND openvino_wheel_deps ${_target}) + endif() +endforeach() + +set(cp_python "cp${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}") +set(openvino_wheel_name "openvino-${WHEEL_VERSION}-${WHEEL_BUILD}-${cp_python}-${cp_python}-${WHEEL_PLATFORM}.whl") +set(openvino_wheels_output_dir "${CMAKE_BINARY_DIR}/wheels") +set(openvino_wheel_path "${openvino_wheels_output_dir}/${openvino_wheel_name}") + +add_custom_command(OUTPUT ${openvino_wheel_path} + COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/site-packages" + COMMAND ${PYTHON_EXECUTABLE} ${SETUP_PY} clean bdist_wheel + --dist-dir ${openvino_wheels_output_dir} + --build=${WHEEL_BUILD} + --plat-name=${WHEEL_PLATFORM} + # COMMAND ${CMAKE_COMMAND} -E remove ${SETUP_ENV_OUT} + DEPENDS ${openvino_wheel_deps} ${SETUP_ENV_OUT} + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + COMMENT "Building Python wheel ${openvino_wheel_name}" + VERBATIM) + +add_custom_target(ie_wheel DEPENDS ${openvino_wheel_path}) diff --git a/inference-engine/ie_bridges/python/wheel/setup.py b/inference-engine/ie_bridges/python/wheel/setup.py index 436baa7a7c9..dcf7967260c 100644 --- a/inference-engine/ie_bridges/python/wheel/setup.py +++ b/inference-engine/ie_bridges/python/wheel/setup.py @@ -446,6 +446,7 @@ ext_modules = find_prebuilt_extensions(get_dir_list(PY_INSTALL_CFG)) if pkg_name setup( version=config('WHEEL_VERSION', '0.0.0'), + build=config('WHEEL_BUILD', '000'), author_email=config('WHEEL_AUTHOR_EMAIL', 'openvino_pushbot@intel.com'), name=pkg_name, license=config('WHEEL_LICENCE_TYPE', 'OSI Approved :: Apache Software License'),