diff --git a/projects/rocminfo/CMakeLists.txt b/projects/rocminfo/CMakeLists.txt index eac5c31df0..a733d8a2e4 100755 --- a/projects/rocminfo/CMakeLists.txt +++ b/projects/rocminfo/CMakeLists.txt @@ -38,6 +38,14 @@ if(WIN32) message("This sample is not supported on Windows platform") return() endif() + +## Set default module path if not already set +if(NOT DEFINED CMAKE_MODULE_PATH) + set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/") +endif() +## Include common cmake modules +include(utils) + # # Process input variables # @@ -93,6 +101,27 @@ set(ROCMINFO_EXE "rocminfo") set(PROJECT_NAME ${ROCMINFO_EXE}) project (${PROJECT_NAME}) + + +# 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 1) +set(PKG_VERSION_MINOR 0) +set(PKG_VERSION_PATCH 0) +set(PKG_VERSION_NUM_COMMIT 0) + +################# Determine the library version ######################### +## Setup the package version based on git tags. +set(PKG_VERSION_GIT_TAG_PREFIX "rocminfo_pkg_ver") + +find_program (GIT NAMES git) + +get_package_version_number("1.0.0" ${PKG_VERSION_GIT_TAG_PREFIX} GIT) +# VERSION_* variables should be set by get_version_from_tag +message("Package version: ${PKG_VERSION_STR}") + # # Print out the build configuration being used: # @@ -207,32 +236,22 @@ install ( ########################### # Packaging directives ########################### -set(CPACK_PACKAGE_NAME "${PROJECT_NAME}") +# set(CPACK_PACKAGE_NAME "${PROJECT_NAME}") +set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PKG_VERSION_STR}") if (NOT DEFINED CPACK_PACKAGE_VENDOR) set(CPACK_PACKAGE_VENDOR "AMD") endif () -if (NOT DEFINED CPACK_PACKAGE_VERSION_MAJOR) - set(CPACK_PACKAGE_VERSION_MAJOR "1") -endif () - -if (NOT DEFINED CPACK_PACKAGE_VERSION_MINOR) - set(CPACK_PACKAGE_VERSION_MINOR "0") -endif () - -if (NOT DEFINED CPACK_PACKAGE_VERSION_PATCH) - set(CPACK_PACKAGE_VERSION_PATCH "0") -endif () - -if (NOT DEFINED CPACK_PACKAGE_CONTACT) - set(CPACK_PACKAGE_CONTACT "Advanced Micro Devices Inc.") -endif () - if (NOT DEFINED CPACK_PACKAGE_DESCRIPTION_SUMMARY) set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Radeon Open Compute (ROCm) Runtime rocminfo tool") endif () + +if (NOT DEFINED CPACK_PACKAGE_CONTACT) + set(CPACK_PACKAGE_CONTACT "Advanced Micro Devices Inc.") +endif() + ########################### # Debian package specific variables ########################### diff --git a/projects/rocminfo/cmake_modules/utils.cmake b/projects/rocminfo/cmake_modules/utils.cmake new file mode 100755 index 0000000000..5e1c19bd3f --- /dev/null +++ b/projects/rocminfo/cmake_modules/utils.cmake @@ -0,0 +1,162 @@ +################################################################################ +## +## The University of Illinois/NCSA +## Open Source License (NCSA) +## +## Copyright (c) 2014-2017, Advanced Micro Devices, Inc. All rights reserved. +## +## Developed by: +## +## AMD Research and AMD HSA Software Development +## +## Advanced Micro Devices, Inc. +## +## www.amd.com +## +## Permission is hereby granted, free of charge, to any person obtaining a copy +## of this software and associated documentation files (the "Software"), to +## deal with the Software without restriction, including without limitation +## the rights to use, copy, modify, merge, publish, distribute, sublicense, +## and#or sell copies of the Software, and to permit persons to whom the +## Software is furnished to do so, subject to the following conditions: +## +## - Redistributions of source code must retain the above copyright notice, +## this list of conditions and the following disclaimers. +## - Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimers in +## the documentation and#or other materials provided with the distribution. +## - Neither the names of Advanced Micro Devices, Inc, +## nor the names of its contributors may be used to endorse or promote +## products derived from this Software without specific prior written +## permission. +## +## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +## THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR +## OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +## ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +## DEALINGS WITH THE SOFTWARE. +## +################################################################################ + +## Parses the VERSION_STRING variable and places +## the first, second and third number values in +## the major, minor and patch variables. +function( parse_version VERSION_STRING ) + + string ( FIND ${VERSION_STRING} "-" STRING_INDEX ) + + if ( ${STRING_INDEX} GREATER -1 ) + math ( EXPR STRING_INDEX "${STRING_INDEX} + 1" ) + string ( SUBSTRING ${VERSION_STRING} ${STRING_INDEX} -1 VERSION_BUILD ) + endif () + + string ( REGEX MATCHALL "[0123456789]+" VERSIONS ${VERSION_STRING} ) + list ( LENGTH VERSIONS VERSION_COUNT ) + + if ( ${VERSION_COUNT} GREATER 0) + list ( GET VERSIONS 0 MAJOR ) + set ( VERSION_MAJOR ${MAJOR} PARENT_SCOPE ) + set ( TEMP_VERSION_STRING "${MAJOR}" ) + endif () + + if ( ${VERSION_COUNT} GREATER 1 ) + list ( GET VERSIONS 1 MINOR ) + set ( VERSION_MINOR ${MINOR} PARENT_SCOPE ) + set ( TEMP_VERSION_STRING "${TEMP_VERSION_STRING}.${MINOR}" ) + endif () + + if ( ${VERSION_COUNT} GREATER 2 ) + list ( GET VERSIONS 2 PATCH ) + set ( VERSION_PATCH ${PATCH} PARENT_SCOPE ) + set ( TEMP_VERSION_STRING "${TEMP_VERSION_STRING}.${PATCH}" ) + endif () + + set ( VERSION_STRING "${TEMP_VERSION_STRING}" PARENT_SCOPE ) + +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} ) + + if ( GIT ) + execute_process ( COMMAND git describe --tags --dirty --long --match ${VERSION_PREFIX}-[0-9.]* + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_TAG_STRING + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE RESULT ) + if ( ${RESULT} EQUAL 0 ) + 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 ) +endfunction() + +function(num_change_since_prev_pkg VERSION_PREFIX) + find_program(get_commits NAMES version_util.sh + PATHS ${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules) + if (get_commits) + execute_process( COMMAND ${get_commits} -c ${VERSION_PREFIX} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE NUM_COMMITS + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE RESULT ) + + set(NUM_COMMITS "${NUM_COMMITS}" PARENT_SCOPE ) + + if ( ${RESULT} EQUAL 0 ) + message("${NUM_COMMITS} were found since previous release") + else() + message("Unable to determine number of commits since previous release") + endif() + else() + message("WARNING: Didn't find version_util.sh") + set(NUM_COMMITS "unknown" PARENT_SCOPE ) + endif() +endfunction() + +function(get_package_version_number DEFAULT_VERSION_STRING VERSION_PREFIX GIT) + 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}") + if (DEFINED ENV{ROCM_BUILD_ID}) + set(VERSION_ID $ENV{ROCM_BUILD_ID}) + else() + set(VERSION_ID "local_build-0") + endif() + + set(PKG_VERSION_STR "${PKG_VERSION_STR}.${VERSION_ID}") + + if (GIT) + execute_process(COMMAND git rev-parse --short HEAD + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE VERSION_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE RESULT ) + if( ${RESULT} EQUAL 0 ) + # Check for dirty workspace. + execute_process(COMMAND git diff --quiet + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + RESULT_VARIABLE RESULT ) + if(${RESULT} EQUAL 1) + set(VERSION_HASH "${VERSION_HASH}-dirty") + endif() + else() + set( VERSION_HASH "unknown" ) + endif() + else() + set( VERSION_HASH "unknown" ) + endif() + set(PKG_VERSION_STR "${PKG_VERSION_STR}-${VERSION_HASH}") + set(PKG_VERSION_STR ${PKG_VERSION_STR} PARENT_SCOPE) +endfunction() diff --git a/projects/rocminfo/cmake_modules/version_util.sh b/projects/rocminfo/cmake_modules/version_util.sh new file mode 100755 index 0000000000..5c1ded9631 --- /dev/null +++ b/projects/rocminfo/cmake_modules/version_util.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# Handle commandline args +while [ "$1" != "" ]; do + case $1 in + -c ) # Commits since prevous tag + TARGET="count" ;; + * ) + TARGET="count" + break ;; + esac + shift 1 +done +TAG_PREFIX=$1 +reg_ex="${TAG_PREFIX}*" + +commits_since_last_tag() { + TAG_ARR=(`git tag --sort=committerdate -l ${reg_ex} | tail -2`) + PREVIOUS_TAG=${TAG_ARR[0]} + CURRENT_TAG=${TAG_ARR[1]} + + PREV_CMT_NUM=`git rev-list --count $PREVIOUS_TAG` + CURR_CMT_NUM=`git rev-list --count $CURRENT_TAG` + + # Commits since prevous tag: + if [[ -z $PREV_CMT_NUM || -z $CURR_CMT_NUM ]]; then + let NUM_COMMITS="0" + else + let NUM_COMMITS="${CURR_CMT_NUM}-${PREV_CMT_NUM}" + fi + echo $NUM_COMMITS +} + +case $TARGET in + count) commits_since_last_tag ;; + *) die "Invalid target $target" ;; +esac + +exit 0 +