summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Ainsworth <skainsworth@gmail.com>2023-04-01 20:59:06 -0400
committerGitHub <noreply@github.com>2023-04-01 20:59:06 -0400
commit2a969fc1be720ae879632ec9f9d8961fb26a616e (patch)
tree81653a96f42db9165562fc29fe0dee69269e6b1c
parentMerge pull request #224255 from Kiskae/patch-1 (diff)
parentcudaPackages.cudatoolkit: rm preFixup rpath code (diff)
downloadnixpkgs-2a969fc1be720ae879632ec9f9d8961fb26a616e.tar.gz
Merge pull request #178440 from SomeoneSerge/cudatoolkit-autopatchelf
cudaPackages.cudatoolkit: switch to autoPatchelf
-rw-r--r--pkgs/development/compilers/cudatoolkit/common.nix150
1 files changed, 88 insertions, 62 deletions
diff --git a/pkgs/development/compilers/cudatoolkit/common.nix b/pkgs/development/compilers/cudatoolkit/common.nix
index 894c0b8fb524..8082756b1edb 100644
--- a/pkgs/development/compilers/cudatoolkit/common.nix
+++ b/pkgs/development/compilers/cudatoolkit/common.nix
@@ -5,6 +5,8 @@ args@
, name ? ""
, developerProgram ? false
, runPatches ? []
+, autoPatchelfHook
+, autoAddOpenGLRunpathHook
, addOpenGLRunpath
, alsa-lib
, expat
@@ -16,15 +18,25 @@ args@
, glibc
, gtk2
, lib
+, libxkbcommon
+, libkrb5
+, krb5
, makeWrapper
, ncurses5
+, numactl
+, nss
, perl
-, python3
+, python3 # FIXME: CUDAToolkit 10 may still need python27
+, pulseaudio
, requireFile
, backendStdenv # E.g. gcc11Stdenv, set in extension.nix
, unixODBC
+, wayland
, xorg
, zlib
+, freeglut
+, libGLU
+, libsForQt5
}:
backendStdenv.mkDerivation rec {
@@ -52,12 +64,82 @@ backendStdenv.mkDerivation rec {
outputs = [ "out" "lib" "doc" ];
- nativeBuildInputs = [ perl makeWrapper addOpenGLRunpath ];
- buildInputs = [ gdk-pixbuf ]; # To get $GDK_PIXBUF_MODULE_FILE via setup-hook
+ nativeBuildInputs = [
+ perl
+ makeWrapper
+ addOpenGLRunpath
+ autoPatchelfHook
+ autoAddOpenGLRunpathHook
+ ] ++ lib.optionals (lib.versionOlder version "11") [
+ libsForQt5.wrapQtAppsHook
+ ];
+ buildInputs = [
+ # To get $GDK_PIXBUF_MODULE_FILE via setup-hook
+ gdk-pixbuf
+
+ # For autoPatchelf
+ ncurses5
+ expat
+ python3
+ zlib
+ glibc
+ xorg.libX11
+ xorg.libXext
+ xorg.libXrender
+ xorg.libXt
+ xorg.libXtst
+ xorg.libXi
+ xorg.libXext
+ xorg.libXdamage
+ xorg.libxcb
+ xorg.xcbutilimage
+ xorg.xcbutilrenderutil
+ xorg.xcbutilwm
+ xorg.xcbutilkeysyms
+ pulseaudio
+ libxkbcommon
+ libkrb5
+ krb5
+ gtk2
+ glib
+ fontconfig
+ freetype
+ numactl
+ nss
+ unixODBC
+ alsa-lib
+ wayland
+ ] ++ lib.optionals (lib.versionOlder version "11") [
+ libsForQt5.qt5.qtwebengine
+ freeglut
+ libGLU
+ ];
+
+ # Prepended to runpaths by autoPatchelf.
+ # The order inherited from older rpath preFixup code
runtimeDependencies = [
- ncurses5 expat python3 zlib glibc
- xorg.libX11 xorg.libXext xorg.libXrender xorg.libXt xorg.libXtst xorg.libXi xorg.libXext
- gtk2 glib fontconfig freetype unixODBC alsa-lib
+ (placeholder "lib")
+ (placeholder "out")
+ "${placeholder "out"}/nvvm"
+ # Is it not handled by autoPatchelf automatically?
+ "${lib.getLib backendStdenv.cc.cc}/lib64"
+ "${placeholder "out"}/jre/lib/amd64/jli"
+ "${placeholder "out"}/lib64"
+ "${placeholder "out"}/nvvm/lib64"
+ ];
+
+ autoPatchelfIgnoreMissingDeps = [
+ # This is the hardware-dependent userspace driver that comes from
+ # nvidia_x11 package. It must be deployed at runtime in
+ # /run/opengl-driver/lib or pointed at by LD_LIBRARY_PATH variable, rather
+ # than pinned in runpath
+ "libcuda.so.1"
+
+ # The krb5 expression ships libcom_err.so.3 but cudatoolkit asks for the
+ # older
+ # This dependency is asked for by target-linux-x64/CollectX/RedHat/x86_64/libssl.so.10
+ # - do we even want to use nvidia-shipped libssl?
+ "libcom_err.so.2"
];
unpackPhase = ''
@@ -196,62 +278,6 @@ backendStdenv.mkDerivation rec {
done
'';
- preFixup =
- let rpath = lib.concatStringsSep ":" [
- (lib.makeLibraryPath (runtimeDependencies ++ [ "$lib" "$out" "$out/nvvm" ]))
-
- # The path to libstdc++ and such
- #
- # `backendStdenv` is the cuda-compatible toolchain that we pick in
- # extension.nix; we hand it to NVCC to use as a back-end, and we link
- # cudatoolkit's binaries against its libstdc++
- "${backendStdenv.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
- # 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
- '' + 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/*
- '' +
- # Prune broken symlinks which can cause problems with consumers of this package.
- ''
- while read -r -d "" file; do
- echo "Found and removing broken symlink $file"
- rm "$file"
- done < <(find "$out" "$lib" "$doc" -xtype l -print0)
- '';
# cuda-gdb doesn't run correctly when not using sandboxing, so
# temporarily disabling the install check. This should be set to true