summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorAndreas Rammhold <andreas@rammhold.de>2019-11-29 03:49:34 +1200
committerAndreas Rammhold <andreas@rammhold.de>2019-11-29 03:49:34 +1200
commit464ff0aa2436d38ab0c4efe2daccaccab21678df (patch)
treefbc9b8f3c813632e62c288d0f6973ff5a92c0db0 /pkgs
parent4e8c2f08b01486f2de0c7eb2468932e94b28030c (diff)
downloadnixpkgs-464ff0aa2436d38ab0c4efe2daccaccab21678df.tar
nixpkgs-464ff0aa2436d38ab0c4efe2daccaccab21678df.tar.gz
nixpkgs-464ff0aa2436d38ab0c4efe2daccaccab21678df.tar.bz2
nixpkgs-464ff0aa2436d38ab0c4efe2daccaccab21678df.tar.lz
nixpkgs-464ff0aa2436d38ab0c4efe2daccaccab21678df.tar.xz
nixpkgs-464ff0aa2436d38ab0c4efe2daccaccab21678df.tar.zst
nixpkgs-464ff0aa2436d38ab0c4efe2daccaccab21678df.zip
Revert "cudatoolkit: move the dependencies into a common expression"
This reverts commit ceafd896f5b801b4722f81b869c27ea2ed3870dd.
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/development/compilers/cudatoolkit/common.nix206
-rw-r--r--pkgs/development/compilers/cudatoolkit/default.nix213
-rw-r--r--pkgs/top-level/all-packages.nix2
3 files changed, 205 insertions, 216 deletions
diff --git a/pkgs/development/compilers/cudatoolkit/common.nix b/pkgs/development/compilers/cudatoolkit/common.nix
deleted file mode 100644
index c5a1513b648..00000000000
--- a/pkgs/development/compilers/cudatoolkit/common.nix
+++ /dev/null
@@ -1,206 +0,0 @@
-args@
-{ version
-, sha256
-, url ? ""
-, name ? ""
-, developerProgram ? false
-, runPatches ? []
-, addOpenGLRunpath
-, alsaLib
-, expat
-, fetchurl
-, fontconfig
-, freetype
-, gcc
-, gdk-pixbuf
-, glib
-, glibc
-, gtk2
-, lib
-, makeWrapper
-, ncurses5
-, perl
-, python27
-, requireFile
-, stdenv
-, unixODBC
-, xorg
-, zlib
-}:
-
-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 python27 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 = lib.versions.majorMinor version;
-  };
-
-  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;
-  };
-}
-
diff --git a/pkgs/development/compilers/cudatoolkit/default.nix b/pkgs/development/compilers/cudatoolkit/default.nix
index 9c983a38e4e..98c0381216a 100644
--- a/pkgs/development/compilers/cudatoolkit/default.nix
+++ b/pkgs/development/compilers/cudatoolkit/default.nix
@@ -1,15 +1,210 @@
-{ lib
-, callPackage
-, fetchurl
-, gcc48
-, gcc49
-, gcc5
-, gcc6
-, gcc7
+{ 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
 }:
 
 let
-  common = callPackage ./common.nix;
+
+  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
+
+        ${lib.optionalString (lib.versionOlder version "10.1") ''
+          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
+        ${lib.optionalString (lib.versionOlder version "10.1") ''
+        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
+        ''}
+        ${lib.optionalString (lib.versionAtLeast version "10.1") ''
+          cd pkg/builds/cuda-toolkit
+          mv * $out/
+        ''}
+
+        rm $out/tools/CUDA_Occupancy_Calculator.xls # FIXME: why?
+
+        ${lib.optionalString (lib.versionOlder version "10.1") ''
+        # 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") && (lib.versionOlder version "10.1"))
+          "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*
+        ${lib.optionalString (lib.versionAtLeast version "10.1") ''
+          mv $out/lib64 $out/lib
+        ''}
+
+        # 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 = lib.versions.majorMinor version;
+      };
+
+      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;
+      };
+    };
+
 in rec {
   cudatoolkit_6 = common {
     version = "6.0.37";
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 7ff77f6e232..1401f32da08 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -2563,7 +2563,7 @@ in
 
   cron = callPackage ../tools/system/cron { };
 
-  cudaPackages = recurseIntoAttrs (callPackage ../development/compilers/cudatoolkit {});
+  cudaPackages = callPackages ../development/compilers/cudatoolkit { };
   inherit (cudaPackages)
     cudatoolkit_6
     cudatoolkit_6_5