cudaPackages.cudatoolkit: use autoPatchelf

...to ensure correctness (in the sense that all DT_NEEDED libraries are
verified to be discoverable through the runpaths)
This commit is contained in:
Someone Serge 2022-06-12 17:25:38 +03:00
parent a369498916
commit 6dc90880de
No known key found for this signature in database
GPG Key ID: 7B0E3B1390D61DA4

View File

@ -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,80 @@ 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
"libcom_err.so.2"
];
unpackPhase = ''
@ -198,7 +278,7 @@ backendStdenv.mkDerivation rec {
preFixup =
let rpath = lib.concatStringsSep ":" [
(lib.makeLibraryPath (runtimeDependencies ++ [ "$lib" "$out" "$out/nvvm" ]))
(lib.makeLibraryPath (buildInputs ++ [ "$lib" "$out" "$out/nvvm" ]))
# The path to libstdc++ and such
#