diff --git a/pkgs/development/compilers/cudatoolkit/auto-add-opengl-runpath-hook.sh b/pkgs/development/compilers/cudatoolkit/auto-add-opengl-runpath-hook.sh index 0b0da336514a..395229ca79b7 100644 --- a/pkgs/development/compilers/cudatoolkit/auto-add-opengl-runpath-hook.sh +++ b/pkgs/development/compilers/cudatoolkit/auto-add-opengl-runpath-hook.sh @@ -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 diff --git a/pkgs/os-specific/linux/dcgm/default.nix b/pkgs/os-specific/linux/dcgm/default.nix index 36c7e3ca6880..32842a8eea0e 100644 --- a/pkgs/os-specific/linux/dcgm/default.nix +++ b/pkgs/os-specific/linux/dcgm/default.nix @@ -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; {