Unverified Commit 98fa5081 authored by Samuel Ainsworth's avatar Samuel Ainsworth Committed by GitHub
Browse files

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

cudaPackages.autoAddOpenGLRunpathHook: fix to skip unsupported
parents cd6d4800 8b4275f9
Loading
Loading
Loading
Loading
+19 −9
Original line number Diff line number Diff line
# 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
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"
+11 −17
Original line number Diff line number Diff line
@@ -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
  buildInputs = [
    plog.dev # header-only
    tclap_1_4 # header-only
  ];

  buildInputs = [
    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; {