diff --git a/projects/rocm-core/.github/palamida.yml b/projects/rocm-core/.github/palamida.yml index 47bd57a5ab..2a54378973 100644 --- a/projects/rocm-core/.github/palamida.yml +++ b/projects/rocm-core/.github/palamida.yml @@ -2,4 +2,4 @@ disabled: false scmId: gh-emu-rocm branchesToScan: - amd-staging - - amd-mainline \ No newline at end of file + - amd-mainline diff --git a/projects/rocm-core/.github/workflows/kws-caller.yml b/projects/rocm-core/.github/workflows/kws-caller.yml new file mode 100644 index 0000000000..c0f4f26807 --- /dev/null +++ b/projects/rocm-core/.github/workflows/kws-caller.yml @@ -0,0 +1,15 @@ +name: Rocm Validation Suite KWS +on: + push: + branches: [amd-staging, amd-mainline] + pull_request: + types: [opened, synchronize, reopened] + workflow_dispatch: +jobs: + kws: + if: ${{ github.event_name == 'pull_request' }} + uses: AMD-ROCm-Internal/rocm_ci_infra/.github/workflows/kws.yml@mainline + secrets: inherit + with: + pr_number: ${{github.event.pull_request.number}} + base_branch: ${{github.base_ref}} diff --git a/projects/rocm-core/.github/workflows/rocm_ci_caller.yml b/projects/rocm-core/.github/workflows/rocm_ci_caller.yml new file mode 100644 index 0000000000..15981c8b59 --- /dev/null +++ b/projects/rocm-core/.github/workflows/rocm_ci_caller.yml @@ -0,0 +1,26 @@ +name: ROCm CI Caller +on: + # Commenting below to avoid re-runs of amd smi for trivial rebases + pull_request: + branches: [release/rocm-rel-*, amd-mainline] + types: [opened, reopened, synchronize] + push: + branches: [amd-mainline] + workflow_dispatch: + issue_comment: + types: [created] + +jobs: + call-workflow: + if: github.event_name != 'issue_comment' ||(github.event_name == 'issue_comment' && github.event.issue.pull_request && (startsWith(github.event.comment.body, '!verify') || startsWith(github.event.comment.body, '!verify release') || startsWith(github.event.comment.body, '!verify retest'))) + uses: AMD-ROCm-Internal/rocm_ci_infra/.github/workflows/rocm_ci.yml@mainline + secrets: inherit + with: + input_sha: ${{github.event_name == 'pull_request' && github.event.pull_request.head.sha || (github.event_name == 'push' && github.sha) || (github.event_name == 'issue_comment' && github.event.issue.pull_request.head.sha) || github.sha}} + input_pr_num: ${{github.event_name == 'pull_request' && github.event.pull_request.number || (github.event_name == 'issue_comment' && github.event.issue.number) || 0}} + input_pr_url: ${{github.event_name == 'pull_request' && github.event.pull_request.html_url || (github.event_name == 'issue_comment' && github.event.issue.pull_request.html_url) || ''}} + input_pr_title: ${{github.event_name == 'pull_request' && github.event.pull_request.title || (github.event_name == 'issue_comment' && github.event.issue.pull_request.title) || ''}} + repository_name: ${{ github.repository }} + base_ref: ${{github.event_name == 'pull_request' && github.event.pull_request.base.ref || (github.event_name == 'issue_comment' && github.event.issue.pull_request.base.ref) || github.ref}} + trigger_event_type: ${{ github.event_name }} + comment_text: ${{ github.event_name == 'issue_comment' && github.event.comment.body || '' }} diff --git a/projects/rocm-core/CHANGELOG.md b/projects/rocm-core/CHANGELOG.md index ec10512fc3..2e86a42f2e 100644 --- a/projects/rocm-core/CHANGELOG.md +++ b/projects/rocm-core/CHANGELOG.md @@ -1,6 +1,10 @@ Change Logs for rocm-core -Unreleased ROCm6.1.0 release +ROCm6.4.1 release + - Added changelog.debian and copyright for debian packages. +ROCm6.3.0 release + - Enabled Support for CMAKE Module Config. +ROCm6.1.0 release - Added new API to get ROCm install Path (getROCmInstallPath()) at runtime using dlinfo of rocm-core Target Library. ROCm6.0.0 release diff --git a/projects/rocm-core/CMakeLists.txt b/projects/rocm-core/CMakeLists.txt index 8746fb43e7..9906ce92d4 100644 --- a/projects/rocm-core/CMakeLists.txt +++ b/projects/rocm-core/CMakeLists.txt @@ -32,11 +32,32 @@ project( ${CORE_TARGET} CXX ) ## Define Lib Target Name and Lib Target Install Dir to be available to c++ source add_definitions( -DTARGET_LIBRARY_NAME=\"${CORE_TARGET}\" -DTARGET_LIBRARY_INSTALL_DIR=\"${CMAKE_INSTALL_LIBDIR}\" ) +## Build Type Settings +set( CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." ) + ## Verbose output. set( CMAKE_VERBOSE_MAKEFILE on ) +include( GNUInstallDirs ) + +if(ENABLE_ASAN_PACKAGING) + # Only libraries required for ASAN Package + set( CPACK_COMPONENTS_ALL CORE_ASAN ) + set( COMP_TYPE "CORE_ASAN" ) + set( PKG_DESCRIPTION "ROCm AddressSanitizer Instrumented Runtime software stack" ) + set( CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DOCDIR}-asan" ) +else() + if(BUILD_SHARED_LIBS) + set( CPACK_COMPONENTS_ALL CORE_RUNTIME ) + set( COMP_TYPE "CORE_RUNTIME" ) + set( PKG_DESCRIPTION "ROCm Runtime software stack" ) + else() + set( CPACK_COMPONENTS_ALL CORE_STATIC ) + set( STATIC_COMP_TYPE "CORE_STATIC" ) + set( PKG_DESCRIPTION "ROCm Static software stack" ) + endif() +endif() include( utils.cmake ) -include( GNUInstallDirs ) #Parse Version message( STATUS "ROCM_VERSION = ${ROCM_VERSION}" ) @@ -45,12 +66,12 @@ parse_rocm_version( ${ROCM_VERSION} ) set( CPACK_PACKAGING_INSTALL_PREFIX "/opt/rocm" CACHE PATH "default cpack directory" ) set( BUILD_SHARED_LIBS ON CACHE BOOL "Build shared library (.so) or not." ) set( CPACK_GENERATOR "TGZ;DEB;RPM" CACHE STRING "package types to be produced " ) -set( COPYRIGHT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/copyright" ) +set( LICENSE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/copyright" ) set( BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR} ) - -if(NOT ENABLE_ASAN_PACKAGING) - option(FILE_REORG_BACKWARD_COMPATIBILITY "Enable File Reorg with backward compatibility" OFF) -endif() +set( EXTENDED_PACKAGE_DESCRIPTION + "ROCM-CORE is a package which can be used to get ROCm release version, get ROCm install path information etc. + It is also important to note that ROCM-CORE takes the role as a base component on which all of ROCm can depend, + to make it easy to remove all of ROCm with a package manager." CACHE STRING "Debian Package Extended Description") ## Set variables set_variables() @@ -62,37 +83,25 @@ if( NOT DEFINED BUILD_ID ) set( BUILD_ID "9999") endif() -set( PACKAGE_BUILD_INFO "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_COMMIT_COUNT}-${BUILD_ID}-${VERSION_HASH}" ) +#Add the libpatch version if available +if( DEFINED VERSION_POINT ) + set( PACKAGE_BUILD_INFO "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_POINT}.${VERSION_COMMIT_COUNT}-${BUILD_ID}-${VERSION_HASH}" ) + message ( STATUS "PACKAGE_BUILD_INFO ${PACKAGE_BUILD_INFO}" ) +else () + set( PACKAGE_BUILD_INFO "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_COMMIT_COUNT}-${BUILD_ID}-${VERSION_HASH}" ) +endif() configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/rocmmod.in ${BUILD_DIR}/rocmmod @ONLY ) -configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/rocm-core.postinst ${BUILD_DIR}/postinst @ONLY ) -configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/rocm-core.prerm ${BUILD_DIR}/prerm @ONLY ) + +# Setting Permission 0755 for pre/post install scripts +configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/rocm-core.postinst ${BUILD_DIR}/postinst + FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE @ONLY ) +configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/rocm-core.prerm ${BUILD_DIR}/prerm + FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE @ONLY ) #Generate BUILD_INFO configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/rocm_version.h.in ${BUILD_DIR}/rocm_version.h @ONLY ) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/rocm_getpath.h.in ${BUILD_DIR}/rocm_getpath.h @ONLY ) -#File reorg Backward compatibility function -if(NOT WIN32) - if(FILE_REORG_BACKWARD_COMPATIBILITY) - # To enabe/disable #error in wrapper header files - if(NOT DEFINED ROCM_HEADER_WRAPPER_WERROR) - if(DEFINED ENV{ROCM_HEADER_WRAPPER_WERROR}) - set(ROCM_HEADER_WRAPPER_WERROR "$ENV{ROCM_HEADER_WRAPPER_WERROR}" - CACHE STRING "Header wrapper warnings as errors.") - else() - set(ROCM_HEADER_WRAPPER_WERROR "OFF" CACHE STRING "Header wrapper warnings as errors.") - endif() - endif() - - if(ROCM_HEADER_WRAPPER_WERROR) - set(deprecated_error 1) - else() - set(deprecated_error 0) - endif() - - include(rocm-core-backward-compat.cmake) - endif() #FILE_REORG_BACKWARD_COMPATIBILITY -endif() #Make the rocmlib set( SRCS rocm_version.cpp rocm_getpath.cpp) @@ -110,34 +119,20 @@ 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}" ) -if(ENABLE_ASAN_PACKAGING) - # Only libraries required for ASAN Package - set( CPACK_COMPONENTS_ALL CORE_ASAN ) - set( COMP_TYPE "CORE_ASAN" ) - set( PKG_DESCRIPTION "Radeon Open Compute (ROCm) AddressSanitizer Instrumented Runtime software stack" ) +#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" ) else() - if(BUILD_SHARED_LIBS) - set( CPACK_COMPONENTS_ALL CORE_RUNTIME ) - set( COMP_TYPE "CORE_RUNTIME" ) - set( PKG_DESCRIPTION "Radeon Open Compute (ROCm) Runtime software stack" ) - else() - set( CPACK_COMPONENTS_ALL CORE_STATIC ) - set( STATIC_COMP_TYPE "CORE_STATIC" ) - set( PKG_DESCRIPTION "Radeon Open Compute (ROCm) Static software stack" ) - endif() + file ( WRITE "${CMAKE_CURRENT_BINARY_DIR}/version" "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}\n" ) endif() -#intallation directive -file ( WRITE "${CMAKE_CURRENT_BINARY_DIR}/version" "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}-${BUILD_ID}\n" ) - ## Support for Static and Shared Target Packaging if(BUILD_SHARED_LIBS) - install ( FILES ${CMAKE_CURRENT_BINARY_DIR}/version DESTINATION .info COMPONENT CORE_RUNTIME ) + install ( FILES ${BUILD_DIR}/version DESTINATION .info COMPONENT CORE_RUNTIME ) # Target Library needs to installed/packaged to same destination # in both ASAN and nonASAN Shared library builds - install ( TARGETS ${CORE_TARGET} DESTINATION ${CMAKE_INSTALL_LIBDIR} - PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE + install ( TARGETS ${CORE_TARGET} EXPORT rocmCoreTargets DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${COMP_TYPE} ) install ( FILES ${BUILD_DIR}/rocm_version.h ${BUILD_DIR}/rocm_getpath.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocm-core @@ -146,22 +141,20 @@ if(BUILD_SHARED_LIBS) install ( FILES ${CMAKE_CURRENT_SOURCE_DIR}/runpath_to_rpath.py DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/rocm-core COMPONENT CORE_RUNTIME ) - install ( FILES ${CMAKE_CURRENT_BINARY_DIR}/rocmmod + install ( FILES ${BUILD_DIR}/rocmmod DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT CORE_RUNTIME ) # License file - install ( FILES ${COPYRIGHT_FILE} + install ( FILES ${LICENSE_FILE} DESTINATION ${CMAKE_INSTALL_DOCDIR} RENAME LICENSE.txt COMPONENT CORE_RUNTIME) - install ( FILES ${COPYRIGHT_FILE} DESTINATION - ${CMAKE_INSTALL_DOCDIR}-asan RENAME LICENSE.txt - COMPONENT CORE_ASAN) else() - install ( FILES ${CMAKE_CURRENT_BINARY_DIR}/version + install ( FILES ${BUILD_DIR}/version DESTINATION .info COMPONENT ${STATIC_COMP_TYPE} ) install ( TARGETS ${CORE_TARGET} + EXPORT rocmCoreTargets DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${STATIC_COMP_TYPE} ) @@ -172,15 +165,56 @@ else() install ( FILES ${CMAKE_CURRENT_SOURCE_DIR}/runpath_to_rpath.py DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/rocm-core COMPONENT ${STATIC_COMP_TYPE} ) - install ( FILES ${CMAKE_CURRENT_BINARY_DIR}/rocmmod + install ( FILES ${BUILD_DIR}/rocmmod DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${STATIC_COMP_TYPE} ) # License file - install ( FILES ${COPYRIGHT_FILE} + install ( FILES ${LICENSE_FILE} DESTINATION ${CMAKE_INSTALL_DOCDIR} RENAME LICENSE.txt COMPONENT ${STATIC_COMP_TYPE}) endif() +## Cmake module config file configurations +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/" CACHE INTERNAL "Default module path.") + +## Export the package for use from the build-tree +## (this registers the build-tree with a global CMake-registry) +export(PACKAGE ${CORE_TARGET}) +set(CONF_LIB_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") + +## Create the rocm-core-config.cmake and rocm-core-config-version files +include(CMakePackageConfigHelpers) +set(CONFIG_PACKAGE_INSTALL_DIR ${CONF_LIB_DIR}/cmake/${CORE_TARGET}) +set(LIB_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}") +set(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}") +set(BIN_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") +set(PKG_MAINTAINER_NM "ROCm Dev Support") +set(PKG_MAINTAINER_EMAIL "rocm-dev.support@amd.com") + +## Generate Config File for rocm-core +configure_package_config_file( + ${CMAKE_MODULE_PATH}/${CORE_TARGET}-config.cmake.in + ${BUILD_DIR}/${CORE_TARGET}-config.cmake + INSTALL_DESTINATION ${CONFIG_PACKAGE_INSTALL_DIR} + PATH_VARS LIB_INSTALL_DIR INCLUDE_INSTALL_DIR BIN_INSTALL_DIR +) + +## Generate config Version File for rocm-core +write_basic_package_version_file( + ${BUILD_DIR}/${CORE_TARGET}-config-version.cmake + VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}" + COMPATIBILITY SameMajorVersion) + +## Install the rocm-core-config.cmake and rocm-core-config-version.cmake +install(FILES + "${PROJECT_BINARY_DIR}/${CORE_TARGET}-config.cmake" + "${PROJECT_BINARY_DIR}/${CORE_TARGET}-config-version.cmake" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${CORE_TARGET}" + COMPONENT ${COMP_TYPE}) + +## Install the export set for use with the install-tree +install(EXPORT rocmCoreTargets DESTINATION + "${CMAKE_INSTALL_LIBDIR}/cmake/${CORE_TARGET}" COMPONENT ${COMP_TYPE}) ## Packaging directives set ( CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc." ) @@ -188,9 +222,9 @@ set ( CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR} ) set ( CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR} ) set ( CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH} ) set ( CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}" ) -set ( CPACK_PACKAGE_CONTACT "ROCm Dev Support " ) +set ( CPACK_PACKAGE_CONTACT "${PKG_MAINTAINER_NM} <${PKG_MAINTAINER_EMAIL}>" ) set ( CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PKG_DESCRIPTION}" ) -set ( CPACK_RESOURCE_FILE_LICENSE "${COPYRIGHT_FILE}" ) +set ( CPACK_RESOURCE_FILE_LICENSE "${LICENSE_FILE}" ) ## packaging variables if ( DEFINED ROCM_LIBPATCH_VERSION ) set ( CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}.${ROCM_LIBPATCH_VERSION}" ) @@ -207,6 +241,13 @@ set ( CPACK_DEBIAN_CORE_STATIC_PACKAGE_NAME ${CORE_TARGET} ) message ( STATUS "Using CPACK_DEBIAN_PACKAGE_RELEASE ${CPACK_DEBIAN_PACKAGE_RELEASE}" ) set ( CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT" ) +# Debian specific packaging configuration +if(COMP_TYPE) +configure_debian_pkg( ${CORE_TARGET} ${COMP_TYPE} ${CPACK_PACKAGE_VERSION} ${PKG_MAINTAINER_NM} ${PKG_MAINTAINER_EMAIL} ) +elseif(STATIC_COMP_TYPE) +configure_debian_pkg( ${CORE_TARGET} ${STATIC_COMP_TYPE} ${CPACK_PACKAGE_VERSION} ${PKG_MAINTAINER_NM} ${PKG_MAINTAINER_EMAIL} ) +endif() + ## RPM package specific variables set ( CPACK_RPM_COMPONENT_INSTALL ON ) set ( CPACK_RPM_CORE_RUNTIME_PACKAGE_NAME "${CORE_TARGET}" ) @@ -215,7 +256,6 @@ set ( CPACK_RPM_CORE_ASAN_PACKAGE_NAME ${CORE_TARGET}-asan ) # STATIC package name - For Now, No change for static package Name from default set ( CPACK_RPM_CORE_STATIC_PACKAGE_NAME ${CORE_TARGET} ) - ## 'dist' breaks manual builds on debian systems due to empty Provides execute_process( COMMAND rpm --eval %{?dist} RESULT_VARIABLE PROC_RESULT @@ -230,28 +270,32 @@ set ( CPACK_RPM_FILE_NAME "RPM-DEFAULT" ) # Debian package specific variables set ( CPACK_DEBIAN_PACKAGE_DEPENDS ${DEB_DEPENDS_STRING} ) -set ( CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/RadeonOpenCompute/ROCm" ) +set ( CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/ROCm/rocm-core" ) +set ( CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${BUILD_DIR}/postinst;${BUILD_DIR}/prerm" ) set ( CPACK_DEBIAN_CORE_ASAN_PACKAGE_DEPENDS ${CORE_TARGET} ) -set ( CPACK_DEBIAN_CORE_RUNTIME_PACKAGE_CONTROL_EXTRA "${BUILD_DIR}/postinst;${BUILD_DIR}/prerm" ) -set ( CPACK_DEBIAN_CORE_STATIC_PACKAGE_CONTROL_EXTRA "${BUILD_DIR}/postinst;${BUILD_DIR}/prerm" ) +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}" ) ## RPM package specific variables set ( CPACK_RPM_PACKAGE_REQUIRES ${RPM_DEPENDS_STRING} ) set ( CPACK_RPM_PACKAGE_LICENSE "MIT" ) set ( CPACK_RPM_CORE_ASAN_PACKAGE_REQUIRES ${CORE_TARGET} ) -set ( CPACK_RPM_CORE_RUNTIME_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/postinst" ) -set ( CPACK_RPM_CORE_RUNTIME_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/prerm" ) -set ( CPACK_RPM_CORE_STATIC_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/postinst" ) -set ( CPACK_RPM_CORE_STATIC_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/prerm" ) +set ( CPACK_RPM_CORE_RUNTIME_POST_INSTALL_SCRIPT_FILE "${BUILD_DIR}/postinst" ) +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 ( DEFINED CPACK_PACKAGING_INSTALL_PREFIX ) - set ( CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "${CPACK_PACKAGING_INSTALL_PREFIX} ${CPACK_PACKAGING_INSTALL_PREFIX}/.info" ) -endif ( ) + set ( CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION + "${CPACK_PACKAGING_INSTALL_PREFIX} ${CPACK_PACKAGING_INSTALL_PREFIX}/.info" ) +endif() + # Backward compatibility support for deprecated package rocm-clang-ocl # TODO: To be removed after two releases set(CPACK_DEBIAN_RUNTIME_PACKAGE_REPLACES "rocm-clang-ocl") set(CPACK_DEBIAN_RUNTIME_PACKAGE_CONFLICTS "rocm-clang-ocl") - set(CPACK_RPM_RUNTIME_PACKAGE_OBSOLETES "rocm-clang-ocl") ## Include packaging diff --git a/projects/rocm-core/CODEOWNERS b/projects/rocm-core/CODEOWNERS index 89ea81341f..d239e886d7 100644 --- a/projects/rocm-core/CODEOWNERS +++ b/projects/rocm-core/CODEOWNERS @@ -1 +1 @@ -* @nunnikri @frepaul @raramakr @ashutom @amd-isparry +* @nunnikri @frepaul @raramakr @ashutom @amd-isparry @arvindcheru diff --git a/projects/rocm-core/CONTRIBUTING.md b/projects/rocm-core/CONTRIBUTING.md new file mode 100644 index 0000000000..002210e947 --- /dev/null +++ b/projects/rocm-core/CONTRIBUTING.md @@ -0,0 +1,161 @@ +# ROCM-CORE Contributing Guide +To ensure the quality of the ROCM-CORE code base, the ROCM-CORE team has +established a code review process to inform developers of the steps +that are required to shepherd a change-set into the repository. + +#### Table Of Contents + +[How to get started](#How-to-get-started) + +[How do I contribute?](#how-do-i-contribute) + * [Reporting Issues](#reporting-issues) + * [Creating a Pull Request](#Creating-a-Pull-Request) + +[Responsibility of the Author](#Responsibility-of-the-Author) + +[Responsibility of the Reviewer](#Responsibility-of-the-Reviewer) + +[The Review](#the-review) + +[References](#References) +## How to get started +rocm-core is a utility which can be used to get ROCm release version. +It also provides the Lmod modules files for the ROCm release. +getROCmVersion function provides the ROCm version. + +## How do I contribute +### Deliverables +All contributions you make will be under the [MIT Software License](copyright). +For each new file in repository, +Please include the licensing header +``` +/******************************************************************************* + * + * MIT License + * + * Copyright (c) 20xx Advanced Micro Devices, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in 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: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * 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 + * AUTHORS 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 IN THE + * SOFTWARE. + * + *******************************************************************************/ +``` + +### Formatting the code + +All the code is formatted using `clang-format`. To format a file, use: + +```shell +clang-format-10 -style=file -i +``` + + +### Reporting Issues +We use [GitHub Issues](https://github.com/ROCm/rocm-core/issues) to track public **bugs** and **enhancement requests**. + +#### Bugs +Please follow the template below to report any bugs found in ROCM-CORE: + +1. Description: ***Please be clear and descriptive*** +2. How to Reproduce the issue: +* Hardware Information: +* Docker environment or Software Version: +* Expected behavior: +* Actual behavior: +3. Any additional information: + +#### Enhancement Requests +Please follow the template below to report any enhancement requests for ROCM-CORE: + +1. Description: ***Please be clear and descriptive*** +2. Value and Motivation: +* Feature and functionalities enabled: +* Any alternatives: +3. Any additional information: + +The author must set labels (and assigns a milestone) according to his/her own understanding. + +Other contributors can change these values if they disagree. That being said, +adding a small comment explaining the motivation is highly recommended. +In this way, we keep the process flexible while cultivating mutual understanding. + +[**Note**] Most likely, the labels like "bug", "feature" or "complexity*" +would not be changed. However, "value*" or "urgency*" might be from mutual +understanding. +### Creating a Pull Request + +No changes are allowed to be directly committed to the develop +branch of the ROCM-CORE repository. All authors are required to +develop their change sets on a separate branch and then create +a pull request (PR) to merge their changes into the develop branch. + +Once a PR has been created, a developer must choose two reviewers +to review the changes made. The first reviewer should be a +technical expert in the portion of the library that the changes +are being made in. You can find a list of these experts in +[CODEOWNERS](CODEOWNERS) list. +The second reviewer should be a peer reviewer. This reviewer +can be any other ROCM-CORE developer. + +## Responsibility of the Author +The author of a PR is responsible for: + * Writing clear, well documented code + * Meeting expectations of code quality + * Verifying that the changes do not break current functionality + * Writing tests to ensure code coverage + * Report on the impact to performance + +## Responsibility of the Reviewer +Each reviewer is responsible for verifying that the changes are +clearly written in keeping with the coding styles of the library, +are documented in a way that future developers will be able to +understand the intent of the added functionality, and will +maintain or improve the overall quality of the codebase. + +Reviewer's task checklist: +1. Has the PR passed? +2. Does the PR consist of a well-organized sequence of small commits, +each of which is designed to make one specific feature or fix ? +3. Does the PR only include a reviewable amount of changes? Or it is a +consolidation of already reviewed small batches? e.g. break it into smaller +testable and reviewable tasks instead of a huge chunk at once. +4. Does the PR have sufficient documentation and easy to read and understand, +feasible for test and future maintainence, related docs already in place? +if API or functionality has changed? +5. For bugfixes and new features, new regression test created? +6. Is every PR associated with a ticket or issue number for tracking purposes? + +## The Review +During the review, reviewers will look over the changes and make +suggestions or requests for changes. + +In order to assist the reviewer in prioritizing their efforts, +authors can take the following actions: + +* Set the urgency and value labels +* Set the milestone where the changes need to be delivered +* Describe the testing procedure and post the measured effect of + the change +* Remind reviewers via email if a PR needs attention +* If a PR needs to be reviewed as soon as possible, explain to + the reviewers why a review may need to take priority + +## References + +1. [ROCM-CORE Readme](README.md) + diff --git a/projects/rocm-core/DEBIAN/changelog.in b/projects/rocm-core/DEBIAN/changelog.in new file mode 100644 index 0000000000..95ba9572fb --- /dev/null +++ b/projects/rocm-core/DEBIAN/changelog.in @@ -0,0 +1,5 @@ +@DEB_PACKAGE_NAME@ (@DEB_PACKAGE_VERSION@) stable; urgency=low + + * ROCm Runtime software stack Base Package. + -- @DEB_MAINTAINER_NAME@ <@DEB_MAINTAINER_EMAIL@> @DEB_TIMESTAMP@ + diff --git a/projects/rocm-core/DEBIAN/copyright.in b/projects/rocm-core/DEBIAN/copyright.in new file mode 100644 index 0000000000..e90d34aa20 --- /dev/null +++ b/projects/rocm-core/DEBIAN/copyright.in @@ -0,0 +1,26 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: @DEB_PACKAGE_NAME@ +Upstream-Contact: @DEB_MAINTAINER_NAME@ <@DEB_MAINTAINER_EMAIL@> +Source: https://github.com/ROCm/@DEB_PACKAGE_NAME@ +Files: * +License: @DEB_LICENSE@ +Copyright: @DEB_COPYRIGHT_YEAR@ Advanced Micro Devices, Inc. All rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +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 +AUTHORS 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 IN THE +SOFTWARE. + diff --git a/projects/rocm-core/README.md b/projects/rocm-core/README.md new file mode 100644 index 0000000000..68868bbe3c --- /dev/null +++ b/projects/rocm-core/README.md @@ -0,0 +1,217 @@ +# ROCM-CORE Introduction + +ROCM-CORE is a package which can be used to get ROCm release version, get ROCm install path information etc. +It is also important to note that ROCM-CORE takes the role as a base component on which all of ROCm can depend, +to make it easy to remove all of ROCm with a package manager. + +getROCmVersion function provides the ROCm version. + +It also provides an example Lmod modules files for the ROCm release. + +Lmod module files can be loaded with the following commands. +``` shell +module load rocm/x.y or +module load rocm +``` + +You can find sources and binaries in our [GitHub repository](https://github.com/ROCm/rocm-core). + +> [!NOTE] +> As with all ROCm projects, the documentation is open source. For more information, see [Contribute to ROCm documentation](https://rocm.docs.amd.com/en/latest/contribute/contributing.html). + +## Installing ROCM-CORE + +Before we proceed with how to install, take a look on references given below to understand System requirements, ROCm Installation prerequisites, ROCm package repository set up etc. + +### Prerequisite References + +* Refer [System Requirements](https://rocm.docs.amd.com/projects/install-on-linux/en/docs-6.2.2/reference/system-requirements.html#supported-gpus) +* Refer [ROCm installation for Linux](https://rocm.docs.amd.com/projects/install-on-linux/en/docs-6.2.2/index.html) +* A [ROCm](https://rocm.docs.amd.com/)-enabled platform +* To be noted that ROCM-CORE library primarily depends on having the C library available for the respective platform. + +### Installing with pre-built packages + +You can install ROCM-CORE on Ubuntu using + +```shell +apt-get install rocm-core +``` + +## Building ROCM-CORE from source + +You can build ROCM-CORE form source + +First, get the sources from repository. + +```shell + git clone https://github.com/ROCm/rocm-core.git +``` + +Go to Root Directory, create a build directory: + +```shell + cd rocm-core; mkdir build; cd build +``` + +Next, configure CMake. Invoke cmake with the following variables define as deemed fit + +```shell +cmake -S $PWD/../ -B . \ + -DCMAKE_VERBOSE_MAKEFILE=1 \ + -DCMAKE_INSTALL_PREFIX=./ \ + -DROCM_VERSION="6.4.0" \ + .. +``` + +>[!NOTE] +>When specifying the path for the `CMAKE_PREFIX_PATH` variable, **do not** use the tilde (`~`) +>shorthand to represent the home directory. +### Setting up install locations +By default, the install location is set to `/opt/rocm`. You can change this using +`CMAKE_INSTALL_PREFIX`: +```shell +cmake -DCMAKE_INSTALL_PREFIX= .. +``` +where rocm-core-install-path is "./" in the cmake configure command shared above. + +### Install + +Once cmake configuration successfully completed, from the same build directory run build, install targets + +```shell +cmake --build . -- +cmake --build . -- install +``` + +### Package Generated + +Once cmake configuration and build successfully completed from the same build directory trigger package generation + +```shell +cmake --build . -- package +``` + +Once successfull execution of above command "rocm-core" RPM/DEBIAN packages will be generated (ex:rocm-core_6.4.0.60400-22.04_amd64.deb, rocm-core-6.4.0.60400-x86_64.rpm). The contents of the "rocm-core" package will include the following files: + +```shell +Debian Package Sample: +$ dpkg -I rocm-core_6.4.0.60400-crdnnh.15158~22.04_amd64.deb + new debian package, version 2.0. + size 13986 bytes: control archive=2083 bytes. + 305 bytes, 10 lines control + 917 bytes, 11 lines md5sums + 2871 bytes, 75 lines * postinst #!/bin/bash + 873 bytes, 32 lines * prerm #!/bin/bash + Architecture: amd64 + Description: ROCm Runtime software stack + Homepage: https://github.com/ROCm/rocm-core + Maintainer: ROCm Dev Support + Package: rocm-core + Priority: optional + Section: devel + Version: 6.4.0.60400-crdnnh.15158~22.04 + Installed-Size: 125 + +$ dpkg -c rocm-core_6.4.0.60400-crdnnh.15158~22.04_amd64.deb +drwxr-xr-x root/root 0 2024-11-22 10:37 ./opt/ +drwxr-xr-x root/root 0 2024-11-22 10:37 ./opt/rocm-6.4.0/ +drwxr-xr-x root/root 0 2024-11-22 10:37 ./opt/rocm-6.4.0/.info/ +-rw-r--r-- root/root 12 2024-11-22 10:37 ./opt/rocm-6.4.0/.info/version +drwxr-xr-x root/root 0 2024-11-22 10:37 ./opt/rocm-6.4.0/include/ +drwxr-xr-x root/root 0 2024-11-22 10:37 ./opt/rocm-6.4.0/include/rocm-core/ +-rw-r--r-- root/root 2801 2024-11-22 10:37 ./opt/rocm-6.4.0/include/rocm-core/rocm_getpath.h +-rw-r--r-- root/root 2440 2024-11-22 10:37 ./opt/rocm-6.4.0/include/rocm-core/rocm_version.h +drwxr-xr-x root/root 0 2024-11-22 10:37 ./opt/rocm-6.4.0/lib/ +drwxr-xr-x root/root 0 2024-11-22 10:37 ./opt/rocm-6.4.0/lib/cmake/ +drwxr-xr-x root/root 0 2024-11-22 10:37 ./opt/rocm-6.4.0/lib/cmake/rocm-core/ +-rw-r--r-- root/root 2878 2024-11-22 10:37 ./opt/rocm-6.4.0/lib/cmake/rocm-core/rocm-core-config-version.cmake +-rw-r--r-- root/root 1590 2024-11-22 10:37 ./opt/rocm-6.4.0/lib/cmake/rocm-core/rocm-core-config.cmake +-rw-r--r-- root/root 842 2024-11-22 10:37 ./opt/rocm-6.4.0/lib/cmake/rocm-core/rocmCoreTargets-release.cmake +-rw-r--r-- root/root 3774 2024-11-22 10:37 ./opt/rocm-6.4.0/lib/cmake/rocm-core/rocmCoreTargets.cmake +lrwxrwxrwx root/root 0 2024-11-22 10:37 ./opt/rocm-6.4.0/lib/librocm-core.so -> librocm-core.so.1 +lrwxrwxrwx root/root 0 2024-11-22 10:37 ./opt/rocm-6.4.0/lib/librocm-core.so.1 -> librocm-core.so.1.0.60400 +-rw-r--r-- root/root 16640 2024-11-22 10:37 ./opt/rocm-6.4.0/lib/librocm-core.so.1.0.60400 +-rw-r--r-- root/root 550 2024-11-22 10:37 ./opt/rocm-6.4.0/lib/rocmmod +drwxr-xr-x root/root 0 2024-11-22 10:37 ./opt/rocm-6.4.0/libexec/ +drwxr-xr-x root/root 0 2024-11-22 10:37 ./opt/rocm-6.4.0/libexec/rocm-core/ +-rw-r--r-- root/root 8208 2024-11-22 10:34 ./opt/rocm-6.4.0/libexec/rocm-core/runpath_to_rpath.py +drwxr-xr-x root/root 0 2024-11-22 10:37 ./opt/rocm-6.4.0/share/ +drwxr-xr-x root/root 0 2024-11-22 10:37 ./opt/rocm-6.4.0/share/doc/ +drwxr-xr-x root/root 0 2024-11-22 10:37 ./opt/rocm-6.4.0/share/doc/rocm-core/ +-rw-r--r-- root/root 1113 2024-11-22 10:34 ./opt/rocm-6.4.0/share/doc/rocm-core/LICENSE.txt + +RPM Package Sample: +$ rpm -qip rocm-core-6.4.0.60400-crdnnh.15158.el8.x86_64.rpm +Name : rocm-core +Version : 6.4.0.60400 +Release : crdnnh.15158.el8 +Architecture: x86_64 +Install Date: (not installed) +Group : unknown +Size : 37096 +License : MIT +Signature : (none) +Source RPM : rocm-core-6.4.0.60400-crdnnh.15158.el8.src.rpm +Build Date : Fri 22 Nov 2024 10:41:01 AM PST +Build Host : 514dbdf6c195 +Relocations : /opt/rocm-6.4.0 +Vendor : Advanced Micro Devices, Inc. +Summary : ROCm Runtime software stack +Description : +DESCRIPTION +=========== + +This is an installer created using CPack (https://cmake.org). No additional installation instructions provided. +$ rpm -qlp rocm-core-6.4.0.60400-crdnnh.15158.el8.x86_64.rpm +/opt/rocm-6.4.0 +/opt/rocm-6.4.0/.info +/opt/rocm-6.4.0/.info/version +/opt/rocm-6.4.0/include +/opt/rocm-6.4.0/include/rocm-core +/opt/rocm-6.4.0/include/rocm-core/rocm_getpath.h +/opt/rocm-6.4.0/include/rocm-core/rocm_version.h +/opt/rocm-6.4.0/lib +/opt/rocm-6.4.0/lib/cmake +/opt/rocm-6.4.0/lib/cmake/rocm-core +/opt/rocm-6.4.0/lib/cmake/rocm-core/rocm-core-config-version.cmake +/opt/rocm-6.4.0/lib/cmake/rocm-core/rocm-core-config.cmake +/opt/rocm-6.4.0/lib/cmake/rocm-core/rocmCoreTargets-release.cmake +/opt/rocm-6.4.0/lib/cmake/rocm-core/rocmCoreTargets.cmake +/opt/rocm-6.4.0/lib/librocm-core.so +/opt/rocm-6.4.0/lib/librocm-core.so.1 +/opt/rocm-6.4.0/lib/librocm-core.so.1.0.60400 +/opt/rocm-6.4.0/lib/rocmmod +/opt/rocm-6.4.0/libexec +/opt/rocm-6.4.0/libexec/rocm-core +/opt/rocm-6.4.0/libexec/rocm-core/runpath_to_rpath.py +/opt/rocm-6.4.0/share +/opt/rocm-6.4.0/share/doc +/opt/rocm-6.4.0/share/doc/rocm-core +/opt/rocm-6.4.0/share/doc/rocm-core/LICENSE.txt + + +``` + + +## ROCM-CORE Library + +ROCM-CORE Library generated will be found in lib directory of the rocm-core package generated. + +```shell +find . -name "librocm-core.so.*" +``` + +### Sample Usage of APIs provided by rocm-core Library +#### Get ROCm Version + +For getting ROCm Version make use of getROCMVersion() API. +Sample Usage Example as shown below. + +```C +// Usage : + int mj=0,mn=0,p=0,ret=0; + ret=getROCMVersion(&mj,&mn,&p); + if(ret !=VerSuccess ) // error occured +``` + diff --git a/projects/rocm-core/README.txt b/projects/rocm-core/README.txt deleted file mode 100644 index 2636219c54..0000000000 --- a/projects/rocm-core/README.txt +++ /dev/null @@ -1,105 +0,0 @@ -Introduction: -rocm-core is a utility which can be used to get ROCm release version. -It also provides the Lmod modules files for the ROCm release. -getROCmVersion function provides the ROCm version. - -Lmod module files can be loaded with the following commads. -module load rocm/x.y or -module load rocm - - -Build: - - git clone - - cd rocm-core; mkdir -p build ; cd build - - After this invoke cmake with the following variables define as deemed fit - - - cmake \ - -DCMAKE_CURRENT_BINARY_DIR=$PWD \ - -DCMAKE_CURRENT_SOURCE_DIR=$PWD/../ \ - -DCMAKE_VERBOSE_MAKEFILE=1 \ - -DCMAKE_INSTALL_PREFIX=./ \ - -DCPACK_GENERATOR=DEB \ - -DCPACK_DEBIAN_PACKAGE_RELEASE="local.9999~20.04" \ - -DCPACK_RPM_PACKAGE_RELEASE="local.9999" \ - -DROCM_VERSION="5.5.0" \ - .. - - make - make install - make package - -After this the package "rocm-core_1.0.0-local_amd64.deb" will be generated accordingly - -The content of which will be the following : - -$dpkg -I rocm-core_1.0.0-local_amd64.deb - new Debian package, version 2.0. - size 6604 bytes: control archive=1608 bytes. - 285 bytes, 10 lines control - 191 bytes, 3 lines md5sums - 2360 bytes, 65 lines * postinst #!/bin/bash - 593 bytes, 25 lines * prerm #!/bin/bash - Architecture: amd64 - Description: Radeon Open Compute (ROCm) Runtime software stack - Homepage: https://github.com/RadeonOpenCompute/ROCm - Maintainer: ROCm Dev Support - Package: rocm-core - Priority: optional - Section: devel - Version: 1.0.0-local - Installed-Size: 70 - - -$dpkg -c rocm-core_1.0.0-local_amd64.deb -drwxrwxr-x root/root 0 2022-11-09 09:02 ./opt/ -drwxrwxr-x root/root 0 2022-11-09 09:02 ./opt/rocm/ -drwxrwxr-x root/root 0 2022-11-09 09:02 ./opt/rocm/include/ --rw-r--r-- root/root 2970 2022-11-09 09:02 ./opt/rocm/include/rocm_version.h -drwxrwxr-x root/root 0 2022-11-09 09:02 ./opt/rocm/lib/ -lrwxrwxrwx root/root 0 2022-11-09 09:02 ./opt/rocm/lib/librocm-core.so -> librocm-core.so.1 -lrwxrwxrwx root/root 0 2022-11-09 09:02 ./opt/rocm/lib/librocm-core.so.1 -> librocm-core.so.1.0.0. --rwxr-xr-x root/root 17096 2022-11-09 09:02 ./opt/rocm/lib/librocm-core.so.1.0.0. --rw-r--r-- root/root 420 2022-11-09 09:02 ./opt/rocm/lib/rocmmod - - - -The flags for the lib would the following : - -$readelf -d ./opt/rocm/lib/librocm-core.so.1.0.0. - -Dynamic section at offset 0x2de0 contains 28 entries: - Tag Type Name/Value - 0x0000000000000001 (NEEDED) Shared library: [libstdc++.so.6] - 0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1] - 0x0000000000000001 (NEEDED) Shared library: [libc.so.6] - 0x000000000000000e (SONAME) Library soname: [librocm-core.so.1] - 0x000000000000000c (INIT) 0x1000 - 0x000000000000000d (FINI) 0x12dc - 0x0000000000000019 (INIT_ARRAY) 0x3dd0 - 0x000000000000001b (INIT_ARRAYSZ) 8 (bytes) - 0x000000000000001a (FINI_ARRAY) 0x3dd8 - 0x000000000000001c (FINI_ARRAYSZ) 8 (bytes) - 0x000000006ffffef5 (GNU_HASH) 0x2f0 - 0x0000000000000005 (STRTAB) 0x480 - 0x0000000000000006 (SYMTAB) 0x318 - 0x000000000000000a (STRSZ) 558 (bytes) - 0x000000000000000b (SYMENT) 24 (bytes) - 0x0000000000000003 (PLTGOT) 0x4000 - 0x0000000000000002 (PLTRELSZ) 168 (bytes) - 0x0000000000000014 (PLTREL) RELA - 0x0000000000000017 (JMPREL) 0x820 - 0x0000000000000007 (RELA) 0x760 - 0x0000000000000008 (RELASZ) 192 (bytes) - 0x0000000000000009 (RELAENT) 24 (bytes) - 0x000000006ffffffb (FLAGS_1) Flags: NODELETE - 0x000000006ffffffe (VERNEED) 0x6d0 - 0x000000006fffffff (VERNEEDNUM) 3 - 0x000000006ffffff0 (VERSYM) 0x6ae - 0x000000006ffffff9 (RELACOUNT) 3 - 0x0000000000000000 (NULL) 0x0 - - diff --git a/projects/rocm-core/cmake_modules/rocm-core-config.cmake.in b/projects/rocm-core/cmake_modules/rocm-core-config.cmake.in new file mode 100644 index 0000000000..f5fe07c8bd --- /dev/null +++ b/projects/rocm-core/cmake_modules/rocm-core-config.cmake.in @@ -0,0 +1,18 @@ +# - Config file for the rocm-core package +# It defines the following variables +# ROCM_CORE_INCLUDE_DIR - include directories for rocm-core +# ROCM_CORE_LIB_DIR - libraries to link against +# ROCM_PATH - Install Base Location for ROCM. + +@PACKAGE_INIT@ + +# Compute paths +set_and_check(rocm_core_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") +set_and_check(ROCM_CORE_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") +set_and_check(rocm_core_LIB_DIR "@PACKAGE_LIB_INSTALL_DIR@") +set_and_check(ROCM_CORE_LIB_DIR "@PACKAGE_LIB_INSTALL_DIR@") +set_and_check(ROCM_PATH "${PACKAGE_PREFIX_DIR}") + +get_filename_component(ROCM_CORE_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +include("${ROCM_CORE_CMAKE_DIR}/rocmCoreTargets.cmake") + diff --git a/projects/rocm-core/copyright b/projects/rocm-core/copyright index 33843f52b6..8dc3cc8167 100644 --- a/projects/rocm-core/copyright +++ b/projects/rocm-core/copyright @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2017 - 2023 Advanced Micro Devices, Inc. All rights Reserved. +Copyright (c) 2017 - 2024 Advanced Micro Devices, Inc. All rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/projects/rocm-core/header_template.hpp.in b/projects/rocm-core/header_template.hpp.in deleted file mode 100644 index 0d8c481e90..0000000000 --- a/projects/rocm-core/header_template.hpp.in +++ /dev/null @@ -1,48 +0,0 @@ -/* - MIT License - - Copyright (c) 2017 - 2023 Advanced Micro Devices, Inc. All rights Reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in 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: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - 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 - AUTHORS 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 IN THE - SOFTWARE. - */ -#ifndef @include_guard@ -#define @include_guard@ - -#ifndef ROCM_HEADER_WRAPPER_WERROR -#define ROCM_HEADER_WRAPPER_WERROR @deprecated_error@ -#endif -#if ROCM_HEADER_WRAPPER_WERROR /* ROCM_HEADER_WRAPPER_WERROR 1 */ -#error "@file_name@ has moved to @CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@/@headerfile_dir@ " -#else /* ROCM_HEADER_WRAPPER_WERROR 0 */ -#if defined(__GNUC__) -#warning "@file_name@ has moved to @CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@/@headerfile_dir@ " -#else -#pragma message ("@file_name@ has moved to @CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@/@headerfile_dir@ ") -#endif -#endif /* ROCM_HEADER_WRAPPER_WERROR */ - -@include_statements@ - -@hashzero_check@ - -@file_contents@ - -@hash_endif@ - -#endif diff --git a/projects/rocm-core/rocm-core-backward-compat.cmake b/projects/rocm-core/rocm-core-backward-compat.cmake deleted file mode 100644 index e96572e669..0000000000 --- a/projects/rocm-core/rocm-core-backward-compat.cmake +++ /dev/null @@ -1,63 +0,0 @@ -# Copyright (c) 2023 Advanced Micro Devices, Inc. All Rights Reserved. -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in 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: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# 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 -# AUTHORS 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 IN -# THE SOFTWARE. - -cmake_minimum_required(VERSION 3.16.8) - -set(ROCM_CORE_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}) -set(ROCM_CORE_WRAPPER_DIR ${ROCM_CORE_BUILD_DIR}/wrapper_dir) -set(ROCM_CORE_WRAPPER_INC_DIR ${ROCM_CORE_WRAPPER_DIR}/include) -set(headerfile_dir "rocm-core") - -#Function to set actual file contents in wrapper files -#Some components grep for the contents in the file -function(set_file_contents input_file) - set(hashzero_check "#if 0 -/* The following is a copy of the original file for the benefit of build systems which grep for values - * in this file rather than preprocess it. This is just for backward compatibility */") - - file(READ ${input_file} file_contents) - set(hash_endif "#endif") - get_filename_component(file_name ${input_file} NAME) - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/header_template.hpp.in ${ROCM_CORE_WRAPPER_INC_DIR}/${file_name}) -endfunction() - -#use header template file and generate wrapper header files -function(generate_wrapper_header) - file(MAKE_DIRECTORY ${ROCM_CORE_WRAPPER_INC_DIR}) - - #find all header files - file(GLOB include_files ${ROCM_CORE_BUILD_DIR}/*.h) - #Create wrapper files - foreach(header_file ${include_files}) - # set include guard - get_filename_component(INC_GAURD_NAME ${header_file} NAME_WE) - string(TOUPPER ${INC_GAURD_NAME} INC_GAURD_NAME) - set(include_guard "ROCM_CORE_WRAPPER_INCLUDE_${INC_GAURD_NAME}_H") - #set #include statement - get_filename_component(file_name ${header_file} NAME) - set(include_statements "#include \"${headerfile_dir}/${file_name}\"\n") - set_file_contents(${header_file}) - endforeach() - -endfunction() - -#Use template header file and generater wrapper header files -generate_wrapper_header() -install(DIRECTORY ${ROCM_CORE_WRAPPER_INC_DIR} DESTINATION . COMPONENT runtime) - diff --git a/projects/rocm-core/rocm-core.postinst b/projects/rocm-core/rocm-core.postinst index 9983886070..f72d384163 100755 --- a/projects/rocm-core/rocm-core.postinst +++ b/projects/rocm-core/rocm-core.postinst @@ -34,20 +34,29 @@ do_update_alternatives(){ altscore=$((altscore*1000000+(now-1600000000)/60)) # Update the /opt/rocm symlink - update-alternatives --install "/opt/rocm" "rocm" "@CPACK_PACKAGING_INSTALL_PREFIX@" "$altscore" + # For custom location installation of rpm package, /opt/rocm symlink is not required + # TBD: For custom location installation of deb package. + if [[ ${ID_LIKE:-$ID} == "debian" ]] || [[ "$RPM_INSTALL_PREFIX0" == "/opt/rocm-"* ]] ; then + update-alternatives --install "/opt/rocm" "rocm" "@CPACK_PACKAGING_INSTALL_PREFIX@" "$altscore" + fi + for loc in "/usr/share/modules/modulefiles" "/usr/local/Modules/modulefiles" "/usr/share/Modules/modulefiles" do if [ -d "$loc" ] then mkdir -p "$loc/rocm" - update-alternatives --install "$loc/rocm/@ROCM_VERSION@" "rocmmod@ROCM_VERSION@" "@CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@/rocmmod" "$altscore" + if [[ ${ID_LIKE:-$ID} == "debian" ]] ; then + update-alternatives --install "$loc/rocm/@ROCM_VERSION@" "rocmmod@ROCM_VERSION@" "@CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@/rocmmod" "$altscore" + else + update-alternatives --install "$loc/rocm/@ROCM_VERSION@" "rocmmod@ROCM_VERSION@" "$RPM_INSTALL_PREFIX0/@CMAKE_INSTALL_LIBDIR@/rocmmod" "$altscore" + fi break; fi done true } -if [ -e /etc/lsb-release ] && source /etc/lsb-release && [ "$DISTRIB_ID" = "Ubuntu" ] +if [ -e /etc/os-release ] && source /etc/os-release && [[ ${ID_LIKE:-$ID} == "debian" ]] then case "$1" in (configure) diff --git a/projects/rocm-core/rocm-core.prerm b/projects/rocm-core/rocm-core.prerm index 1fba7c9752..c500ef831f 100755 --- a/projects/rocm-core/rocm-core.prerm +++ b/projects/rocm-core/rocm-core.prerm @@ -4,11 +4,18 @@ do_update_alternatives(){ # skip update if program doesn't exist command -v update-alternatives >/dev/null || return 0 # Update the /opt/rocm symlink - update-alternatives --remove "rocm" "@CPACK_PACKAGING_INSTALL_PREFIX@" - update-alternatives --remove "rocmmod@ROCM_VERSION@" "@CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@/rocmmod"|| true + if [[ ${ID_LIKE:-$ID} == "debian" ]] || [[ "$RPM_INSTALL_PREFIX0" == "/opt/rocm-"* ]] ; then + update-alternatives --remove "rocm" "@CPACK_PACKAGING_INSTALL_PREFIX@" + fi + + if [[ ${ID_LIKE:-$ID} == "debian" ]] ; then + update-alternatives --remove "rocmmod@ROCM_VERSION@" "@CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@/rocmmod"|| true + else + update-alternatives --remove "rocmmod@ROCM_VERSION@" "$RPM_INSTALL_PREFIX0/@CMAKE_INSTALL_LIBDIR@/rocmmod"|| true + fi } -if [ -e /etc/lsb-release ] && source /etc/lsb-release && [ "$DISTRIB_ID" = "Ubuntu" ] +if [ -e /etc/os-release ] && source /etc/os-release && [[ ${ID_LIKE:-$ID} == "debian" ]] then case "$1" in (remove | upgrade) diff --git a/projects/rocm-core/rocmmod.in b/projects/rocm-core/rocmmod.in index ba5c23780d..3f0466d454 100644 --- a/projects/rocm-core/rocmmod.in +++ b/projects/rocm-core/rocmmod.in @@ -3,15 +3,16 @@ ## Rocm module ## -module-whatis "adds `@CPACK_PACKAGING_INSTALL_PREFIX@/bin' to your PATH environment variable" +module-whatis "Adds ROCm binary paths to your environment variable" proc ModulesHelp { } { puts stderr "\tThe ROCM Module." } +set ROOT [file normalize [file dirname [file normalize ${ModulesCurrentModulefile}/__]]/../..] -prepend-path PATH "@CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@:@CPACK_PACKAGING_INSTALL_PREFIX@/llvm/bin" -prepend-path MANPATH "@CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_MANDIR@:@CPACK_PACKAGING_INSTALL_PREFIX@/llvm/share/man1" -prepend-path CMAKE_PREFIX_PATH "@CPACK_PACKAGING_INSTALL_PREFIX@" -setenv ROCM_PATH "@CPACK_PACKAGING_INSTALL_PREFIX@" -setenv HIP_PATH "@CPACK_PACKAGING_INSTALL_PREFIX@" +prepend-path PATH "${ROOT}/@CMAKE_INSTALL_BINDIR@:${ROOT}/lib/llvm/bin" +prepend-path MANPATH "${ROOT}/@CMAKE_INSTALL_MANDIR@:${ROOT}/lib/llvm/share/man1" +prepend-path CMAKE_PREFIX_PATH "${ROOT}" +setenv ROCM_PATH "${ROOT}" +setenv HIP_PATH "${ROOT}" diff --git a/projects/rocm-core/utils.cmake b/projects/rocm-core/utils.cmake index 3b48f05bca..42c075b30a 100644 --- a/projects/rocm-core/utils.cmake +++ b/projects/rocm-core/utils.cmake @@ -57,6 +57,12 @@ function( parse_rocm_version VERSION_STRING ) set ( TEMP_VERSION_STRING "${TEMP_VERSION_STRING}.${PATCH}" ) endif () + if ( ${VERSION_COUNT} GREATER 3 ) + list ( GET VERSIONS 3 POINT ) + set ( VERSION_POINT ${POINT} PARENT_SCOPE ) + set ( TEMP_VERSION_STRING "${TEMP_VERSION_STRING}.${POINT}" ) + endif () + if ( DEFINED VERSION_BUILD ) set ( VERSION_BUILD "${VERSION_BUILD}" PARENT_SCOPE ) endif () @@ -113,7 +119,7 @@ function( set_variables ) endif() #set libpatch version - if(NOT DEFINED ROCM_LIBPATCH_VERSION) + if(NOT DEFINED ENV{ROCM_LIBPATCH_VERSION}) set(ROCM_LIBPATCH_VERSION "${VERSION_MAJOR}") string(LENGTH ${VERSION_MINOR} LENSTR) if(LENSTR EQUAL 1) # length of version cannot be zero hence it would be 1 or greater @@ -130,15 +136,17 @@ function( set_variables ) endif() set(ROCM_LIBPATCH_VERSION "${ROCM_LIBPATCH_VERSION}" PARENT_SCOPE ) + else() + set (ROCM_LIBPATCH_VERSION $ENV{ROCM_LIBPATCH_VERSION} PARENT_SCOPE ) endif() - if ( DEFINED CPACK_RPM_PACKAGE_RELEASE ) + if ( DEFINED ENV{CPACK_RPM_PACKAGE_RELEASE} ) set ( CPACK_RPM_PACKAGE_RELEASE ${CPACK_RPM_PACKAGE_RELEASE} PARENT_SCOPE ) else() set ( CPACK_RPM_PACKAGE_RELEASE "local" PARENT_SCOPE ) endif() - if ( DEFINED CPACK_DEBIAN_PACKAGE_RELEASE ) + if ( DEFINED ENV{CPACK_DEBIAN_PACKAGE_RELEASE} ) set ( CPACK_DEBIAN_PACKAGE_RELEASE ${CPACK_DEBIAN_PACKAGE_RELEASE} PARENT_SCOPE ) else() set ( CPACK_DEBIAN_PACKAGE_RELEASE "local" PARENT_SCOPE ) @@ -146,16 +154,100 @@ function( set_variables ) set( VERSION_COMMIT_COUNT "${VERSION_COMMIT_COUNT}" PARENT_SCOPE ) set( VERSION_HASH "${VERSION_HASH}" PARENT_SCOPE ) + set( VERSION_BUILD "${VERSION_BUILD}" PARENT_SCOPE ) message(STATUS "VERSION_MAJOR : ${VERSION_MAJOR}" ) message(STATUS "VERSION_MINOR : ${VERSION_MINOR}" ) message(STATUS "VERSION_PATCH : ${VERSION_PATCH}" ) + message(STATUS "VERSION_POINT : ${VERSION_POINT}" ) message(STATUS "ROCM_LIBPATCH_VERSION : ${ROCM_LIBPATCH_VERSION}" ) message(STATUS "VERSION_COMMIT_COUNT : ${VERSION_COMMIT_COUNT}" ) message(STATUS "VERSION_HASH : ${VERSION_HASH}" ) + message(STATUS "VERSION_BUILD : ${VERSION_BUILD}" ) message(STATUS "CPACK_DEBIAN_PACKAGE_RELEASE : ${CPACK_DEBIAN_PACKAGE_RELEASE}" ) message(STATUS "CPACK_RPM_PACKAGE_RELEASE : ${CPACK_RPM_PACKAGE_RELEASE}" ) endfunction() +## Configure Copyright File for Debian Package +function( configure_debian_pkg PACKAGE_NAME_T COMPONENT_NAME_T PACKAGE_VERSION_T MAINTAINER_NM_T MAINTAINER_EMAIL_T) + # Check If Debian Platform + find_file (DEBIAN debian_version debconf.conf PATHS /etc) + if(DEBIAN) + set_debian_pkg_cmake_flags( ${PACKAGE_NAME_T} ${PACKAGE_VERSION_T} + ${MAINTAINER_NM_T} ${MAINTAINER_EMAIL_T} ) + # Create debian directory in build tree + file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/DEBIAN") + + # Configure the copyright file + configure_file( + "${CMAKE_SOURCE_DIR}/DEBIAN/copyright.in" + "${CMAKE_BINARY_DIR}/DEBIAN/copyright" + @ONLY + ) + + # Install copyright file + install ( FILES "${CMAKE_BINARY_DIR}/DEBIAN/copyright" + DESTINATION "${CMAKE_INSTALL_DOCDIR}" + COMPONENT ${COMPONENT_NAME_T} ) + + # Configure the changelog file + configure_file( + "${CMAKE_SOURCE_DIR}/DEBIAN/changelog.in" + "${CMAKE_BINARY_DIR}/DEBIAN/changelog.Debian" + @ONLY + ) + + # Install Change Log + find_program ( DEB_GZIP_EXEC gzip ) + if(EXISTS "${CMAKE_BINARY_DIR}/DEBIAN/changelog.Debian" ) + execute_process( + COMMAND ${DEB_GZIP_EXEC} -9 "${CMAKE_BINARY_DIR}/DEBIAN/changelog.Debian" + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/DEBIAN" + RESULT_VARIABLE result + OUTPUT_VARIABLE output + ERROR_VARIABLE error + ) + if(NOT ${result} EQUAL 0) + message(FATAL_ERROR "Failed to compress: ${error}") + endif() + install ( FILES "${CMAKE_BINARY_DIR}/DEBIAN/${DEB_CHANGELOG_INSTALL_FILENM}" + DESTINATION ${CMAKE_INSTALL_DOCDIR} + COMPONENT ${COMPONENT_NAME_T}) + endif() + else() + message( STATUS "Ignore Configuring Debian Specific Packaging Configuration" ) + endif() +endfunction() + +# Set variables for changelog and copyright +# For Debian specific Packages +function( set_debian_pkg_cmake_flags DEB_PACKAGE_NAME_T DEB_PACKAGE_VERSION_T DEB_MAINTAINER_NM_T DEB_MAINTAINER_EMAIL_T ) + # Setting configure flags + set( DEB_PACKAGE_NAME "${DEB_PACKAGE_NAME_T}" CACHE STRING "Debian Package Name" ) + set( DEB_PACKAGE_VERSION "${DEB_PACKAGE_VERSION_T}" CACHE STRING "Debian Package Version String" ) + set( DEB_MAINTAINER_NAME "${DEB_MAINTAINER_NM_T}" CACHE STRING "Debian Package Maintainer Name" ) + set( DEB_MAINTAINER_EMAIL "${DEB_MAINTAINER_EMAIL_T}" CACHE STRING "Debian Package Maintainer Email" ) + set( DEB_COPYRIGHT_YEAR "2025" CACHE STRING "Debian Package Copyright Year" ) + set( DEB_LICENSE "MIT" CACHE STRING "Debian Package License Type" ) + set( DEB_CHANGELOG_INSTALL_FILENM "changelog.Debian.gz" CACHE STRING "Debian Package ChangeLog File Name" ) + + # Get TimeStamp + find_program( DEB_DATE_TIMESTAMP_EXEC date ) + set ( DEB_TIMESTAMP_FORMAT_OPTION "-R" ) + execute_process ( + COMMAND ${DEB_DATE_TIMESTAMP_EXEC} ${DEB_TIMESTAMP_FORMAT_OPTION} + OUTPUT_VARIABLE TIMESTAMP_T + ) + set( DEB_TIMESTAMP "${TIMESTAMP_T}" CACHE STRING "Current Time Stamp for Copyright/Changelog" ) + + message(STATUS "DEB_PACKAGE_NAME : ${DEB_PACKAGE_NAME}" ) + message(STATUS "DEB_PACKAGE_VERSION : ${DEB_PACKAGE_VERSION}" ) + message(STATUS "DEB_MAINTAINER_NAME : ${DEB_MAINTAINER_NAME}" ) + message(STATUS "DEB_MAINTAINER_EMAIL : ${DEB_MAINTAINER_EMAIL}" ) + message(STATUS "DEB_COPYRIGHT_YEAR : ${DEB_COPYRIGHT_YEAR}" ) + message(STATUS "DEB_LICENSE : ${DEB_LICENSE}" ) + message(STATUS "DEB_TIMESTAMP : ${DEB_TIMESTAMP}" ) + message(STATUS "DEB_CHANGELOG_INSTALL_FILENM : ${DEB_CHANGELOG_INSTALL_FILENM}" ) +endfunction()