Unverified Commit 977784c0 authored by Madoura's avatar Madoura
Browse files

rocmPackages.rocprofiler: fix rocprof and rocprofv2

parent 06e0ef4a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -105,8 +105,8 @@ in rec {

  # Needs GCC
  rocprofiler = callPackage ./rocprofiler {
    inherit rocmUpdateScript clr rocm-core rocm-thunk rocm-device-libs roctracer rocdbgapi rocm-smi hsa-amd-aqlprofile-bin;
    inherit (llvm) clang;
    inherit rocmUpdateScript clr rocm-thunk roctracer rocm-smi hsa-amd-aqlprofile-bin;
  };

  # Needs GCC
+15 −0
Original line number Diff line number Diff line
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 8473a42..07ea873 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -112,10 +112,6 @@ function(generate_hsaco TARGET_ID INPUT_FILE OUTPUT_FILE)
         DEPENDS ${INPUT_FILE} clang
         COMMENT "Building ${OUTPUT_FILE}..."
         VERBATIM)
-    install(
-        FILES ${PROJECT_BINARY_DIR}/${OUTPUT_FILE}
-        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/tests-v1
-        COMPONENT tests)
     set(HSACO_TARGET_LIST
         ${HSACO_TARGET_LIST} ${PROJECT_BINARY_DIR}/${OUTPUT_FILE}
         PARENT_SCOPE)
+111 −0
Original line number Diff line number Diff line
diff --git a/bin/rocprofv2 b/bin/rocprofv2
index 92f7489..8839d4d 100755
--- a/bin/rocprofv2
+++ b/bin/rocprofv2
@@ -2,7 +2,8 @@
 set -eo pipefail
 CURRENT_DIR="$(dirname -- "$0")"
 ROCPROFV2_DIR=$(dirname -- $(realpath ${BASH_SOURCE[0]}))
-ROCM_DIR=$(dirname -- "$ROCPROFV2_DIR")
+ROCPROFILER_DIR=$(dirname -- "$ROCPROFV2_DIR")
+ROCM_DIR=@rocmtoolkit_merged@
 PLUGIN_LIST=("ctf" "perfetto" "file" "att")
 RUN_FROM_BUILD=0
 if [[ $ROCPROFV2_DIR == *"/build"* ]]; then
@@ -10,7 +11,7 @@ if [[ $ROCPROFV2_DIR == *"/build"* ]]; then
   ROCM_DIR=$ROCPROFV2_DIR
 fi
 
-export ROCPROFILER_METRICS_PATH=$ROCM_DIR/libexec/rocprofiler/counters/derived_counters.xml
+export ROCPROFILER_METRICS_PATH=$ROCPROFILER_DIR/libexec/rocprofiler/counters/derived_counters.xml
 export LD_LIBRARY_PATH=$ROCM_DIR/lib:$LD_LIBRARY_PATH
 
 usage() {
@@ -70,8 +71,8 @@ while [ 1 ]; do
       exit 1
     fi
   elif [[ "$1" = "--list-counters" ]]; then
-    export LD_PRELOAD=$LD_PRELOAD:$ROCM_DIR/lib/rocprofiler/librocprofiler_tool.so
-    eval $ROCM_DIR/libexec/rocprofiler/ctrl
+    export LD_PRELOAD=$LD_PRELOAD:$ROCPROFILER_DIR/lib/rocprofiler/librocprofiler_tool.so
+    eval $ROCPROFILER_DIR/libexec/rocprofiler/ctrl
     exit 1
   elif [[ "$1" = "-i" || "$1" = "--input" ]]; then
     if [ $2 ] && [ -n $2 ] && [ -r $2 ]; then
@@ -171,7 +172,7 @@ while [ 1 ]; do
       if [ $RUN_FROM_BUILD == 1 ]; then
         ATT_PATH=$ROCM_DIR/plugin/att/att/att.py
       else
-        ATT_PATH=$ROCM_DIR/libexec/rocprofiler/att/att.py
+        ATT_PATH=$ROCPROFILER_DIR/libexec/rocprofiler/att/att.py
         export ROCPROFV2_ATT_LIB_PATH=$ROCM_DIR/lib/hsa-amd-aqlprofile/librocprofv2_att.so
       fi
       ATT_ARGV=$3
@@ -236,13 +237,13 @@ if [ -n "$PMC_LINES" ] && [ ! -n "$ATT_ARGV" ]; then
       export OUTPUT_PATH=$FINAL_PATH
     fi
     let COUNTER=COUNTER+1
-    LD_PRELOAD=$LD_PRELOAD:$ROCM_DIR/lib/rocprofiler/librocprofiler_tool.so $*
+    LD_PRELOAD=$LD_PRELOAD:$ROCPROFILER_DIR/lib/rocprofiler/librocprofiler_tool.so $*
     if [ -n "$OUTPUT_PATH" ]; then
       echo -e "\nThe output path for the following counters: $OUTPUT_PATH"
     fi
   done
 else
-  LD_PRELOAD=$LD_PRELOAD:$ROCM_DIR/lib/rocprofiler/librocprofiler_tool.so $*
+  LD_PRELOAD=$LD_PRELOAD:$ROCPROFILER_DIR/lib/rocprofiler/librocprofiler_tool.so $*
 fi
 
 get_pmc_results_txt_path() {
diff --git a/bin/rpl_run.sh b/bin/rpl_run.sh
index c1a3daa..bc868a5 100755
--- a/bin/rpl_run.sh
+++ b/bin/rpl_run.sh
@@ -24,16 +24,17 @@
 
 time_stamp=`date +%y%m%d_%H%M%S`
 BIN_DIR=$(dirname $(realpath ${BASH_SOURCE[0]}))
-ROOT_DIR=$(dirname $BIN_DIR)
+ROCPROFILER_DIR=$(dirname $BIN_DIR)
+ROOT_DIR=@rocmtoolkit_merged@
 RUN_DIR=`pwd`
 TMP_DIR="/tmp"
 DATA_DIR="rpl_data_${time_stamp}_$$"
 
-RPL_PATH=$ROOT_DIR/lib
+RPL_PATH=$ROCPROFILER_DIR/lib
 TLIB_PATH=$RPL_PATH/rocprofiler
 TTLIB_PATH=$ROOT_DIR/lib/roctracer
 ROCM_LIB_PATH=$ROOT_DIR/lib
-PROF_BIN_DIR=$ROOT_DIR/libexec/rocprofiler
+PROF_BIN_DIR=$ROCPROFILER_DIR/libexec/rocprofiler
 
 if [ -z "$ROCP_PYTHON_VERSION" ] ; then
   ROCP_PYTHON_VERSION=python3
@@ -73,7 +74,7 @@ export ROCP_METRICS=$TLIB_PATH/metrics.xml
 # Disable AQL-profile read API
 export AQLPROFILE_READ_API=0
 # ROC Profiler package path
-export ROCP_PACKAGE_DIR=$ROOT_DIR
+export ROCP_PACKAGE_DIR=$ROCPROFILER_DIR
 # enabled SPM KFD mode
 export ROCP_SPM_KFD_MODE=1
 
@@ -350,7 +351,7 @@ convert_time_val() {
 
 ################################################################################################
 # main
-echo "RPL: on '$time_stamp' from '$ROOT_DIR' in '$RUN_DIR'"
+echo "RPL: on '$time_stamp' from '$ROCPROFILER_DIR' in '$RUN_DIR'"
 # Parsing arguments
 if [ -z "$1" ] ; then
   usage
@@ -557,7 +558,7 @@ elif [ "$input_type" = "txt" -o "$input_type" = "none" ] ; then
   else
     echo "<metric></metric>" > $RES_DIR/input.xml
   fi
-  input_list=`/bin/ls $RES_DIR/input*.xml`
+  input_list=`ls $RES_DIR/input*.xml`
   export ROCPROFILER_SESS=$RES_DIR
 else
   fatal "Bad input file type '$INPUT_FILE'"
+54 −26
Original line number Diff line number Diff line
@@ -2,11 +2,16 @@
, stdenv
, fetchFromGitHub
, rocmUpdateScript
, symlinkJoin
, substituteAll
, cmake
, clang
, clr
, rocm-core
, rocm-thunk
, rocm-device-libs
, roctracer
, rocdbgapi
, rocm-smi
, hsa-amd-aqlprofile-bin
, numactl
@@ -14,24 +19,32 @@
, libxml2
, elfutils
, mpi
, systemd
, gtest
, python3Packages
, gpuTargets ? [
  "gfx900"
  "gfx906"
  "gfx908"
  "gfx90a"
  "gfx940"
  "gfx941"
  "gfx942"
  "gfx1030"
  "gfx1100"
  "gfx1101"
  "gfx1102"
]
, gpuTargets ? clr.gpuTargets
}:

stdenv.mkDerivation (finalAttrs: {
let
  rocmtoolkit-merged = symlinkJoin {
    name = "rocmtoolkit-merged";

    paths = [
      rocm-core
      rocm-thunk
      rocm-device-libs
      roctracer
      rocdbgapi
      rocm-smi
      hsa-amd-aqlprofile-bin
      clr
    ];

    postBuild = ''
      rm -rf $out/nix-support
    '';
  };
in stdenv.mkDerivation (finalAttrs: {
  pname = "rocprofiler";
  version = "5.7.1";

@@ -42,6 +55,17 @@ stdenv.mkDerivation (finalAttrs: {
    hash = "sha256-1s/7C9y+73ADLF/17Vepw0pZNVtYnKoP24GdwKc9X2Y=";
  };

  patches = [
    # These just simply won't build
    ./0000-dont-install-tests-hsaco.patch

    # Fix bad paths
    (substituteAll {
      src = ./0001-fix-shell-scripts.patch;
      rocmtoolkit_merged = rocmtoolkit-merged;
    })
  ];

  nativeBuildInputs = [
    cmake
    clang
@@ -53,20 +77,19 @@ stdenv.mkDerivation (finalAttrs: {
  ];

  buildInputs = [
    rocm-thunk
    rocm-smi
    hsa-amd-aqlprofile-bin
    numactl
    libpciaccess
    libxml2
    elfutils
    mpi
    systemd
    gtest
  ];

  propagatedBuildInputs = [ rocmtoolkit-merged ];

  cmakeFlags = [
    "-DCMAKE_MODULE_PATH=${clr}/lib/cmake/hip"
    "-DPROF_API_HEADER_PATH=${roctracer.src}/inc/ext"
    "-DHIP_ROOT_DIR=${clr}"
    "-DGPU_TARGETS=${lib.concatStringsSep ";" gpuTargets}"
    # Manually define CMAKE_INSTALL_<DIR>
@@ -79,16 +102,21 @@ stdenv.mkDerivation (finalAttrs: {
  postPatch = ''
    patchShebangs .

    # Cannot find ROCm device library, pointless
    substituteInPlace CMakeLists.txt \
      --replace "add_subdirectory(tests-v2)" "" \
      --replace "add_subdirectory(samples)" ""
    substituteInPlace tests-v2/featuretests/profiler/CMakeLists.txt \
      --replace "--build-id=sha1" "--build-id=sha1 --rocm-path=${clr} --rocm-device-lib-path=${rocm-device-libs}/amdgcn/bitcode"

    substituteInPlace test/CMakeLists.txt \
      --replace "\''${ROCM_ROOT_DIR}/amdgcn/bitcode" "${rocm-device-libs}/amdgcn/bitcode"
  '';

  postBuild = ''
    # HSACO aren't being built for some reason
    substituteInPlace test/cmake_install.cmake \
      --replace "file(INSTALL DESTINATION \"\''${CMAKE_INSTALL_PREFIX}/share/rocprofiler/tests-v1\" TYPE FILE FILES \"" "message(\""
  postInstall = ''
    # Why do these not already have the executable bit set?
    chmod +x $out/lib/rocprofiler/librocprof-tool.so
    chmod +x $out/share/rocprofiler/tests-v1/test/ocl/SimpleConvolution

    # Why do these have the executable bit set?
    chmod -x $out/libexec/rocprofiler/counters/basic_counters.xml
    chmod -x $out/libexec/rocprofiler/counters/derived_counters.xml
  '';

  passthru.updateScript = rocmUpdateScript {