Set the SOVERSION in CMake from MAJOR/MINOR/RELEASE variables instead of git info Backports: * https://github.com/ROCm/amdsmi/commit/ccfdb65b6ff873d74c610cc48b3b398002a16757 * https://github.com/ROCm/amdsmi/commit/925014ddafb3d6c18686613afd7ac817b548f1e6 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,11 @@ find_program(GIT NAMES git) ## Setup the package version based on git tags. set(PKG_VERSION_GIT_TAG_PREFIX "amdsmi_pkg_ver") +get_version_from_file("include/amd_smi/amdsmi.h" "MAJOR") +get_version_from_file("include/amd_smi/amdsmi.h" "MINOR") +get_version_from_file("include/amd_smi/amdsmi.h" "RELEASE") +set(DEFAULT_VERSION "${MAJOR}.${MINOR}.${RELEASE}") +get_package_version_number(${DEFAULT_VERSION} ${PKG_VERSION_GIT_TAG_PREFIX} GIT) get_package_version_number("26.0.2" ${PKG_VERSION_GIT_TAG_PREFIX} GIT) message("Package version: ${PKG_VERSION_STR}") set(${AMD_SMI_LIBS_TARGET}_VERSION_MAJOR "${CPACK_PACKAGE_VERSION_MAJOR}") @@ -54,6 +59,11 @@ 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}" ) +set(DEFAULT_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") +update_version_in_file("include/amd_smi/amdsmi.h" ${DEFAULT_VERSION} "#define AMDSMI_LIB_VERSION_" " *" " ") +update_version_in_file("rust-interface/src/amdsmi_wrapper.rs" ${DEFAULT_VERSION} "AMDSMI_LIB_VERSION_" " *: *u32 *= *" + ": u32 = ") + # Make proper version for appending # Default Value is 99999 set(ROCM_VERSION_FOR_PACKAGE "99999") --- a/cmake_modules/utils.cmake +++ b/cmake_modules/utils.cmake @@ -56,30 +56,87 @@ function(parse_version VERSION_STRING) endfunction() +function(get_version_from_file REL_FILE_PATH ITEM) + set(FILE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${REL_FILE_PATH}") + set(OUTPUT_ITEM "0") + + if(EXISTS "${FILE_PATH}") + file(READ ${FILE_PATH} file_contents) + string(REGEX MATCHALL "AMDSMI_LIB_VERSION_${ITEM} *[0-9]+" OUTPUT_STR "${file_contents}") + list(LENGTH OUTPUT_STR OUTPUT_STR_LENGTH) + if(${OUTPUT_STR_LENGTH} GREATER 0) + string(REGEX MATCH "[0-9]+" OUTPUT_ITEM "${OUTPUT_STR}") + endif() + endif() + + set(${ITEM} "${OUTPUT_ITEM}" PARENT_SCOPE) +endfunction() + +# Parses file for a pattern and replaces the value +# associated with that pattern with a specified value +# Replaces VERSION(MAJOR.MINOR.RELEASE) with updated values +function(update_version_in_file REL_FILE_PATH DEFAULT_VERSION PAT1 PAT2 PAT3) + get_version_from_file(${REL_FILE_PATH} "MAJOR") + get_version_from_file(${REL_FILE_PATH} "MINOR") + get_version_from_file(${REL_FILE_PATH} "RELEASE") + set(FILE_VERSION "${MAJOR}.${MINOR}.${RELEASE}") + + if(DEFAULT_VERSION VERSION_GREATER FILE_VERSION) + set(FILE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${REL_FILE_PATH}") + if(EXISTS "${FILE_PATH}") + parse_version(${DEFAULT_VERSION}) + file(READ ${FILE_PATH} file_contents_new) + + string(REGEX REPLACE "${PAT1}MAJOR${PAT2} *[0-9]*" "${PAT1}MAJOR${PAT3}${VERSION_MAJOR}" file_contents + "${file_contents_new}") + string(REGEX REPLACE "${PAT1}MINOR${PAT2} *[0-9]*" "${PAT1}MINOR${PAT3}${VERSION_MINOR}" file_contents_new + "${file_contents}") + string(REGEX REPLACE "${PAT1}RELEASE${PAT2} *[0-9]*" "${PAT1}RELEASE${PAT3}${VERSION_PATCH}" file_contents + "${file_contents_new}") + + file(WRITE ${FILE_PATH} "${file_contents}") + endif() + set(VERSION_STRING "${DEFAULT_VERSION}" PARENT_SCOPE) + else() + set(VERSION_STRING "${FILE_VERSION}" PARENT_SCOPE) + endif() +endfunction() + ## Gets the current version of the repository ## using versioning tags and git describe. ## Passes back a packaging version string ## and a library version string. function(get_version_from_tag DEFAULT_VERSION_STRING VERSION_PREFIX GIT) parse_version(${DEFAULT_VERSION_STRING}) + set(DEFAULT_VERSION_MAJOR "${VERSION_MAJOR}") + set(DEFAULT_VERSION_MINOR "${VERSION_MINOR}") + set(DEFAULT_VERSION_PATCH "${VERSION_PATCH}") if(GIT) execute_process( - COMMAND git describe --tags --dirty --long --match ${VERSION_PREFIX}-[0-9.]* + COMMAND git tag --list --sort=-version:refname "${VERSION_PREFIX}*" + COMMAND head -n 1 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE GIT_TAG_STRING - OUTPUT_STRIP_TRAILING_WHITESPACE - RESULT_VARIABLE RESULT) - if(${RESULT} EQUAL 0) + OUTPUT_STRIP_TRAILING_WHITESPACE RESULTS_VARIABLE RESULTS) + if(GIT_TAG_STRING) + parse_version(${GIT_TAG_STRING}) endif() endif() - set(VERSION_STRING "${VERSION_STRING}" PARENT_SCOPE) - set(VERSION_MAJOR "${VERSION_MAJOR}" PARENT_SCOPE) - set(VERSION_MINOR "${VERSION_MINOR}" PARENT_SCOPE) - set(VERSION_PATCH "${VERSION_PATCH}" PARENT_SCOPE) + if(VERSION_STRING VERSION_GREATER DEFAULT_VERSION_STRING) + set(VERSION_STRING "${VERSION_STRING}" PARENT_SCOPE) + set(VERSION_MAJOR "${VERSION_MAJOR}" PARENT_SCOPE) + set(VERSION_MINOR "${VERSION_MINOR}" PARENT_SCOPE) + set(VERSION_PATCH "${VERSION_PATCH}" PARENT_SCOPE) + else() + set(VERSION_STRING "${DEFAULT_VERSION_STRING}" PARENT_SCOPE) + set(VERSION_MAJOR "${DEFAULT_VERSION_MAJOR}" PARENT_SCOPE) + set(VERSION_MINOR "${DEFAULT_VERSION_MINOR}" PARENT_SCOPE) + set(VERSION_PATCH "${DEFAULT_VERSION_PATCH}" PARENT_SCOPE) + endif() endfunction() function(num_change_since_prev_pkg VERSION_PREFIX) @@ -106,6 +163,7 @@ function(num_change_since_prev_pkg VERSION_PREFIX) endfunction() function(get_package_version_number DEFAULT_VERSION_STRING VERSION_PREFIX GIT) + parse_version(${DEFAULT_VERSION_STRING}) get_version_from_tag(${DEFAULT_VERSION_STRING} ${VERSION_PREFIX} GIT) num_change_since_prev_pkg(${VERSION_PREFIX}) set(PKG_VERSION_STR "${VERSION_STRING}.${NUM_COMMITS}") --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -59,27 +59,9 @@ endif() # VERSION_* variables should be set by get_version_from_tag message("Package version: ${PKG_VERSION_STR}") -# Debian package specific variables -# Set a default value for the package version -get_version_from_tag("${${AMD_SMI_LIBS_TARGET}_VERSION_MAJOR}.${${AMD_SMI_LIBS_TARGET}_VERSION_MINOR}.0.0" - ${SO_VERSION_GIT_TAG_PREFIX} GIT) - -# VERSION_* variables should be set by get_version_from_tag -if(${ROCM_PATCH_VERSION}) - set(VERSION_PATCH ${ROCM_PATCH_VERSION}) - set(SO_VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") -else() - set(SO_VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}") -endif() -set(${AMD_SMI}_VERSION_MAJOR "${VERSION_MAJOR}") -set(${AMD_SMI}_VERSION_MINOR "${VERSION_MINOR}") -set(${AMD_SMI}_VERSION_PATCH "0") -set(${AMD_SMI}_VERSION_BUILD "0") +set(SO_VERSION_STRING "${MAJOR}.${MINOR}.${RELEASE}") message("SOVERSION: ${SO_VERSION_STRING}") -# Create a configure file to get version info from within library -configure_file("amd_smiConfig.in" "${PROJECT_SOURCE_DIR}/include/amd_smi/amd_smiConfig.h") - add_library(${AMD_SMI} ${SRC_LIST} ${INC_LIST}) target_link_libraries(${AMD_SMI} pthread rt dl ${DRM_LIBRARIES} ${AMDGPU_DRM_LIBRARIES}) target_include_directories(${AMD_SMI} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/rocm_smi/include @@ -90,7 +72,7 @@ target_include_directories(${AMD_SMI} PUBLIC "$") ## Set the VERSION and SOVERSION values -set_property(TARGET ${AMD_SMI} PROPERTY SOVERSION "${VERSION_MAJOR}") +set_property(TARGET ${AMD_SMI} PROPERTY SOVERSION "${MAJOR}") set_property(TARGET ${AMD_SMI} PROPERTY VERSION "${SO_VERSION_STRING}") ## If the library is a release, strip the target library @@ -115,6 +97,6 @@ install( DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/amd_smi COMPONENT dev) install( - FILES ${PROJECT_SOURCE_DIR}/include/amd_smi/amd_smiConfig.h + FILES ${PROJECT_SOURCE_DIR}/rocm_smi/include/rocm_smi/kfd_ioctl.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/amd_smi COMPONENT dev)