From 4ee6e7c69a5534d3fb2099948ca1f2c443f77953 Mon Sep 17 00:00:00 2001 From: James Edwards Date: Tue, 20 Sep 2016 13:55:35 -0500 Subject: [PATCH] Add libhsakmt cmake build and packaging files. Change-Id: Ic7fa22d5b266480aa0c62628022f39da4e043d23 [ROCm/ROCR-Runtime commit: 7511631f0870b2ec8dc293706e9e5fb4adb8c602] --- projects/rocr-runtime/CMakeLists.txt | 136 ++++++++++++++++++ projects/rocr-runtime/DEBIAN/postinst | 20 ++- projects/rocr-runtime/DEBIAN/prerm | 19 +++ projects/rocr-runtime/RPM/rpm_post | 1 + projects/rocr-runtime/RPM/rpm_postun | 1 + .../rocr-runtime/cmake_modules/utils.cmake | 71 +++++++++ 6 files changed, 244 insertions(+), 4 deletions(-) create mode 100644 projects/rocr-runtime/CMakeLists.txt create mode 100755 projects/rocr-runtime/DEBIAN/prerm create mode 100644 projects/rocr-runtime/RPM/rpm_post create mode 100644 projects/rocr-runtime/RPM/rpm_postun create mode 100644 projects/rocr-runtime/cmake_modules/utils.cmake diff --git a/projects/rocr-runtime/CMakeLists.txt b/projects/rocr-runtime/CMakeLists.txt new file mode 100644 index 0000000000..8aff4b410a --- /dev/null +++ b/projects/rocr-runtime/CMakeLists.txt @@ -0,0 +1,136 @@ +################################################################################ +## +## Copyright (c) 2016 Advanced Micro Devices, Inc. All rights reserved. +## +## MIT LICENSE: +## 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 2.8.0) + +set ( HSAKMT_NAME "hsakmt" ) +set ( HSAKMT_COMPONENT "lib${HSAKMT_NAME}" ) +set ( HSAKMT_TARGET "${HSAKMT_NAME}" ) + +project ( ${HSAKMT_TARGET} ) + +list ( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules" ) + +include ( utils ) + +if(NOT DEFINED VERSION_STRING) + set ( VERSION_STRING "2.0.1" ) +endif() + +parse_version ( ${VERSION_STRING} ) + +## Verbose output. +set ( CMAKE_VERBOSE_MAKEFILE on ) + +## Compiler flags +set ( CMAKE_CXX_FLAGS "-fPIC -W -Wall -Wextra -Werror -Wno-unused-parameter -Wformat-security -Wswitch-default -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wlogical-op -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wunreachable-code -std=gnu99 -fvisibility=hidden" ) + +set ( HSAKMT_LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/src/libhsakmt.ver" ) + +## Linker Flags +set ( CMAKE_SHARED_LINKER_FLAGS "-Wl,--version-script=${HSAKMT_LINKER_SCRIPT} -Wl,-soname=${HSAKMT_COMPONENT}.so.$(VERSION_MAJOR) -Wl,-z,nodelete" ) + +## Source files +set ( HSAKMT_SRC ${HSAKMT_SRC} src/events.c ) +set ( HSAKMT_SRC ${HSAKMT_SRC} src/fmm.c ) +set ( HSAKMT_SRC ${HSAKMT_SRC} src/globals.c ) +set ( HSAKMT_SRC ${HSAKMT_SRC} src/libhsakmt.c ) +set ( HSAKMT_SRC ${HSAKMT_SRC} src/memory.c ) +set ( HSAKMT_SRC ${HSAKMT_SRC} src/openclose.c ) +set ( HSAKMT_SRC ${HSAKMT_SRC} src/perfctr.c ) +set ( HSAKMT_SRC ${HSAKMT_SRC} src/pmc_table.c ) +set ( HSAKMT_SRC ${HSAKMT_SRC} src/queues.c ) +set ( HSAKMT_SRC ${HSAKMT_SRC} src/time.c ) +set ( HSAKMT_SRC ${HSAKMT_SRC} src/topology.c ) +set ( HSAKMT_SRC ${HSAKMT_SRC} src/version.c ) + +## Include paths +include_directories ( ${CMAKE_CURRENT_SOURCE_DIR}/include ) +include_directories ( ${CMAKE_CURRENT_SOURCE_DIR}/src ) + +## Add the library +add_library ( ${HSAKMT_TARGET} SHARED ${HSAKMT_SRC} ) + +## Set the VERSION and SOVERSION values +if ( DEFINED VERSION_STRING ) + set_property ( TARGET ${HSAKMT_TARGET} PROPERTY VERSION "${VERSION_STRING}" ) +endif () + +if ( DEFINED VERSION_MAJOR ) + set_property ( TARGET ${HSAKMT_TARGET} PROPERTY SOVERSION "${VERSION_MAJOR}" ) +else () + set_property ( TARGET ${HSAKMT_TARGET} PROPERTY SOVERSION 1 ) +endif() + +target_link_libraries ( ${HSAKMT_TARGET} + dl pthread rt +) + +## If the library is a release, strip the target library +if ( "${CMAKE_BUILD_TYPE}" STREQUAL Release ) + add_custom_command ( TARGET ${HSAKMT_TARGET} POST_BUILD COMMAND ${CMAKE_STRIP} *.so ) +endif () + +## Create temporary directories for packaged symbolic links +set ( LINK_DIRECTORY "links" ) + +add_custom_command ( OUTPUT ${LINK_DIRECTORY} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND mkdir -p links ) + +add_custom_command ( OUTPUT ${LINK_DIRECTORY}/${HSAKMT_COMPONENT} COMMAND ${CMAKE_COMMAND} -E create_symlink ../libhsakmt/include/${HSAKMT_COMPONENT} ${LINK_DIRECTORY}/${HSAKMT_COMPONENT} DEPENDS ${LINK_DIRECTORY} ) + +add_custom_command ( OUTPUT ${LINK_DIRECTORY}/${HSAKMT_COMPONENT}.so COMMAND ${CMAKE_COMMAND} -E create_symlink ../libhsakmt/lib/${HSAKMT_COMPONENT}.so.${VERSION_MAJOR} ${LINK_DIRECTORY}/${HSAKMT_COMPONENT}.so DEPENDS ${LINK_DIRECTORY} ) + +add_custom_target ( copy_links ALL DEPENDS ${LINK_DIRECTORY}/${HSAKMT_COMPONENT}.so ${LINK_DIRECTORY}/${HSAKMT_COMPONENT} ) + +## Set the install targets +install ( TARGETS ${HSAKMT_TARGET} LIBRARY DESTINATION libhsakmt/lib COMPONENT ${HSAKMT_COMPONENT} ) +install ( FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md DESTINATION libhsakmt PERMISSIONS OWNER_WRITE OWNER_READ ) +install ( FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/hsakmt.h DESTINATION libhsakmt/include/libhsakmt PERMISSIONS OWNER_WRITE OWNER_READ ) +install ( FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/hsakmttypes.h DESTINATION libhsakmt/include/libhsakmt PERMISSIONS OWNER_WRITE OWNER_READ ) +install ( FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/linux/kfd_ioctl.h DESTINATION libhsakmt/include/libhsakmt/linux PERMISSIONS OWNER_WRITE OWNER_READ ) +install ( FILES ${CMAKE_CURRENT_BINARY_DIR}/${LINK_DIRECTORY}/${HSAKMT_COMPONENT} DESTINATION include PERMISSIONS OWNER_WRITE OWNER_READ ) +install ( FILES ${CMAKE_CURRENT_BINARY_DIR}/${LINK_DIRECTORY}/${HSAKMT_COMPONENT}.so DESTINATION lib PERMISSIONS OWNER_WRITE OWNER_READ ) + +## Packaging directives +set ( CPACK_PACKAGE_NAME "hsakmt-roct-dev" ) +set ( CPACK_PACKAGE_VENDOR "AMD" ) +set ( CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR} ) +set ( CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR} ) +set ( CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH} ) +set ( CPACK_PACKAGE_CONTACT "Advanced Micro Devices Inc." ) +set ( CPACK_PACKAGE_DESCRIPTION_SUMMARY "Thunk library for AMD KFD" ) +set ( CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md" ) + +# Debian package specific variables +set ( CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/RadeonOpenCompute/ROCT-Thunk-Interface" ) +set ( CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/DEBIAN/postinst;${CMAKE_CURRENT_SOURCE_DIR}/DEBIAN/prerm" ) +set ( CPACK_DEBIAN_PACKAGE_DEPENDS "libpci3" ) + +# RPM package specific variables +set ( CPACK_RPM_PRE_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/RPM/rpm_post" ) +set ( CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/RPM/rpm_postun" ) + +include ( CPack ) diff --git a/projects/rocr-runtime/DEBIAN/postinst b/projects/rocr-runtime/DEBIAN/postinst index b3919c75d4..b6a16c013a 100755 --- a/projects/rocr-runtime/DEBIAN/postinst +++ b/projects/rocr-runtime/DEBIAN/postinst @@ -1,7 +1,19 @@ -#!/bin/bash +#/bin/bash set -e -echo "Updating ldconfig" -ldconfig -echo "Done" +do_ldconfig() { + echo /opt/rocm/libhsakmt/lib > /etc/ld.so.conf.d/x86_64-libhsakmt.conf && ldconfig +} + +case "$1" in + configure) + do_ldconfig + ;; + abort-upgrade|abort-remove|abort-deconfigure) + echo "$1" + ;; + *) + exit 0 + ;; +esac diff --git a/projects/rocr-runtime/DEBIAN/prerm b/projects/rocr-runtime/DEBIAN/prerm new file mode 100755 index 0000000000..f8aa5a1993 --- /dev/null +++ b/projects/rocr-runtime/DEBIAN/prerm @@ -0,0 +1,19 @@ +#!/bin/bash + +set -e + +rm_ldconfig() { + rm -f /etc/ld.so.conf.d/x86_64-libhsakmt.conf && ldconfig +} + +case "$1" in + remove) + rm_ldconfig + ;; + purge) + ;; + *) + exit 0 + ;; +esac + diff --git a/projects/rocr-runtime/RPM/rpm_post b/projects/rocr-runtime/RPM/rpm_post new file mode 100644 index 0000000000..7585d83dea --- /dev/null +++ b/projects/rocr-runtime/RPM/rpm_post @@ -0,0 +1 @@ +echo /opt/rocm/libhsakmt/lib > /etc/ld.so.conf.d/x86_64-libhsakmt.conf && ldconfig diff --git a/projects/rocr-runtime/RPM/rpm_postun b/projects/rocr-runtime/RPM/rpm_postun new file mode 100644 index 0000000000..0b130e27e8 --- /dev/null +++ b/projects/rocr-runtime/RPM/rpm_postun @@ -0,0 +1 @@ +rm -f /etc/ld.so.conf.d/x86_64-libhsakmt.conf && ldconfig diff --git a/projects/rocr-runtime/cmake_modules/utils.cmake b/projects/rocr-runtime/cmake_modules/utils.cmake new file mode 100644 index 0000000000..58067a4d3c --- /dev/null +++ b/projects/rocr-runtime/cmake_modules/utils.cmake @@ -0,0 +1,71 @@ +################################################################################ +## +## The University of Illinois/NCSA +## Open Source License (NCSA) +## +## Copyright (c) 2014-2015, 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(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()