nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 cudaVersion,
3 fetchurl,
4 final,
5 lib,
6 package,
7 patchelf,
8 zlib,
9 ...
10}:
11let
12 inherit (lib)
13 lists
14 maintainers
15 meta
16 strings
17 ;
18in
19finalAttrs: prevAttrs: {
20 src = fetchurl { inherit (package) url hash; };
21
22 # Useful for inspecting why something went wrong.
23 brokenConditions =
24 let
25 cudaTooOld = strings.versionOlder cudaVersion package.minCudaVersion;
26 cudaTooNew =
27 (package.maxCudaVersion != null) && strings.versionOlder package.maxCudaVersion cudaVersion;
28 in
29 prevAttrs.brokenConditions
30 // {
31 "CUDA version is too old" = cudaTooOld;
32 "CUDA version is too new" = cudaTooNew;
33 };
34
35 buildInputs =
36 prevAttrs.buildInputs
37 ++ [ zlib ]
38 ++ lists.optionals finalAttrs.passthru.useCudatoolkitRunfile [ final.cudatoolkit ]
39 ++ lists.optionals (!finalAttrs.passthru.useCudatoolkitRunfile) [ final.libcublas.lib ];
40
41 # Tell autoPatchelf about runtime dependencies.
42 # NOTE: Versions from CUDNN releases have four components.
43 postFixup = strings.optionalString (strings.versionAtLeast finalAttrs.version "8.0.5.0") ''
44 ${meta.getExe' patchelf "patchelf"} $lib/lib/libcudnn.so --add-needed libcudnn_cnn_infer.so
45 ${meta.getExe' patchelf "patchelf"} $lib/lib/libcudnn_ops_infer.so --add-needed libcublas.so --add-needed libcublasLt.so
46 '';
47
48 passthru.useCudatoolkitRunfile = strings.versionOlder cudaVersion "11.3.999";
49
50 meta = prevAttrs.meta // {
51 homepage = "https://developer.nvidia.com/cudnn";
52 maintainers =
53 prevAttrs.meta.maintainers
54 ++ (with maintainers; [
55 mdaiter
56 samuela
57 connorbaker
58 ]);
59 license = {
60 shortName = "cuDNN EULA";
61 fullName = "NVIDIA cuDNN Software License Agreement (EULA)";
62 url = "https://docs.nvidia.com/deeplearning/sdk/cudnn-sla/index.html#supplement";
63 free = false;
64 redistributable = !finalAttrs.passthru.useCudatoolkitRunfile;
65 };
66 };
67}