662f6817d7
Create a new top-level CMakeLists.txt file to control building thunk and ROCr. kfdtest and rocrtest are built separately. Most of the cmake code that existed for thunk, ROCr, rocrtst and kfdtest still reside in their respective CMakeLists.txt files, except the CPack packaging directives which have been moved to the top-level CMakeLists.txt. Change-Id: I1a537359029504af8b1abb324bc6f0d75d98471e
304 行
14 KiB
CMake
304 行
14 KiB
CMake
################################################################################
|
|
##
|
|
## The University of Illinois/NCSA
|
|
## Open Source License (NCSA)
|
|
##
|
|
## Copyright (c) 2014-2024, 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.
|
|
##
|
|
################################################################################
|
|
|
|
|
|
cmake_minimum_required(VERSION 3.7)
|
|
|
|
# Set the project name
|
|
project("rocr")
|
|
|
|
# option(BUILD_TESTS "Build tests" OFF)
|
|
|
|
function(add_rocm_subdir subdir subdir_assigns)
|
|
message("add_rocm_subdir() -- " ${subdir})
|
|
# message(" subdir_assigns before:" ${subdir_assigns} "EOM")
|
|
string(STRIP "${subdir_assigns}" subdir_assigns)
|
|
message(" subdir_assigns:" ${subdir_assigns} "EOM")
|
|
|
|
# if the subdir_assigns is defined and non-empty, then..
|
|
|
|
if(NOT "${subdir_assigns}" STREQUAL "")
|
|
foreach(assignment IN LISTS subdir_assigns)
|
|
# The format of each var should be VARNAME=VALUE
|
|
message("assignment: " ${assignment})
|
|
string(REPLACE "=" ";" pair ${assignment})
|
|
list(GET pair 0 var_name)
|
|
list(GET pair 1 var_value)
|
|
|
|
# Set variable locally for this function and for the subdirectory
|
|
set(${var_name} "${var_value}")
|
|
message("The value of ${var_name} is: ${${var_name}}")
|
|
endforeach()
|
|
endif()
|
|
add_subdirectory(${subdir})
|
|
endfunction()
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules")
|
|
include(utils)
|
|
|
|
|
|
## Get version strings
|
|
get_version("1.14.0")
|
|
if (${ROCM_PATCH_VERSION})
|
|
set(VERSION_PATCH ${ROCM_PATCH_VERSION})
|
|
endif()
|
|
set(SO_VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
|
|
set(PACKAGE_VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_COMMIT_COUNT}")
|
|
|
|
# Handling of BUILD_SHARED_LIBS in this top-level CMake:
|
|
# * Default is to build shared libraries
|
|
# * Except thunk will ignore this; it is always static
|
|
if (NOT DEFINED BUILD_SHARED_LIBS)
|
|
set (BUILD_SHARED_DEFAULT ON)
|
|
else()
|
|
set (BUILD_SHARED_DEFAULT OFF)
|
|
endif()
|
|
|
|
# Build libhsakmt as static
|
|
set(SAVED_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
|
|
set(BUILD_SHARED_LIBS OFF)
|
|
add_rocm_subdir(libhsakmt "${THUNK_DEFINITIONS}")
|
|
set_target_properties(hsakmt PROPERTIES
|
|
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/libhsakmt/archive"
|
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/libhsakmt/lib"
|
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/libhsakmt/runtime")
|
|
|
|
set (BUILD_SHARED_LIBS ${SAVED_BUILD_SHARED_LIBS})
|
|
add_rocm_subdir(runtime/hsa-runtime "${ROCR_DEFINITIONS}")
|
|
set_target_properties(hsa-runtime64 PROPERTIES
|
|
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/rocr/archive"
|
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/rocr/lib"
|
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/rocr/runtime")
|
|
add_dependencies(hsa-runtime64 hsakmt)
|
|
|
|
# Optionally record the package's find module in the user's package cache.
|
|
if ( NOT DEFINED EXPORT_TO_USER_PACKAGE_REGISTRY )
|
|
set ( EXPORT_TO_USER_PACKAGE_REGISTRY "off")
|
|
endif()
|
|
set ( EXPORT_TO_USER_PACKAGE_REGISTRY ${EXPORT_TO_USER_PACKAGE_REGISTRY} CACHE BOOL "Add cmake package config location to the user's cmake package registry.")
|
|
if(${EXPORT_TO_USER_PACKAGE_REGISTRY})
|
|
# Enable writing to the registry
|
|
set(CMAKE_EXPORT_PACKAGE_REGISTRY ON)
|
|
# Generate a target file for the build
|
|
export(TARGETS ${CORE_RUNTIME_NAME} NAMESPACE ${CORE_RUNTIME_NAME}:: FILE ${CORE_RUNTIME_NAME}Targets.cmake)
|
|
# Record the package in the user's cache.
|
|
export(PACKAGE ${CORE_RUNTIME_NAME})
|
|
endif()
|
|
|
|
|
|
## Packaging directives
|
|
set(CPACK_VERBOSE 1)
|
|
set(CPACK_GENERATOR "DEB;RPM" CACHE STRING "Package types to build")
|
|
set(ENABLE_LDCONFIG ON CACHE BOOL "Set library links and caches using ldconfig.")
|
|
|
|
# From libhsakmt:
|
|
set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE STRING "Default packaging prefix.")
|
|
|
|
if(DEFINED CPACK_PACKAGING_INSTALL_PREFIX)
|
|
set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "${CPACK_PACKAGING_INSTALL_PREFIX} ${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}")
|
|
endif()
|
|
|
|
# ASAN Package will have libraries and license file
|
|
if (ENABLE_ASAN_PACKAGING)
|
|
# ASAN Package requires only asan component with libraries and license file
|
|
set(CPACK_COMPONENTS_ALL asan)
|
|
else()
|
|
set(CPACK_COMPONENTS_ALL binary dev)
|
|
endif()
|
|
set(CPACK_COMPONENTS_GROUPING IGNORE)
|
|
set(CPACK_DEB_COMPONENT_INSTALL ON)
|
|
set(CPACK_RPM_COMPONENT_INSTALL ON)
|
|
set(CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc.")
|
|
set(CPACK_PACKAGE_VERSION ${PACKAGE_VERSION_STRING})
|
|
set(CPACK_PACKAGE_CONTACT "AMD HSA Support <dl.HSA-Runtime-Support@amd.com>")
|
|
set(CPACK_COMPONENT_DESCRIPTION "AMD Heterogeneous System Architecture HSA - Linux HSA Runtime for Boltzmann (ROCm) platforms\nIncludes HSAKMT, the user-mode API interfaces used to interact with the ROCk driver.\n Contains the headers, pkgonfig and\n cmake files for ROCT.")
|
|
set(CPACK_COMPONENT_BINARY_DESCRIPTION "AMD Heterogeneous System Architecture HSA - Linux HSA Runtime for Boltzmann (ROCm) platforms")
|
|
set(CPACK_COMPONENT_DEV_DESCRIPTION "AMD Heterogeneous System Architecture HSA development package.\n This package contains the headers and cmake files for the rocr-runtime package.")
|
|
set(CPACK_COMPONENT_ASAN_DESCRIPTION "AMD Heterogeneous System Architecture HSA - Linux HSA instrumented libraries for Boltzmann (ROCm) platforms")
|
|
|
|
if (DEFINED ENV{ROCM_LIBPATCH_VERSION})
|
|
set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}.$ENV{ROCM_LIBPATCH_VERSION}")
|
|
message("Using CPACK_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION}")
|
|
endif()
|
|
|
|
# Debian package specific variables
|
|
set(CPACK_DEBIAN_BINARY_PACKAGE_NAME "hsa-rocr")
|
|
set(CPACK_DEBIAN_DEV_PACKAGE_NAME "hsa-rocr-dev")
|
|
set(CPACK_DEBIAN_ASAN_PACKAGE_NAME "hsa-rocr-asan")
|
|
if (DEFINED ENV{CPACK_DEBIAN_PACKAGE_RELEASE})
|
|
set(CPACK_DEBIAN_PACKAGE_RELEASE $ENV{CPACK_DEBIAN_PACKAGE_RELEASE})
|
|
else()
|
|
set(CPACK_DEBIAN_PACKAGE_RELEASE "local")
|
|
endif()
|
|
message("Using CPACK_DEBIAN_PACKAGE_RELEASE ${CPACK_DEBIAN_PACKAGE_RELEASE}")
|
|
set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT")
|
|
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/RadeonOpenCompute/ROCR-Runtime")
|
|
|
|
## Process the Debian install/remove scripts to update the CPACK variables
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/DEBIAN/Binary/postinst.in DEBIAN/Binary/postinst @ONLY)
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/DEBIAN/Binary/prerm.in DEBIAN/Binary/prerm @ONLY)
|
|
set(CPACK_DEBIAN_BINARY_PACKAGE_CONTROL_EXTRA "DEBIAN/Binary/postinst;DEBIAN/Binary/prerm")
|
|
|
|
# Needed since some packages still say they need hsakmt-roct
|
|
set(CPACK_DEBIAN_PACKAGE_REPLACES "hsakmt-roct,hsa-ext-rocr-dev,hsa-runtime64")
|
|
set(CPACK_DEBIAN_PACKAGE_PROVIDES "hsakmt-roct,hsa-runtime64")
|
|
set(CPACK_RPM_PACKAGE_OBSOLETES "hsakmt-roct,hsakmt-roct-dev,hsakmt-roct,hsa-ext-rocr-dev,hsa-runtime64")
|
|
set(CPACK_RPM_PACKAGE_PROVIDES "hsakmt-roct,hsa-ext-rocr-dev,hsa-rocr-dev,hsa-runtime64")
|
|
set(CPACK_DEBIAN_DEV_PACKAGE_REPLACES "hsakmt-roct,hsakmt-roct-dev,hsa-runtime64")
|
|
set(CPACK_DEBIAN_DEV_PACKAGE_PROVIDES "hsakmt-roct,hsakmt-roct-dev,hsa-runtime64")
|
|
set(CPACK_RPM_DEV_PACKAGE_PROVIDES "hsakmt-roct,hsakmt-roct-dev,hsa-runtime64")
|
|
|
|
|
|
# package dependencies
|
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libdrm-amdgpu-dev | libdrm-dev, rocm-core")
|
|
set(CPACK_DEBIAN_PACKAGE_RECOMMENDS "libdrm-amdgpu-dev")
|
|
# Setting devel package dependendent version
|
|
set(CPACK_DEBIAN_DEV_PACKAGE_DEPENDS "libdrm-amdgpu-dev | libdrm-dev, rocm-core, hsa-rocr, hsakmt-roct-dev")
|
|
|
|
set(CPACK_DEBIAN_DEV_PACKAGE_RECOMMENDS "libdrm-amdgpu-dev")
|
|
|
|
set(CPACK_DEBIAN_BINARY_PACKAGE_DEPENDS "libdrm-amdgpu-amdgpu1 | libdrm-amdgpu1, libnuma1, libelf1")
|
|
set(CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS "libdrm-amdgpu-dev | libdrm-dev, rocm-core-asan, libdrm-amdgpu-amdgpu1 | libdrm-amdgpu1, libnuma1, libelf1")
|
|
set(CPACK_DEBIAN_ASAN_PACKAGE_RECOMMENDS "libdrm-amdgpu-dev")
|
|
|
|
set(CPACK_DEBIAN_BINARY_PACKAGE_RECOMMENDS "libdrm-amdgpu-amdgpu1")
|
|
if (ROCM_DEP_ROCMCORE)
|
|
string(APPEND CPACK_DEBIAN_BINARY_PACKAGE_DEPENDS ", rocm-core")
|
|
string(APPEND CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS ", rocm-core-asan")
|
|
endif()
|
|
if (HSA_DEP_ROCPROFILER_REGISTER)
|
|
string(APPEND CPACK_DEBIAN_BINARY_PACKAGE_DEPENDS ", rocprofiler-register")
|
|
endif()
|
|
# Declare package relationships (hsa-ext-rocr-dev is a legacy package that we subsume)
|
|
set(CPACK_DEBIAN_PACKAGE_BREAKS "hsa-ext-rocr-dev")
|
|
|
|
# RPM package specific variables
|
|
set(EL7_DISTRO "FALSE")
|
|
Checksetel7(EL7_DISTRO)
|
|
set(CPACK_RPM_BINARY_PACKAGE_NAME "hsa-rocr")
|
|
# Since we changed the package name to match RPM specs, take care of older builds that had -dev installed
|
|
# Also cover the fact that this now replaces the old binary package hsakmt-roct
|
|
set(CPACK_RPM_DEV_PACKAGE_OBSOLETES "hsakmt-roct-dev hsakmt-roct")
|
|
|
|
set(CPACK_RPM_DEV_PACKAGE_NAME "hsa-rocr-devel")
|
|
set(CPACK_RPM_ASAN_PACKAGE_NAME "hsa-rocr-asan")
|
|
if (DEFINED ENV{CPACK_RPM_PACKAGE_RELEASE})
|
|
set(CPACK_RPM_PACKAGE_RELEASE $ENV{CPACK_RPM_PACKAGE_RELEASE})
|
|
else()
|
|
set(CPACK_RPM_PACKAGE_RELEASE "local")
|
|
endif()
|
|
|
|
string(APPEND CPACK_RPM_PACKAGE_RELEASE "%{?dist}")
|
|
set(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
|
|
message("CPACK_RPM_PACKAGE_RELEASE: ${CPACK_RPM_PACKAGE_RELEASE}")
|
|
set(CPACK_RPM_PACKAGE_LICENSE "NCSA")
|
|
|
|
## Process the Rpm install/remove scripts to update the CPACK variables
|
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/RPM/Binary/post.in" RPM/Binary/post @ONLY)
|
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/RPM/Binary/postun.in" RPM/Binary/postun @ONLY)
|
|
set(CPACK_RPM_BINARY_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/RPM/Binary/post")
|
|
set(CPACK_RPM_BINARY_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/RPM/Binary/postun")
|
|
|
|
# package dependencies
|
|
set(CPACK_RPM_DEV_PACKAGE_REQUIRES "rocm-core , hsa-rocr , hsakmt-roct-devel")
|
|
|
|
#
|
|
if (${EL7_DISTRO} STREQUAL "TRUE")
|
|
set(CPACK_RPM_BINARY_PACKAGE_REQUIRES "libdrm-amdgpu, numactl-libs")
|
|
set(CPACK_RPM_ASAN_PACKAGE_REQUIRES "libdrm-amdgpu, numactl-libs, libdrm-amdgpu-devel")
|
|
set(CPACK_RPM_PACKAGE_REQUIRES "libdrm-amdgpu-devel")
|
|
string(APPEND CPACK_RPM_DEV_PACKAGE_REQUIRES ", libdrm-amdgpu-devel")
|
|
|
|
else()
|
|
set(CPACK_RPM_BINARY_PACKAGE_REQUIRES "(libdrm-amdgpu or libdrm or libdrm_amdgpu1), (libnuma1 or numactl-libs)")
|
|
set(CPACK_RPM_ASAN_PACKAGE_REQUIRES "(libdrm-amdgpu or libdrm or libdrm_amdgpu1), (libnuma1 or numactl-libs), (libdrm-amdgpu-devel or libdrm-devel)")
|
|
set(CPACK_RPM_USER_BINARY_SPECFILE "${CMAKE_CURRENT_SOURCE_DIR}/RPM/hsa-rocr.spec.in")
|
|
set(CPACK_RPM_PACKAGE_RECOMMENDS "libdrm-amdgpu, libdrm-amdgpu-devel")
|
|
|
|
set(CPACK_RPM_PACKAGE_REQUIRES "(libdrm-amdgpu-devel or libdrm-devel)")
|
|
string(APPEND CPACK_RPM_DEV_PACKAGE_REQUIRES ", (libdrm-amdgpu-devel or libdrm-devel)")
|
|
set(CPACK_RPM_DEV_PACKAGE_RECOMMENDS "libdrm-amdgpu-devel")
|
|
set(CPACK_RPM_ASAN_PACKAGE_RECOMMENDS "libdrm-amdgpu-devel")
|
|
|
|
endif()
|
|
|
|
if (ROCM_DEP_ROCMCORE)
|
|
string(APPEND CPACK_RPM_BINARY_PACKAGE_REQUIRES " rocm-core")
|
|
string(APPEND CPACK_RPM_ASAN_PACKAGE_REQUIRES " rocm-core-asan")
|
|
else()
|
|
string(REGEX REPLACE ",? ?rocm-core" "" CPACK_RPM_PACKAGE_REQUIRES ${CPACK_RPM_PACKAGE_REQUIRES})
|
|
string(REGEX REPLACE ",? ?rocm-core" "" CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS})
|
|
string(REGEX REPLACE ",? ?rocm-core" "" CPACK_RPM_DEV_PACKAGE_REQUIRES ${CPACK_RPM_DEV_PACKAGE_REQUIRES})
|
|
string(REGEX REPLACE ",? ?rocm-core" "" CPACK_DEBIAN_DEV_PACKAGE_DEPENDS ${CPACK_DEBIAN_DEV_PACKAGE_DEPENDS})
|
|
string(REGEX REPLACE ",? ?rocm-core-asan" "" CPACK_RPM_ASAN_PACKAGE_REQUIRES ${CPACK_RPM_ASAN_PACKAGE_REQUIRES})
|
|
string(REGEX REPLACE ",? ?rocm-core-asan" "" CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS})
|
|
endif()
|
|
if (HSA_DEP_ROCPROFILER_REGISTER)
|
|
string(APPEND CPACK_RPM_BINARY_PACKAGE_REQUIRES " rocprofiler-register")
|
|
endif()
|
|
|
|
if(NOT BUILD_SHARED_LIBS)
|
|
# Suffix package name with static
|
|
set(CPACK_RPM_STATIC_PACKAGE_NAME "hsa-rocr-static-devel")
|
|
set(CPACK_DEBIAN_STATIC_PACKAGE_NAME "hsa-rocr-static-dev")
|
|
set(CPACK_COMPONENT_STATIC_DESCRIPTION "HSA (Heterogenous System Architecture) core runtime - Linux static libraries")
|
|
set(CPACK_RPM_STATIC_PACKAGE_REQUIRES "${CPACK_RPM_BINARY_PACKAGE_REQUIRES}")
|
|
string(APPEND CPACK_RPM_STATIC_PACKAGE_REQUIRES " hsakmt-roct-devel")
|
|
set(CPACK_DEBIAN_STATIC_PACKAGE_DEPENDS "${CPACK_DEBIAN_BINARY_PACKAGE_DEPENDS}")
|
|
string(APPEND CPACK_DEBIAN_STATIC_PACKAGE_DEPENDS ", hsakmt-roct-dev")
|
|
endif()
|
|
|
|
## Include packaging
|
|
include(CPack)
|
|
|
|
# static package generation
|
|
# Group binary and dev component to single package
|
|
if(NOT BUILD_SHARED_LIBS)
|
|
cpack_add_component_group("static")
|
|
cpack_add_component(binary GROUP static)
|
|
cpack_add_component(dev GROUP static)
|
|
endif()
|
|
|
|
cpack_add_component(asan
|
|
DISPLAY_NAME "ASAN"
|
|
DESCRIPTION "ASAN libraries for rocr-runtime")
|