Files
TheRock/rocm-systems/projects/hip-tests/catch/unit/hrr/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

145 lines
6.0 KiB
CMake

# Copyright (c) Advanced Micro Devices, Inc., or its affiliates.
#
# SPDX-License-Identifier: MIT
# HRR (HIP Record & Replay) tests
#
# Source files compiled into HrrTest:
#
# hrr_format_test.cc — CPU-only: archive format I/O unit tests (no GPU).
# hrr_recovery_test.cc — CPU-only: crash-truncation recovery unit tests for
# the archive reader (no GPU).
# hrr_workload_test.cc — Hidden ([.][hrr-direct]) GPU test cases invoked as
# subprocesses by hrr_roundtrip_test.cc; provides clean
# Windows process context for HIP + capture layer.
# hrr_repro_workload_test.cc — Hidden ([.][hrr-direct]) regression micro-kernels
# (first-hipMalloc capture, embedded-pointer struct
# args, uncaptured-host-write divergence, null optional
# output pointer 0x20000 fault class, replay zero-init).
# hrr_roundtrip_test.cc — Round-trip: sets HIP_HRR_CAPTURE_OUTPUT, spawns
# Unit_HRR_GpuWorkload_Direct / Unit_HRR_GraphWorkload_Direct
# as subprocesses, then runs hrr-playback to validate
# replayed D2H buffers byte-for-byte against captured blobs.
#
# hrr_reader.cpp is compiled directly into the test executable so the format
# tests can exercise the reader without a separate install step.
if(NOT DEFINED HRR_CLR_DIR)
# Default: clr and hip-tests are siblings under projects/
get_filename_component(HRR_CLR_DIR
"${CMAKE_CURRENT_SOURCE_DIR}/../../../../clr/hipamd/src/hrr"
ABSOLUTE)
endif()
if(NOT IS_DIRECTORY "${HRR_CLR_DIR}")
message(FATAL_ERROR "HRR_CLR_DIR not found: ${HRR_CLR_DIR}\n"
"Pass -DHRR_CLR_DIR=<path> to point to clr/hipamd/src/hrr")
endif()
set(TEST_SRC
hrr_format_test.cc
hrr_recovery_test.cc
hrr_playback_test.cc
hrr_workload_test.cc
hrr_repro_workload_test.cc
hrr_roundtrip_test.cc
${HRR_CLR_DIR}/playback/hrr_reader.cpp
)
hip_add_exe_to_target(NAME HrrTest
TEST_SRC ${TEST_SRC}
TEST_TARGET_NAME build_tests
LINKER_LIBS hiprtc::hiprtc
PROPERTY CXX_STANDARD 17)
# On Linux with ROCm clang/lld, the system C++ stdlib is not automatically
# linked. Add it explicitly so that std::filesystem, std::ostream etc. resolve.
# Use plain (non-keyword) signature to match hip_add_exe_to_target's usage.
if(NOT WIN32)
target_link_libraries(HrrTest stdc++ stdc++fs)
endif()
target_include_directories(HrrTest PRIVATE
${HRR_CLR_DIR}
${HRR_CLR_DIR}/playback
)
# hrr_api_args.h uses a compile-time guard to emit the hrr_api_names[] string
# table in exactly one translation unit.
target_compile_definitions(HrrTest PRIVATE
HRR_API_ARGS_IMPLEMENTATION
__HIP_PLATFORM_AMD__
)
# ---------------------------------------------------------------------------
# hrr_roundtrip_test.cc needs:
# HRR_TEST_EXE — bare filename; SpawnProc resolves it from currentPath()
# (= CTest WORKING_DIRECTORY = HrrTest's own directory).
# HRR_PLAYBACK_EXE — bare filename; hrr-playback is copied next to HrrTest
# via POST_BUILD so it is always colocated.
# ROCM_BIN_PATH — prepended to PATH in the child so it finds amdhip64_7.dll
# (CTest/bash PATH does not include the ROCm bin directory)
# ---------------------------------------------------------------------------
if(HIP_PLATFORM STREQUAL "amd")
if(NOT DEFINED HRR_PLAYBACK_EXE)
find_program(HRR_PLAYBACK_EXE NAMES hrr-playback hrr-playback.exe
HINTS
"${CMAKE_INSTALL_PREFIX}/bin"
"${ROCM_PATH}/bin"
)
endif()
if(NOT HRR_PLAYBACK_EXE)
message(FATAL_ERROR "hrr-playback not found.\n"
"Pass -DHRR_PLAYBACK_EXE=<path> to cmake.")
endif()
message(STATUS "HRR playback: ${HRR_PLAYBACK_EXE}")
# Copy hrr-playback next to HrrTest so SpawnProc finds it via the bare name
# "hrr-playback" (resolved from currentPath() = CTest WORKING_DIRECTORY).
#
# Two steps are needed:
# 1. POST_BUILD copy into the build-tree output dir (for local ctest runs).
# 2. install(PROGRAMS ...) into share/hip/catch_tests/ (for packaged runs).
# packaging/CMakeLists.txt installs all G_INSTALL_EXE_TARGETS there;
# we install hrr-playback to the same destination so it is colocated.
add_custom_command(TARGET HrrTest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${HRR_PLAYBACK_EXE}"
"$<TARGET_FILE_DIR:HrrTest>/"
COMMENT "Copying hrr-playback next to HrrTest"
)
include(GNUInstallDirs)
install(PROGRAMS "${HRR_PLAYBACK_EXE}"
DESTINATION "${CMAKE_INSTALL_DATADIR}/hip/${CATCH_BUILD_DIR}")
# Optional: hip_raw_trace.exe for Unit_HRR_MultiThreadRoundtrip.
# A genuine multi-threaded capture workload (4 threads + graph + pinned + hostReg).
# If not found, the MT roundtrip test is skipped at runtime via HRR_RAW_TRACE_EXE="".
if(NOT DEFINED HRR_RAW_TRACE_EXE)
# Use a local variable so find_program's cache sentinel (-NOTFOUND) does
# not leak into the compile definition.
find_program(_hrr_raw_trace_found NAMES hip_raw_trace hip_raw_trace.exe
HINTS
"${CMAKE_INSTALL_PREFIX}/bin"
"${ROCM_PATH}/bin"
)
if(_hrr_raw_trace_found)
set(HRR_RAW_TRACE_EXE "${_hrr_raw_trace_found}")
else()
set(HRR_RAW_TRACE_EXE "")
endif()
endif()
message(STATUS "HRR raw trace: ${HRR_RAW_TRACE_EXE}")
target_compile_definitions(HrrTest PRIVATE
# Use the exe filename only (no directory). SpawnProc resolves relative
# paths via currentPath() which equals the CTest WORKING_DIRECTORY —
# the directory containing HrrTest.exe. This works both from the build
# tree and from an installed/packaged test run where the build tree is
# no longer present.
HRR_TEST_EXE="HrrTest"
HRR_PLAYBACK_EXE="hrr-playback"
HRR_RAW_TRACE_EXE="${HRR_RAW_TRACE_EXE}"
ROCM_BIN_PATH="${ROCM_PATH}/bin"
)
endif()