summary refs log tree commit diff
path: root/pkgs/top-level/cuda-packages.nix
diff options
context:
space:
mode:
authorFrederik Rietdijk <fridh@fridh.nl>2022-04-03 11:19:04 +0200
committerFrederik Rietdijk <freddyrietdijk@fridh.nl>2022-04-09 08:50:22 +0200
commit1d63f89caaf140ac33f1796dc0aaeb20f4ac4e55 (patch)
tree82668e186706e393a7f43c029be21ea4abfc44e9 /pkgs/top-level/cuda-packages.nix
parent934190fa06dc0de1fe7eecc543583d91657fb5fa (diff)
downloadnixpkgs-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.nix72
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)