Files
TheRock/rocm-systems/projects/rocprofiler-systems/cmake/Packages.cmake
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

1213 lines
39 KiB
CMake

# Copyright (c) Advanced Micro Devices, Inc.
# SPDX-License-Identifier: MIT
# include guard
include_guard(DIRECTORY)
# ########################################################################################
#
# External Packages are found here
#
# ########################################################################################
rocprofiler_systems_add_interface_library(
rocprofiler-systems-headers
"Provides minimal set of include flags to compile with rocprofiler-systems"
)
rocprofiler_systems_add_interface_library(rocprofiler-systems-threading
"Enables multithreading support"
)
rocprofiler_systems_add_interface_library(
rocprofiler-systems-dyninst
"Provides flags and libraries for Dyninst (dynamic instrumentation)"
)
rocprofiler_systems_add_interface_library(rocprofiler-systems-elfutils
"ElfUtils interface library (for Dyninst)"
)
rocprofiler_systems_add_interface_library(rocprofiler-systems-libiberty
"LibIberty interface library (for Dyninst)"
)
rocprofiler_systems_add_interface_library(
rocprofiler-systems-tbb "Threading Building Blocks interface library (for Dyninst)"
)
rocprofiler_systems_add_interface_library(rocprofiler-systems-rocm
"Provides flags and libraries for ROCm"
)
rocprofiler_systems_add_interface_library(rocprofiler-systems-mpi
"Provides MPI or MPI headers"
)
rocprofiler_systems_add_interface_library(rocprofiler-systems-libva
"Provides VA-API headers"
)
rocprofiler_systems_add_interface_library(rocprofiler-systems-ucx
"Provides UCX headers"
)
rocprofiler_systems_add_interface_library(rocprofiler-systems-bfd
"Provides Binary File Descriptor (BFD)"
)
rocprofiler_systems_add_interface_library(rocprofiler-systems-papi "Enable PAPI support")
rocprofiler_systems_add_interface_library(rocprofiler-systems-ompt "Enable OMPT support")
rocprofiler_systems_add_interface_library(rocprofiler-systems-python
"Enables Python support"
)
rocprofiler_systems_add_interface_library(rocprofiler-systems-perfetto
"Enables Perfetto support"
)
rocprofiler_systems_add_interface_library(rocprofiler-systems-sqlite3
"Use SQLite3 for rocpd data storage"
)
rocprofiler_systems_add_interface_library(rocprofiler-systems-json
"Use nlohmann/json for json data handling"
)
rocprofiler_systems_add_interface_library(rocprofiler-systems-spdlog
"Provides spdlog library"
)
rocprofiler_systems_add_interface_library(rocprofiler-systems-timemory
"Provides timemory libraries"
)
rocprofiler_systems_add_interface_library(
rocprofiler-systems-timemory-config
"CMake interface library applied to all timemory targets"
)
rocprofiler_systems_add_interface_library(rocprofiler-systems-compile-definitions
"Compile definitions"
)
# libraries with relevant compile definitions
set(ROCPROFSYS_EXTENSION_LIBRARIES
rocprofiler-systems::rocprofiler-systems-rocm
rocprofiler-systems::rocprofiler-systems-bfd
rocprofiler-systems::rocprofiler-systems-mpi
rocprofiler-systems::rocprofiler-systems-ompt
rocprofiler-systems::rocprofiler-systems-papi
rocprofiler-systems::rocprofiler-systems-perfetto
)
target_include_directories(
rocprofiler-systems-headers
INTERFACE
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/source/lib>
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/source/lib/core>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/source/lib>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/source/lib/rocprof-sys>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/source/lib/rocprof-sys-dl>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/source/lib/rocprof-sys-user>
)
# include threading because of rooflines
target_link_libraries(
rocprofiler-systems-headers
INTERFACE rocprofiler-systems::rocprofiler-systems-threading
)
# ensure the env overrides the appending /opt/rocm later
string(REPLACE ":" ";" CMAKE_PREFIX_PATH "$ENV{CMAKE_PREFIX_PATH};${CMAKE_PREFIX_PATH}")
set(ROCPROFSYS_DEFAULT_ROCM_PATH /opt/rocm CACHE PATH "Default search path for ROCM")
if(EXISTS ${ROCPROFSYS_DEFAULT_ROCM_PATH})
get_filename_component(
_ROCPROFSYS_DEFAULT_ROCM_PATH
"${ROCPROFSYS_DEFAULT_ROCM_PATH}"
REALPATH
)
if(NOT "${_ROCPROFSYS_DEFAULT_ROCM_PATH}" STREQUAL "${ROCPROFSYS_DEFAULT_ROCM_PATH}")
set(ROCPROFSYS_DEFAULT_ROCM_PATH
"${_ROCPROFSYS_DEFAULT_ROCM_PATH}"
CACHE PATH
"Default search path for ROCM"
FORCE
)
endif()
endif()
# ----------------------------------------------------------------------------------------#
#
# Threading
#
# ----------------------------------------------------------------------------------------#
set(CMAKE_THREAD_PREFER_PTHREAD ON)
set(THREADS_PREFER_PTHREAD_FLAG OFF)
find_library(pthread_LIBRARY NAMES pthread pthreads)
find_package_handle_standard_args(pthread-library REQUIRED_VARS pthread_LIBRARY)
if(pthread_LIBRARY)
target_link_libraries(rocprofiler-systems-threading INTERFACE ${pthread_LIBRARY})
else()
find_package(
Threads
${rocprofiler_systems_FIND_QUIETLY}
${rocprofiler_systems_FIND_REQUIREMENT}
)
if(Threads_FOUND)
target_link_libraries(rocprofiler-systems-threading INTERFACE Threads::Threads)
endif()
endif()
foreach(_LIB dl rt)
find_library(${_LIB}_LIBRARY NAMES ${_LIB})
find_package_handle_standard_args(${_LIB}-library REQUIRED_VARS ${_LIB}_LIBRARY)
if(${_LIB}_LIBRARY)
target_link_libraries(rocprofiler-systems-threading INTERFACE ${${_LIB}_LIBRARY})
endif()
endforeach()
# ----------------------------------------------------------------------------------------#
#
# ROCm Version
#
# ----------------------------------------------------------------------------------------#
find_package(ROCmVersion)
if(NOT ROCmVersion_FOUND)
find_package(
hip
${rocprofiler_systems_FIND_QUIETLY}
REQUIRED
HINTS ${ROCPROFSYS_DEFAULT_ROCM_PATH}
PATHS ${ROCPROFSYS_DEFAULT_ROCM_PATH}
)
find_package(ROCmVersion HINTS ${ROCM_PATH} PATHS ${ROCM_PATH})
endif()
if(NOT ROCmVersion_FOUND)
rocm_version_compute("${hip_VERSION}" _local)
foreach(_V ${ROCmVersion_VARIABLES})
set(_CACHE_VAR ROCmVersion_${_V}_VERSION)
set(_LOCAL_VAR _local_${_V}_VERSION)
set(ROCmVersion_${_V}_VERSION
"${${_LOCAL_VAR}}"
CACHE STRING
"ROCm ${_V} version"
)
rocm_version_watch_for_change(${_CACHE_VAR})
endforeach()
else()
list(APPEND CMAKE_PREFIX_PATH ${ROCmVersion_DIR})
endif()
set(ROCPROFSYS_ROCM_VERSION_FULL ${ROCmVersion_FULL_VERSION})
set(ROCPROFSYS_ROCM_VERSION_MAJOR ${ROCmVersion_MAJOR_VERSION})
set(ROCPROFSYS_ROCM_VERSION_MINOR ${ROCmVersion_MINOR_VERSION})
set(ROCPROFSYS_ROCM_VERSION_PATCH ${ROCmVersion_PATCH_VERSION})
set(ROCPROFSYS_ROCM_VERSION ${ROCmVersion_TRIPLE_VERSION})
rocprofiler_systems_add_feature(ROCPROFSYS_ROCM_VERSION
"ROCm version used by rocprofiler-systems"
)
# ----------------------------------------------------------------------------------------#
#
# ROCm
#
# ----------------------------------------------------------------------------------------#
# ROCProfiler SDK
find_package(rocprofiler-sdk ${rocprofiler_systems_FIND_QUIETLY} REQUIRED)
target_link_libraries(rocprofiler-systems-rocm INTERFACE rocprofiler-sdk::rocprofiler-sdk)
# AMD SMI
find_package(
amd_smi
${rocprofiler_systems_FIND_QUIETLY}
HINTS ${ROCMVersion_DIR} ${ROCM_PATH} /opt/amdgpu
PATHS ${ROCMVersion_DIR} ${ROCM_PATH} /opt/amdgpu
REQUIRED
)
# amd_smi in ROCm 6.4 requires both drm and drm_amdgpu libraries to be explicitly linked.
# This is no longer the case in ROCm 7.0.
if(ROCPROFSYS_ROCM_VERSION_MAJOR EQUAL 6 AND ROCPROFSYS_ROCM_VERSION_MINOR EQUAL 4)
# Find drm library
find_library(
drm_LIBRARY
NAMES drm
HINTS ${ROCMVersion_DIR} ${ROCM_PATH} /opt/amdgpu
PATHS ${ROCMVersion_DIR} ${ROCM_PATH} /opt/amdgpu
PATH_SUFFIXES lib lib64
REQUIRED
)
# Find drm_amdgpu library
find_library(
drm_amdgpu_LIBRARY
NAMES drm_amdgpu
HINTS ${ROCMVersion_DIR} ${ROCM_PATH} /opt/amdgpu
PATHS ${ROCMVersion_DIR} ${ROCM_PATH} /opt/amdgpu
PATH_SUFFIXES lib lib64
REQUIRED
)
get_filename_component(_drm_LIBRARY_DIR "${drm_LIBRARY}" DIRECTORY)
get_filename_component(_drm_amdgpu_LIBRARY_DIR "${drm_amdgpu_LIBRARY}" DIRECTORY)
set(_drm_LIBRARY_DIRS "${_drm_LIBRARY_DIR};${_drm_amdgpu_LIBRARY_DIR}")
list(REMOVE_DUPLICATES _drm_LIBRARY_DIRS)
target_link_directories(amd_smi INTERFACE ${_drm_LIBRARY_DIRS})
endif()
# When AI NIC profiling is enabled and ROCm version is 7.0+, define ENABLE_ESMI_LIB so AMD SMI headers
# expose NIC APIs (e.g. amdsmi_get_nic_rdma_port_statistics, AMDSMI_INIT_AMD_NICS).
if(ROCPROFSYS_USE_AINIC)
if(ROCPROFSYS_ROCM_VERSION_MAJOR GREATER 6)
target_compile_definitions(
rocprofiler-systems-compile-definitions
INTERFACE ROCPROFSYS_USE_AINIC ENABLE_ESMI_LIB
)
endif()
endif()
target_link_libraries(rocprofiler-systems-rocm INTERFACE amd_smi)
# AMD SMI version is provided by config-mode find_package(amd_smi) above.
# If the package does not report a version, treat it as 0.0 (AI NIC unsupported).
if(amd_smi_VERSION)
message(STATUS "AMD SMI version detected: ${amd_smi_VERSION}")
else()
set(amd_smi_VERSION "0.0")
message(
STATUS
"AMD SMI version not reported by find_package; assuming ${amd_smi_VERSION}"
)
endif()
# AINIC requires AMD SMI >= 26.3 AND ROCPROFSYS_USE_AINIC option
set(ROCPROFSYS_BUILD_AINIC OFF CACHE INTERNAL "Build AINIC support" FORCE)
if(ROCPROFSYS_USE_AINIC)
if(amd_smi_VERSION VERSION_GREATER_EQUAL 26.3)
set(ROCPROFSYS_BUILD_AINIC ON CACHE INTERNAL "Build AINIC support" FORCE)
message(STATUS "AINIC support enabled (AMD SMI >= 26.3)")
else()
message(STATUS "AINIC disabled: AMD SMI ${amd_smi_VERSION} < 26.3")
endif()
else()
message(STATUS "AINIC disabled: ROCPROFSYS_USE_AINIC is OFF")
endif()
# Expose ROCPROFSYS_BUILD_AINIC as a global compile definition.
if(ROCPROFSYS_BUILD_AINIC)
target_compile_definitions(
rocprofiler-systems-compile-definitions
INTERFACE ROCPROFSYS_BUILD_AINIC=1
)
endif()
# ----------------------------------------------------------------------------------------#
#
# ROCpd
#
# ----------------------------------------------------------------------------------------#
function(ROCPROFSYS_CONFIGURE_ROCPD_SCHEMA_FILES)
rocprofiler_systems_target_compile_definitions(
rocprofiler-systems-rocm INTERFACE ROCPROFSYS_USE_ROCPD_LIBRARY=0
)
set(SCHEMA_FILES
"rocpd_tables.sql"
"rocpd_views.sql"
"data_views.sql"
"marker_views.sql"
"summary_views.sql"
)
set(SCHEMA_SOURCE_DIR
"${PROJECT_SOURCE_DIR}/source/lib/core/rocpd/data_storage/schema"
)
set(SCHEMA_BINARY_DIR
"${PROJECT_BINARY_DIR}/source/lib/core/rocpd/data_storage/schema"
)
set(TEMPLATE_FILE "${PROJECT_SOURCE_DIR}/cmake/Templates/rocpd_schema.in")
file(MAKE_DIRECTORY ${SCHEMA_BINARY_DIR})
foreach(SCHEMA_FILE ${SCHEMA_FILES})
file(READ "${SCHEMA_SOURCE_DIR}/${SCHEMA_FILE}" SQL_CONTENT)
string(REPLACE "\\" "\\\\" SQL_CONTENT "${SQL_CONTENT}")
string(REPLACE "\"" "\\\"" SQL_CONTENT "${SQL_CONTENT}")
string(REPLACE "\n" "\\n\"\n\"" SQL_CONTENT "${SQL_CONTENT}")
get_filename_component(SCHEMA_NAME ${SCHEMA_FILE} NAME_WE)
string(TOUPPER ${SCHEMA_NAME} SCHEMA_NAME_UPPER)
configure_file("${TEMPLATE_FILE}" "${SCHEMA_BINARY_DIR}/${SCHEMA_NAME}.hpp" @ONLY)
endforeach()
target_include_directories(
rocprofiler-systems-headers
INTERFACE
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/source/lib/core/rocpd/data_storage>
)
endfunction()
set(ROCPROFSYS_USE_ROCPD_LIBRARY OFF CACHE BOOL "Use rocpd library" FORCE)
find_package(rocprofiler-sdk-rocpd ${rocprofiler_systems_FIND_QUIETLY})
if(rocprofiler-sdk-rocpd_FOUND)
set(ROCPROFSYS_ROCPD_HAS_SQL_H FALSE)
if(rocprofiler-sdk-rocpd_INCLUDE_DIR)
set(_INCLUDE_PATH "${rocprofiler-sdk-rocpd_INCLUDE_DIR}/rocprofiler-sdk-rocpd")
message(STATUS "${_INCLUDE_PATH}/sql.h")
if(EXISTS "${_INCLUDE_PATH}/sql.h")
set(ROCPROFSYS_ROCPD_HAS_SQL_H TRUE)
endif()
endif()
if(ROCPROFSYS_ROCPD_HAS_SQL_H)
set(ROCPROFSYS_USE_ROCPD_LIBRARY ON CACHE BOOL "Use rocpd library" FORCE)
rocprofiler_systems_target_compile_definitions(
rocprofiler-systems-rocm INTERFACE ROCPROFSYS_USE_ROCPD_LIBRARY=1
)
target_link_libraries(
rocprofiler-systems-rocm
INTERFACE rocprofiler-sdk-rocpd::rocprofiler-sdk-rocpd
)
message(
STATUS
"rocprofiler-sdk-rocpd found with sql.h - using latest schema files"
)
else()
message(
STATUS
"rocprofiler-sdk-rocpd found but sql.h missing - using local schema files"
)
endif()
else()
message(STATUS "rocprofiler-sdk-rocpd not found - using local schema files")
endif()
if(NOT ROCPROFSYS_USE_ROCPD_LIBRARY)
rocprofsys_configure_rocpd_schema_files()
endif()
# ----------------------------------------------------------------------------------------#
#
# Profiler Hub
#
# ----------------------------------------------------------------------------------------#
include(ProfilerHub)
# ----------------------------------------------------------------------------------------#
#
# MPI
#
# ----------------------------------------------------------------------------------------#
# suppress warning during CI that MPI_HEADERS_ALLOW_MPICH was unused
set(_ROCPROFSYS_MPI_HEADERS_ALLOW_MPICH ${MPI_HEADERS_ALLOW_MPICH})
if(ROCPROFSYS_USE_MPI)
find_package(MPI ${rocprofiler_systems_FIND_QUIETLY} REQUIRED)
target_link_libraries(rocprofiler-systems-mpi INTERFACE MPI::MPI_C MPI::MPI_CXX)
rocprofiler_systems_target_compile_definitions(rocprofiler-systems-mpi
INTERFACE ROCPROFSYS_USE_MPI
)
elseif(ROCPROFSYS_USE_MPI_HEADERS)
find_package(MPI-Headers ${rocprofiler_systems_FIND_QUIETLY} REQUIRED)
rocprofiler_systems_target_compile_definitions(rocprofiler-systems-mpi
INTERFACE ROCPROFSYS_USE_MPI_HEADERS
)
target_link_libraries(rocprofiler-systems-mpi INTERFACE MPI::MPI_HEADERS)
endif()
# ----------------------------------------------------------------------------------------#
#
# OMPT
#
# ----------------------------------------------------------------------------------------#
rocprofiler_systems_target_compile_definitions(
rocprofiler-systems-ompt INTERFACE ROCPROFSYS_USE_OMPT=$<BOOL:${ROCPROFSYS_USE_OMPT}>
)
# ----------------------------------------------------------------------------------------#
#
# Dyninst
#
# ----------------------------------------------------------------------------------------#
include(DyninstExternals)
if(ROCPROFSYS_BUILD_DYNINST)
rocprofiler_systems_checkout_git_submodule(
RELATIVE_PATH external/dyninst
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
REPO_URL https://github.com/ROCm/dyninst.git
REPO_BRANCH dyninst_13
)
set(DYNINST_OPTION_PREFIX ON)
set(DYNINST_BUILD_DOCS OFF)
set(DYNINST_BUILD_RTLIB OFF)
set(DYNINST_QUIET_CONFIG ON CACHE BOOL "Suppress dyninst cmake messages")
set(DYNINST_BUILD_PARSE_THAT OFF CACHE BOOL "Build dyninst parseThat executable")
set(DYNINST_BUILD_SHARED_LIBS ON CACHE BOOL "Build shared dyninst libraries")
set(DYNINST_BUILD_STATIC_LIBS OFF CACHE BOOL "Build static dyninst libraries")
set(DYNINST_ENABLE_LTO OFF CACHE BOOL "Enable LTO for dyninst libraries")
if(NOT DEFINED CMAKE_INSTALL_RPATH)
set(CMAKE_INSTALL_RPATH "")
endif()
if(NOT DEFINED CMAKE_BUILD_RPATH)
set(CMAKE_BUILD_RPATH "")
endif()
rocprofiler_systems_save_variables(
PIC VARIABLES CMAKE_POSITION_INDEPENDENT_CODE CMAKE_INSTALL_RPATH
CMAKE_BUILD_RPATH CMAKE_INSTALL_RPATH_USE_LINK_PATH
)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH OFF)
set(CMAKE_BUILD_RPATH "\$ORIGIN:\$ORIGIN/${PROJECT_NAME}")
set(CMAKE_INSTALL_RPATH "\$ORIGIN:\$ORIGIN/${PROJECT_NAME}")
set(DYNINST_TPL_INSTALL_PREFIX
"${PROJECT_NAME}"
CACHE PATH
"Third-party library install-tree install prefix"
FORCE
)
set(DYNINST_TPL_INSTALL_LIB_DIR
"${PROJECT_NAME}"
CACHE PATH
"Third-party library install-tree install library prefix"
FORCE
)
add_subdirectory(external/dyninst EXCLUDE_FROM_ALL)
rocprofiler_systems_restore_variables(
PIC VARIABLES CMAKE_POSITION_INDEPENDENT_CODE CMAKE_INSTALL_RPATH
CMAKE_BUILD_RPATH CMAKE_INSTALL_RPATH_USE_LINK_PATH
)
add_library(Dyninst::Dyninst INTERFACE IMPORTED)
foreach(
_LIB
common
dyninstAPI
parseAPI
instructionAPI
symtabAPI
stackwalk
)
target_link_libraries(Dyninst::Dyninst INTERFACE Dyninst::${_LIB})
endforeach()
foreach(
_LIB
common
dynDwarf
dynElf
dyninstAPI
instructionAPI
parseAPI
patchAPI
pcontrol
stackwalk
symtabAPI
)
if(TARGET ${_LIB})
install(
TARGETS ${_LIB}
DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}
COMPONENT dyninst
PUBLIC_HEADER
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/dyninst
)
endif()
endforeach()
foreach(
_LIB
common
dynDwarf
dynElf
dyninstAPI
instructionAPI
parseAPI
patchAPI
pcontrol
stackwalk
symtabAPI
)
if(TARGET ${_LIB})
add_dependencies(${_LIB} external-prebuild)
if(NOT TARGET Dyninst::${_LIB})
add_library(Dyninst::${_LIB} ALIAS ${_LIB})
endif()
endif()
endforeach()
target_link_libraries(rocprofiler-systems-dyninst INTERFACE Dyninst::Dyninst)
else()
find_package(
Dyninst
${rocprofiler_systems_FIND_QUIETLY}
REQUIRED
COMPONENTS dyninstAPI parseAPI instructionAPI symtabAPI
)
if(TARGET Dyninst::Dyninst) # CMake package exports aggregated target (no-Boost OK)
target_link_libraries(rocprofiler-systems-dyninst INTERFACE Dyninst::Dyninst)
rocprofiler_systems_target_compile_definitions(rocprofiler-systems-dyninst
INTERFACE ROCPROFSYS_USE_DYNINST
)
else() # legacy Dyninst install: Boost component libraries
find_package(Boost)
if(NOT TARGET Dyninst::Boost_headers)
add_library(Dyninst::Boost_headers INTERFACE IMPORTED)
target_include_directories(
Dyninst::Boost_headers
SYSTEM
INTERFACE ${Boost_INCLUDE_DIRS}
)
endif()
set(_BOOST_COMPONENTS atomic system thread date_time)
set(rocprofiler_systems_BOOST_COMPONENTS
"${_BOOST_COMPONENTS}"
CACHE STRING
"Boost components used by Dyninst in rocprofiler-systems"
)
set(Boost_NO_BOOST_CMAKE ON)
find_package(
Boost
QUIET
REQUIRED
COMPONENTS ${rocprofiler_systems_BOOST_COMPONENTS}
)
# some installs of dyninst don't set this properly
if(EXISTS "${DYNINST_INCLUDE_DIR}" AND NOT DYNINST_HEADER_DIR)
get_filename_component(
DYNINST_HEADER_DIR
"${DYNINST_INCLUDE_DIR}"
REALPATH
CACHE
)
else()
find_path(
DYNINST_HEADER_DIR
NAMES BPatch.h dyninstAPI_RT.h
HINTS ${Dyninst_ROOT_DIR} ${Dyninst_DIR} ${Dyninst_DIR}/../../..
PATHS ${Dyninst_ROOT_DIR} ${Dyninst_DIR} ${Dyninst_DIR}/../../..
PATH_SUFFIXES include
)
endif()
# try to find TBB
find_package(TBB QUIET)
# if fail try to use the Dyninst installed FindTBB.cmake
if(NOT TBB_FOUND)
list(APPEND CMAKE_MODULE_PATH ${Dyninst_DIR}/Modules)
find_package(TBB QUIET)
endif()
if(NOT TBB_FOUND)
find_path(TBB_INCLUDE_DIR NAMES tbb/tbb.h PATH_SUFFIXES include)
endif()
target_link_libraries(
rocprofiler-systems-dyninst
INTERFACE ${DYNINST_LIBRARIES} ${Boost_LIBRARIES}
)
foreach(
_TARG
dyninst
dyninstAPI
instructionAPI
symtabAPI
parseAPI
headers
atomic
system
thread
date_time
TBB
)
if(TARGET Dyninst::${_TARG})
target_link_libraries(
rocprofiler-systems-dyninst
INTERFACE Dyninst::${_TARG}
)
elseif(TARGET Boost::${_TARG})
target_link_libraries(
rocprofiler-systems-dyninst
INTERFACE Boost::${_TARG}
)
elseif(TARGET ${_TARG})
target_link_libraries(rocprofiler-systems-dyninst INTERFACE ${_TARG})
endif()
endforeach()
target_include_directories(
rocprofiler-systems-dyninst
SYSTEM
INTERFACE ${TBB_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${DYNINST_HEADER_DIR}
)
rocprofiler_systems_target_compile_definitions(rocprofiler-systems-dyninst
INTERFACE ROCPROFSYS_USE_DYNINST
)
endif()
endif()
# Dyninst's Annotatable.h triggers GCC 14's -Wcalloc-transposed-args; suppress it
# for any TU that pulls in dyninst headers since the project builds with -Werror.
add_target_cxx_flag_if_avail(
rocprofiler-systems-dyninst "-Wno-calloc-transposed-args"
)
# ----------------------------------------------------------------------------------------#
#
# Modify CMAKE_C_FLAGS and CMAKE_CXX_FLAGS with -static-libgcc and -static-libstdc++
#
# ----------------------------------------------------------------------------------------#
if(ROCPROFSYS_BUILD_STATIC_LIBGCC)
if(CMAKE_C_COMPILER_ID MATCHES "GNU")
rocprofiler_systems_save_variables(STATIC_LIBGCC_C VARIABLES CMAKE_C_FLAGS)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static-libgcc")
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
rocprofiler_systems_save_variables(STATIC_LIBGCC_CXX VARIABLES CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc")
else()
set(ROCPROFSYS_BUILD_STATIC_LIBGCC OFF)
endif()
endif()
if(ROCPROFSYS_BUILD_STATIC_LIBSTDCXX)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
rocprofiler_systems_save_variables(STATIC_LIBSTDCXX_CXX VARIABLES CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libstdc++")
else()
set(ROCPROFSYS_BUILD_STATIC_LIBSTDCXX OFF)
endif()
endif()
# ----------------------------------------------------------------------------------------#
#
# Perfetto
#
# ----------------------------------------------------------------------------------------#
set(perfetto_DIR ${PROJECT_SOURCE_DIR}/external/perfetto)
rocprofiler_systems_checkout_git_submodule(
RELATIVE_PATH external/perfetto
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
REPO_URL https://github.com/google/perfetto.git
REPO_BRANCH v46.0
TEST_FILE sdk/perfetto.cc
)
include(Perfetto)
# ----------------------------------------------------------------------------------------#
#
# SQLite3
#
# ----------------------------------------------------------------------------------------#
include(SQLite3)
# ----------------------------------------------------------------------------------------#
#
# Spdlog
#
# ----------------------------------------------------------------------------------------#
include(Spdlog)
# ----------------------------------------------------------------------------------------#
#
# NlohmannJson
#
# ----------------------------------------------------------------------------------------#
include(NlohmannJson)
# ----------------------------------------------------------------------------------------#
#
# GTest
#
# ----------------------------------------------------------------------------------------#
if(ROCPROFSYS_BUILD_TESTING)
include(GTest)
include(GhcFilesystem)
endif()
# ----------------------------------------------------------------------------------------#
#
# ELFIO
#
# ----------------------------------------------------------------------------------------#
if(ROCPROFSYS_BUILD_DEVICETRACE)
rocprofiler_systems_checkout_git_submodule(
RELATIVE_PATH external/elfio
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
REPO_URL https://github.com/jrmadsen/ELFIO.git
REPO_BRANCH set-offset-support
)
add_subdirectory(external/elfio)
endif()
# ----------------------------------------------------------------------------------------#
#
# papi submodule
#
# ----------------------------------------------------------------------------------------#
if(ROCPROFSYS_USE_PAPI AND ROCPROFSYS_BUILD_PAPI)
include(PAPI)
endif()
# ----------------------------------------------------------------------------------------#
#
# timemory submodule
#
# ----------------------------------------------------------------------------------------#
target_compile_definitions(
rocprofiler-systems-timemory-config
INTERFACE
TIMEMORY_PAPI_ARRAY_SIZE=12
TIMEMORY_USE_ROOFLINE=0
TIMEMORY_USE_ERT=0
TIMEMORY_USE_CONTAINERS=0
TIMEMORY_USE_ERT_EXTERN=0
TIMEMORY_USE_CONTAINERS_EXTERN=0
)
if(ROCPROFSYS_BUILD_STACK_PROTECTOR)
add_target_flag_if_avail(rocprofiler-systems-timemory-config
"-fstack-protector-strong" "-Wstack-protector"
)
endif()
if(ROCPROFSYS_BUILD_DEBUG)
add_target_flag_if_avail(rocprofiler-systems-timemory-config
"-fno-omit-frame-pointer" "-g3"
)
endif()
set(TIMEMORY_EXTERNAL_INTERFACE_LIBRARY
rocprofiler-systems-timemory-config
CACHE STRING
"timemory configuration interface library"
)
set(TIMEMORY_INSTALL_HEADERS OFF CACHE BOOL "Disable timemory header install")
set(TIMEMORY_INSTALL_CONFIG OFF CACHE BOOL "Disable timemory cmake configuration install")
set(TIMEMORY_INSTALL_LIBRARIES
OFF
CACHE BOOL
"Disable timemory installation of libraries not needed at runtime"
)
set(TIMEMORY_INSTALL_ALL OFF CACHE BOOL "Disable install target depending on all target")
set(TIMEMORY_BUILD_C OFF CACHE BOOL "Disable timemory C library")
set(TIMEMORY_BUILD_FORTRAN OFF CACHE BOOL "Disable timemory Fortran library")
set(TIMEMORY_BUILD_TOOLS OFF CACHE BOOL "Ensure timem executable is built")
set(TIMEMORY_BUILD_EXCLUDE_FROM_ALL
ON
CACHE BOOL
"Set timemory to only build dependencies"
)
set(TIMEMORY_BUILD_HIDDEN_VISIBILITY
ON
CACHE BOOL
"Build timemory with hidden visibility"
)
set(TIMEMORY_QUIET_CONFIG ON CACHE BOOL "Make timemory configuration quieter")
# timemory feature settings
set(TIMEMORY_USE_GOTCHA ON CACHE BOOL "Enable GOTCHA support in timemory")
set(TIMEMORY_USE_PERFETTO OFF CACHE BOOL "Disable perfetto support in timemory")
set(TIMEMORY_USE_OMPT OFF CACHE BOOL "Enable OMPT support in timemory" FORCE)
set(TIMEMORY_USE_PAPI
${ROCPROFSYS_USE_PAPI}
CACHE BOOL
"Enable PAPI support in timemory"
FORCE
)
set(TIMEMORY_USE_BFD
${ROCPROFSYS_USE_BFD}
CACHE BOOL
"Enable BFD support in timemory"
FORCE
)
set(TIMEMORY_USE_LIBUNWIND ON CACHE BOOL "Enable libunwind support in timemory")
set(TIMEMORY_USE_VISIBILITY OFF CACHE BOOL "Enable/disable using visibility decorations")
if(DEFINED TIMEMORY_BUILD_GOTCHA AND NOT TIMEMORY_BUILD_GOTCHA)
rocprofiler_systems_message(
FATAL_ERROR
"Using an external gotcha is not allowed due to known bug that has not been accepted upstream"
)
endif()
# timemory feature build settings
set(TIMEMORY_BUILD_GOTCHA
ON
CACHE BOOL
"Enable building GOTCHA library from submodule"
FORCE
)
set(TIMEMORY_BUILD_LIBUNWIND
${ROCPROFSYS_BUILD_LIBUNWIND}
CACHE BOOL
"Enable building libunwind library from submodule"
FORCE
)
set(TIMEMORY_BUILD_EXTRA_OPTIMIZATIONS
${ROCPROFSYS_BUILD_EXTRA_OPTIMIZATIONS}
CACHE BOOL
"Enable building GOTCHA library from submodule"
FORCE
)
set(TIMEMORY_BUILD_ERT OFF CACHE BOOL "Disable building ERT support" FORCE)
set(TIMEMORY_BUILD_CONTAINERS
OFF
CACHE BOOL
"Disable building container extern templates (unused)"
FORCE
)
# timemory build settings
set(TIMEMORY_TLS_MODEL "global-dynamic" CACHE STRING "Thread-local static model" FORCE)
set(TIMEMORY_MAX_THREADS
"${ROCPROFSYS_MAX_THREADS}"
CACHE STRING
"Max statically-allocated threads"
FORCE
)
set(TIMEMORY_SETTINGS_PREFIX
"ROCPROFSYS_"
CACHE STRING
"Prefix used for settings and environment variables"
)
set(TIMEMORY_PROJECT_NAME "rocprofiler-systems" CACHE STRING "Name for configuration")
set(TIMEMORY_CXX_LIBRARY_EXCLUDE
"kokkosp.cpp;pthread.cpp;timemory_c.cpp;trace.cpp;weak.cpp;library.cpp"
CACHE STRING
"Timemory C++ library implementation files to exclude from compiling"
)
mark_as_advanced(TIMEMORY_SETTINGS_PREFIX)
mark_as_advanced(TIMEMORY_PROJECT_NAME)
rocprofiler_systems_checkout_git_submodule(
RELATIVE_PATH external/timemory
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
REPO_URL https://github.com/ROCm/timemory.git
REPO_BRANCH rocprofiler-systems-cppstd20
)
rocprofiler_systems_save_variables(
BUILD_CONFIG VARIABLES BUILD_SHARED_LIBS BUILD_STATIC_LIBS
CMAKE_POSITION_INDEPENDENT_CODE CMAKE_PREFIX_PATH
)
# ensure timemory builds PIC static libs so that we don't have to install timemory shared
# lib
set(BUILD_SHARED_LIBS OFF)
set(BUILD_STATIC_LIBS ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(TIMEMORY_CTP_OPTIONS GLOBAL)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
# results in undefined symbols to component::base<T>::load()
set(TIMEMORY_BUILD_HIDDEN_VISIBILITY OFF CACHE BOOL "" FORCE)
endif()
# Under sanitizer builds, ASan's globals-dead-stripping optimization converts
# timemory's explicit template instantiations (STB_GLOBAL) into COMDAT groups
# with STB_GLOBAL leaders. Rocprofiler-systems TUs that include timemory headers
# produce COMDAT groups with STB_WEAK leaders for the same symbols (implicit
# instantiation). lld rejects the resulting mix of STB_WEAK and STB_GLOBAL
# COMDAT group leaders for the same symbol.
#
# -fno-sanitize-address-globals-dead-stripping disables this COMDAT conversion
# for timemory's compilation, keeping explicit instantiations as regular
# STB_GLOBAL symbols (as they are without sanitizers). lld then applies its
# normal STB_GLOBAL-overrides-COMDAT-STB_WEAK rule, which is the same
# behaviour as non-sanitizer builds and what GNU ld always does.
string(FIND "${CMAKE_CXX_FLAGS}" "-fsanitize" _timemory_sanitizer_flag_pos)
if(_timemory_sanitizer_flag_pos GREATER -1)
set(TIMEMORY_BUILD_HIDDEN_VISIBILITY OFF CACHE BOOL "" FORCE)
set(_timemory_saved_cxx_flags "${CMAKE_CXX_FLAGS}")
string(APPEND CMAKE_CXX_FLAGS " -fno-sanitize-address-globals-dead-stripping")
endif()
add_subdirectory(external/timemory EXCLUDE_FROM_ALL)
if(_timemory_sanitizer_flag_pos GREATER -1)
set(CMAKE_CXX_FLAGS "${_timemory_saved_cxx_flags}")
endif()
install(
TARGETS gotcha
DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}
COMPONENT gotcha
)
if(ROCPROFSYS_BUILD_LIBUNWIND)
install(
DIRECTORY ${PROJECT_BINARY_DIR}/external/timemory/external/libunwind/install/lib/
DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}
COMPONENT libunwind
FILES_MATCHING
PATTERN "*${CMAKE_SHARED_LIBRARY_SUFFIX}*"
)
endif()
rocprofiler_systems_restore_variables(
BUILD_CONFIG VARIABLES BUILD_SHARED_LIBS BUILD_STATIC_LIBS
CMAKE_POSITION_INDEPENDENT_CODE CMAKE_PREFIX_PATH
)
if(TARGET rocprofiler-systems-papi-build)
foreach(
_TARGET
PAPI::papi
timemory-core
timemory-common
timemory-papi-component
timemory-cxx
)
if(TARGET "${_TARGET}")
add_dependencies(${_TARGET} rocprofiler-systems-papi-build)
endif()
foreach(_LINK shared static)
if(TARGET "${_TARGET}-${_LINK}")
add_dependencies(${_TARGET}-${_LINK} rocprofiler-systems-papi-build)
endif()
endforeach()
endforeach()
endif()
target_link_libraries(
rocprofiler-systems-timemory
INTERFACE
$<BUILD_INTERFACE:timemory::timemory-headers>
$<BUILD_INTERFACE:timemory::timemory-gotcha>
$<BUILD_INTERFACE:timemory::timemory-cxx-static>
)
target_link_libraries(
rocprofiler-systems-bfd
INTERFACE $<BUILD_INTERFACE:timemory::timemory-bfd>
)
if(ROCPROFSYS_USE_BFD)
rocprofiler_systems_target_compile_definitions(rocprofiler-systems-bfd
INTERFACE ROCPROFSYS_USE_BFD
)
endif()
find_package(Libva-headers ${rocprofiler_systems_FIND_QUIETLY} REQUIRED)
target_include_directories(
rocprofiler-systems-libva
INTERFACE ${LIBVA_HEADERS_INCLUDE_DIR}
)
find_package(UCX ${rocprofiler_systems_FIND_QUIETLY} REQUIRED)
target_include_directories(rocprofiler-systems-ucx INTERFACE ${UCX_HEADERS_INCLUDE_DIR})
# ----------------------------------------------------------------------------------------#
#
# Restore the CMAKE_C_FLAGS and CMAKE_CXX_FLAGS in the inverse order
#
# ----------------------------------------------------------------------------------------#
# override compiler macros
include(Compilers)
if(ROCPROFSYS_BUILD_STATIC_LIBSTDCXX)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
rocprofiler_systems_restore_variables(STATIC_LIBSTDCXX_CXX
VARIABLES CMAKE_CXX_FLAGS
)
endif()
endif()
if(ROCPROFSYS_BUILD_STATIC_LIBGCC)
if(CMAKE_C_COMPILER_ID MATCHES "GNU")
rocprofiler_systems_restore_variables(STATIC_LIBGCC_C VARIABLES CMAKE_C_FLAGS)
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
rocprofiler_systems_restore_variables(STATIC_LIBGCC_CXX VARIABLES CMAKE_CXX_FLAGS)
endif()
endif()
rocprofiler_systems_add_feature(CMAKE_C_FLAGS "C compiler flags")
rocprofiler_systems_add_feature(CMAKE_CXX_FLAGS "C++ compiler flags")
# ----------------------------------------------------------------------------------------#
#
# Python
#
# ----------------------------------------------------------------------------------------#
if(ROCPROFSYS_USE_PYTHON)
if(ROCPROFSYS_USE_PYTHON AND NOT ROCPROFSYS_BUILD_PYTHON)
find_package(pybind11 REQUIRED)
endif()
include(ConfigPython)
include(PyBind11Tools)
rocprofiler_systems_watch_for_change(ROCPROFSYS_PYTHON_ROOT_DIRS _PYTHON_DIRS_CHANGED)
rocprofiler_systems_watch_for_change(ROCPROFSYS_PYTHON_VERSIONS _PYTHON_VERS_CHANGED)
if(_PYTHON_DIRS_CHANGED)
unset(ROCPROFSYS_PYTHON_VERSION CACHE)
# Only discard cached versions if the user did not explicitly
# provide/change them on this configure run. This prevents a fresh
# build (where watch_for_change treats all new values as "changed")
# from discarding user-supplied versions while still allowing
# re-discovery when only root dirs change between reconfigures.
if(NOT _PYTHON_VERS_CHANGED OR NOT ROCPROFSYS_PYTHON_VERSIONS)
unset(ROCPROFSYS_PYTHON_VERSIONS CACHE)
endif()
unset(ROCPROFSYS_INSTALL_PYTHONDIR CACHE)
else()
foreach(_VAR PREFIX ENVS)
rocprofiler_systems_watch_for_change(ROCPROFSYS_PYTHON_${_VAR} _CHANGED)
if(_CHANGED)
unset(ROCPROFSYS_PYTHON_ROOT_DIRS CACHE)
unset(ROCPROFSYS_PYTHON_VERSIONS CACHE)
unset(ROCPROFSYS_INSTALL_PYTHONDIR CACHE)
break()
endif()
endforeach()
endif()
if(ROCPROFSYS_PYTHON_PREFIX AND ROCPROFSYS_PYTHON_ENVS)
rocprofiler_systems_directory(
FAIL
PREFIX ${ROCPROFSYS_PYTHON_PREFIX}
PATHS ${ROCPROFSYS_PYTHON_ENVS}
OUTPUT_VARIABLE _PYTHON_ROOT_DIRS
)
set(ROCPROFSYS_PYTHON_ROOT_DIRS
"${_PYTHON_ROOT_DIRS}"
CACHE INTERNAL
"Root directories for python"
)
endif()
if(NOT ROCPROFSYS_PYTHON_VERSIONS AND ROCPROFSYS_PYTHON_VERSION)
set(ROCPROFSYS_PYTHON_VERSIONS "${ROCPROFSYS_PYTHON_VERSION}")
if(NOT ROCPROFSYS_PYTHON_ROOT_DIRS)
rocprofiler_systems_find_python(_PY VERSION ${ROCPROFSYS_PYTHON_VERSION}
COMPONENTS Interpreter
)
set(ROCPROFSYS_PYTHON_ROOT_DIRS "${_PY_ROOT_DIR}" CACHE INTERNAL "" FORCE)
endif()
unset(ROCPROFSYS_PYTHON_VERSION CACHE)
unset(ROCPROFSYS_INSTALL_PYTHONDIR CACHE)
elseif(
NOT ROCPROFSYS_PYTHON_VERSIONS
AND NOT ROCPROFSYS_PYTHON_VERSION
AND ROCPROFSYS_PYTHON_ROOT_DIRS
)
set(_PY_VERSIONS)
foreach(_DIR ${ROCPROFSYS_PYTHON_ROOT_DIRS})
rocprofiler_systems_find_python(_PY ROOT_DIR ${_DIR}
COMPONENTS Interpreter
)
if(NOT _PY_FOUND)
continue()
endif()
if(NOT "${_PY_VERSION}" IN_LIST _PY_VERSIONS)
list(APPEND _PY_VERSIONS "${_PY_VERSION}")
endif()
endforeach()
set(ROCPROFSYS_PYTHON_VERSIONS "${_PY_VERSIONS}" CACHE INTERNAL "" FORCE)
elseif(
NOT ROCPROFSYS_PYTHON_VERSIONS
AND NOT ROCPROFSYS_PYTHON_VERSION
AND NOT ROCPROFSYS_PYTHON_ROOT_DIRS
)
rocprofiler_systems_find_python(_PY REQUIRED COMPONENTS Interpreter)
set(ROCPROFSYS_PYTHON_ROOT_DIRS "${_PY_ROOT_DIR}" CACHE INTERNAL "" FORCE)
set(ROCPROFSYS_PYTHON_VERSIONS "${_PY_VERSION}" CACHE INTERNAL "" FORCE)
endif()
rocprofiler_systems_watch_for_change(ROCPROFSYS_PYTHON_ROOT_DIRS)
rocprofiler_systems_watch_for_change(ROCPROFSYS_PYTHON_VERSIONS)
rocprofiler_systems_check_python_dirs_and_versions(FAIL)
list(LENGTH ROCPROFSYS_PYTHON_VERSIONS _NUM_PYTHON_VERSIONS)
if(_NUM_PYTHON_VERSIONS GREATER 1)
set(ROCPROFSYS_INSTALL_PYTHONDIR
"${CMAKE_INSTALL_LIBDIR}/python/site-packages"
CACHE STRING
"Installation prefix for python"
)
else()
set(ROCPROFSYS_INSTALL_PYTHONDIR
"${CMAKE_INSTALL_LIBDIR}/python${ROCPROFSYS_PYTHON_VERSIONS}/site-packages"
CACHE STRING
"Installation prefix for python"
)
endif()
else()
set(ROCPROFSYS_INSTALL_PYTHONDIR
"${CMAKE_INSTALL_LIBDIR}/python/site-packages"
CACHE STRING
"Installation prefix for python"
)
endif()
rocprofiler_systems_watch_for_change(ROCPROFSYS_INSTALL_PYTHONDIR)
set(CMAKE_INSTALL_PYTHONDIR ${ROCPROFSYS_INSTALL_PYTHONDIR})
# ----------------------------------------------------------------------------------------#
#
# Compile definitions
#
# ----------------------------------------------------------------------------------------#
if("${CMAKE_BUILD_TYPE}" MATCHES "Release" AND NOT ROCPROFSYS_BUILD_DEBUG)
add_target_flag_if_avail(rocprofiler-systems-compile-options "-g1")
endif()
target_compile_definitions(
rocprofiler-systems-compile-definitions
INTERFACE ROCPROFSYS_MAX_THREADS=${ROCPROFSYS_MAX_THREADS}
)
foreach(_LIB ${ROCPROFSYS_EXTENSION_LIBRARIES})
get_target_property(_COMPILE_DEFS ${_LIB} INTERFACE_COMPILE_DEFINITIONS)
if(_COMPILE_DEFS)
foreach(_DEF ${_COMPILE_DEFS})
if("${_DEF}" MATCHES "ROCPROFSYS_")
target_compile_definitions(
rocprofiler-systems-compile-definitions
INTERFACE ${_DEF}
)
endif()
endforeach()
endif()
endforeach()