Skip to content

Commit

Permalink
Add driver library path to some packages to find CUDA libraries.
Browse files Browse the repository at this point in the history
This is to avoid relying on LD_LIBRARY_PATH for finding the CUDA driver libraries.
  • Loading branch information
ambrop72 committed May 22, 2019
1 parent 1860e50 commit 28a0918
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 6 deletions.
14 changes: 12 additions & 2 deletions pkgs/applications/misc/blender/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
, ilmbase, libXi, libX11, libXext, libXrender
, libjpeg, libpng, libsamplerate, libsndfile
, libtiff, libGLU_combined, openal, opencolorio, openexr, openimageio, openjpeg_1, pythonPackages
, zlib, fftw, opensubdiv, freetype, jemalloc, ocl-icd
, zlib, fftw, opensubdiv, freetype, jemalloc, ocl-icd, addOpenGLRunpath
, jackaudioSupport ? false, libjack2
, cudaSupport ? config.cudaSupport or false, cudatoolkit
, colladaSupport ? true, opencollada
Expand All @@ -21,8 +21,9 @@ stdenv.mkDerivation rec {
sha256 = "1g4kcdqmf67srzhi3hkdnr4z1ph4h9sza1pahz38mrj998q4r52c";
};

nativeBuildInputs = [ cmake ] ++ optional cudaSupport addOpenGLRunpath;
buildInputs =
[ boost cmake ffmpeg gettext glew ilmbase
[ boost ffmpeg gettext glew ilmbase
libXi libX11 libXext libXrender
freetype libjpeg libpng libsamplerate libsndfile libtiff libGLU_combined openal
opencolorio openexr openimageio openjpeg_1 python zlib fftw jemalloc
Expand Down Expand Up @@ -80,6 +81,15 @@ stdenv.mkDerivation rec {
--prefix PYTHONPATH : ${pythonPackages.numpy}/${python.sitePackages}
'';

# Set RUNPATH so that libcuda and libnvrtc in /run/opengl-driver(-32)/lib can be
# found. See the explanation in libglvnd.
postFixup = optionalString cudaSupport ''
for program in $out/bin/blender $out/bin/.blender-wrapped; do
isELF "$program" || continue
addOpenGLRunpath "$program"
done
'';

meta = with stdenv.lib; {
description = "3D Creation/Animation/Publishing System";
homepage = https://www.blender.org;
Expand Down
14 changes: 12 additions & 2 deletions pkgs/development/compilers/cudatoolkit/default.nix
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{ lib, stdenv, makeWrapper, fetchurl, requireFile, perl, ncurses5, expat, python27, zlib
, gcc48, gcc49, gcc5, gcc6, gcc7
, xorg, gtk2, gdk_pixbuf, glib, fontconfig, freetype, unixODBC, alsaLib, glibc
, addOpenGLRunpath
}:

let
Expand Down Expand Up @@ -39,7 +40,7 @@ let

outputs = [ "out" "lib" "doc" ];

nativeBuildInputs = [ perl makeWrapper ];
nativeBuildInputs = [ perl makeWrapper addOpenGLRunpath ];
buildInputs = [ gdk_pixbuf ]; # To get $GDK_PIXBUF_MODULE_FILE via setup-hook
runtimeDependencies = [
ncurses5 expat python zlib glibc
Expand Down Expand Up @@ -143,10 +144,19 @@ let
else
rpath2=$rpath:$lib/lib:$out/jre/lib/amd64/jli:$out/lib:$out/lib64:$out/nvvm/lib:$out/nvvm/lib64
fi
patchelf --set-rpath $rpath2 --force-rpath $i
patchelf --set-rpath "$rpath2" --force-rpath $i
done < <(find $out $lib $doc -type f -print0)
'';

# 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
'';

# cuda-gdb doesn't run correctly when not using sandboxing, so
# temporarily disabling the install check. This should be set to true
# when we figure out how to get `cuda-gdb --version` to run correctly
Expand Down
9 changes: 9 additions & 0 deletions pkgs/development/libraries/science/math/cudnn/generic.nix
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
, lib
, cudatoolkit
, fetchurl
, addOpenGLRunpath
}:

stdenv.mkDerivation rec {
Expand All @@ -19,6 +20,8 @@ stdenv.mkDerivation rec {
inherit sha256;
};

nativeBuildInputs = [ addOpenGLRunpath ];

installPhase = ''
function fixRunPath {
p=$(patchelf --print-rpath $1)
Expand All @@ -31,6 +34,12 @@ stdenv.mkDerivation rec {
cp -a lib64 $out/lib64
'';

# Set RUNPATH so that libcuda in /run/opengl-driver(-32)/lib can be found.
# See the explanation in addOpenGLRunpath.
postFixup = ''
addOpenGLRunpath $out/lib/lib*.so
'';

propagatedBuildInputs = [
cudatoolkit
];
Expand Down
8 changes: 6 additions & 2 deletions pkgs/development/libraries/science/math/nccl/default.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{ stdenv, fetchFromGitHub, which, cudatoolkit }:
{ stdenv, fetchFromGitHub, which, cudatoolkit, addOpenGLRunpath }:

stdenv.mkDerivation rec {
name = "nccl-${version}-cuda-${cudatoolkit.majorVersion}";
Expand All @@ -13,7 +13,7 @@ stdenv.mkDerivation rec {

outputs = [ "out" "dev" ];

nativeBuildInputs = [ which ];
nativeBuildInputs = [ which addOpenGLRunpath ];

buildInputs = [ cudatoolkit ];

Expand All @@ -28,6 +28,10 @@ stdenv.mkDerivation rec {

postFixup = ''
moveToOutput lib/libnccl_static.a $dev
# Set RUNPATH so that libnvidia-ml in /run/opengl-driver(-32)/lib can be found.
# See the explanation in addOpenGLRunpath.
addOpenGLRunpath $out/lib/lib*.so
'';

NIX_CFLAGS_COMPILE = [ "-Wno-unused-function" ];
Expand Down

0 comments on commit 28a0918

Please sign in to comment.