Unverified Commit ccc472da authored by Madoura's avatar Madoura
Browse files

rocmPackages.rocblas: fix hydra caching

parent 45548839
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -193,7 +193,7 @@ in rec {
  };

  rocblas = callPackage ./rocblas {
    inherit rocmUpdateScript rocm-cmake clr tensile;
    inherit rocblas rocmUpdateScript rocm-cmake clr tensile;
    inherit (llvm) openmp;
    stdenv = llvm.rocmClangStdenv;
  };
+160 −151
Original line number Diff line number Diff line
{ lib
{ rocblas
, lib
, stdenv
, fetchFromGitHub
, rocmUpdateScript
@@ -25,8 +26,52 @@
, tensileLibFormat ? "msgpack"
, gpuTargets ? [ "all" ]
}:

let
  rocblas = stdenv.mkDerivation (finalAttrs: {
  # NOTE: Update the default GPU targets on every update
  gfx80 = (rocblas.override {
    gpuTargets = [
      "gfx803"
    ];
  }).overrideAttrs { pname = "rocblas-tensile-gfx80"; };

  gfx90 = (rocblas.override {
    gpuTargets = [
      "gfx900"
      "gfx906:xnack-"
      "gfx908:xnack-"
      "gfx90a:xnack+"
      "gfx90a:xnack-"
    ];
  }).overrideAttrs { pname = "rocblas-tensile-gfx90"; };

  gfx94 = (rocblas.override {
    gpuTargets = [
      "gfx940"
      "gfx941"
      "gfx942"
    ];
  }).overrideAttrs { pname = "rocblas-tensile-gfx94"; };

  gfx10 = (rocblas.override {
    gpuTargets = [
      "gfx1010"
      "gfx1012"
      "gfx1030"
    ];
  }).overrideAttrs { pname = "rocblas-tensile-gfx10"; };

  gfx11 = (rocblas.override {
    gpuTargets = [
      "gfx1100"
      "gfx1101"
      "gfx1102"
    ];
  }).overrideAttrs { pname = "rocblas-tensile-gfx11"; };

  # Unfortunately, we have to do two full builds, otherwise we get overlapping _fallback.dat files
  fallbacks = rocblas.overrideAttrs { pname = "rocblas-tensile-fallbacks"; };
in stdenv.mkDerivation (finalAttrs: {
  pname = "rocblas";
  version = "5.7.0";

@@ -82,7 +127,7 @@ let
  ] ++ lib.optionals buildTensile [
    "-DVIRTUALENV_HOME_DIR=/build/source/tensile"
    "-DTensile_TEST_LOCAL_PATH=/build/source/tensile"
      "-DTensile_ROOT=/build/source/tensile/lib/python${python3.pythonVersion}/site-packages/Tensile"
    "-DTensile_ROOT=/build/source/tensile/${python3.sitePackages}/Tensile"
    "-DTensile_LOGIC=${tensileLogic}"
    "-DTensile_CODE_OBJECT_VERSION=${tensileCOVersion}"
    "-DTensile_SEPARATE_ARCHITECTURES=${if tensileSepArch then "ON" else "OFF"}"
@@ -96,8 +141,21 @@ let
    "-DCMAKE_CXX_FLAGS=-I${amd-blis}/include/blis"
  ];

  postPatch = lib.optionalString (finalAttrs.pname != "rocblas") ''
    # Return early and install tensile files manually
    substituteInPlace library/src/CMakeLists.txt \
      --replace "set_target_properties( TensileHost PROPERTIES OUTPUT_NAME" "return()''\nset_target_properties( TensileHost PROPERTIES OUTPUT_NAME"
  '' + lib.optionalString (buildTensile && finalAttrs.pname == "rocblas") ''
    # Link the prebuilt Tensile files
    mkdir -p build/Tensile/library

    for path in ${gfx80} ${gfx90} ${gfx94} ${gfx10} ${gfx11} ${fallbacks}; do
      ln -s $path/lib/rocblas/library/* build/Tensile/library
    done

    unlink build/Tensile/library/TensileManifest.txt
  '' + lib.optionalString buildTensile ''
    # Tensile REALLY wants to write to the nix directory if we include it normally
    postPatch = lib.optionalString buildTensile ''
    cp -a ${tensile} tensile
    chmod +w -R tensile

@@ -110,7 +168,17 @@ let
      --replace "virtualenv_install(\''${Tensile_TEST_LOCAL_PATH})" ""
  '';

    postInstall = lib.optionalString buildTests ''
  postInstall = lib.optionalString (finalAttrs.pname == "rocblas") ''
    ln -sf ${fallbacks}/lib/rocblas/library/TensileManifest.txt $out/lib/rocblas/library
  '' + lib.optionalString (finalAttrs.pname != "rocblas") ''
    mkdir -p $out/lib/rocblas/library
    rm -rf $out/share
  '' + lib.optionalString (finalAttrs.pname != "rocblas" && finalAttrs.pname != "rocblas-tensile-fallbacks") ''
    rm Tensile/library/{TensileManifest.txt,*_fallback.dat}
    mv Tensile/library/* $out/lib/rocblas/library
  '' + lib.optionalString (finalAttrs.pname == "rocblas-tensile-fallbacks") ''
    mv Tensile/library/{TensileManifest.txt,*_fallback.dat} $out/lib/rocblas/library
  '' + lib.optionalString buildTests ''
    mkdir -p $test/bin
    cp -a $out/bin/* $test/bin
    rm $test/bin/*-bench || true
@@ -138,63 +206,4 @@ let
    platforms = platforms.linux;
    broken = versions.minor finalAttrs.version != versions.minor stdenv.cc.version;
  };
  });

  gfx80 = runCommand "rocblas-gfx80" { preferLocalBuild = true; } ''
    mkdir -p $out/lib/rocblas/library
    cp -a ${rocblas}/lib/rocblas/library/*gfx80* $out/lib/rocblas/library
  '';

  gfx90 = runCommand "rocblas-gfx90" { preferLocalBuild = true; } ''
    mkdir -p $out/lib/rocblas/library
    cp -a ${rocblas}/lib/rocblas/library/*gfx90* $out/lib/rocblas/library
  '';

  gfx94 = runCommand "rocblas-gfx94" { preferLocalBuild = true; } ''
    mkdir -p $out/lib/rocblas/library
    cp -a ${rocblas}/lib/rocblas/library/*gfx94* $out/lib/rocblas/library
  '';

  gfx10 = runCommand "rocblas-gfx10" { preferLocalBuild = true; } ''
    mkdir -p $out/lib/rocblas/library
    cp -a ${rocblas}/lib/rocblas/library/*gfx10* $out/lib/rocblas/library
  '';

  gfx11 = runCommand "rocblas-gfx11" { preferLocalBuild = true; } ''
    mkdir -p $out/lib/rocblas/library
    cp -a ${rocblas}/lib/rocblas/library/*gfx11* $out/lib/rocblas/library
  '';
in stdenv.mkDerivation (finalAttrs: {
  inherit (rocblas) pname version src passthru meta;

  outputs = [
    "out"
  ] ++ lib.optionals buildTests [
    "test"
  ] ++ lib.optionals buildBenchmarks [
    "benchmark"
  ];

  dontUnpack = true;
  dontPatch = true;
  dontConfigure = true;
  dontBuild = true;

  installPhase = ''
    runHook preInstall

    mkdir -p $out
    cp -a --no-preserve=mode ${rocblas}/* $out
    ln -sf ${gfx80}/lib/rocblas/library/* $out/lib/rocblas/library
    ln -sf ${gfx90}/lib/rocblas/library/* $out/lib/rocblas/library
    ln -sf ${gfx94}/lib/rocblas/library/* $out/lib/rocblas/library
    ln -sf ${gfx10}/lib/rocblas/library/* $out/lib/rocblas/library
    ln -sf ${gfx11}/lib/rocblas/library/* $out/lib/rocblas/library
  '' + lib.optionalString buildTests ''
    cp -a ${rocblas.test} $test
  '' + lib.optionalString buildBenchmarks ''
    cp -a ${rocblas.benchmark} $benchmark
  '' + ''
    runHook postInstall
  '';
})