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

231 lines
7.8 KiB
CMake

# Copyright (c) Advanced Micro Devices, Inc.
# SPDX-License-Identifier: MIT
include_guard(GLOBAL)
# ------------------------------------------------------------------------------
# Options
# ------------------------------------------------------------------------------
set(ROCPROFSYS_PROFILER_HUB_GIT_REPOSITORY
"https://github.com/ROCm/rocm-systems.git"
CACHE STRING
"Git repository URL for profiler-hub fallback sparse checkout"
)
set(ROCPROFSYS_PROFILER_HUB_GIT_TAG
"0e57a383b016cfd75b02e83dfb2adcd55f395b42"
CACHE STRING
"Git commit for profiler-hub fallback sparse checkout (pinned to the #8610 merge commit that fixes profiler-hub's export-set and schema-API build failures)"
)
set(ROCPROFSYS_PROFILER_HUB_GIT_SUBDIR
"profilers/profiler-hub"
CACHE STRING
"Subdirectory inside the repository that contains profiler-hub"
)
option(ROCPROFSYS_PROFILER_HUB_ENABLE_LOGGING "Enable profiler-hub logging" OFF)
option(ROCPROFSYS_PROFILER_HUB_LINK_STATIC "Link profiler-hub statically" OFF)
# ------------------------------------------------------------------------------
# Resolution order:
# 1. find_package(profiler-hub) - use installed package if present
# 2. fallback: sparse checkout of ROCPROFSYS_PROFILER_HUB_GIT_SUBDIR from
# ROCPROFSYS_PROFILER_HUB_GIT_REPOSITORY at ROCPROFSYS_PROFILER_HUB_GIT_TAG
# ------------------------------------------------------------------------------
set(_PROFILER_HUB_IS_EXTERNAL FALSE)
set(_PROFILER_HUB_SOURCE_DIR "")
find_package(profiler-hub QUIET CONFIG)
if(profiler-hub_FOUND)
message(STATUS "[profiler-hub] Using installed package: ${profiler-hub_DIR}")
set(_PROFILER_HUB_IS_EXTERNAL TRUE)
else()
message(
STATUS
"[profiler-hub] find_package failed; falling back to "
"sparse checkout of ${ROCPROFSYS_PROFILER_HUB_GIT_REPOSITORY} "
"(${ROCPROFSYS_PROFILER_HUB_GIT_TAG})"
)
find_package(Git REQUIRED)
set(_PROFILER_HUB_ROOT "${PROJECT_BINARY_DIR}/external/profiler-hub")
set(_PROFILER_HUB_CHECKOUT "${_PROFILER_HUB_ROOT}/src")
set(_PROFILER_HUB_SOURCE_DIR
"${_PROFILER_HUB_CHECKOUT}/${ROCPROFSYS_PROFILER_HUB_GIT_SUBDIR}"
)
set(_PROFILER_HUB_STAMP "${_PROFILER_HUB_ROOT}/.checkout.stamp")
set(_PROFILER_HUB_NEEDS_CHECKOUT TRUE)
if(EXISTS "${_PROFILER_HUB_STAMP}")
file(READ "${_PROFILER_HUB_STAMP}" _stamp_contents)
if(
_stamp_contents
STREQUAL
"${ROCPROFSYS_PROFILER_HUB_GIT_REPOSITORY}@${ROCPROFSYS_PROFILER_HUB_GIT_TAG}:${ROCPROFSYS_PROFILER_HUB_GIT_SUBDIR}"
)
set(_PROFILER_HUB_NEEDS_CHECKOUT FALSE)
endif()
endif()
if(_PROFILER_HUB_NEEDS_CHECKOUT)
message(
STATUS
"[profiler-hub] Sparse-checking out ${ROCPROFSYS_PROFILER_HUB_GIT_SUBDIR} into ${_PROFILER_HUB_CHECKOUT}"
)
if(EXISTS "${_PROFILER_HUB_CHECKOUT}")
file(REMOVE_RECURSE "${_PROFILER_HUB_CHECKOUT}")
endif()
file(MAKE_DIRECTORY "${_PROFILER_HUB_CHECKOUT}")
execute_process(
COMMAND ${GIT_EXECUTABLE} init ${_PROFILER_HUB_CHECKOUT}
RESULT_VARIABLE _git_result
ERROR_VARIABLE _git_error
)
if(NOT _git_result EQUAL 0)
message(FATAL_ERROR "[profiler-hub] git init failed: ${_git_error}")
endif()
execute_process(
COMMAND
${GIT_EXECUTABLE} remote add origin
${ROCPROFSYS_PROFILER_HUB_GIT_REPOSITORY}
WORKING_DIRECTORY ${_PROFILER_HUB_CHECKOUT}
RESULT_VARIABLE _git_result
ERROR_VARIABLE _git_error
)
if(NOT _git_result EQUAL 0)
message(FATAL_ERROR "[profiler-hub] git remote add failed: ${_git_error}")
endif()
# fetch (rather than clone --branch) so ROCPROFSYS_PROFILER_HUB_GIT_TAG can be
# a branch, a tag, or a raw commit SHA; GitHub's smart-HTTP transport allows
# fetching any reachable commit, not just named refs.
execute_process(
COMMAND
${GIT_EXECUTABLE} fetch --filter=blob:none --depth 1 origin
${ROCPROFSYS_PROFILER_HUB_GIT_TAG}
WORKING_DIRECTORY ${_PROFILER_HUB_CHECKOUT}
RESULT_VARIABLE _git_result
OUTPUT_VARIABLE _git_output
ERROR_VARIABLE _git_error
)
if(NOT _git_result EQUAL 0)
message(
FATAL_ERROR
"[profiler-hub] git fetch failed (${_git_result}): ${_git_error}\n${_git_output}"
)
endif()
execute_process(
COMMAND ${GIT_EXECUTABLE} sparse-checkout init --cone
WORKING_DIRECTORY ${_PROFILER_HUB_CHECKOUT}
RESULT_VARIABLE _git_result
ERROR_VARIABLE _git_error
)
if(NOT _git_result EQUAL 0)
message(
FATAL_ERROR
"[profiler-hub] sparse-checkout init failed: ${_git_error}"
)
endif()
execute_process(
COMMAND
${GIT_EXECUTABLE} sparse-checkout set
${ROCPROFSYS_PROFILER_HUB_GIT_SUBDIR}
WORKING_DIRECTORY ${_PROFILER_HUB_CHECKOUT}
RESULT_VARIABLE _git_result
ERROR_VARIABLE _git_error
)
if(NOT _git_result EQUAL 0)
message(
FATAL_ERROR
"[profiler-hub] sparse-checkout set failed: ${_git_error}"
)
endif()
execute_process(
COMMAND ${GIT_EXECUTABLE} checkout FETCH_HEAD
WORKING_DIRECTORY ${_PROFILER_HUB_CHECKOUT}
RESULT_VARIABLE _git_result
ERROR_VARIABLE _git_error
)
if(NOT _git_result EQUAL 0)
message(FATAL_ERROR "[profiler-hub] git checkout failed: ${_git_error}")
endif()
if(NOT EXISTS "${_PROFILER_HUB_SOURCE_DIR}/CMakeLists.txt")
message(
FATAL_ERROR
"[profiler-hub] Sparse checkout completed but CMakeLists.txt missing at "
"${_PROFILER_HUB_SOURCE_DIR}"
)
endif()
file(
WRITE "${_PROFILER_HUB_STAMP}"
"${ROCPROFSYS_PROFILER_HUB_GIT_REPOSITORY}@${ROCPROFSYS_PROFILER_HUB_GIT_TAG}:${ROCPROFSYS_PROFILER_HUB_GIT_SUBDIR}"
)
else()
message(
STATUS
"[profiler-hub] Reusing existing sparse checkout at ${_PROFILER_HUB_SOURCE_DIR}"
)
endif()
endif()
if(NOT _PROFILER_HUB_IS_EXTERNAL)
set(PROFILER_HUB_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(PROFILER_HUB_BUILD_BENCHMARKS OFF CACHE BOOL "" FORCE)
set(PROFILER_HUB_ENABLE_LOGGING
${ROCPROFSYS_PROFILER_HUB_ENABLE_LOGGING}
CACHE BOOL
""
FORCE
)
add_subdirectory(
${_PROFILER_HUB_SOURCE_DIR}
${PROJECT_BINARY_DIR}/external/profiler-hub/build
)
endif()
if(ROCPROFSYS_PROFILER_HUB_LINK_STATIC)
set(_PROFILER_HUB_SUFFIX "-static")
message(STATUS "[profiler-hub] Linking statically")
else()
set(_PROFILER_HUB_SUFFIX "")
endif()
if(_PROFILER_HUB_IS_EXTERNAL)
set(_PROFILER_HUB_TARGET profiler-hub::profiler-hub${_PROFILER_HUB_SUFFIX})
else()
set(_PROFILER_HUB_TARGET profiler-hub${_PROFILER_HUB_SUFFIX})
endif()
# ------------------------------------------------------------------------------
# Interface target
# ------------------------------------------------------------------------------
add_library(rocprofiler-systems-profiler-hub INTERFACE)
add_library(
rocprofiler-systems::rocprofiler-systems-profiler-hub
ALIAS rocprofiler-systems-profiler-hub
)
target_link_libraries(rocprofiler-systems-profiler-hub INTERFACE ${_PROFILER_HUB_TARGET})
if(NOT _PROFILER_HUB_IS_EXTERNAL)
target_include_directories(
rocprofiler-systems-profiler-hub
SYSTEM
INTERFACE $<TARGET_PROPERTY:profiler-hub,INTERFACE_INCLUDE_DIRECTORIES>
)
endif()