Merge pull request #245789 from deshaw/fix-auto-add-opengl-runpath-hook

cudaPackages.autoAddOpenGLRunpathHook: fix to skip unsupported
This commit is contained in:
Samuel Ainsworth
2023-08-09 12:40:54 -07:00
committed by GitHub
2 changed files with 31 additions and 27 deletions
@@ -1,14 +1,24 @@
# Run autoOpenGLRunpath on all files
# shellcheck shell=bash
# Run addOpenGLRunpath on all dynamically linked, ELF files
echo "Sourcing auto-add-opengl-runpath-hook"
autoAddOpenGLRunpathPhase () {
# TODO: support multiple outputs
for file in $(find ${out,lib,bin} -type f); do
addOpenGLRunpath $file
done
}
autoAddOpenGLRunpathPhase() (
local outputPaths
mapfile -t outputPaths < <(for o in $(getAllOutputNames); do echo "${!o}"; done)
find "${outputPaths[@]}" -type f -executable -print0 | while IFS= read -rd "" f; do
if isELF "$f"; then
# patchelf returns an error on statically linked ELF files
if patchelf --print-interpreter "$f" >/dev/null 2>&1; then
echo "autoAddOpenGLRunpathHook: patching $f"
addOpenGLRunpath "$f"
elif [ -n "${DEBUG-}" ]; then
echo "autoAddOpenGLRunpathHook: skipping ELF file $f"
fi
fi
done
)
if [ -z "${dontUseAutoAddOpenGLRunpath-}" ]; then
echo "Using autoAddOpenGLRunpathPhase"
postFixupHooks+=(autoAddOpenGLRunpathPhase)
echo "Using autoAddOpenGLRunpathPhase"
postFixupHooks+=(autoAddOpenGLRunpathPhase)
fi
+12 -18
View File
@@ -104,36 +104,30 @@ in gcc11Stdenv.mkDerivation rec {
hardeningDisable = [ "all" ];
strictDeps = true;
nativeBuildInputs = [
addOpenGLRunpath
# autoAddOpenGLRunpathHook does not actually depend on or incur any dependency
# of cudaPackages. It merely adds an impure, non-Nix PATH to the RPATHs of
# executables that need to use cuda at runtime.
cudaPackages_12.autoAddOpenGLRunpathHook
cmake
git
python3
jsoncpp-static
jsoncpp-static.dev
libevent-nossl-static
libevent-nossl-static.dev
plog.dev # header-only
tclap_1_4 # header-only
];
buildInputs = [
plog.dev # header-only
tclap_1_4 # header-only
catch2
fmt_9
jsoncpp-static
libevent-nossl-static
yaml-cpp
];
# libcuda.so must be found at runtime because it is supplied by the NVIDIA
# driver. autoAddOpenGLRunpathHook breaks on the statically linked exes.
postFixup = ''
find "$out/bin" "$out/lib" -type f -executable -print0 | while IFS= read -r -d "" f; do
if isELF "$f" && [[ $(patchelf --print-needed "$f" || true) == *libcuda.so* ]]; then
addOpenGLRunpath "$f"
fi
done
'';
disallowedReferences = lib.concatMap (x: x.pkgSet) cudaPackageSetByVersion;
meta = with lib; {