about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/compilers/cudatoolkit/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/cudatoolkit/default.nix')
-rw-r--r--nixpkgs/pkgs/development/compilers/cudatoolkit/default.nix219
1 files changed, 26 insertions, 193 deletions
diff --git a/nixpkgs/pkgs/development/compilers/cudatoolkit/default.nix b/nixpkgs/pkgs/development/compilers/cudatoolkit/default.nix
index 8aab9580232b..6531316fa12b 100644
--- a/nixpkgs/pkgs/development/compilers/cudatoolkit/default.nix
+++ b/nixpkgs/pkgs/development/compilers/cudatoolkit/default.nix
@@ -1,198 +1,15 @@
-{ lib, stdenv, makeWrapper, fetchurl, requireFile, perl, ncurses5, expat, python27, zlib
-, gcc48, gcc49, gcc5, gcc6, gcc7
-, xorg, gtk2, gdk-pixbuf, glib, fontconfig, freetype, unixODBC, alsaLib, glibc
-, addOpenGLRunpath
+{ lib
+, callPackage
+, fetchurl
+, gcc48
+, gcc49
+, gcc5
+, gcc6
+, gcc7
 }:
 
 let
-
-  common =
-    args@{ gcc, version, sha256
-    , url ? ""
-    , name ? ""
-    , developerProgram ? false
-    , python ? python27
-    , runPatches ? []
-    }:
-
-    stdenv.mkDerivation rec {
-      pname = "cudatoolkit";
-      inherit version runPatches;
-
-      dontPatchELF = true;
-      dontStrip = true;
-
-      src =
-        if developerProgram then
-          requireFile {
-            message = ''
-              This nix expression requires that ${args.name} is already part of the store.
-              Register yourself to NVIDIA Accelerated Computing Developer Program, retrieve the CUDA toolkit
-              at https://developer.nvidia.com/cuda-toolkit, and run the following command in the download directory:
-              nix-prefetch-url file://\$PWD/${args.name}
-            '';
-            inherit (args) name sha256;
-          }
-        else
-          fetchurl {
-            inherit (args) url sha256;
-          };
-
-      outputs = [ "out" "lib" "doc" ];
-
-      nativeBuildInputs = [ perl makeWrapper addOpenGLRunpath ];
-      buildInputs = [ gdk-pixbuf ]; # To get $GDK_PIXBUF_MODULE_FILE via setup-hook
-      runtimeDependencies = [
-        ncurses5 expat python zlib glibc
-        xorg.libX11 xorg.libXext xorg.libXrender xorg.libXt xorg.libXtst xorg.libXi xorg.libXext
-        gtk2 glib fontconfig freetype unixODBC alsaLib
-      ];
-
-      rpath = "${stdenv.lib.makeLibraryPath runtimeDependencies}:${stdenv.cc.cc.lib}/lib64";
-
-      unpackPhase = ''
-        sh $src --keep --noexec
-
-        cd pkg/run_files
-        sh cuda-linux*.run --keep --noexec
-        sh cuda-samples*.run --keep --noexec
-        mv pkg ../../$(basename $src)
-        cd ../..
-        rm -rf pkg
-
-        for patch in $runPatches; do
-          sh $patch --keep --noexec
-          mv pkg $(basename $patch)
-        done
-      '';
-
-      installPhase = ''
-        runHook preInstall
-        mkdir $out
-        cd $(basename $src)
-        export PERL5LIB=.
-        perl ./install-linux.pl --prefix="$out"
-        cd ..
-        for patch in $runPatches; do
-          cd $(basename $patch)
-          perl ./install_patch.pl --silent --accept-eula --installdir="$out"
-          cd ..
-        done
-
-        rm $out/tools/CUDA_Occupancy_Calculator.xls # FIXME: why?
-
-        # let's remove the 32-bit libraries, they confuse the lib64->lib mover
-        rm -rf $out/lib
-
-        # Remove some cruft.
-        ${lib.optionalString (lib.versionAtLeast version "7.0") "rm $out/bin/uninstall*"}
-
-        # Fixup path to samples (needed for cuda 6.5 or else nsight will not find them)
-        if [ -d "$out"/cuda-samples ]; then
-            mv "$out"/cuda-samples "$out"/samples
-        fi
-
-        # Change the #error on GCC > 4.9 to a #warning.
-        sed -i $out/include/host_config.h -e 's/#error\(.*unsupported GNU version\)/#warning\1/'
-
-        # Fix builds with newer glibc version
-        sed -i "1 i#define _BITS_FLOATN_H" "$out/include/host_defines.h"
-
-        # Ensure that cmake can find CUDA.
-        mkdir -p $out/nix-support
-        echo "cmakeFlags+=' -DCUDA_TOOLKIT_ROOT_DIR=$out'" >> $out/nix-support/setup-hook
-
-        # Move some libraries to the lib output so that programs that
-        # depend on them don't pull in this entire monstrosity.
-        mkdir -p $lib/lib
-        mv -v $out/lib64/libcudart* $lib/lib/
-
-        # Remove OpenCL libraries as they are provided by ocl-icd and driver.
-        rm -f $out/lib64/libOpenCL*
-
-        # Set compiler for NVCC.
-        wrapProgram $out/bin/nvcc \
-          --prefix PATH : ${gcc}/bin
-
-        # nvprof do not find any program to profile if LD_LIBRARY_PATH is not set
-        wrapProgram $out/bin/nvprof \
-          --prefix LD_LIBRARY_PATH : $out/lib
-      '' + lib.optionalString (lib.versionOlder version "8.0") ''
-        # Hack to fix building against recent Glibc/GCC.
-        echo "NIX_CFLAGS_COMPILE+=' -D_FORCE_INLINES'" >> $out/nix-support/setup-hook
-      '' + ''
-        runHook postInstall
-      '';
-
-      postInstall = ''
-        for b in nvvp nsight; do
-          wrapProgram "$out/bin/$b" \
-            --set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE"
-        done
-      '';
-
-      preFixup = ''
-        while IFS= read -r -d ''$'\0' i; do
-          if ! isELF "$i"; then continue; fi
-          echo "patching $i..."
-          if [[ ! $i =~ \.so ]]; then
-            patchelf \
-              --set-interpreter "''$(cat $NIX_CC/nix-support/dynamic-linker)" $i
-          fi
-          if [[ $i =~ libcudart ]]; then
-            rpath2=
-          else
-            rpath2=$rpath:$lib/lib:$out/jre/lib/amd64/jli:$out/lib:$out/lib64:$out/nvvm/lib:$out/nvvm/lib64
-          fi
-          patchelf --set-rpath "$rpath2" --force-rpath $i
-        done < <(find $out $lib $doc -type f -print0)
-      '';
-
-      # Set RPATH so that libcuda and other libraries in
-      # /run/opengl-driver(-32)/lib can be found. See the explanation in
-      # addOpenGLRunpath.  Don't try to figure out which libraries really need
-      # it, just patch all (but not the stubs libraries). Note that
-      # --force-rpath prevents changing RPATH (set above) to RUNPATH.
-      postFixup = ''
-        addOpenGLRunpath --force-rpath {$out,$lib}/lib/lib*.so
-      '';
-
-      # cuda-gdb doesn't run correctly when not using sandboxing, so
-      # temporarily disabling the install check.  This should be set to true
-      # when we figure out how to get `cuda-gdb --version` to run correctly
-      # when not using sandboxing.
-      doInstallCheck = false;
-      postInstallCheck = let
-      in ''
-        # Smoke test binaries
-        pushd $out/bin
-        for f in *; do
-          case $f in
-            crt)                           continue;;
-            nvcc.profile)                  continue;;
-            nsight_ee_plugins_manage.sh)   continue;;
-            uninstall_cuda_toolkit_6.5.pl) continue;;
-            computeprof|nvvp|nsight)       continue;; # GUIs don't feature "--version"
-            *)                             echo "Executing '$f --version':"; ./$f --version;;
-          esac
-        done
-        popd
-      '';
-      passthru = {
-        cc = gcc;
-        majorVersion =
-          let versionParts = lib.splitString "." version;
-          in "${lib.elemAt versionParts 0}.${lib.elemAt versionParts 1}";
-      };
-
-      meta = with stdenv.lib; {
-        description = "A compiler for NVIDIA GPUs, math libraries, and tools";
-        homepage = "https://developer.nvidia.com/cuda-toolkit";
-        platforms = [ "x86_64-linux" ];
-        license = licenses.unfree;
-      };
-    };
-
+  common = callPackage ./common.nix;
 in rec {
   cudatoolkit_6 = common {
     version = "6.0.37";
@@ -304,5 +121,21 @@ in rec {
     gcc = gcc7;
   };
 
-  cudatoolkit_10 = cudatoolkit_10_0;
+  cudatoolkit_10_1 = common {
+    version = "10.1.243";
+    url = "https://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run";
+    sha256 = "0caxhlv2bdq863dfp6wj7nad66ml81vasq2ayf11psvq2b12vhp7";
+
+    gcc = gcc7;
+  };
+
+  cudatoolkit_10_2 = common {
+    version = "10.2.89";
+    url = "http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run";
+    sha256 = "04fasl9sjkb1jvchvqgaqxprnprcz7a8r52249zp2ijarzyhf3an";
+
+    gcc = gcc7;
+  };
+
+  cudatoolkit_10 = cudatoolkit_10_2;
 }