summaryrefslogtreecommitdiff
path: root/pkgs/development/rocm-modules/6/rdc/default.nix
blob: 2422ef71579c77298e476420595c34b3f05af12a (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
{
  lib,
  stdenv,
  fetchFromGitHub,
  rocmUpdateScript,
  cmake,
  rocm-smi,
  rocm-runtime,
  libcap,
  grpc,
  protobuf,
  openssl,
  doxygen,
  graphviz,
  texliveSmall,
  gtest,
  buildDocs ? true,
  buildTests ? false,
}:

let
  latex = lib.optionalAttrs buildDocs (
    texliveSmall.withPackages (
      ps: with ps; [
        changepage
        latexmk
        varwidth
        multirow
        hanging
        adjustbox
        collectbox
        stackengine
        enumitem
        alphalph
        wasysym
        sectsty
        tocloft
        newunicodechar
        etoc
        helvetic
        wasy
        courier
      ]
    )
  );
in
stdenv.mkDerivation (finalAttrs: {
  pname = "rdc";
  version = "6.0.2";

  outputs =
    [
      "out"
    ]
    ++ lib.optionals buildDocs [
      "doc"
    ]
    ++ lib.optionals buildTests [
      "test"
    ];

  src = fetchFromGitHub {
    owner = "ROCm";
    repo = "rdc";
    rev = "rocm-${finalAttrs.version}";
    hash = "sha256-QugcajxILmDeQiWG5uAUO41Wut45irg2Ynufgn1bmps=";
  };

  nativeBuildInputs =
    [
      cmake
      protobuf
    ]
    ++ lib.optionals buildDocs [
      doxygen
      graphviz
      latex
    ];

  buildInputs =
    [
      rocm-smi
      rocm-runtime
      libcap
      grpc
      openssl
    ]
    ++ lib.optionals buildTests [
      gtest
    ];

  cmakeFlags =
    [
      "-DCMAKE_VERBOSE_MAKEFILE=OFF"
      "-DRDC_INSTALL_PREFIX=${placeholder "out"}"
      "-DBUILD_ROCRTEST=ON"
      "-DRSMI_INC_DIR=${rocm-smi}/include"
      "-DRSMI_LIB_DIR=${rocm-smi}/lib"
      "-DGRPC_ROOT=${grpc}"
      # Manually define CMAKE_INSTALL_<DIR>
      # See: https://github.com/NixOS/nixpkgs/pull/197838
      "-DCMAKE_INSTALL_BINDIR=bin"
      "-DCMAKE_INSTALL_LIBDIR=lib"
      "-DCMAKE_INSTALL_INCLUDEDIR=include"
      "-DCMAKE_INSTALL_LIBEXECDIR=libexec"
      "-DCMAKE_INSTALL_DOCDIR=doc"
    ]
    ++ lib.optionals buildTests [
      "-DBUILD_TESTS=ON"
    ];

  postPatch = ''
    substituteInPlace CMakeLists.txt \
      --replace "file(STRINGS /etc/os-release LINUX_DISTRO LIMIT_COUNT 1 REGEX \"NAME=\")" "set(LINUX_DISTRO \"NixOS\")"
  '';

  postInstall =
    ''
      find $out/bin -executable -type f -exec \
        patchelf {} --shrink-rpath --allowed-rpath-prefixes "$NIX_STORE" \;
    ''
    + lib.optionalString buildTests ''
      mkdir -p $test
      mv $out/bin/rdctst_tests $test/bin
    '';

  passthru.updateScript = rocmUpdateScript {
    name = finalAttrs.pname;
    owner = finalAttrs.src.owner;
    repo = finalAttrs.src.repo;
  };

  meta = with lib; {
    description = "Simplifies administration and addresses infrastructure challenges in cluster and datacenter environments";
    homepage = "https://github.com/ROCm/rdc";
    license = with licenses; [ mit ];
    maintainers = teams.rocm.members;
    platforms = platforms.linux;
    # broken = versions.minor finalAttrs.version != versions.minor rocm-smi.version || versionAtLeast finalAttrs.version "7.0.0";
    broken = true; # Too many errors, unsure how to fix
  };
})