about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/compilers/cudatoolkit/common.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/cudatoolkit/common.nix')
-rw-r--r--nixpkgs/pkgs/development/compilers/cudatoolkit/common.nix57
1 files changed, 39 insertions, 18 deletions
diff --git a/nixpkgs/pkgs/development/compilers/cudatoolkit/common.nix b/nixpkgs/pkgs/development/compilers/cudatoolkit/common.nix
index f408d7b33121..46832e1cc2de 100644
--- a/nixpkgs/pkgs/development/compilers/cudatoolkit/common.nix
+++ b/nixpkgs/pkgs/development/compilers/cudatoolkit/common.nix
@@ -61,8 +61,6 @@ stdenv.mkDerivation rec {
     gtk2 glib fontconfig freetype unixODBC alsa-lib
   ];
 
-  rpath = "${lib.makeLibraryPath runtimeDependencies}:${stdenv.cc.cc.lib}/lib64";
-
   unpackPhase = ''
     sh $src --keep --noexec
 
@@ -119,6 +117,12 @@ stdenv.mkDerivation rec {
         fi
       done
       mv pkg/builds/cuda_nvcc/nvvm $out/nvvm
+
+      mv pkg/builds/cuda_sanitizer_api $out/cuda_sanitizer_api
+      ln -s $out/cuda_sanitizer_api/compute-sanitizer/compute-sanitizer $out/bin/compute-sanitizer
+
+      mv pkg/builds/nsight_systems/target-linux-x64 $out/target-linux-x64
+      mv pkg/builds/nsight_systems/host-linux-x64 $out/host-linux-x64
     ''}
 
     rm -f $out/tools/CUDA_Occupancy_Calculator.xls # FIXME: why?
@@ -184,22 +188,35 @@ stdenv.mkDerivation rec {
     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
-        patchelf --remove-rpath $i
-      else
-        rpath2=$rpath:$lib/lib:$out/jre/lib/amd64/jli:$out/lib:$out/lib64:$out/nvvm/lib:$out/nvvm/lib64
-        patchelf --set-rpath "$rpath2" --force-rpath $i
-      fi
-    done < <(find $out $lib $doc -type f -print0)
-  '';
+  preFixup =
+    let rpath = lib.concatStringsSep ":" [
+      (lib.makeLibraryPath (runtimeDependencies ++ [ "$lib" "$out" "$out/nvvm" ]))
+      "${stdenv.cc.cc.lib}/lib64"
+      "$out/jre/lib/amd64/jli"
+      "$out/lib64"
+      "$out/nvvm/lib64"
+    ];
+    in
+    ''
+      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
+          patchelf --remove-rpath $i
+        else
+          patchelf --set-rpath "${rpath}" --force-rpath $i
+        fi
+      done < <(find $out $lib $doc -type f -print0)
+    '' + lib.optionalString (lib.versionAtLeast version "11") ''
+      for file in $out/target-linux-x64/*.so; do
+        echo "patching $file..."
+        patchelf --set-rpath "${rpath}:\$ORIGIN" $file
+      done
+    '';
 
   # Set RPATH so that libcuda and other libraries in
   # /run/opengl-driver(-32)/lib can be found. See the explanation in
@@ -208,6 +225,10 @@ stdenv.mkDerivation rec {
   # --force-rpath prevents changing RPATH (set above) to RUNPATH.
   postFixup = ''
     addOpenGLRunpath --force-rpath {$out,$lib}/lib/lib*.so
+  '' + lib.optionalString (lib.versionAtLeast version "11") ''
+    addOpenGLRunpath $out/cuda_sanitizer_api/compute-sanitizer/*
+    addOpenGLRunpath $out/cuda_sanitizer_api/compute-sanitizer/x86/*
+    addOpenGLRunpath $out/target-linux-x64/*
   '';
 
   # cuda-gdb doesn't run correctly when not using sandboxing, so