diff --git a/pkgs/development/rocm-modules/default.nix b/pkgs/development/rocm-modules/default.nix index bfc84389b260..9c8832fcf3b0 100644 --- a/pkgs/development/rocm-modules/default.nix +++ b/pkgs/development/rocm-modules/default.nix @@ -90,6 +90,8 @@ let inherit (llvm) clang; }; + rocprof-trace-decoder = self.callPackage ./rocprof-trace-decoder { }; + roctracer = self.callPackage ./roctracer { }; rocgdb = self.callPackage ./rocgdb { }; diff --git a/pkgs/development/rocm-modules/rocprof-trace-decoder/default.nix b/pkgs/development/rocm-modules/rocprof-trace-decoder/default.nix new file mode 100644 index 000000000000..872f435e6e5d --- /dev/null +++ b/pkgs/development/rocm-modules/rocprof-trace-decoder/default.nix @@ -0,0 +1,85 @@ +{ + lib, + stdenv, + fetchFromGitHub, + rocmPackages, + cmake, + python3, + nlohmann_json, + gtest, +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "rocprof-trace-decoder"; + version = "0.1.7"; + + src = fetchFromGitHub { + owner = "ROCm"; + repo = "rocm-systems"; + # No tags (yet?) + rev = "feeca99950c590e0b8228733405c4a1a10fa4773"; + sparseCheckout = [ + "projects/rocprof-trace-decoder" + "shared" + ]; + hash = "sha256-aJhPiZf5380jj2IeCipgcTEQYogr5R19UnVwKRGnkxo="; + }; + + sourceRoot = "${finalAttrs.src.name}/projects/rocprof-trace-decoder"; + + patches = [ + ./use-system-dependencies.patch + ]; + + strictDeps = true; + + nativeBuildInputs = [ cmake ]; + + buildInputs = [ + rocmPackages.rocm-comgr + rocmPackages.rocm-runtime + ]; + + cmakeFlags = [ + (lib.cmakeBool "BUILD_TESTS" finalAttrs.doCheck) + ]; + + nativeCheckInputs = [ + python3 + ]; + + checkInputs = [ + nlohmann_json + gtest + ]; + + preCheck = '' + patchShebangs test + ''; + + checkPhase = + let + # - Sanitize tests fail because the UBSan runtime (__ubsan_vptr_type_cache) is not available for + # LD_PRELOAD in the sandbox. + # - Validate tests fail because they depend on execute tests producing output files first, but + # CTest runs them concurrently without proper ordering. + skipPattern = "_(sanitize|validate)$"; + in + '' + runHook preCheck + + ctest --test-dir . --output-on-failure -E '${skipPattern}' + + runHook postCheck + ''; + + doCheck = true; + + meta = { + description = "Library for decoding ROCm thread trace data"; + homepage = "https://github.com/ROCm/rocm-systems/tree/develop/projects/rocprof-trace-decoder"; + license = with lib.licenses; [ mit ]; + teams = [ lib.teams.rocm ]; + platforms = lib.platforms.linux; + }; +}) diff --git a/pkgs/development/rocm-modules/rocprof-trace-decoder/use-system-dependencies.patch b/pkgs/development/rocm-modules/rocprof-trace-decoder/use-system-dependencies.patch new file mode 100644 index 000000000000..1f821a111088 --- /dev/null +++ b/pkgs/development/rocm-modules/rocprof-trace-decoder/use-system-dependencies.patch @@ -0,0 +1,81 @@ +diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt +index a923cad..53b0f49 100644 +--- a/test/CMakeLists.txt ++++ b/test/CMakeLists.txt +@@ -34,13 +34,7 @@ if(DISABLE_COMGR) + endif() + + if(NOT APPLE AND BUILD_INTEGRATION_TESTS) +- # Add nlohmann JSON as an external dependency +- include(FetchContent) +- FetchContent_Declare( +- json +- GIT_REPOSITORY https://github.com/nlohmann/json.git +- GIT_TAG v3.11.3) +- FetchContent_MakeAvailable(json) ++ find_package(nlohmann_json REQUIRED) + + add_subdirectory(att-tool) + endif() +diff --git a/test/att-tool/CMakeLists.txt b/test/att-tool/CMakeLists.txt +index 208af16..acd161f 100644 +--- a/test/att-tool/CMakeLists.txt ++++ b/test/att-tool/CMakeLists.txt +@@ -1,7 +1,7 @@ + # + # ATT decoder wrapper library for use by the rocprofv3 tool + # +-find_library(COMGR REQUIRED NAMES amd_comgr HINTS /opt/rocm/lib) ++find_library(COMGR REQUIRED NAMES amd_comgr) + + set(ATT_TOOL_SOURCE_FILES + waitcnt/analysis.cpp +@@ -19,8 +19,11 @@ set(ATT_TOOL_SOURCE_FILES + + set(DECODER_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../../source/) + +-set(INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../../include/ ${DECODER_SRC} ${CMAKE_CURRENT_SOURCE_DIR} ${json_SOURCE_DIR}/include /opt/rocm/include) +-set(LINK_LIBS ${COMGR} pthread) ++set(INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../../include/ ${DECODER_SRC} ${CMAKE_CURRENT_SOURCE_DIR}) ++find_path(COMGR_INCLUDE_DIR REQUIRED NAMES amd_comgr.h PATH_SUFFIXES amd_comgr) ++find_path(HSA_INCLUDE_DIR REQUIRED NAMES hsa/amd_hsa_elf.h) ++set(LINK_LIBS ${COMGR} pthread nlohmann_json::nlohmann_json) ++list(APPEND INCLUDE_DIRS ${COMGR_INCLUDE_DIR} ${HSA_INCLUDE_DIR}) + + # Sources re-globbed only for sanitizer builds + file(GLOB ATT_DECODER_V3_FILES +diff --git a/test/att-tool/sdk/disassembly.hpp b/test/att-tool/sdk/disassembly.hpp +index c054143..ec3d6d2 100644 +--- a/test/att-tool/sdk/disassembly.hpp ++++ b/test/att-tool/sdk/disassembly.hpp +@@ -22,7 +22,7 @@ + + #pragma once + +-#include ++#include + #include + + #include +diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt +index 8adafc0..9501efe 100644 +--- a/test/unit/CMakeLists.txt ++++ b/test/unit/CMakeLists.txt +@@ -9,16 +9,7 @@ project(att-decoder-unit-tests LANGUAGES CXX) + set(CMAKE_CXX_STANDARD 17) + set(CMAKE_CXX_STANDARD_REQUIRED ON) + +-# Fetch GoogleTest +-include(FetchContent) +-FetchContent_Declare( +- googletest +- GIT_REPOSITORY https://github.com/google/googletest.git +- GIT_TAG v1.14.0) +-set(INSTALL_GTEST +- OFF +- CACHE BOOL "" FORCE) +-FetchContent_MakeAvailable(googletest) ++find_package(GTest REQUIRED) + + enable_testing() +