diff options
author | Frederik Rietdijk <fridh@fridh.nl> | 2022-04-03 11:19:04 +0200 |
---|---|---|
committer | Frederik Rietdijk <freddyrietdijk@fridh.nl> | 2022-04-09 08:50:22 +0200 |
commit | 1d63f89caaf140ac33f1796dc0aaeb20f4ac4e55 (patch) | |
tree | 82668e186706e393a7f43c029be21ea4abfc44e9 /pkgs/top-level/cuda-packages.nix | |
parent | 934190fa06dc0de1fe7eecc543583d91657fb5fa (diff) | |
download | nixpkgs-1d63f89caaf140ac33f1796dc0aaeb20f4ac4e55.tar nixpkgs-1d63f89caaf140ac33f1796dc0aaeb20f4ac4e55.tar.gz nixpkgs-1d63f89caaf140ac33f1796dc0aaeb20f4ac4e55.tar.bz2 nixpkgs-1d63f89caaf140ac33f1796dc0aaeb20f4ac4e55.tar.lz nixpkgs-1d63f89caaf140ac33f1796dc0aaeb20f4ac4e55.tar.xz nixpkgs-1d63f89caaf140ac33f1796dc0aaeb20f4ac4e55.tar.zst nixpkgs-1d63f89caaf140ac33f1796dc0aaeb20f4ac4e55.zip |
cudaPackages: overhaul of how we package cuda packages
There are many different versions of the `cudatoolkit` and related cuda packages, and it can be tricky to ensure they remain compatible. - `cudaPackages` is now a package set with `cudatoolkit`, `cudnn`, `cutensor`, `nccl`, as well as `cudatoolkit` split into smaller packages ("redist"); - expressions should now use `cudaPackages` as parameter instead of the individual cuda packages; - `makeScope` is now used, so it is possible to use `.overrideScope'` to set e.g. a different `cudnn` version; - `release-cuda.nix` is introduced to easily evaluate cuda packages using hydra.
Diffstat (limited to 'pkgs/top-level/cuda-packages.nix')
-rw-r--r-- | pkgs/top-level/cuda-packages.nix | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/pkgs/top-level/cuda-packages.nix b/pkgs/top-level/cuda-packages.nix new file mode 100644 index 00000000000..211540260d1 --- /dev/null +++ b/pkgs/top-level/cuda-packages.nix @@ -0,0 +1,72 @@ +{ lib +, pkgs +, cudaVersion +}: + +with lib; + +let + + scope = makeScope pkgs.newScope (final: { + # Here we put package set configuration and utility functions. + inherit cudaVersion; + cudaMajorVersion = versions.major final.cudaVersion; + cudaMajorMinorVersion = lib.versions.majorMinor final.cudaVersion; + inherit lib pkgs; + + addBuildInputs = drv: buildInputs: drv.overrideAttrs (oldAttrs: { + buildInputs = (oldAttrs.buildInputs or []) ++ buildInputs; + }); + }); + + cutensorExtension = final: prev: let + ### CuTensor + + buildCuTensorPackage = final.callPackage ../development/libraries/science/math/cutensor/generic.nix; + + cuTensorVersions = { + "1.2.2.5" = { + hash = "sha256-lU7iK4DWuC/U3s1Ct/rq2Gr3w4F2U7RYYgpmF05bibY="; + }; + "1.3.1.3" = { + hash = "sha256-mNlVnabB2IC3HnYY0mb06RLqQzDxN9ePGVeBy3hkBC8="; + }; + }; + + inherit (final) cudaMajorMinorVersion cudaMajorVersion; + + cutensor = buildCuTensorPackage rec { + version = if cudaMajorMinorVersion == "10.1" then "1.2.2.5" else "1.3.1.3"; + inherit (cuTensorVersions.${version}) hash; + # This can go into generic.nix + libPath = "lib/${if cudaMajorVersion == "10" then cudaMajorMinorVersion else cudaMajorVersion}"; + }; + in { inherit cutensor; }; + + extraPackagesExtension = final: prev: { + + nccl = final.callPackage ../development/libraries/science/math/nccl { }; + + autoAddOpenGLRunpathHook = final.callPackage ( { makeSetupHook, addOpenGLRunpath }: + makeSetupHook { + name = "auto-add-opengl-runpath-hook"; + deps = [ + addOpenGLRunpath + ]; + } ../development/compilers/cudatoolkit/auto-add-opengl-runpath-hook.sh + ) {}; + + }; + + composedExtension = composeManyExtensions [ + extraPackagesExtension + (import ../development/compilers/cudatoolkit/extension.nix) + (import ../development/compilers/cudatoolkit/redist/extension.nix) + (import ../development/compilers/cudatoolkit/redist/overrides.nix) + (import ../development/libraries/science/math/cudnn/extension.nix) + (import ../test/cuda/cuda-samples/extension.nix) + (import ../test/cuda/cuda-library-samples/extension.nix) + cutensorExtension + ]; + +in (scope.overrideScope' composedExtension) |