From 336ef57ed8d4ed1f2709211d14d8eca9648e091a Mon Sep 17 00:00:00 2001 From: "Galantsev, Dmitrii" Date: Tue, 24 Oct 2023 18:37:12 -0500 Subject: [PATCH] CMake - Configure __version__ for python scripts Change-Id: I646dc27b5dc93e8dde38ff09ae9c826dfc7faaa7 Signed-off-by: Galantsev, Dmitrii --- CMakeLists.txt | 42 ++++++++++--------- amdsmi_cli/CMakeLists.txt | 5 ++- amdsmi_cli/__init__.py | 2 +- amdsmi_cli/_version.py | 1 - amdsmi_cli/_version.py.in | 1 + cmake_modules/utils.cmake | 1 + py-interface/CMakeLists.txt | 25 +++++++---- ...amdsmi_wrapper.py => amdsmi_wrapper.py.in} | 0 .../{pyproject.toml => pyproject.toml.in} | 2 +- py-interface/setup.cfg.in | 6 +++ update_wrapper.sh | 6 +-- 11 files changed, 54 insertions(+), 37 deletions(-) delete mode 100644 amdsmi_cli/_version.py create mode 100644 amdsmi_cli/_version.py.in rename py-interface/{amdsmi_wrapper.py => amdsmi_wrapper.py.in} (100%) rename py-interface/{pyproject.toml => pyproject.toml.in} (93%) create mode 100644 py-interface/setup.cfg.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 50683e7d81..ab61539758 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,18 +30,31 @@ find_program(GIT NAMES git) set(PKG_VERSION_GIT_TAG_PREFIX "amdsmi_pkg_ver") get_package_version_number("23.4.0" ${PKG_VERSION_GIT_TAG_PREFIX} GIT) message("Package version: ${PKG_VERSION_STR}") -set(${AMD_SMI_LIBS_TARGET}_VERSION_MAJOR "${VERSION_MAJOR}") -set(${AMD_SMI_LIBS_TARGET}_VERSION_MINOR "${VERSION_MINOR}") -set(${AMD_SMI_LIBS_TARGET}_VERSION_PATCH "0") +set(${AMD_SMI_LIBS_TARGET}_VERSION_MAJOR "${CPACK_PACKAGE_VERSION_MAJOR}") +set(${AMD_SMI_LIBS_TARGET}_VERSION_MINOR "${CPACK_PACKAGE_VERSION_MINOR}") +set(${AMD_SMI_LIBS_TARGET}_VERSION_PATCH "${CPACK_PACKAGE_VERSION_PATCH}") set(${AMD_SMI_LIBS_TARGET}_VERSION_BUILD "0") +set(${AMD_SMI_LIBS_TARGET}_VERSION_HASH "${PKG_VERSION_HASH}") + +set(${AMD_SMI_LIBS_TARGET}_VERSION_STRING "${${AMD_SMI_LIBS_TARGET}_VERSION_MAJOR}.${${AMD_SMI_LIBS_TARGET}_VERSION_MINOR}.${${AMD_SMI_LIBS_TARGET}_VERSION_PATCH}+${${AMD_SMI_LIBS_TARGET}_VERSION_HASH}") + +# Make proper version for appending +# Default Value is 99999 +set(ROCM_VERSION_FOR_PACKAGE "99999") +if(DEFINED ENV{ROCM_LIBPATCH_VERSION}) + set(ROCM_VERSION_FOR_PACKAGE $ENV{ROCM_LIBPATCH_VERSION}) +endif() +#Prepare final version for the CPACK use +set(CPACK_PACKAGE_VERSION + "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}.${ROCM_VERSION_FOR_PACKAGE}") # The following default version values should be updated as appropriate for # ABI breaks (update MAJOR and MINOR), and ABI/API additions (update MINOR). # Until ABI stabilizes VERSION_MAJOR will be 0. This should be over-ridden # by git tags (through "git describe") when they are present. -set(PKG_VERSION_MAJOR "${VERSION_MAJOR}") -set(PKG_VERSION_MINOR "${VERSION_MINOR}") -set(PKG_VERSION_PATCH 0) +set(PKG_VERSION_MAJOR "${CPACK_PACKAGE_VERSION_MAJOR}") +set(PKG_VERSION_MINOR "${CPACK_PACKAGE_VERSION_MINOR}") +set(PKG_VERSION_PATCH "${CPACK_PACKAGE_VERSION_PATCH}") set(PKG_VERSION_NUM_COMMIT 0) set(AMD_SMI_PACKAGE @@ -226,13 +239,6 @@ install( DESTINATION share/doc/${AMD_SMI} COMPONENT dev) -#Make proper version for appending -#Default Value is 99999, setting it first -set(ROCM_VERSION_FOR_PACKAGE "99999") -if(DEFINED ENV{ROCM_LIBPATCH_VERSION}) - set(ROCM_VERSION_FOR_PACKAGE $ENV{ROCM_LIBPATCH_VERSION}) -endif() - #Debian package specific variables set(CPACK_DEBIAN_PACKAGE_PROVIDES "amd-smi") set(CPACK_DEBIAN_PACKAGE_RECOMMENDS "sudo, libdrm-dev, python3-yaml") @@ -259,7 +265,8 @@ endif() set(CPACK_RPM_PACKAGE_PROVIDES "amd-smi") set(CPACK_RPM_DEV_PACKAGE_PROVIDES "${AMD_SMI_PACKAGE}") set(CPACK_RPM_ASAN_PACKAGE_PROVIDES "${AMD_SMI_PACKAGE}-asan") -set(CPACK_RPM_PACKAGE_SUGGESTS "python3 >= 3.7.9") +# python version gated by rhel8 :( +set(CPACK_RPM_PACKAGE_SUGGESTS "python3 >= 3.6.8") set(CPACK_RPM_DEV_PACKAGE_SUGGESTS ${CPACK_RPM_PACKAGE_SUGGESTS}) set(CPACK_RPM_ASAN_PACKAGE_SUGGESTS ${CPACK_RPM_PACKAGE_SUGGESTS}) @@ -294,14 +301,9 @@ endif() # https://bugzilla.redhat.com/show_bug.cgi?id=1811358 # set(CPACK_RPM_PACKAGE_SUGGESTS "sudo, libdrm-dev") -#Prepare final version for the CPACK use -set(CPACK_PACKAGE_VERSION - "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}.${ROCM_VERSION_FOR_PACKAGE}" -) - ## Process the Rpm install/remove scripts to update the CPACK variables configure_file("${CMAKE_CURRENT_SOURCE_DIR}/RPM/post.in" RPM/post @ONLY) -configure_file ( "${CMAKE_CURRENT_SOURCE_DIR}/RPM/preun.in" RPM/preun @ONLY ) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/RPM/preun.in" RPM/preun @ONLY) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/RPM/postun.in" RPM/postun @ONLY) set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/RPM/post") set ( CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/RPM/preun" ) diff --git a/amdsmi_cli/CMakeLists.txt b/amdsmi_cli/CMakeLists.txt index 3cd72a9fb1..96a9c4d4ba 100644 --- a/amdsmi_cli/CMakeLists.txt +++ b/amdsmi_cli/CMakeLists.txt @@ -9,10 +9,12 @@ set(PY_CLI_INSTALL_DIR "${CMAKE_INSTALL_LIBEXECDIR}" CACHE STRING "CLI tool installation directory") +# populate version string +configure_file(_version.py.in ${PY_PACKAGE_DIR}/_version.py @ONLY) + # hard-linking instead of copying avoids unnecessarry regeneration of packaged files add_custom_command( OUTPUT ${PY_PACKAGE_DIR}/__init__.py - ${PY_PACKAGE_DIR}/_version.py ${PY_PACKAGE_DIR}/amdsmi_cli.py ${PY_PACKAGE_DIR}/amdsmi_commands.py ${PY_PACKAGE_DIR}/amdsmi_helpers.py @@ -26,7 +28,6 @@ add_custom_command( DEPENDS amdsmi_cli COMMAND mkdir -p ${PY_PACKAGE_DIR}/ COMMAND ln -Pf ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py ${PY_PACKAGE_DIR}/ - COMMAND ln -Pf ${CMAKE_CURRENT_SOURCE_DIR}/_version.py ${PY_PACKAGE_DIR}/ COMMAND ln -Pf ${CMAKE_CURRENT_SOURCE_DIR}/amdsmi_cli.py ${PY_PACKAGE_DIR}/ COMMAND ln -Pf ${CMAKE_CURRENT_SOURCE_DIR}/amdsmi_commands.py ${PY_PACKAGE_DIR}/ COMMAND ln -Pf ${CMAKE_CURRENT_SOURCE_DIR}/amdsmi_helpers.py ${PY_PACKAGE_DIR}/ diff --git a/amdsmi_cli/__init__.py b/amdsmi_cli/__init__.py index 608c46bbe2..6a5649080e 100644 --- a/amdsmi_cli/__init__.py +++ b/amdsmi_cli/__init__.py @@ -1 +1 @@ -__version__ = "23.4.0.0" +from _version import __version__ diff --git a/amdsmi_cli/_version.py b/amdsmi_cli/_version.py deleted file mode 100644 index 608c46bbe2..0000000000 --- a/amdsmi_cli/_version.py +++ /dev/null @@ -1 +0,0 @@ -__version__ = "23.4.0.0" diff --git a/amdsmi_cli/_version.py.in b/amdsmi_cli/_version.py.in new file mode 100644 index 0000000000..479e19fe2e --- /dev/null +++ b/amdsmi_cli/_version.py.in @@ -0,0 +1 @@ +__version__ = "@amd_smi_libraries_VERSION_STRING@" diff --git a/cmake_modules/utils.cmake b/cmake_modules/utils.cmake index afaa442e59..7131761b67 100755 --- a/cmake_modules/utils.cmake +++ b/cmake_modules/utils.cmake @@ -159,6 +159,7 @@ function(get_package_version_number DEFAULT_VERSION_STRING VERSION_PREFIX GIT) endif() set(PKG_VERSION_STR "${PKG_VERSION_STR}-${VERSION_HASH}") set(PKG_VERSION_STR ${PKG_VERSION_STR} PARENT_SCOPE) + set(PKG_VERSION_HASH ${VERSION_HASH} PARENT_SCOPE) set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR} PARENT_SCOPE) set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR} PARENT_SCOPE) set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH} PARENT_SCOPE) diff --git a/py-interface/CMakeLists.txt b/py-interface/CMakeLists.txt index 7996d04bf1..048b456a62 100644 --- a/py-interface/CMakeLists.txt +++ b/py-interface/CMakeLists.txt @@ -36,8 +36,9 @@ if(NOT GOOD_CLANG_FOUND) OUTPUT amdsmi_wrapper.py ${PY_PACKAGE_DIR}/amdsmi_wrapper.py DEPENDS ${AMD_SMI} - ${CMAKE_CURRENT_SOURCE_DIR}/amdsmi_wrapper.py - COMMAND cp -f ${CMAKE_CURRENT_SOURCE_DIR}/amdsmi_wrapper.py ${CMAKE_CURRENT_BINARY_DIR}/ + ${CMAKE_CURRENT_SOURCE_DIR}/amdsmi_wrapper.py.in + # remove .in suffix when copying + COMMAND cp -f ${CMAKE_CURRENT_SOURCE_DIR}/amdsmi_wrapper.py.in ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper.py # hacky alternative to configure_file that will run at MAKE compile instead of CMake configure COMMAND sed -i s:"@CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@":"${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}":g @@ -58,7 +59,7 @@ else() configure_file(${PROJECT_SOURCE_DIR}/tools/generator.py generator.py @ONLY COPYONLY) add_custom_command( OUTPUT amdsmi.h - ${CMAKE_CURRENT_SOURCE_DIR}/amdsmi_wrapper.py + ${CMAKE_CURRENT_SOURCE_DIR}/amdsmi_wrapper.py.in amdsmi_wrapper.py ${PY_PACKAGE_DIR}/amdsmi_wrapper.py DEPENDS ${AMD_SMI} @@ -66,8 +67,9 @@ else() generator.py ${PROJECT_SOURCE_DIR}/include/amd_smi/amdsmi.h COMMAND cp ${PROJECT_SOURCE_DIR}/include/amd_smi/amdsmi.h ./ - COMMAND ${Python3_EXECUTABLE} generator.py "$<$:-e -DENABLE_ESMI_LIB>" -i amdsmi.h -l ${PROJECT_BINARY_DIR}/src/libamd_smi.so -o ${CMAKE_CURRENT_SOURCE_DIR}/amdsmi_wrapper.py - COMMAND cp -f ${CMAKE_CURRENT_SOURCE_DIR}/amdsmi_wrapper.py ${CMAKE_CURRENT_BINARY_DIR}/ + COMMAND ${Python3_EXECUTABLE} generator.py "$<$:-e -DENABLE_ESMI_LIB>" -i amdsmi.h -l ${PROJECT_BINARY_DIR}/src/libamd_smi.so -o ${CMAKE_CURRENT_SOURCE_DIR}/amdsmi_wrapper.py.in + # remove .in suffix when copying + COMMAND cp -f ${CMAKE_CURRENT_SOURCE_DIR}/amdsmi_wrapper.py.in ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper.py # hacky alternative to configure_file that will run at MAKE compile instead of CMake configure COMMAND sed -i s:"@CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@":"${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}":g @@ -76,20 +78,22 @@ else() COMMAND ln -Pf ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper.py ${PY_PACKAGE_DIR}/) endif() +# populate version string +configure_file(pyproject.toml.in ${PY_BUILD_DIR}/pyproject.toml @ONLY) +configure_file(setup.cfg.in ${PY_BUILD_DIR}/setup.cfg @ONLY) + add_custom_target( python_wrapper DEPENDS amdsmi_wrapper.py) # hard-linking instead of copying avoids unnecessarry regeneration of packaged files add_custom_command( - OUTPUT ${PY_BUILD_DIR}/pyproject.toml - ${PY_PACKAGE_DIR}/__init__.py + OUTPUT ${PY_PACKAGE_DIR}/__init__.py ${PY_PACKAGE_DIR}/amdsmi_exception.py ${PY_PACKAGE_DIR}/amdsmi_interface.py ${PY_PACKAGE_DIR}/README.md ${PY_PACKAGE_DIR}/LICENSE DEPENDS python_wrapper - COMMAND ln -Pf ${CMAKE_CURRENT_SOURCE_DIR}/pyproject.toml ${PY_BUILD_DIR}/ COMMAND ln -Pf ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py ${PY_PACKAGE_DIR}/ COMMAND ln -Pf ${CMAKE_CURRENT_SOURCE_DIR}/amdsmi_exception.py ${PY_PACKAGE_DIR}/ COMMAND ln -Pf ${CMAKE_CURRENT_SOURCE_DIR}/amdsmi_interface.py ${PY_PACKAGE_DIR}/ @@ -99,6 +103,7 @@ add_custom_command( add_custom_target( python_package ALL DEPENDS ${PY_BUILD_DIR}/pyproject.toml + ${PY_BUILD_DIR}/setup.cfg ${PY_PACKAGE_DIR}/__init__.py ${PY_PACKAGE_DIR}/amdsmi_exception.py ${PY_PACKAGE_DIR}/amdsmi_interface.py @@ -106,7 +111,9 @@ add_custom_target( ${PY_PACKAGE_DIR}/LICENSE) install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/${PY_BUILD_DIR}/pyproject.toml + FILES + ${CMAKE_CURRENT_BINARY_DIR}/${PY_BUILD_DIR}/pyproject.toml + ${CMAKE_CURRENT_BINARY_DIR}/${PY_BUILD_DIR}/setup.cfg DESTINATION ${PY_WRAPPER_INSTALL_DIR} COMPONENT dev) diff --git a/py-interface/amdsmi_wrapper.py b/py-interface/amdsmi_wrapper.py.in similarity index 100% rename from py-interface/amdsmi_wrapper.py rename to py-interface/amdsmi_wrapper.py.in diff --git a/py-interface/pyproject.toml b/py-interface/pyproject.toml.in similarity index 93% rename from py-interface/pyproject.toml rename to py-interface/pyproject.toml.in index fa2cb5d040..f659dc4202 100644 --- a/py-interface/pyproject.toml +++ b/py-interface/pyproject.toml.in @@ -10,7 +10,7 @@ name = "amdsmi" authors = [ {name = "AMD", email = "amd-smi.support@amd.com"}, ] -version = "23.4.0.0" +version = "@amd_smi_libraries_VERSION_STRING@" license = {file = "amdsmi/LICENSE"} readme = {file = "amdsmi/README.md", content-type = "text/markdown"} description = "AMDSMI Python LIB - AMD GPU Monitoring Library" diff --git a/py-interface/setup.cfg.in b/py-interface/setup.cfg.in new file mode 100644 index 0000000000..c073f89a12 --- /dev/null +++ b/py-interface/setup.cfg.in @@ -0,0 +1,6 @@ +# this file is only required for setuptools < 61.0 +# mostly a rhel8 limitation... + +[metadata] +name = "amdsmi" +version = "@amd_smi_libraries_VERSION_STRING@" diff --git a/update_wrapper.sh b/update_wrapper.sh index 0a836f5405..fdbb2985c9 100755 --- a/update_wrapper.sh +++ b/update_wrapper.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# this program generates py-interface/amdsmi_wrapper.py +# this program generates py-interface/amdsmi_wrapper.py.in set -eu @@ -44,7 +44,7 @@ cp -r /src /tmp/src \ && rm -rf build .cache \ && cmake -B build -DBUILD_WRAPPER=ON $ENABLE_ESMI_LIB \ && make -C build -j $(nproc) \ - && cp /tmp/src/py-interface/amdsmi_wrapper.py /src/py-interface/amdsmi_wrapper.py" + && cp /tmp/src/py-interface/amdsmi_wrapper.py.in /src/py-interface/amdsmi_wrapper.py.in" echo -e "Generated new wrapper! -[$DIR/py-interface/amdsmi_wrapper.py]" +[$DIR/py-interface/amdsmi_wrapper.py.in]"