CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
767 lines
28 KiB
CMake
767 lines
28 KiB
CMake
cmake_minimum_required(VERSION 3.13.4)
|
|
|
|
file(READ "VERSION.txt" comgr_ver_file)
|
|
|
|
string(REGEX MATCH "#COMGR_VERSION_MAJOR\n([0-9]*)" _ ${comgr_ver_file})
|
|
set (ver_major ${CMAKE_MATCH_1})
|
|
string(REGEX MATCH "#COMGR_VERSION_MINOR\n([0-9]*)" _ ${comgr_ver_file})
|
|
set (ver_minor ${CMAKE_MATCH_1})
|
|
|
|
message("Comgr Version: ${ver_major}.${ver_minor}.0")
|
|
|
|
project(amd_comgr VERSION "${ver_major}.${ver_minor}.0" LANGUAGES C CXX)
|
|
set(amd_comgr_NAME "${PROJECT_NAME}")
|
|
|
|
# Static API consistency check: verify VERSION.txt, the public header
|
|
# (include/amd_comgr.h.in), and the Linux exportmap (src/exportmap.in)
|
|
# stay in sync. Runs at configure time so the gate applies to every
|
|
# Comgr build.
|
|
find_package(Python3 COMPONENTS Interpreter REQUIRED)
|
|
set(_comgr_api_check_script
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/utils/check_api_consistency.py")
|
|
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/include/amd_comgr.h.in"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/src/exportmap.in"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/VERSION.txt"
|
|
"${_comgr_api_check_script}")
|
|
execute_process(
|
|
COMMAND "${Python3_EXECUTABLE}" "${_comgr_api_check_script}"
|
|
--comgr-dir "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
RESULT_VARIABLE _comgr_api_check_rc
|
|
OUTPUT_VARIABLE _comgr_api_check_out
|
|
ERROR_VARIABLE _comgr_api_check_err
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
ERROR_STRIP_TRAILING_WHITESPACE)
|
|
if(NOT _comgr_api_check_rc EQUAL 0)
|
|
message(FATAL_ERROR "${_comgr_api_check_err}")
|
|
endif()
|
|
message(STATUS "${_comgr_api_check_out}")
|
|
|
|
# Get git branch and commit hash to add to log for easier debugging.
|
|
execute_process(
|
|
COMMAND git log -1 --format=%h
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
OUTPUT_VARIABLE AMD_COMGR_GIT_COMMIT
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
RESULT_VARIABLE GIT_REV_PARSE_EXITCODE
|
|
)
|
|
|
|
if (${GIT_REV_PARSE_EXITCODE} EQUAL 0)
|
|
execute_process(
|
|
COMMAND git log -1 --format=%h
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
OUTPUT_VARIABLE AMD_COMGR_GIT_COMMIT
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
execute_process(
|
|
COMMAND git name-rev --name-only HEAD
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
OUTPUT_VARIABLE AMD_COMGR_GIT_BRANCH
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
else()
|
|
set(AMD_COMGR_GIT_BRANCH "not-available")
|
|
set(AMD_COMGR_GIT_COMMIT "not-available")
|
|
endif()
|
|
|
|
include(GNUInstallDirs)
|
|
include(CMakePackageConfigHelpers)
|
|
# Optionally, build Compiler Support with ccache.
|
|
set(ROCM_CCACHE_BUILD OFF CACHE BOOL "Set to ON for a ccache enabled build")
|
|
if (ROCM_CCACHE_BUILD)
|
|
find_program(CCACHE_PROGRAM ccache)
|
|
if (CCACHE_PROGRAM)
|
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_PROGRAM})
|
|
else()
|
|
message(WARNING "Unable to find ccache. Falling back to real compiler")
|
|
endif() # if (CCACHE_PROGRAM)
|
|
endif() # if (ROCM_CCACHE_BUILD)
|
|
|
|
# BUILD_SHARED_LIBS is a frustratingly global variable common to all
|
|
# projects. LLVM also defines an option for the same varible with the
|
|
# opposite default, which will overwrite our default preference
|
|
# here. Ignore the regular BUILD_SHARED_LIBS in an embedded llvm
|
|
# build. Try to use BUILD_SHARED_LIBS to hint our project specific
|
|
# version in a standalone build.
|
|
set(build_shared_libs_default ON)
|
|
if(NOT DEFINED LLVM_SOURCE_DIR AND DEFINED BUILD_SHARED_LIBS)
|
|
set(build_shared_libs_default ${BUILD_SHARED_LIBS})
|
|
endif()
|
|
|
|
option(COMGR_BUILD_SHARED_LIBS "Build the shared library"
|
|
${build_shared_libs_default})
|
|
|
|
set(SOURCES
|
|
src/comgr-cache.cpp
|
|
src/comgr-cache-command.cpp
|
|
src/comgr-clang-command.cpp
|
|
src/comgr-compiler.cpp
|
|
src/comgr.cpp
|
|
src/comgr-device-libs.cpp
|
|
src/comgr-diagnostic-handler.cpp
|
|
src/comgr-disassembly.cpp
|
|
src/comgr-env.cpp
|
|
src/comgr-libcxx-headers.cpp
|
|
src/comgr-metadata.cpp
|
|
src/comgr-signal.cpp
|
|
src/comgr-spirv-command.cpp
|
|
src/comgr-symbol.cpp
|
|
src/comgr-symbolizer.cpp
|
|
src/comgr-unbundle-command.cpp
|
|
src/time-stat/time-stat.cpp)
|
|
|
|
# Hotswap IR transpiler (raiser), opt-in. The raiser lives under
|
|
# amd/comgr/src/hotswap/raiser as a private COMGR subproject. When enabled, we
|
|
# link the hotswap::raiser OBJECT library into amd_comgr (its TUs land directly
|
|
# in amd_comgr.so so hotswap files can call comgr-metadata helpers
|
|
# without a layering inversion) and compile the transpile entry point. When
|
|
# disabled, the amd_comgr_hotswap_transpile API is simply not provided.
|
|
option(COMGR_ENABLE_HOTSWAP_TRANSPILE
|
|
"Build the hotswap-raiser-backed amd_comgr_hotswap_transpile entry point" OFF)
|
|
|
|
# Add Windows resource file for version info
|
|
if(WIN32)
|
|
# Allow users to override the DLL name via -DCOMGR_DLL_NAME
|
|
set(COMGR_DLL_NAME "amd_comgr.dll" CACHE STRING "Windows DLL output name")
|
|
string(TIMESTAMP COMGR_BUILD_YEAR "%Y")
|
|
set(COMGR_MANIFEST_NAME "AMD.ROCM.Comgr")
|
|
configure_file(
|
|
cmake/${COMGR_MANIFEST_NAME}.MANIFEST.in
|
|
cmake/${COMGR_MANIFEST_NAME}.MANIFEST @ONLY)
|
|
configure_file(
|
|
cmake/comgr.rc.in
|
|
cmake/comgr.rc @ONLY)
|
|
list(APPEND SOURCES "${CMAKE_CURRENT_BINARY_DIR}/cmake/comgr.rc")
|
|
endif()
|
|
|
|
if(COMGR_BUILD_SHARED_LIBS)
|
|
add_library(amd_comgr SHARED ${SOURCES})
|
|
# Windows doesn't have a strip utility, so CMAKE_STRIP won't be set.
|
|
if((CMAKE_BUILD_TYPE STREQUAL "Release") AND NOT ("${CMAKE_STRIP}" STREQUAL ""))
|
|
if (APPLE)
|
|
# Building on Mac fails unless -x is passed to the strip command
|
|
add_custom_command(TARGET amd_comgr POST_BUILD COMMAND ${CMAKE_STRIP} -x $<TARGET_FILE:amd_comgr>)
|
|
else()
|
|
add_custom_command(TARGET amd_comgr POST_BUILD COMMAND ${CMAKE_STRIP} $<TARGET_FILE:amd_comgr>)
|
|
endif()
|
|
endif()
|
|
else()
|
|
add_library(amd_comgr STATIC ${SOURCES})
|
|
endif()
|
|
|
|
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
|
find_package(AMDDeviceLibs REQUIRED CONFIG)
|
|
find_package(Clang REQUIRED CONFIG)
|
|
find_package(LLD REQUIRED CONFIG)
|
|
|
|
target_include_directories(amd_comgr
|
|
PRIVATE
|
|
${LLVM_INCLUDE_DIRS}
|
|
${CLANG_INCLUDE_DIRS}
|
|
${LLD_INCLUDE_DIRS})
|
|
else()
|
|
# If building with LLVM_EXTERNAL_PROJECTS, we've already picked up
|
|
# the include directories for LLVM, but not clang.
|
|
#
|
|
if (LLVM_EXTERNAL_CLANG_SOURCE_DIR)
|
|
target_include_directories(amd_comgr
|
|
PRIVATE
|
|
${LLVM_EXTERNAL_CLANG_SOURCE_DIR}/include
|
|
${LLVM_BINARY_DIR}/tools/clang/include)
|
|
endif()
|
|
|
|
if (LLVM_EXTERNAL_LLD_SOURCE_DIR)
|
|
target_include_directories(amd_comgr
|
|
PRIVATE
|
|
${LLVM_EXTERNAL_LLD_SOURCE_DIR}/include
|
|
${LLVM_BINARY_DIR}/tools/lld/include)
|
|
endif()
|
|
|
|
if (LLVM_EXTERNAL_SPIRV_LLVM_TRANSLATOR_SOURCE_DIR)
|
|
target_include_directories(amd_comgr
|
|
PRIVATE
|
|
${LLVM_EXTERNAL_SPIRV_LLVM_TRANSLATOR_SOURCE_DIR}/include)
|
|
endif()
|
|
endif()
|
|
|
|
# Allow the super-project to force static linking of LLVM/Clang into comgr.
|
|
# When ON, LLVM symbols are hidden by comgr's version script (local: *;),
|
|
# avoiding symbol interposition issues without requiring namespace isolation.
|
|
option(COMGR_STATIC_LLVM "Statically link LLVM/Clang into comgr (hides LLVM symbols)" OFF)
|
|
if(COMGR_STATIC_LLVM)
|
|
set(LLVM_LINK_LLVM_DYLIB OFF)
|
|
set(CLANG_LINK_CLANG_DYLIB OFF)
|
|
endif()
|
|
|
|
target_include_directories(amd_comgr
|
|
PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src)
|
|
|
|
# The hotswap subdirectory is added unconditionally below (around the
|
|
# add_subdirectory(src/hotswap) line) so the OBJECT libraries are available
|
|
# to the test-unit suite; here we opt amd_comgr into exposing the
|
|
# `amd_comgr_hotswap_transpile` entry point. The hotswap link edges are
|
|
# added after the curated LLVM/LLD link block below (see "hotswap link
|
|
# edges"), not here.
|
|
if(COMGR_ENABLE_HOTSWAP_TRANSPILE)
|
|
target_compile_definitions(amd_comgr PRIVATE COMGR_ENABLE_HOTSWAP_TRANSPILE=1)
|
|
endif()
|
|
|
|
message("")
|
|
message("------------LLVM_DIR: ${LLVM_DIR}")
|
|
message("---LLVM_INCLUDE_DIRS: ${LLVM_INCLUDE_DIRS}")
|
|
message("---LLVM_LIBRARY_DIRS: ${LLVM_LIBRARY_DIRS}")
|
|
message("-----------Clang_DIR: ${Clang_DIR}")
|
|
message("--CLANG_INCLUDE_DIRS: ${CLANG_INCLUDE_DIRS}")
|
|
message("----LLD_INCLUDE_DIRS: ${LLD_INCLUDE_DIRS}")
|
|
message("---AMDDeviceLibs_DIR: ${AMDDeviceLibs_DIR}")
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
|
|
|
if (ADDRESS_SANITIZER)
|
|
set(ASAN_LINKER_FLAGS "-fsanitize=address")
|
|
set(ASAN_COMPILER_FLAGS "-fno-omit-frame-pointer -fsanitize=address")
|
|
|
|
if (NOT CMAKE_COMPILER_IS_GNUCC)
|
|
if (COMGR_BUILD_SHARED_LIBS)
|
|
set(ASAN_LINKER_FLAGS "${ASAN_LINKER_FLAGS} -shared-libsan")
|
|
else()
|
|
set(ASAN_LINKER_FLAGS "${ASAN_LINKER_FLAGS} -static-libsan")
|
|
endif()
|
|
endif()
|
|
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ASAN_COMPILER_FLAGS}")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ASAN_COMPILER_FLAGS}")
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${ASAN_LINKER_FLAGS} -s")
|
|
set(CMAKE_SHARED_LINKER_FLAGS
|
|
"${CMAKE_SHARED_LINKER_FLAGS} ${ASAN_LINKER_FLAGS}")
|
|
endif()
|
|
|
|
set(AMD_COMGR_PRIVATE_COMPILE_OPTIONS)
|
|
set(AMD_COMGR_PRIVATE_COMPILE_DEFINITIONS ${LLVM_DEFINITIONS})
|
|
set(AMD_COMGR_PUBLIC_LINKER_OPTIONS)
|
|
set(AMD_COMGR_PRIVATE_LINKER_OPTIONS)
|
|
|
|
list(APPEND AMD_COMGR_PRIVATE_COMPILE_DEFINITIONS "AMD_COMGR_GIT_COMMIT=${AMD_COMGR_GIT_COMMIT}")
|
|
list(APPEND AMD_COMGR_PRIVATE_COMPILE_DEFINITIONS "AMD_COMGR_GIT_BRANCH=${AMD_COMGR_GIT_BRANCH}")
|
|
message("----COMGR_GIT_COMMIT: ${AMD_COMGR_GIT_COMMIT}")
|
|
message("----COMGR_GIT_BRANCH: ${AMD_COMGR_GIT_BRANCH}")
|
|
message("")
|
|
|
|
include(CheckEmbed)
|
|
option(COMGR_USE_EMBED "Use the C++26 #embed directive"
|
|
${HAVE_EMBED_SUPPORT})
|
|
|
|
if(NOT ${COMGR_USE_EMBED} AND HAVE_INCBIN_SUPPORT)
|
|
set(default_use_incbin ON)
|
|
else()
|
|
set(default_use_incbin OFF)
|
|
endif()
|
|
|
|
option(COMGR_USE_INCBIN "Use the gnu .incbin assembler directive" ${default_use_incbin})
|
|
|
|
option(COMGR_DISABLE_SPIRV "To disable SPIRV in Comgr" OFF)
|
|
|
|
set(COMGR_SPIRV_TRANSLATOR_AVAILABLE OFF)
|
|
set(COMGR_SPIRV_BACKEND_AVAILABLE OFF)
|
|
|
|
if (COMGR_DISABLE_SPIRV)
|
|
message("-- Comgr SPIRV disabled (-DCOMGR_DISABLE_SPIRV)")
|
|
list(APPEND AMD_COMGR_PRIVATE_COMPILE_DEFINITIONS "COMGR_DISABLE_SPIRV")
|
|
else()
|
|
if ("SPIRV" IN_LIST LLVM_TARGETS_TO_BUILD)
|
|
set(COMGR_SPIRV_BACKEND_AVAILABLE ON)
|
|
message("-- LLVM SPIRV target found (SPIRV backend available in Comgr)")
|
|
else()
|
|
message("-- LLVM SPIRV target not found (SPIRV backend unavailable in Comgr)")
|
|
message("-- LLVM targets configured: ${LLVM_TARGETS_TO_BUILD}")
|
|
message("-- SPIRV must be set in -DLLVM_TARGETS_TO_BUILD when building LLVM")
|
|
endif()
|
|
|
|
# Candidate include paths for LLVMSPIRVLib.h:
|
|
# 1. ${LLVM_INCLUDE_DIRS}/LLVMSPIRVLib (standalone build)
|
|
# 2. ${LLVM_EXTERNAL_SPIRV_LLVM_TRANSLATOR_SOURCE_DIR}/include (external project)
|
|
# 3. ${CMAKE_SOURCE_DIR}/projects/SPIRV-LLVM-Translator/include (usual location)
|
|
find_path(
|
|
FOUND_SPIRV_INCLUDE_DIR
|
|
LLVMSPIRVLib.h
|
|
PATHS
|
|
"${LLVM_INCLUDE_DIRS}/LLVMSPIRVLib"
|
|
"${LLVM_EXTERNAL_SPIRV_LLVM_TRANSLATOR_SOURCE_DIR}/include"
|
|
"${CMAKE_SOURCE_DIR}/projects/SPIRV-LLVM-Translator/include"
|
|
NO_DEFAULT_PATH
|
|
)
|
|
if (EXISTS "${FOUND_SPIRV_INCLUDE_DIR}/LLVMSPIRVLib.h")
|
|
set(COMGR_SPIRV_TRANSLATOR_AVAILABLE ON)
|
|
message("-- LLVMSPIRVLib/LLVMSPIRVLib.h found at ${FOUND_SPIRV_INCLUDE_DIR} (SPIRV translator available in Comgr)")
|
|
else()
|
|
message("-- LLVMSPIRVLib/LLVMSPIRVLib.h not found (SPIRV translator unavailable in Comgr)")
|
|
endif()
|
|
|
|
if (COMGR_SPIRV_TRANSLATOR_AVAILABLE)
|
|
target_include_directories(amd_comgr
|
|
PRIVATE
|
|
"${FOUND_SPIRV_INCLUDE_DIR}")
|
|
endif()
|
|
|
|
endif()
|
|
|
|
message("-- COMGR_SPIRV_TRANSLATOR_AVAILABLE: ${COMGR_SPIRV_TRANSLATOR_AVAILABLE}")
|
|
message("-- COMGR_SPIRV_BACKEND_AVAILABLE: ${COMGR_SPIRV_BACKEND_AVAILABLE}")
|
|
|
|
if (COMGR_SPIRV_TRANSLATOR_AVAILABLE)
|
|
list(APPEND AMD_COMGR_PRIVATE_COMPILE_DEFINITIONS "COMGR_SPIRV_TRANSLATOR_AVAILABLE")
|
|
endif()
|
|
if (COMGR_SPIRV_BACKEND_AVAILABLE)
|
|
list(APPEND AMD_COMGR_PRIVATE_COMPILE_DEFINITIONS "COMGR_SPIRV_BACKEND_AVAILABLE")
|
|
endif()
|
|
|
|
if (UNIX)
|
|
list(APPEND AMD_COMGR_PRIVATE_COMPILE_OPTIONS
|
|
-fno-rtti -Wall -Wno-attributes -fms-extensions -fvisibility=hidden)
|
|
# TODO: Confirm this is actually needed due to LLVM/Clang code
|
|
list(APPEND AMD_COMGR_PRIVATE_COMPILE_OPTIONS -fno-strict-aliasing)
|
|
list(APPEND AMD_COMGR_PRIVATE_COMPILE_DEFINITIONS
|
|
_GNU_SOURCE __STDC_LIMIT_MACROS __STDC_CONSTANT_MACROS AMD_COMGR_BUILD)
|
|
list(APPEND AMD_COMGR_PUBLIC_LINKER_OPTIONS -pthread)
|
|
if (NOT APPLE AND COMGR_BUILD_SHARED_LIBS)
|
|
configure_file(
|
|
src/exportmap.in
|
|
src/exportmap @ONLY)
|
|
list(APPEND AMD_COMGR_PRIVATE_LINKER_OPTIONS
|
|
"-Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/src/exportmap")
|
|
# When building a shared library with -fsanitize=address we can't be
|
|
# strict about undefined symbol references, as Clang won't include
|
|
# libasan in the link, see
|
|
# https://clang.llvm.org/docs/AddressSanitizer.html
|
|
if (NOT ADDRESS_SANITIZER)
|
|
list(APPEND AMD_COMGR_PRIVATE_LINKER_OPTIONS
|
|
-Wl,--no-undefined)
|
|
endif()
|
|
endif()
|
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
|
list(APPEND AMD_COMGR_PRIVATE_COMPILE_OPTIONS
|
|
"/wd4244" #[[Suppress 'argument' : conversion from 'type1' to 'type2', possible loss of data]]
|
|
"/wd4624" #[[Suppress 'derived class' : destructor could not be generated because a base class destructor is inaccessible]]
|
|
"/wd4267" #[[Suppress 'var' : conversion from 'size_t' to 'type', possible loss of data]]
|
|
"/wd4291" #[[Suppress 'declaration' : no matching operator delete found; memory will not be freed if initialization throws an exception]]
|
|
"/wd4146" #[[Suppress 'unary minus operator applied to unsigned type, result still unsigned]]
|
|
"/Zc:preprocessor" #[[Enable standards conforming preprocessor - https://learn.microsoft.com/en-us/cpp/build/reference/zc-preprocessor]])
|
|
list(APPEND AMD_COMGR_PRIVATE_COMPILE_DEFINITIONS _HAS_EXCEPTIONS=0)
|
|
# disable automatic manifest embedding to avoid duplicate resource errors
|
|
# (CVT1100/LNK1123) - the manifest is already embedded via comgr.rc
|
|
list(APPEND AMD_COMGR_PRIVATE_LINKER_OPTIONS "/MANIFEST:NO")
|
|
endif()
|
|
|
|
# Windows is strict about visibility of exports in shared libraries, so we ask
|
|
# GCC/Clang to also be strict, and then explicitly mark each exported symbol in
|
|
# the shared header.
|
|
list(APPEND AMD_COMGR_PRIVATE_COMPILE_DEFINITIONS AMD_COMGR_EXPORT)
|
|
|
|
include(bc2h)
|
|
include(opencl_header)
|
|
include(DeviceLibs)
|
|
|
|
# Embed libc++ headers for HIPRTC std C++ support
|
|
# Can be disabled with -DCOMGR_EMBED_LIBCXX_HEADERS=OFF to reduce library size
|
|
option(COMGR_EMBED_LIBCXX_HEADERS "Embed libc++ headers for HIPRTC" ON)
|
|
if(COMGR_EMBED_LIBCXX_HEADERS)
|
|
include(LibcxxHeaders)
|
|
endif()
|
|
|
|
set_target_properties(amd_comgr PROPERTIES
|
|
CXX_STANDARD 17
|
|
CXX_STANDARD_REQUIRED Yes
|
|
CXX_EXTENSIONS No)
|
|
set_target_properties(amd_comgr PROPERTIES
|
|
SOVERSION "${amd_comgr_VERSION_MAJOR}"
|
|
VERSION "${amd_comgr_VERSION_MAJOR}.${amd_comgr_VERSION_MINOR}.${amd_comgr_VERSION_PATCH}")
|
|
|
|
if (NOT COMGR_BUILD_SHARED_LIBS)
|
|
set_target_properties(amd_comgr PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
|
endif()
|
|
|
|
# Overwrite the name on 32-bit Linux and Windows
|
|
if (CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
set_target_properties(amd_comgr PROPERTIES OUTPUT_NAME "amd_comgr32")
|
|
endif()
|
|
|
|
# Set the DLL output name on Windows based on COMGR_DLL_NAME
|
|
if (WIN32)
|
|
string(REGEX REPLACE "\\.dll$" "" COMGR_OUTPUT_NAME "${COMGR_DLL_NAME}")
|
|
set_target_properties(amd_comgr PROPERTIES OUTPUT_NAME "${COMGR_OUTPUT_NAME}")
|
|
endif()
|
|
|
|
option(LLVM_BUILD_INSTRUMENTED_COVERAGE "Build LLVM and tools with Code Coverage instrumentation" Off)
|
|
mark_as_advanced(LLVM_BUILD_INSTRUMENTED_COVERAGE)
|
|
if(LLVM_BUILD_INSTRUMENTED_COVERAGE)
|
|
if(NOT LLVM_PROFILE_MERGE_POOL_SIZE)
|
|
# A pool size of 1-2 is probably sufficient on an SSD. 3-4 should be fine
|
|
# for spinning disks. Anything higher may only help on slower mediums.
|
|
set(LLVM_PROFILE_MERGE_POOL_SIZE "4")
|
|
endif()
|
|
if(NOT LLVM_PROFILE_FILE_PATTERN)
|
|
if(NOT LLVM_PROFILE_DATA_DIR)
|
|
file(TO_NATIVE_PATH "${LLVM_BINARY_DIR}/profiles" LLVM_PROFILE_DATA_DIR)
|
|
endif()
|
|
file(TO_NATIVE_PATH "${LLVM_PROFILE_DATA_DIR}/%${LLVM_PROFILE_MERGE_POOL_SIZE}m.profraw" LLVM_PROFILE_FILE_PATTERN)
|
|
endif()
|
|
set(INSTRUMENTED_COVERAGE_FLAGS -O0 -fprofile-instr-generate=${LLVM_PROFILE_FILE_PATTERN} -fcoverage-mapping)
|
|
list(APPEND AMD_COMGR_PRIVATE_COMPILE_OPTIONS ${INSTRUMENTED_COVERAGE_FLAGS})
|
|
list(APPEND AMD_COMGR_PUBLIC_COMPILE_OPTIONS ${INSTRUMENTED_COVERAGE_FLAGS})
|
|
list(APPEND AMD_COMGR_PRIVATE_LINKER_OPTIONS ${INSTRUMENTED_COVERAGE_FLAGS} -L${LLVM_LIBRARY_DIRS})
|
|
list(APPEND AMD_COMGR_PUBLIC_LINKER_OPTIONS ${INSTRUMENTED_COVERAGE_FLAGS} -L${LLVM_LIBRARY_DIRS})
|
|
endif()
|
|
|
|
target_compile_options(amd_comgr
|
|
PRIVATE "${AMD_COMGR_PRIVATE_COMPILE_OPTIONS}")
|
|
target_compile_definitions(amd_comgr
|
|
PRIVATE "${AMD_COMGR_PRIVATE_COMPILE_DEFINITIONS}")
|
|
target_include_directories(amd_comgr
|
|
PUBLIC
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
|
|
$<INSTALL_INTERFACE:include>)
|
|
|
|
configure_file(
|
|
include/amd_comgr.h.in
|
|
include/amd_comgr.h @ONLY)
|
|
|
|
set(AMD_COMGR_CONFIG_NAME amd_comgr-config.cmake)
|
|
set(AMD_COMGR_TARGETS_NAME amd_comgr-targets.cmake)
|
|
set(AMD_COMGR_VERSION_NAME amd_comgr-config-version.cmake)
|
|
set(AMD_COMGR_PACKAGE_PREFIX cmake/amd_comgr)
|
|
|
|
# Generate the build-tree package.
|
|
set(AMD_COMGR_PREFIX_CODE)
|
|
if (NOT COMGR_BUILD_SHARED_LIBS)
|
|
string(APPEND AMD_COMGR_PREFIX_CODE "\ninclude(CMakeFindDependencyMacro)\n")
|
|
string(APPEND AMD_COMGR_PREFIX_CODE "find_dependency(Clang REQUIRED)\n")
|
|
string(APPEND AMD_COMGR_PREFIX_CODE "find_dependency(LLD REQUIRED)\n")
|
|
endif()
|
|
|
|
set(AMD_COMGR_TARGETS_PATH
|
|
"${CMAKE_CURRENT_BINARY_DIR}/lib/${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_TARGETS_NAME}")
|
|
set(AMD_COMGR_VERSION_PATH
|
|
"${CMAKE_CURRENT_BINARY_DIR}/lib/${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_VERSION_NAME}")
|
|
export(TARGETS amd_comgr
|
|
FILE "lib/${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_TARGETS_NAME}")
|
|
configure_file("cmake/${AMD_COMGR_CONFIG_NAME}.in"
|
|
"lib/${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_CONFIG_NAME}"
|
|
@ONLY)
|
|
write_basic_package_version_file("${AMD_COMGR_VERSION_PATH}"
|
|
VERSION "${amd_comgr_VERSION}"
|
|
COMPATIBILITY SameMajorVersion)
|
|
|
|
if(ENABLE_ASAN_PACKAGING)
|
|
install(TARGETS amd_comgr
|
|
EXPORT amd_comgr_export
|
|
COMPONENT asan
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
else()
|
|
install(TARGETS amd_comgr
|
|
EXPORT amd_comgr_export
|
|
COMPONENT amd-comgr
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
endif()
|
|
|
|
# Install the manifest file alongside the DLL for Windows SxS
|
|
if(WIN32)
|
|
install(FILES
|
|
"${CMAKE_CURRENT_BINARY_DIR}/cmake/${COMGR_MANIFEST_NAME}.MANIFEST"
|
|
COMPONENT amd-comgr
|
|
DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
endif()
|
|
|
|
install(FILES
|
|
"${CMAKE_CURRENT_BINARY_DIR}/include/amd_comgr.h"
|
|
COMPONENT amd-comgr
|
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${amd_comgr_NAME})
|
|
|
|
if(ENABLE_ASAN_PACKAGING)
|
|
install(FILES
|
|
"LICENSE.txt"
|
|
COMPONENT asan
|
|
DESTINATION ${CMAKE_INSTALL_DOCDIR}-asan)
|
|
else()
|
|
install(FILES
|
|
"README.md"
|
|
"LICENSE.txt"
|
|
COMPONENT amd-comgr
|
|
DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
|
endif()
|
|
|
|
# Generate the install-tree package.
|
|
set(AMD_COMGR_PREFIX_CODE "
|
|
# Derive absolute install prefix from config file path.
|
|
get_filename_component(AMD_COMGR_PREFIX \"\${CMAKE_CURRENT_LIST_FILE}\" PATH)")
|
|
string(REGEX REPLACE "/" ";" count "${CMAKE_INSTALL_LIBDIR}/${AMD_COMGR_PACKAGE_PREFIX}")
|
|
foreach(p ${count})
|
|
set(AMD_COMGR_PREFIX_CODE "${AMD_COMGR_PREFIX_CODE}
|
|
get_filename_component(AMD_COMGR_PREFIX \"\${AMD_COMGR_PREFIX}\" PATH)")
|
|
endforeach()
|
|
|
|
if (NOT COMGR_BUILD_SHARED_LIBS)
|
|
string(APPEND AMD_COMGR_PREFIX_CODE "\ninclude(CMakeFindDependencyMacro)\n")
|
|
string(APPEND AMD_COMGR_PREFIX_CODE "find_dependency(Clang REQUIRED)\n")
|
|
string(APPEND AMD_COMGR_PREFIX_CODE "find_dependency(LLD REQUIRED)\n")
|
|
endif()
|
|
|
|
set(AMD_COMGR_TARGETS_PATH "\${AMD_COMGR_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_TARGETS_NAME}")
|
|
configure_file("cmake/${AMD_COMGR_CONFIG_NAME}.in"
|
|
"${AMD_COMGR_CONFIG_NAME}.install"
|
|
@ONLY)
|
|
install(FILES
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${AMD_COMGR_CONFIG_NAME}.install"
|
|
COMPONENT amd-comgr
|
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}/${AMD_COMGR_PACKAGE_PREFIX}"
|
|
RENAME "${AMD_COMGR_CONFIG_NAME}")
|
|
install(EXPORT amd_comgr_export
|
|
COMPONENT amd-comgr
|
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}/${AMD_COMGR_PACKAGE_PREFIX}"
|
|
FILE "${AMD_COMGR_TARGETS_NAME}")
|
|
install(FILES
|
|
"${AMD_COMGR_VERSION_PATH}"
|
|
COMPONENT amd-comgr
|
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}/${AMD_COMGR_PACKAGE_PREFIX}")
|
|
|
|
if(NOT CLANG_LINK_CLANG_DYLIB)
|
|
set(CLANG_LIBS
|
|
clangBasic
|
|
clangDriver
|
|
clangOptions
|
|
clangSerialization
|
|
clangFrontend
|
|
clangFrontendTool)
|
|
else()
|
|
set(CLANG_LIBS
|
|
clang-cpp)
|
|
endif()
|
|
|
|
set(LLD_LIBS
|
|
lldELF
|
|
lldCommon)
|
|
|
|
if (${COMGR_SPIRV_TRANSLATOR_AVAILABLE})
|
|
set(SPIRV_DYNAMIC_LIB "LLVMSPIRVAMDLib")
|
|
set(SPIRV_STATIC_LIB "SPIRVAMDLib")
|
|
else()
|
|
set(SPIRV_DYNAMIC_LIB "")
|
|
set(SPIRV_STATIC_LIB "")
|
|
endif()
|
|
|
|
if (LLVM_LINK_LLVM_DYLIB)
|
|
set(LLVM_LIBS LLVM ${SPIRV_DYNAMIC_LIB})
|
|
else()
|
|
llvm_map_components_to_libnames(LLVM_LIBS
|
|
${LLVM_TARGETS_TO_BUILD}
|
|
BinaryFormat
|
|
BitReader
|
|
BitWriter
|
|
CodeGen
|
|
Core
|
|
DebugInfoDWARF
|
|
Demangle
|
|
IRReader
|
|
Linker
|
|
MC
|
|
MCDisassembler
|
|
MCParser
|
|
Object
|
|
Option
|
|
Support
|
|
Symbolize
|
|
TargetParser
|
|
TransformUtils
|
|
${SPIRV_STATIC_LIB}
|
|
)
|
|
endif()
|
|
|
|
target_link_options(amd_comgr
|
|
PUBLIC
|
|
${AMD_COMGR_PUBLIC_LINKER_OPTIONS}
|
|
PRIVATE
|
|
${AMD_COMGR_PRIVATE_LINKER_OPTIONS})
|
|
|
|
target_link_libraries(amd_comgr
|
|
PRIVATE
|
|
${LLD_LIBS}
|
|
${LLVM_LIBS}
|
|
${CLANG_LIBS})
|
|
|
|
# hotswap link edges — must come after the curated LLVM set above so
|
|
# static-archive resolution pulls in the full set (incl. LLVMCodeGen's -mcpu
|
|
# registration) before the hotswap libraries' partial LLVM deps.
|
|
#
|
|
# The rewriter (byte-level rewrite path) backs the always-on
|
|
# amd_comgr_hotswap_rewrite API, so it is linked unconditionally. The raiser
|
|
# (IR transpiler path) is opt-in behind COMGR_ENABLE_HOTSWAP_TRANSPILE.
|
|
target_link_libraries(amd_comgr PRIVATE hotswap::rewriter)
|
|
if(COMGR_ENABLE_HOTSWAP_TRANSPILE)
|
|
target_link_libraries(amd_comgr PRIVATE hotswap::raiser)
|
|
endif()
|
|
|
|
if(TARGET embedded-resource-dir)
|
|
target_link_libraries(amd_comgr PRIVATE embedded-resource-dir)
|
|
endif()
|
|
|
|
if (NOT UNIX)
|
|
target_link_libraries(amd_comgr
|
|
PRIVATE version)
|
|
endif()
|
|
|
|
find_package(Threads)
|
|
target_link_libraries(amd_comgr PRIVATE ${CMAKE_THREAD_LIBS_INIT})
|
|
|
|
find_library(LIBRT rt)
|
|
if(LIBRT)
|
|
target_link_libraries(amd_comgr PRIVATE ${LIBRT})
|
|
endif()
|
|
|
|
|
|
if (NOT WIN32)
|
|
target_link_libraries(amd_comgr
|
|
PRIVATE
|
|
c
|
|
${CMAKE_DL_LIBS})
|
|
endif()
|
|
|
|
# Hotswap subproject — rewriter (byte-level) and raiser (IR transpiler)
|
|
# OBJECT libraries. Always added so the libraries are available to the
|
|
# test-unit suite. The rewriter is linked into amd_comgr unconditionally; the
|
|
# raiser link edge is gated on COMGR_ENABLE_HOTSWAP_TRANSPILE (see the hotswap
|
|
# link edges above).
|
|
add_subdirectory(src/hotswap)
|
|
|
|
include(CTest)
|
|
if(BUILD_TESTING)
|
|
add_custom_target(check-comgr COMMAND ${CMAKE_CTEST_COMMAND} DEPENDS amd_comgr)
|
|
if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
|
set_property(GLOBAL APPEND PROPERTY LLVM_ADDITIONAL_TEST_TARGETS check-comgr)
|
|
endif()
|
|
add_subdirectory(test)
|
|
add_subdirectory(test-lit)
|
|
add_subdirectory(test-unit)
|
|
endif()
|
|
|
|
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
|
# Add packaging directives for amd_comgr
|
|
if(ENABLE_ASAN_PACKAGING)
|
|
# Only libraries required for ASAN Package
|
|
set(CPACK_COMPONENTS_ALL asan)
|
|
set(PKG_DESC_SUMMARY "AddressSanitizer Instrumented Libraries to provide support functions for ROCm code objects.")
|
|
elseif(NOT COMGR_BUILD_SHARED_LIBS)
|
|
set(CPACK_COMPONENTS_ALL amd-comgr)
|
|
set(PKG_DESC_SUMMARY "Static Library to provide support functions for ROCm code objects.")
|
|
else()
|
|
set(CPACK_COMPONENTS_ALL amd-comgr)
|
|
set(PKG_DESC_SUMMARY "Library to provide support functions for ROCm code objects.")
|
|
endif()
|
|
set(CPACK_PACKAGE_NAME comgr)
|
|
set(CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc.")
|
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PKG_DESC_SUMMARY})
|
|
set(CPACK_PACKAGE_DESCRIPTION "This package contains the AMD ${CPACK_PACKAGE_DESCRIPTION_SUMMARY}.")
|
|
set(CPACK_PACKAGE_VERSION_MAJOR "${amd_comgr_VERSION_MAJOR}")
|
|
set(CPACK_PACKAGE_VERSION_MINOR "${amd_comgr_VERSION_MINOR}")
|
|
set(CPACK_PACKAGE_VERSION_PATCH "${amd_comgr_VERSION_PATCH}")
|
|
set(CPACK_PACKAGE_CONTACT "ROCm Compiler Support <rocm.compiler.support@amd.com>")
|
|
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt")
|
|
|
|
# ASAN Specific variables
|
|
set(CPACK_DEBIAN_ASAN_PACKAGE_NAME comgr-asan)
|
|
set(CPACK_RPM_ASAN_PACKAGE_NAME comgr-asan)
|
|
|
|
# Make proper version for appending
|
|
set(ROCM_VERSION_FOR_PACKAGE "")
|
|
if(DEFINED ENV{ROCM_LIBPATCH_VERSION})
|
|
set(ROCM_VERSION_FOR_PACKAGE $ENV{ROCM_LIBPATCH_VERSION})
|
|
elseif(DEFINED ENV{ROCM_VERSION})
|
|
string(REGEX REPLACE "." "" ROCM_VERSION_FOR_PACKAGE $ENV{ROCM_VERSION})
|
|
else()
|
|
# Default Case, set to 99999
|
|
set(ROCM_VERSION_FOR_PACKAGE "99999")
|
|
endif()
|
|
|
|
# Archive package specific variable
|
|
set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
|
|
|
|
# Debian package specific variables
|
|
set(CPACK_DEB_COMPONENT_INSTALL ON)
|
|
if(COMGR_BUILD_SHARED_LIBS)
|
|
set(CPACK_DEBIAN_AMD-COMGR_PACKAGE_NAME comgr)
|
|
else()
|
|
set(CPACK_DEBIAN_AMD-COMGR_PACKAGE_NAME comgr-static-dev)
|
|
endif()
|
|
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/ROCm/llvm-project/tree/amd-staging/amd/comgr")
|
|
set(DEBIAN_DEPENDENCIES "libzstd1, zlib1g, libc6, libstdc++6, libgcc-s1 | libgcc1")
|
|
if (LLVM_LINK_LLVM_DYLIB)
|
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libtinfo-dev, rocm-core, rocm-llvm-core, ${DEBIAN_DEPENDENCIES}")
|
|
set(CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS "libtinfo-dev, rocm-core-asan, rocm-llvm-core, ${DEBIAN_DEPENDENCIES}")
|
|
else()
|
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libtinfo-dev, rocm-core, ${DEBIAN_DEPENDENCIES}")
|
|
set(CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS "libtinfo-dev, rocm-core-asan, ${DEBIAN_DEPENDENCIES}")
|
|
endif()
|
|
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()
|
|
|
|
# RPM package specific variables
|
|
set(CPACK_RPM_COMPONENT_INSTALL ON)
|
|
if(COMGR_BUILD_SHARED_LIBS)
|
|
set(CPACK_RPM_AMD-COMGR_PACKAGE_NAME comgr)
|
|
else()
|
|
set(CPACK_RPM_AMD-COMGR_PACKAGE_NAME comgr-static-devel)
|
|
endif()
|
|
|
|
execute_process(COMMAND rpm --eval %{?dist}
|
|
RESULT_VARIABLE PROC_RESULT
|
|
OUTPUT_VARIABLE EVAL_RESULT
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
if(PROC_RESULT EQUAL "0" AND "${EVAL_RESULT}" STREQUAL ".el7")
|
|
# In Centos using parentheses is causing cpack errors.
|
|
# Set the dependencies specifically for centos
|
|
set(RPM_DEPENDENCIES "zlib, glibc, libstdc++, libgcc")
|
|
else()
|
|
set(RPM_DEPENDENCIES "(zlib or libz1), (libzstd or libzstd1), glibc, (libstdc++ or libstdc++6), (libgcc or libgcc_s1)")
|
|
endif()
|
|
|
|
if (LLVM_LINK_LLVM_DYLIB)
|
|
set(CPACK_RPM_PACKAGE_REQUIRES "rocm-core, rocm-llvm-core, ${RPM_DEPENDENCIES}")
|
|
set(CPACK_RPM_ASAN_PACKAGE_REQUIRES "rocm-core-asan, rocm-llvm-core, ${RPM_DEPENDENCIES}")
|
|
else()
|
|
set(CPACK_RPM_PACKAGE_REQUIRES "rocm-core, ${RPM_DEPENDENCIES}")
|
|
set(CPACK_RPM_ASAN_PACKAGE_REQUIRES "rocm-core-asan, ${RPM_DEPENDENCIES}")
|
|
endif()
|
|
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()
|
|
set(CPACK_RPM_PACKAGE_LICENSE "NCSA")
|
|
|
|
# Get rpm distro
|
|
if(CPACK_RPM_PACKAGE_RELEASE)
|
|
set(CPACK_RPM_PACKAGE_RELEASE_DIST ON)
|
|
endif()
|
|
|
|
# Prepare final version for the CPACK use
|
|
set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}.${ROCM_VERSION_FOR_PACKAGE}")
|
|
|
|
# Set the names now using CPACK utility
|
|
set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT")
|
|
set(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
|
|
# Remove dependency on rocm-core if -DROCM_DEP_ROCMCORE=ON not given to cmake
|
|
if(NOT ROCM_DEP_ROCMCORE)
|
|
string(REGEX REPLACE ",? ?rocm-core" "" CPACK_RPM_PACKAGE_REQUIRES ${CPACK_RPM_PACKAGE_REQUIRES})
|
|
string(REGEX REPLACE ",? ?rocm-core-asan" "" CPACK_RPM_ASAN_PACKAGE_REQUIRES ${CPACK_RPM_ASAN_PACKAGE_REQUIRES})
|
|
string(REGEX REPLACE ",? ?rocm-core" "" CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS})
|
|
string(REGEX REPLACE ",? ?rocm-core-asan" "" CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS})
|
|
endif()
|
|
|
|
include(CPack)
|
|
endif()
|