Files
TheRock/rocm-systems/projects/rocr-debug-agent/CMakeLists.txt
T
derek.holloway 7502bf64a4
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
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

252 lines
7.3 KiB
CMake

################################################################################
##
## The University of Illinois/NCSA
## Open Source License (NCSA)
##
## Copyright (c) 2018-2026, 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 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.
##
################################################################################
# Available defines to be used when building rocr-debug-agent:
#
# ENABLE_TESTS
#
# Enable building the rocr-debug-agent tests. Default is ON.
#
# The debug agent has a small set of validation tests that can be built
# with a suitable HIP compiler. This is mostly for development, so it isn't
# required to be built if users are only looking for the tool.
#
#
# rocm-debug-agent has the following dependencies:
#
# amd_dbgapi
# LibElf
# LibDW
# hsa-runtime64
# GIT (optional)
# Threads
cmake_minimum_required(VERSION 3.21)
project(rocm-debug-agent VERSION 2.1.0 LANGUAGES CXX)
include(GNUInstallDirs)
# By default build the Debug Agent tests.
option(ENABLE_TESTS "Enable building Debug Agent tests" ON)
add_library(rocm-debug-agent SHARED)
target_sources(
rocm-debug-agent
PRIVATE src/code_object.cpp src/debug_agent.cpp src/logging.cpp
)
set_target_properties(
rocm-debug-agent
PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
NO_SYSTEM_FROM_IMPORTED ON
)
# Unified dependency discovery for both TheRock and standalone builds.
# Try CONFIG mode first (TheRock), then fall back to manual discovery (standalone).
# Find libdw (elfutils)
find_package(libdw CONFIG QUIET)
if(NOT libdw_FOUND)
find_path(
LIBDW_INCLUDE_DIR
NAMES elfutils/libdw.h
PATHS /usr/include /usr/local/include
)
find_library(LIBDW_LIBRARY NAMES dw PATHS /usr/lib /usr/local/lib)
if(NOT LIBDW_INCLUDE_DIR OR NOT LIBDW_LIBRARY)
message(FATAL_ERROR "Could not find libdw")
endif()
add_library(libdw::libdw UNKNOWN IMPORTED)
set_target_properties(
libdw::libdw
PROPERTIES
IMPORTED_LOCATION "${LIBDW_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${LIBDW_INCLUDE_DIR}"
)
message(STATUS "Found libdw: ${LIBDW_LIBRARY}")
endif()
# Find hsa-runtime64 (ROCm Runtime)
find_package(hsa-runtime64 CONFIG QUIET)
if(NOT hsa-runtime64_FOUND)
find_path(
HSA_INCLUDE_DIR
NAMES hsa/hsa.h
PATHS /opt/rocm/include /opt/rocm/hsa/include
)
find_library(
HSA_LIBRARY
NAMES hsa-runtime64
PATHS /opt/rocm/lib /opt/rocm/hsa/lib
)
if(NOT HSA_INCLUDE_DIR OR NOT HSA_LIBRARY)
message(FATAL_ERROR "Could not find hsa-runtime64")
endif()
add_library(hsa-runtime64::hsa-runtime64 UNKNOWN IMPORTED)
set_target_properties(
hsa-runtime64::hsa-runtime64
PROPERTIES
IMPORTED_LOCATION "${HSA_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${HSA_INCLUDE_DIR}"
)
message(STATUS "Found hsa-runtime64: ${HSA_LIBRARY}")
endif()
# Find libelf
find_package(LibElf CONFIG QUIET)
if(NOT LibElf_FOUND)
find_path(
LIBELF_INCLUDE_DIR
NAMES libelf.h
PATHS /usr/include /usr/local/include
PATH_SUFFIXES libelf
)
find_library(LIBELF_LIBRARY NAMES elf PATHS /usr/lib /usr/local/lib)
if(NOT LIBELF_INCLUDE_DIR OR NOT LIBELF_LIBRARY)
message(FATAL_ERROR "Could not find libelf")
endif()
add_library(elf::elf UNKNOWN IMPORTED)
set_target_properties(
elf::elf
PROPERTIES
IMPORTED_LOCATION "${LIBELF_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${LIBELF_INCLUDE_DIR}"
)
message(STATUS "Found libelf: ${LIBELF_LIBRARY}")
endif()
find_package(
amd-dbgapi
REQUIRED
CONFIG
PATHS /opt/rocm/
PATH_SUFFIXES cmake/amd-dbgapi lib/cmake/amd-dbgapi
)
find_package(Threads REQUIRED)
target_link_libraries(
rocm-debug-agent
PRIVATE
amd-dbgapi
hsa-runtime64::hsa-runtime64
elf::elf
libdw::libdw
Threads::Threads
${CMAKE_DL_LIBS}
)
target_link_options(
rocm-debug-agent
PRIVATE
-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/src/exportmap
-Wl,--no-undefined
)
if(DEFINED ENV{ROCM_BUILD_ID})
# ROCM_BUILD_ID is set by the ROCm-CI build environment.
set(build_info $ENV{ROCM_BUILD_ID})
else()
set(build_info developer-build)
if(DEFINED ENV{USER})
set(build_info ${build_info}-$ENV{USER})
endif()
find_package(Git)
if(GIT_FOUND)
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
OUTPUT_VARIABLE build_revision
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
else()
message(STATUS "GIT not found")
endif()
if(DEFINED build_revision)
set(build_info ${build_info}-git-${build_revision})
endif()
endif()
# Check for memfd_create headers and libs
include(CheckCXXSourceCompiles)
check_cxx_source_compiles(
"
#define _GNU_SOURCE
#include <sys/mman.h>
int main() { return memfd_create (\"cmake_test\", 0); }
"
HAVE_MEMFD_CREATE
)
target_compile_options(
rocm-debug-agent
PRIVATE -Werror -Wall -Wno-attributes -fno-rtti -fvisibility=hidden
)
target_compile_definitions(
rocm-debug-agent
PRIVATE
AMD_INTERNAL_BUILD
_GNU_SOURCE
__STDC_LIMIT_MACROS
__STDC_CONSTANT_MACROS
$<$<BOOL:${HAVE_MEMFD_CREATE}>:HAVE_MEMFD_CREATE>
)
install(
TARGETS rocm-debug-agent
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT runtime
)
install(
FILES LICENSE.txt README.md
DESTINATION ${CMAKE_INSTALL_DOCDIR}
COMPONENT runtime
)
if(ENABLE_TESTS)
enable_testing()
add_subdirectory(test)
endif()