Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at flake-libs 504 lines 13 kB view raw
1{ 2 lib, 3 config, 4 callPackage, 5 newScope, 6 recurseIntoAttrs, 7 symlinkJoin, 8 fetchFromGitHub, 9 ffmpeg_4, 10 boost179, 11 opencv, 12 libjpeg_turbo, 13 python3Packages, 14 triton-llvm, 15 openmpi, 16 rocmGpuArches ? [ ], 17}: 18 19let 20 outer = lib.makeScope newScope ( 21 self: 22 let 23 inherit (self) llvm; 24 pyPackages = python3Packages; 25 openmpi-orig = openmpi; 26 in 27 { 28 inherit rocmGpuArches; 29 buildTests = false; 30 buildBenchmarks = false; 31 stdenv = llvm.rocmClangStdenv; 32 33 rocmPath = self.callPackage ./rocm-path { }; 34 rocmUpdateScript = self.callPackage ./update.nix { }; 35 36 ## ROCm ## 37 llvm = recurseIntoAttrs ( 38 callPackage ./llvm/default.nix { 39 inherit (self) rocm-device-libs rocm-runtime; 40 } 41 ); 42 inherit (self.llvm) rocm-merged-llvm clang openmp; 43 44 rocm-core = self.callPackage ./rocm-core { }; 45 amdsmi = pyPackages.callPackage ./amdsmi { 46 inherit (self) rocmUpdateScript; 47 }; 48 49 rocm-cmake = self.callPackage ./rocm-cmake { }; 50 51 rocm-smi = pyPackages.callPackage ./rocm-smi { 52 inherit (self) rocmUpdateScript; 53 }; 54 55 rocm-device-libs = self.callPackage ./rocm-device-libs { 56 inherit (llvm) rocm-merged-llvm; 57 }; 58 59 rocm-runtime = self.callPackage ./rocm-runtime { 60 inherit (llvm) rocm-merged-llvm; 61 }; 62 63 rocm-comgr = self.callPackage ./rocm-comgr { 64 inherit (llvm) rocm-merged-llvm; 65 }; 66 67 rocminfo = self.callPackage ./rocminfo { }; 68 69 # Unfree 70 hsa-amd-aqlprofile-bin = self.callPackage ./hsa-amd-aqlprofile-bin { }; 71 72 rdc = self.callPackage ./rdc { }; 73 74 rocm-docs-core = python3Packages.callPackage ./rocm-docs-core { }; 75 76 hip-common = self.callPackage ./hip-common { }; 77 78 # Eventually will be in the LLVM repo 79 hipcc = self.callPackage ./hipcc { 80 inherit (llvm) rocm-merged-llvm; 81 }; 82 83 # Replaces hip, opencl-runtime, and rocclr 84 clr = self.callPackage ./clr { }; 85 86 aotriton = self.callPackage ./aotriton { }; 87 88 hipify = self.callPackage ./hipify { 89 inherit (llvm) 90 clang 91 rocm-merged-llvm 92 ; 93 }; 94 95 # hsakmt was merged into rocm-runtime 96 hsakmt = self.rocm-runtime; 97 98 rocprofiler = self.callPackage ./rocprofiler { 99 inherit (llvm) clang; 100 }; 101 rocprofiler-register = self.callPackage ./rocprofiler-register { 102 inherit (llvm) clang; 103 }; 104 105 # Needs GCC 106 roctracer = self.callPackage ./roctracer { }; 107 108 rocgdb = self.callPackage ./rocgdb { }; 109 110 rocdbgapi = self.callPackage ./rocdbgapi { }; 111 112 rocr-debug-agent = self.callPackage ./rocr-debug-agent { }; 113 114 rocprim = self.callPackage ./rocprim { }; 115 116 rocsparse = self.callPackage ./rocsparse { }; 117 118 rocthrust = self.callPackage ./rocthrust { }; 119 120 rocrand = self.callPackage ./rocrand { }; 121 122 hiprand = self.callPackage ./hiprand { }; 123 124 rocfft = self.callPackage ./rocfft { }; 125 126 mscclpp = self.callPackage ./mscclpp { }; 127 128 rccl = self.callPackage ./rccl { }; 129 130 # RCCL with sanitizers and tests 131 # Can't have with sanitizer build as dep of other packages without 132 # runtime crashes due to ASAN not loading first 133 rccl-tests = self.callPackage ./rccl { 134 buildTests = true; 135 }; 136 137 hipcub = self.callPackage ./hipcub { }; 138 139 hipsparse = self.callPackage ./hipsparse { }; 140 141 hipfort = self.callPackage ./hipfort { }; 142 143 hipfft = self.callPackage ./hipfft { }; 144 145 tensile = pyPackages.callPackage ./tensile { 146 inherit (self) 147 rocmUpdateScript 148 clr 149 ; 150 }; 151 152 rocblas = self.callPackage ./rocblas { 153 buildTests = true; 154 buildBenchmarks = true; 155 }; 156 157 rocsolver = self.callPackage ./rocsolver { }; 158 159 rocwmma = self.callPackage ./rocwmma { }; 160 161 rocalution = self.callPackage ./rocalution { }; 162 163 rocmlir-rock = self.callPackage ./rocmlir { 164 buildRockCompiler = true; 165 }; 166 rocmlir = self.rocmlir-rock; 167 168 hipsolver = self.callPackage ./hipsolver { }; 169 170 hipblas-common = self.callPackage ./hipblas-common { }; 171 172 hipblas = self.callPackage ./hipblas { }; 173 174 hipblaslt = self.callPackage ./hipblaslt { }; 175 176 # hipTensor - Only supports GFX9 177 178 composable_kernel_base = self.callPackage ./composable_kernel/base.nix { }; 179 composable_kernel = self.callPackage ./composable_kernel { }; 180 181 ck4inductor = pyPackages.callPackage ./composable_kernel/ck4inductor.nix { 182 inherit (self) composable_kernel; 183 inherit (llvm) rocm-merged-llvm; 184 }; 185 186 half = self.callPackage ./half { }; 187 188 miopen = self.callPackage ./miopen { 189 boost = boost179.override { enableStatic = true; }; 190 }; 191 192 miopen-hip = self.miopen; 193 194 migraphx = self.callPackage ./migraphx { }; 195 196 rpp = self.callPackage ./rpp { }; 197 198 rpp-hip = self.rpp.override { 199 useOpenCL = false; 200 useCPU = false; 201 }; 202 203 rpp-opencl = self.rpp.override { 204 useOpenCL = true; 205 useCPU = false; 206 }; 207 208 rpp-cpu = self.rpp.override { 209 useOpenCL = false; 210 useCPU = true; 211 }; 212 213 mivisionx = self.callPackage ./mivisionx { 214 opencv = opencv.override { enablePython = true; }; 215 # TODO: Remove this pin in ROCm 6.4+ 216 # FFMPEG support was improved in https://github.com/ROCm/MIVisionX/pull/1460 217 ffmpeg = ffmpeg_4; 218 # Unfortunately, rocAL needs a custom libjpeg-turbo until further notice 219 # See: https://github.com/ROCm/MIVisionX/issues/1051 220 libjpeg_turbo = libjpeg_turbo.overrideAttrs { 221 version = "2.0.6.1"; 222 src = fetchFromGitHub { 223 owner = "rrawther"; 224 repo = "libjpeg-turbo"; 225 rev = "640d7ee1917fcd3b6a5271aa6cf4576bccc7c5fb"; 226 sha256 = "sha256-T52whJ7nZi8jerJaZtYInC2YDN0QM+9tUDqiNr6IsNY="; 227 }; 228 # overwrite all patches, since patches for newer version do not apply 229 patches = [ ./0001-Compile-transupp.c-as-part-of-the-library.patch ]; 230 }; 231 }; 232 233 mivisionx-hip = self.mivisionx.override { 234 rpp = self.rpp-hip; 235 useOpenCL = false; 236 useCPU = false; 237 }; 238 239 mivisionx-cpu = self.mivisionx.override { 240 rpp = self.rpp-cpu; 241 useOpenCL = false; 242 useCPU = true; 243 }; 244 245 # Even if config.rocmSupport is false we need rocmSupport true 246 # version of ucc/ucx in openmpi in this package set 247 openmpi = openmpi-orig.override ( 248 prev: 249 let 250 ucx = prev.ucx.override { 251 enableCuda = false; 252 enableRocm = true; 253 }; 254 in 255 { 256 inherit ucx; 257 ucc = prev.ucc.override { 258 enableCuda = false; 259 inherit ucx; 260 }; 261 } 262 ); 263 mpi = self.openmpi; 264 265 triton-llvm = triton-llvm.overrideAttrs { 266 src = fetchFromGitHub { 267 owner = "llvm"; 268 repo = "llvm-project"; 269 # make sure this matches triton llvm rel branch hash for now 270 # https://github.com/triton-lang/triton/blob/release/3.2.x/cmake/llvm-hash.txt 271 rev = "86b69c31642e98f8357df62c09d118ad1da4e16a"; 272 hash = "sha256-W/mQwaLGx6/rIBjdzUTIbWrvGjdh7m4s15f70fQ1/hE="; 273 }; 274 pname = "triton-llvm-rocm"; 275 patches = [ ]; # FIXME: https://github.com/llvm/llvm-project//commit/84837e3cc1cf17ed71580e3ea38299ed2bfaa5f6.patch doesn't apply, may need to rebase 276 }; 277 278 triton = pyPackages.callPackage ./triton { rocmPackages = self; }; 279 280 ## Meta ## 281 # Emulate common ROCm meta layout 282 # These are mainly for users. I strongly suggest NOT using these in nixpkgs derivations 283 # Don't put these into `propagatedBuildInputs` unless you want PATH/PYTHONPATH issues! 284 # See: https://rocm.docs.amd.com/en/docs-5.7.1/_images/image.004.png 285 # See: https://rocm.docs.amd.com/en/docs-5.7.1/deploy/linux/os-native/package_manager_integration.html 286 meta = with self; rec { 287 rocm-developer-tools = symlinkJoin { 288 name = "rocm-developer-tools-meta"; 289 paths = [ 290 hsa-amd-aqlprofile-bin 291 rocm-core 292 rocr-debug-agent 293 roctracer 294 rocdbgapi 295 rocprofiler 296 rocgdb 297 rocm-language-runtime 298 ]; 299 }; 300 rocm-ml-sdk = symlinkJoin { 301 name = "rocm-ml-sdk-meta"; 302 paths = [ 303 rocm-core 304 miopen-hip 305 rocm-hip-sdk 306 rocm-ml-libraries 307 ]; 308 }; 309 rocm-ml-libraries = symlinkJoin { 310 name = "rocm-ml-libraries-meta"; 311 paths = [ 312 llvm.clang 313 llvm.mlir 314 llvm.openmp 315 rocm-core 316 miopen-hip 317 rocm-hip-libraries 318 ]; 319 }; 320 rocm-hip-sdk = symlinkJoin { 321 name = "rocm-hip-sdk-meta"; 322 paths = [ 323 rocprim 324 rocalution 325 hipfft 326 rocm-core 327 hipcub 328 hipblas 329 hipblaslt 330 rocrand 331 rocfft 332 rocsparse 333 rccl 334 rocthrust 335 rocblas 336 hipsparse 337 hipfort 338 rocwmma 339 hipsolver 340 rocsolver 341 rocm-hip-libraries 342 rocm-hip-runtime-devel 343 ]; 344 }; 345 rocm-hip-libraries = symlinkJoin { 346 name = "rocm-hip-libraries-meta"; 347 paths = [ 348 rocblas 349 hipfort 350 rocm-core 351 rocsolver 352 rocalution 353 rocrand 354 hipblas 355 hipblaslt 356 rocfft 357 hipfft 358 rccl 359 rocsparse 360 hipsparse 361 hipsolver 362 rocm-hip-runtime 363 ]; 364 }; 365 rocm-openmp-sdk = symlinkJoin { 366 name = "rocm-openmp-sdk-meta"; 367 paths = [ 368 rocm-core 369 llvm.clang 370 llvm.mlir 371 llvm.openmp # openmp-extras-devel (https://github.com/ROCm/aomp) 372 rocm-language-runtime 373 ]; 374 }; 375 rocm-opencl-sdk = symlinkJoin { 376 name = "rocm-opencl-sdk-meta"; 377 paths = [ 378 rocm-core 379 rocm-runtime 380 clr 381 clr.icd 382 rocm-opencl-runtime 383 ]; 384 }; 385 rocm-opencl-runtime = symlinkJoin { 386 name = "rocm-opencl-runtime-meta"; 387 paths = [ 388 rocm-core 389 clr 390 clr.icd 391 rocm-language-runtime 392 ]; 393 }; 394 rocm-hip-runtime-devel = symlinkJoin { 395 name = "rocm-hip-runtime-devel-meta"; 396 paths = [ 397 clr 398 rocm-core 399 hipify 400 rocm-cmake 401 llvm.clang 402 llvm.mlir 403 llvm.openmp 404 rocm-runtime 405 rocm-hip-runtime 406 ]; 407 }; 408 rocm-hip-runtime = symlinkJoin { 409 name = "rocm-hip-runtime-meta"; 410 paths = [ 411 rocm-core 412 rocminfo 413 clr 414 rocm-language-runtime 415 ]; 416 }; 417 rocm-language-runtime = symlinkJoin { 418 name = "rocm-language-runtime-meta"; 419 paths = [ 420 rocm-runtime 421 rocm-core 422 rocm-comgr 423 llvm.openmp # openmp-extras-runtime (https://github.com/ROCm/aomp) 424 ]; 425 }; 426 rocm-all = symlinkJoin { 427 name = "rocm-all-meta"; 428 paths = [ 429 rocm-developer-tools 430 rocm-ml-sdk 431 rocm-ml-libraries 432 rocm-hip-sdk 433 rocm-hip-libraries 434 rocm-openmp-sdk 435 rocm-opencl-sdk 436 rocm-opencl-runtime 437 rocm-hip-runtime-devel 438 rocm-hip-runtime 439 rocm-language-runtime 440 ]; 441 }; 442 }; 443 444 rocm-tests = self.callPackage ./rocm-tests { 445 rocmPackages = self; 446 }; 447 } 448 // lib.optionalAttrs config.allowAliases { 449 rocm-thunk = throw '' 450 'rocm-thunk' has been removed. It's now part of the ROCm runtime. 451 ''; # Added 2025-3-16 452 453 clang-ocl = throw '' 454 'clang-ocl' has been deprecated upstream. Use ROCm's clang directly. 455 ''; # Added 2025-3-16 456 457 miopengemm = throw '' 458 'miopengemm' has been deprecated. 459 ''; # Added 2024-3-3 460 461 miopen-opencl = throw '' 462 'miopen-opencl' has been deprecated. 463 ''; # Added 2024-3-3 464 465 mivisionx-opencl = throw '' 466 'mivisionx-opencl' has been deprecated. 467 Other versions of mivisionx are still available. 468 ''; # Added 2024-3-24 469 } 470 ); 471 scopeForArches = 472 arches: 473 outer.overrideScope ( 474 _final: prev: { 475 clr = prev.clr.override { 476 localGpuTargets = arches; 477 }; 478 } 479 ); 480in 481outer 482// builtins.listToAttrs ( 483 builtins.map (arch: { 484 name = arch; 485 value = scopeForArches [ arch ]; 486 }) outer.clr.gpuTargets 487) 488// { 489 gfx9 = scopeForArches [ 490 "gfx906" 491 "gfx908" 492 "gfx90a" 493 "gfx942" 494 ]; 495 gfx10 = scopeForArches [ 496 "gfx1010" 497 "gfx1030" 498 ]; 499 gfx11 = scopeForArches [ 500 "gfx1100" 501 "gfx1101" 502 "gfx1102" 503 ]; 504}