python312Packages.llama-index: 0.12.9 -> 0.12.9.post1 (#371957)
[NixPkgs.git] / pkgs / by-name / li / libnvidia-container / package.nix
blob7f8e75e6ac9a14d1f8928a3d09d6f4be2eb17379
2   stdenv,
3   lib,
4   addDriverRunpath,
5   fetchFromGitHub,
6   pkg-config,
7   elfutils,
8   libcap,
9   libseccomp,
10   rpcsvc-proto,
11   libtirpc,
12   makeWrapper,
13   removeReferencesTo,
14   replaceVars,
15   go,
16   applyPatches,
17   nvidia-modprobe,
19 let
20   modprobeVersion = "550.54.14";
21   patchedModprobe = applyPatches {
22     src = nvidia-modprobe.src.override {
23       version = modprobeVersion;
24       hash = "sha256-iBRMkvOXacs/llTtvc/ZC5i/q9gc8lMuUHxMbu8A+Kg=";
25     };
26     patches = [
27       (replaceVars ./modprobe.patch {
28         inherit modprobeVersion;
29       })
30     ];
31   };
33 stdenv.mkDerivation rec {
34   pname = "libnvidia-container";
35   version = "1.17.2";
37   src = fetchFromGitHub {
38     owner = "NVIDIA";
39     repo = "libnvidia-container";
40     rev = "v${version}";
41     hash = "sha256-JmJKvAOEPyjVx2Frd0tAMBjnAUTMpMh1KBt6wr5RRmk=";
42   };
44   patches = [
45     # Locations of nvidia driver libraries are not resolved via ldconfig which
46     # doesn't get used on NixOS.
47     (replaceVars ./0001-ldcache-don-t-use-ldcache.patch {
48       inherit (addDriverRunpath) driverLink;
49     })
51     # Use both PATH and the legacy nvidia-docker paths (NixOS artifacts)
52     # for binary lookups.
53     # TODO: Remove the legacy compatibility once nvidia-docker is removed
54     # from NixOS.
55     ./0002-nvc-nvidia-docker-compatible-binary-lookups.patch
57     # fix bogus struct declaration
58     ./0003-nvc-fix-struct-declaration.patch
59   ];
61   postPatch = ''
62     sed -i \
63       -e 's/^REVISION ?=.*/REVISION = ${src.rev}/' \
64       -e 's/^COMPILER :=.*/COMPILER = $(CC)/' \
65       mk/common.mk
67     sed -i \
68       -e 's/^GIT_TAG ?=.*/GIT_TAG = ${version}/' \
69       -e 's/^GIT_COMMIT ?=.*/GIT_COMMIT = ${src.rev}/' \
70       versions.mk
72     mkdir -p deps/src/nvidia-modprobe-${modprobeVersion}
73     cp -r ${patchedModprobe}/* deps/src/nvidia-modprobe-${modprobeVersion}
74     chmod -R u+w deps/src
75     pushd deps/src
77     touch nvidia-modprobe-${modprobeVersion}/.download_stamp
78     popd
80     # 1. replace DESTDIR=$(DEPS_DIR) with empty strings to prevent copying
81     #    things into deps/src/nix/store
82     # 2. similarly, remove any paths prefixed with DEPS_DIR
83     # 3. prevent building static libraries because we don't build static
84     #    libtirpc (for now)
85     # 4. prevent installation of static libraries because of step 3
86     # 5. prevent installation of libnvidia-container-go.so twice
87     sed -i Makefile \
88       -e 's#DESTDIR=\$(DEPS_DIR)#DESTDIR=""#g' \
89       -e 's#\$(DEPS_DIR)\$#\$#g' \
90       -e 's#all: shared static tools#all: shared tools#g' \
91       -e '/$(INSTALL) -m 644 $(LIB_STATIC) $(DESTDIR)$(libdir)/d' \
92       -e '/$(INSTALL) -m 755 $(libdir)\/$(LIBGO_SHARED) $(DESTDIR)$(libdir)/d'
93   '';
95   enableParallelBuilding = true;
97   preBuild = ''
98     HOME="$(mktemp -d)"
99   '';
101   env.NIX_CFLAGS_COMPILE = toString [ "-I${lib.getInclude libtirpc}/include/tirpc" ];
102   NIX_LDFLAGS = [
103     "-L${lib.getLib libtirpc}/lib"
104     "-ltirpc"
105   ];
107   nativeBuildInputs = [
108     pkg-config
109     go
110     rpcsvc-proto
111     makeWrapper
112     removeReferencesTo
113   ];
115   buildInputs = [
116     elfutils
117     libcap
118     libseccomp
119     libtirpc
120   ];
122   makeFlags = [
123     "WITH_LIBELF=yes"
124     "prefix=$(out)"
125     # we can't use the WITH_TIRPC=yes flag that exists in the Makefile for the
126     # same reason we patch out the static library use of libtirpc so we set the
127     # define in CFLAGS
128     "CFLAGS=-DWITH_TIRPC"
129   ];
131   postInstall =
132     let
133       inherit (addDriverRunpath) driverLink;
134       libraryPath = lib.makeLibraryPath [
135         "$out"
136         driverLink
137         "${driverLink}-32"
138       ];
139     in
140     ''
141       remove-references-to -t "${go}" $out/lib/libnvidia-container-go.so.${version}
142       wrapProgram $out/bin/nvidia-container-cli --prefix LD_LIBRARY_PATH : ${libraryPath}
143     '';
144   disallowedReferences = [ go ];
146   meta = with lib; {
147     homepage = "https://github.com/NVIDIA/libnvidia-container";
148     description = "NVIDIA container runtime library";
149     license = licenses.asl20;
150     platforms = platforms.linux;
151     mainProgram = "nvidia-container-cli";
152     maintainers = with maintainers; [
153       cpcloud
154       msanft
155     ];
156   };