diff --git a/CMakeLists.txt b/CMakeLists.txt index e8a6958..7346c24 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,7 @@ add_definitions( -DTARGET_LIBRARY_NAME=\"${CORE_TARGET}\" -DTARGET_LIBRARY_INSTA ## Build Type Settings set( CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." ) +set( VERSIONED_PKGING_ENABLED OFF CACHE BOOL "Enable or Disable Versioned Packaging by Default" ) ## Verbose output. set( CMAKE_VERBOSE_MAKEFILE on ) @@ -123,6 +124,35 @@ set( SO_VERSION_STRING "${SO_MAJOR}.${SO_MINOR}.${ROCM_LIBPATCH_VERSION}" ) set_property( TARGET ${CORE_TARGET} PROPERTY VERSION "${SO_VERSION_STRING}" ) set_property( TARGET ${CORE_TARGET} PROPERTY SOVERSION "${SO_MAJOR}" ) +# Additional Component String for Versioned Packaging +if( VERSIONED_PKGING_ENABLED ) + # Meta Package Component Name Strings + set( CORE_ASAN_META_COMPONENT "CORE_ASAN_META" ) + set( CORE_RT_META_COMPONENT "CORE_RT_META" ) + set( CORE_ST_META_COMPONENT "CORE_ST_META" ) +else() + set( CORE_ASAN_META_COMPONENT "" ) + set( CORE_RT_META_COMPONENT "" ) + set( CORE_ST_META_COMPONENT "" ) +endif() + +if(ENABLE_ASAN_PACKAGING) + # Only libraries required for ASAN Package + set( CPACK_COMPONENTS_ALL CORE_ASAN ${CORE_ASAN_META_COMPONENT}) + set( COMP_TYPE "CORE_ASAN" ) + set( PKG_DESCRIPTION "ROCm AddressSanitizer Instrumented Runtime software stack" ) +else() + if(BUILD_SHARED_LIBS) + set( CPACK_COMPONENTS_ALL CORE_RUNTIME ${CORE_RT_META_COMPONENT}) + set( COMP_TYPE "CORE_RUNTIME" ) + set( PKG_DESCRIPTION "ROCm Runtime software stack" ) + else() + set( CPACK_COMPONENTS_ALL CORE_STATIC ${CORE_ST_META_COMPONENT}) + set( STATIC_COMP_TYPE "CORE_STATIC" ) + set( PKG_DESCRIPTION "ROCm Static software stack" ) + endif() +endif() + #Add the libpatch version if available to the version file if( DEFINED VERSION_POINT ) file ( WRITE "${CMAKE_CURRENT_BINARY_DIR}/version" "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_POINT}\n" ) @@ -170,6 +200,20 @@ else() COMPONENT ${STATIC_COMP_TYPE} ) endif() +# Install Files for Meta Component +if( VERSIONED_PKGING_ENABLED ) + file ( WRITE "${CMAKE_CURRENT_BINARY_DIR}/${CORE_TARGET}_INFO" "This is a Meta Package for ${CORE_TARGET}\n" ) + install ( FILES ${CMAKE_CURRENT_BINARY_DIR}/${CORE_TARGET}_INFO + DESTINATION .info_${CORE_ASAN_META_COMPONENT} + COMPONENT ${CORE_ASAN_META_COMPONENT} ) + install ( FILES ${CMAKE_CURRENT_BINARY_DIR}/${CORE_TARGET}_INFO + DESTINATION .info_${CORE_RT_META_COMPONENT} + COMPONENT ${CORE_RT_META_COMPONENT} ) + install ( FILES ${CMAKE_CURRENT_BINARY_DIR}/${CORE_TARGET}_INFO + DESTINATION .info_${CORE_ST_META_COMPONENT} + COMPONENT ${CORE_ST_META_COMPONENT} ) +endif() + ## Cmake module config file configurations set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/" CACHE INTERNAL "Default module path.") @@ -222,18 +266,46 @@ set ( CPACK_PACKAGE_CONTACT "${PKG_MAINTAINER_NM} <${PKG_MAINTAINER_EMAIL}>" ) set ( CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PKG_DESCRIPTION}" ) set ( CPACK_RESOURCE_FILE_LICENSE "${LICENSE_FILE}" ) ## packaging variables -if ( DEFINED ROCM_LIBPATCH_VERSION ) +if( NOT VERSIONED_PKGING_ENABLED ) + set( VERSIONED_PKGING_VERSION_STRING "") +else() + if(DEFINED ENV{ROCM_VERSION}) + set( VERSIONED_PKGING_VERSION_STRING $ENV{ROCM_VERSION} ) + elseif(DEFINED ROCM_VERSION) + set( VERSIONED_PKGING_VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}" ) + if(DEFINED VERSION_POINT) + set( VERSIONED_PKGING_VERSION_STRING "${VERSIONED_PKGING_VERSION_STRING}.${VERSION_POINT}" ) + endif() + else() + message( FATAL_ERROR "Returning Since ROCM_VERSION flags are Not Set, for VERSIONED PACKAGING\ + Retry after setting ROCM_VERSION" ) + return() + endif() +endif() + +if( DEFINED ROCM_LIBPATCH_VERSION ) set ( CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}.${ROCM_LIBPATCH_VERSION}" ) message ( STATUS "Using CPACK_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION}" ) endif() ## Debian package specific variables set ( CPACK_DEB_COMPONENT_INSTALL ON ) -set ( CPACK_DEBIAN_CORE_RUNTIME_PACKAGE_NAME "${CORE_TARGET}" ) + +set ( CPACK_DEBIAN_CORE_RUNTIME_PACKAGE_NAME "${CORE_TARGET}${VERSIONED_PKGING_VERSION_STRING}" ) + # ASAN package name -set ( CPACK_DEBIAN_CORE_ASAN_PACKAGE_NAME ${CORE_TARGET}-asan ) +set ( CPACK_DEBIAN_CORE_ASAN_PACKAGE_NAME "${CORE_TARGET}-asan${VERSIONED_PKGING_VERSION_STRING}" ) + # STATIC package name - For Now, No change for static package Name from default -set ( CPACK_DEBIAN_CORE_STATIC_PACKAGE_NAME ${CORE_TARGET} ) +set ( CPACK_DEBIAN_CORE_STATIC_PACKAGE_NAME "${CORE_TARGET}${VERSIONED_PKGING_VERSION_STRING}" ) + +if( VERSIONED_PKGING_ENABLED ) + # Meta Package for Versioned Packaging + set ( CPACK_DEBIAN_${CORE_ASAN_META_COMPONENT}_PACKAGE_NAME "${CORE_TARGET}-asan" ) + set ( CPACK_DEBIAN_${CORE_RT_META_COMPONENT}_PACKAGE_NAME "${CORE_TARGET}" ) + set ( CPACK_DEBIAN_${CORE_ST_META_COMPONENT}_PACKAGE_NAME "${CORE_TARGET}" ) +endif() + message ( STATUS "Using CPACK_DEBIAN_PACKAGE_RELEASE ${CPACK_DEBIAN_PACKAGE_RELEASE}" ) set ( CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT" ) @@ -246,11 +318,21 @@ endif() ## RPM package specific variables set ( CPACK_RPM_COMPONENT_INSTALL ON ) -set ( CPACK_RPM_CORE_RUNTIME_PACKAGE_NAME "${CORE_TARGET}" ) + +set ( CPACK_RPM_CORE_RUNTIME_PACKAGE_NAME "${CORE_TARGET}${VERSIONED_PKGING_VERSION_STRING}" ) + # ASAN package name -set ( CPACK_RPM_CORE_ASAN_PACKAGE_NAME ${CORE_TARGET}-asan ) +set ( CPACK_RPM_CORE_ASAN_PACKAGE_NAME "${CORE_TARGET}-asan${VERSIONED_PKGING_VERSION_STRING}" ) + # STATIC package name - For Now, No change for static package Name from default -set ( CPACK_RPM_CORE_STATIC_PACKAGE_NAME ${CORE_TARGET} ) +set ( CPACK_RPM_CORE_STATIC_PACKAGE_NAME "${CORE_TARGET}${VERSIONED_PKGING_VERSION_STRING}" ) + +if( VERSIONED_PKGING_ENABLED ) + # Meta Package for Versioned Packaging + set ( CPACK_RPM_${CORE_ASAN_META_COMPONENT}_PACKAGE_NAME "${CORE_TARGET}-asan" ) + set ( CPACK_RPM_${CORE_RT_META_COMPONENT}_PACKAGE_NAME "${CORE_TARGET}" ) + set ( CPACK_RPM_${CORE_ST_META_COMPONENT}_PACKAGE_NAME "${CORE_TARGET}" ) +endif() ## 'dist' breaks manual builds on debian systems due to empty Provides execute_process( COMMAND rpm --eval %{?dist} @@ -276,6 +358,13 @@ set ( CPACK_DEBIAN_CORE_ASAN_PACKAGE_DEPENDS ${CORE_TARGET} ) set ( CPACK_DEBIAN_CORE_RUNTIME_PACKAGE_CONTROL_EXTRA "${CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA}" ) set ( CPACK_DEBIAN_CORE_STATIC_PACKAGE_CONTROL_EXTRA "${CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA}" ) set ( CPACK_DEBIAN_PACKAGE_DESCRIPTION "${EXTENDED_PACKAGE_DESCRIPTION}" ) +if( VERSIONED_PKGING_ENABLED ) + set ( CPACK_DEBIAN_${CORE_ASAN_META_COMPONENT}_PACKAGE_DEPENDS + "${CPACK_DEBIAN_CORE_ASAN_PACKAGE_NAME} \(= ${CPACK_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_RELEASE}\)" ) + set ( CPACK_DEBIAN_${CORE_RT_META_COMPONENT}_PACKAGE_DEPENDS "${CPACK_DEBIAN_CORE_RUNTIME_PACKAGE_NAME} \(= ${CPACK_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_RELEASE}\)" ) + set ( CPACK_DEBIAN_${CORE_ST_META_COMPONENT}_PACKAGE_DEPENDS + "${CPACK_DEBIAN_CORE_STATIC_PACKAGE_NAME} \(= ${CPACK_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_RELEASE}\)" ) +endif() ## RPM package specific variables set ( CPACK_RPM_PACKAGE_REQUIRES ${RPM_DEPENDS_STRING} ) @@ -286,6 +375,14 @@ set ( CPACK_RPM_CORE_RUNTIME_POST_UNINSTALL_SCRIPT_FILE "${BUILD_DIR}/prerm" ) set ( CPACK_RPM_CORE_STATIC_POST_INSTALL_SCRIPT_FILE "${BUILD_DIR}/postinst" ) set ( CPACK_RPM_CORE_STATIC_POST_UNINSTALL_SCRIPT_FILE "${BUILD_DIR}/prerm" ) set ( CPACK_RPM_PACKAGE_DESCRIPTION "${EXTENDED_PACKAGE_DESCRIPTION}" ) +if( VERSIONED_PKGING_ENABLED ) + set ( CPACK_RPM_${CORE_ASAN_META_COMPONENT}_PACKAGE_REQUIRES + "${CPACK_RPM_CORE_ASAN_PACKAGE_NAME} \(= ${CPACK_PACKAGE_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}\)" ) + set ( CPACK_RPM_${CORE_RT_META_COMPONENT}_PACKAGE_REQUIRES + "${CORE_RPM_CORE_RUNTIME_PACKAGE_NAME} \(= ${CPACK_PACKAGE_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}\)" ) + set ( CPACK_RPM_${CORE_ST_META_COMPONENT}_PACKAGE_REQUIRES + "${CORE_RPM_CORE_STATIC_PACKAGE_NAME} \(= ${CPACK_PACKAGE_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}\)" ) +endif() if ( DEFINED CPACK_PACKAGING_INSTALL_PREFIX ) set ( CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION