nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 config,
4 callPackage,
5 newScope,
6 symlinkJoin,
7 fetchFromGitHub,
8 boost179,
9 opencv,
10 python3Packages,
11 openmpi,
12 stdenv,
13 pkgs,
14}:
15
16let
17 outer = lib.makeScope newScope (
18 self:
19 let
20 inherit (self) llvm;
21 origStdenv = stdenv;
22 pyPackages = python3Packages;
23 openmpi-orig = openmpi;
24 rocmClangStdenv = llvm.rocmClangStdenv;
25 in
26 {
27 inherit rocmClangStdenv;
28 stdenv = rocmClangStdenv;
29
30 rocmUpdateScript = self.callPackage ./update.nix { };
31
32 ## ROCm ##
33 llvm = lib.recurseIntoAttrs (
34 callPackage ./llvm/default.nix {
35 # rocm-device-libs is used for .src only
36 # otherwise would cause infinite recursion
37 inherit (self) rocm-device-libs;
38 }
39 );
40 inherit (self.llvm) rocm-toolchain clang openmp;
41
42 rocm-core = self.callPackage ./rocm-core { stdenv = origStdenv; };
43
44 rocm-cmake = self.callPackage ./rocm-cmake { stdenv = origStdenv; };
45
46 rocm-device-libs = self.callPackage ./rocm-device-libs { };
47
48 rocm-runtime = self.callPackage ./rocm-runtime {
49 stdenv = origStdenv;
50 };
51
52 rocm-comgr = self.callPackage ./rocm-comgr { };
53
54 rocminfo = self.callPackage ./rocminfo { stdenv = origStdenv; };
55
56 amdsmi = pyPackages.callPackage ./amdsmi {
57 inherit (self) rocmUpdateScript;
58 };
59
60 rocm-smi = pyPackages.callPackage ./rocm-smi {
61 inherit (self) rocmUpdateScript;
62 };
63
64 aqlprofile = self.callPackage ./aqlprofile { };
65
66 rdc = self.callPackage ./rdc { };
67
68 rocm-docs-core = python3Packages.callPackage ./rocm-docs-core { };
69
70 hip-common = self.callPackage ./hip-common { };
71
72 hipcc = self.callPackage ./hipcc { stdenv = origStdenv; };
73
74 # Replaces hip, opencl-runtime, and rocclr
75 clr = self.callPackage ./clr { };
76
77 aotriton = self.callPackage ./aotriton { stdenv = origStdenv; };
78
79 hipify = self.callPackage ./hipify {
80 stdenv = origStdenv;
81 };
82
83 # hsakmt was merged into rocm-runtime
84 hsakmt = self.rocm-runtime;
85
86 rocprofiler = self.callPackage ./rocprofiler {
87 inherit (llvm) clang;
88 };
89 rocprofiler-register = self.callPackage ./rocprofiler-register {
90 inherit (llvm) clang;
91 };
92
93 rocprof-trace-decoder = self.callPackage ./rocprof-trace-decoder { };
94
95 roctracer = self.callPackage ./roctracer { };
96
97 rocgdb = self.callPackage ./rocgdb { };
98
99 rocdbgapi = self.callPackage ./rocdbgapi { };
100
101 rocr-debug-agent = self.callPackage ./rocr-debug-agent { };
102
103 rocprim = self.callPackage ./rocprim { };
104
105 rocsparse = self.callPackage ./rocsparse { };
106
107 rocthrust = self.callPackage ./rocthrust { };
108
109 rocrand = self.callPackage ./rocrand { };
110
111 hiprand = self.callPackage ./hiprand { };
112
113 rocfft = self.callPackage ./rocfft { };
114
115 mscclpp = self.callPackage ./mscclpp { };
116
117 rccl = self.callPackage ./rccl { };
118
119 hipcub = self.callPackage ./hipcub { };
120
121 hipsparse = self.callPackage ./hipsparse { };
122
123 hipfort = self.callPackage ./hipfort { };
124
125 hipfft = self.callPackage ./hipfft { };
126
127 hiprt = self.callPackage ./hiprt { };
128
129 tensile = pyPackages.callPackage ./tensile {
130 inherit (self)
131 rocmUpdateScript
132 clr
133 ;
134 };
135
136 rocblas = self.callPackage ./rocblas { };
137
138 rocsolver = self.callPackage ./rocsolver { };
139
140 rocwmma = self.callPackage ./rocwmma { };
141
142 rocalution = self.callPackage ./rocalution { };
143
144 rocmlir-rock = self.callPackage ./rocmlir {
145 buildRockCompiler = true;
146 };
147 rocmlir = self.rocmlir-rock;
148
149 hipsolver = self.callPackage ./hipsolver { };
150
151 hipblas-common = self.callPackage ./hipblas-common { };
152
153 hipblas = self.callPackage ./hipblas { };
154
155 hipblaslt = self.callPackage ./hipblaslt { };
156
157 # hipTensor - Only supports GFX9
158
159 composable_kernel_base = self.callPackage ./composable_kernel/base.nix { };
160 composable_kernel = self.callPackage ./composable_kernel { };
161
162 ck4inductor = pyPackages.callPackage ./composable_kernel/ck4inductor.nix {
163 inherit (self) composable_kernel rocm-toolchain;
164 };
165
166 half = self.callPackage ./half { };
167
168 miopen = self.callPackage ./miopen {
169 boost = boost179.override { enableStatic = true; };
170 };
171
172 miopen-hip = self.miopen;
173
174 migraphx = self.callPackage ./migraphx { stdenv = origStdenv; };
175
176 rpp = self.callPackage ./rpp { };
177
178 rpp-hip = self.rpp.override { useCPU = false; };
179
180 rpp-cpu = self.rpp.override { useCPU = true; };
181
182 mivisionx = self.callPackage ./mivisionx {
183 stdenv = origStdenv;
184 opencv = opencv.override { enablePython = true; };
185 };
186
187 mivisionx-hip = self.mivisionx.override {
188 rpp = self.rpp-hip;
189 useOpenCL = false;
190 useCPU = false;
191 };
192
193 mivisionx-cpu = self.mivisionx.override {
194 rpp = self.rpp-cpu;
195 useOpenCL = false;
196 useCPU = true;
197 };
198
199 # Even if config.rocmSupport is false we need rocmSupport true
200 # version of ucc/ucx in openmpi in this package set
201 openmpi = openmpi-orig.override (
202 prev:
203 let
204 ucx = prev.ucx.override {
205 enableCuda = false;
206 enableRocm = true;
207 rocmPackages = self;
208 };
209 in
210 {
211 inherit ucx;
212 ucc = prev.ucc.override {
213 enableCuda = false;
214 inherit ucx;
215 };
216 }
217 );
218 mpi = self.openmpi;
219
220 meta = {
221 # eval all pkgsRocm release attrs with
222 # nix-eval-jobs --force-recurse pkgs/top-level/release.nix -I . --select "p: p.pkgsRocm" --no-instantiate
223 release-packagePlatforms =
224 let
225 platforms = [
226 "x86_64-linux"
227 ];
228 attrPaths = (builtins.fromJSON (builtins.readFile ./release-attrPaths.json)).attrPaths;
229 in
230 lib.foldl' (
231 acc: path:
232 if lib.hasAttrByPath (lib.splitString "." path) pkgs then
233 lib.recursiveUpdate acc (lib.setAttrByPath (lib.splitString "." path) platforms)
234 else
235 acc
236 ) { } attrPaths;
237 };
238
239 rocm-bandwidth-test = self.callPackage ./rocm-bandwidth-test {
240 rocmPackages = self;
241 };
242
243 rocm-tests = self.callPackage ./rocm-tests {
244 rocmPackages = self;
245 };
246 }
247 // lib.optionalAttrs config.allowAliases {
248 rpp-opencl = throw ''
249 'rpp-opencl' has been removed as it has been broken for a year and has no consuming packages.
250 Use 'rpp' or 'rpp-cpu' instead.
251 ''; # Added 2026-03-08
252
253 rocmPath = throw ''
254 'rocm-path' has been removed. If a ROCM_PATH value is required in nixpkgs please
255 construct one with the minimal set of required deps.
256 For convenience use outside of nixpkgs consider one of the entries in
257 'rocmPackages.meta'.
258 ''; # Added 2025-09-30
259
260 rocm-merged-llvm = throw ''
261 'rocm-merged-llvm' has been removed.
262 For 'libllvm' or 'libclang' use 'rocmPackages.llvm.libllvm/clang'.
263 For a ROCm compiler toolchain use 'rocmPackages.rocm-toolchain'.
264 If a package uses '$<TARGET_FILE:clang>' in CMake from 'libclang'
265 it may be necessary to convince it to use 'rocm-toolchain' instead.
266 'rocm-merged-llvm' avoided this at the cost of significantly bloating closure
267 size.
268 ''; # Added 2025-09-30
269
270 hsa-amd-aqlprofile-bin = lib.warn ''
271 'hsa-amd-aqlprofile-bin' has been replaced by 'aqlprofile'.
272 '' self.aqlprofile; # Added 2025-08-27
273
274 triton = throw ''
275 'rocmPackages.triton' has been removed. Please use python3Packages.triton
276 ''; # Added 2025-08-24
277
278 rocm-thunk = throw ''
279 'rocm-thunk' has been removed. It's now part of the ROCm runtime.
280 ''; # Added 2025-3-16
281
282 clang-ocl = throw ''
283 'clang-ocl' has been deprecated upstream. Use ROCm's clang directly.
284 ''; # Added 2025-3-16
285
286 miopengemm = throw ''
287 'miopengemm' has been deprecated.
288 ''; # Added 2024-3-3
289
290 miopen-opencl = throw ''
291 'miopen-opencl' has been deprecated.
292 ''; # Added 2024-3-3
293
294 mivisionx-opencl = throw ''
295 'mivisionx-opencl' has been deprecated.
296 Other versions of mivisionx are still available.
297 ''; # Added 2024-3-24
298 }
299 );
300 scopeForArches =
301 arches:
302 outer.overrideScope (
303 _final: prev: {
304 clr = prev.clr.override {
305 localGpuTargets = arches;
306 };
307 }
308 );
309in
310outer
311// builtins.listToAttrs (
312 map (arch: {
313 name = arch;
314 value = scopeForArches [ arch ];
315 }) outer.clr.gpuTargets
316)
317// {
318 gfx9 = scopeForArches [
319 "gfx906"
320 "gfx908"
321 "gfx90a"
322 "gfx942"
323 ];
324 gfx10 = scopeForArches [
325 "gfx1010"
326 "gfx1030"
327 ];
328 gfx11 = scopeForArches [
329 "gfx1100"
330 "gfx1101"
331 "gfx1102"
332 "gfx1150"
333 "gfx1151"
334 ];
335 gfx12 = scopeForArches [
336 "gfx1200"
337 "gfx1201"
338 ];
339}