about summary refs log tree commit diff
path: root/pkgs/development/cuda-modules/cuda/overrides.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/cuda-modules/cuda/overrides.nix')
-rw-r--r--pkgs/development/cuda-modules/cuda/overrides.nix129
1 files changed, 129 insertions, 0 deletions
diff --git a/pkgs/development/cuda-modules/cuda/overrides.nix b/pkgs/development/cuda-modules/cuda/overrides.nix
new file mode 100644
index 0000000000000..061d5da16bb59
--- /dev/null
+++ b/pkgs/development/cuda-modules/cuda/overrides.nix
@@ -0,0 +1,129 @@
+{cudaVersion, lib}:
+let
+  inherit (lib) attrsets lists strings;
+  # cudaVersionOlder : Version -> Boolean
+  cudaVersionOlder = strings.versionOlder cudaVersion;
+  # cudaVersionAtLeast : Version -> Boolean
+  cudaVersionAtLeast = strings.versionAtLeast cudaVersion;
+
+  addBuildInputs =
+    drv: buildInputs:
+    drv.overrideAttrs (prevAttrs: {buildInputs = prevAttrs.buildInputs ++ buildInputs;});
+in
+# NOTE: Filter out attributes that are not present in the previous version of
+# the package set. This is necessary to prevent the appearance of attributes
+# like `cuda_nvcc` in `cudaPackages_10_0, which predates redistributables.
+final: prev:
+attrsets.filterAttrs (attr: _: (builtins.hasAttr attr prev)) {
+  libcufile = prev.libcufile.overrideAttrs (
+    prevAttrs: {
+      buildInputs = prevAttrs.buildInputs ++ [
+        final.libcublas.lib
+        final.pkgs.numactl
+        final.pkgs.rdma-core
+      ];
+      # Before 11.7 libcufile depends on itself for some reason.
+      env.autoPatchelfIgnoreMissingDeps =
+        prevAttrs.env.autoPatchelfIgnoreMissingDeps
+        + strings.optionalString (cudaVersionOlder "11.7") " libcufile.so.0";
+    }
+  );
+
+  libcusolver = addBuildInputs prev.libcusolver (
+    # Always depends on this
+    [final.libcublas.lib]
+    # Dependency from 12.0 and on
+    ++ lists.optionals (cudaVersionAtLeast "12.0") [final.libnvjitlink.lib]
+    # Dependency from 12.1 and on
+    ++ lists.optionals (cudaVersionAtLeast "12.1") [final.libcusparse.lib]
+  );
+
+  libcusparse = addBuildInputs prev.libcusparse (
+    lists.optionals (cudaVersionAtLeast "12.0") [final.libnvjitlink.lib]
+  );
+
+  cuda_compat = prev.cuda_compat.overrideAttrs (
+    prevAttrs: {
+      env.autoPatchelfIgnoreMissingDeps =
+        prevAttrs.env.autoPatchelfIgnoreMissingDeps + " libnvrm_gpu.so libnvrm_mem.so";
+      # `cuda_compat` only works on aarch64-linux, and only when building for Jetson devices.
+      brokenConditions = prevAttrs.brokenConditions // {
+        "Trying to use cuda_compat on aarch64-linux targeting non-Jetson devices" =
+          !final.flags.isJetsonBuild;
+      };
+    }
+  );
+
+  cuda_gdb = addBuildInputs prev.cuda_gdb (
+    # x86_64 only needs gmp from 12.0 and on
+    lists.optionals (cudaVersionAtLeast "12.0") [final.pkgs.gmp]
+  );
+
+  cuda_nvcc = prev.cuda_nvcc.overrideAttrs (
+    oldAttrs: {
+      propagatedBuildInputs = [final.setupCudaHook];
+
+      meta = (oldAttrs.meta or {}) // {
+        mainProgram = "nvcc";
+      };
+    }
+  );
+
+  cuda_nvprof = prev.cuda_nvprof.overrideAttrs (
+    prevAttrs: {buildInputs = prevAttrs.buildInputs ++ [final.cuda_cupti.lib];}
+  );
+
+  cuda_demo_suite = addBuildInputs prev.cuda_demo_suite [
+    final.pkgs.freeglut
+    final.pkgs.libGLU
+    final.pkgs.libglvnd
+    final.pkgs.mesa
+    final.libcufft.lib
+    final.libcurand.lib
+  ];
+
+  nsight_compute = prev.nsight_compute.overrideAttrs (
+    prevAttrs: {
+      nativeBuildInputs =
+        prevAttrs.nativeBuildInputs
+        ++ (
+          if (strings.versionOlder prev.nsight_compute.version "2022.2.0") then
+            [final.pkgs.qt5.wrapQtAppsHook]
+          else
+            [final.pkgs.qt6.wrapQtAppsHook]
+        );
+      buildInputs =
+        prevAttrs.buildInputs
+        ++ (
+          if (strings.versionOlder prev.nsight_compute.version "2022.2.0") then
+            [final.pkgs.qt5.qtwebview]
+          else
+            [final.pkgs.qt6.qtwebview]
+        );
+    }
+  );
+
+  nsight_systems = prev.nsight_systems.overrideAttrs (
+    prevAttrs: {
+      nativeBuildInputs = prevAttrs.nativeBuildInputs ++ [final.pkgs.qt5.wrapQtAppsHook];
+      buildInputs = prevAttrs.buildInputs ++ [
+        final.pkgs.alsa-lib
+        final.pkgs.e2fsprogs
+        final.pkgs.nss
+        final.pkgs.numactl
+        final.pkgs.pulseaudio
+        final.pkgs.wayland
+        final.pkgs.xorg.libXcursor
+        final.pkgs.xorg.libXdamage
+        final.pkgs.xorg.libXrandr
+        final.pkgs.xorg.libXtst
+      ];
+    }
+  );
+
+  nvidia_driver = prev.nvidia_driver.overrideAttrs {
+    # No need to support this package as we have drivers already
+    # in linuxPackages.
+    meta.broken = true;
+  };
+}