1{ lib }:
2{
3 /**
4 Returns whether a capability should be built by default for a particular CUDA version.
5
6 Capabilities built by default are baseline, non-Jetson capabilities with relatively recent CUDA support.
7
8 NOTE: No guarantees are made about this function's stability. You may use it at your own risk.
9
10 # Type
11
12 ```
13 _cudaCapabilityIsDefault
14 :: (cudaMajorMinorVersion :: Version)
15 -> (cudaCapabilityInfo :: CudaCapabilityInfo)
16 -> Bool
17 ```
18
19 # Inputs
20
21 `cudaMajorMinorVersion`
22
23 : The CUDA version to check
24
25 `cudaCapabilityInfo`
26
27 : The capability information to check
28 */
29 _cudaCapabilityIsDefault =
30 cudaMajorMinorVersion: cudaCapabilityInfo:
31 let
32 recentCapability =
33 cudaCapabilityInfo.dontDefaultAfterCudaMajorMinorVersion == null
34 || lib.versionAtLeast cudaCapabilityInfo.dontDefaultAfterCudaMajorMinorVersion cudaMajorMinorVersion;
35 in
36 recentCapability
37 && !cudaCapabilityInfo.isJetson
38 && !cudaCapabilityInfo.isArchitectureSpecific
39 && !cudaCapabilityInfo.isFamilySpecific;
40
41 /**
42 Returns whether a capability is supported for a particular CUDA version.
43
44 NOTE: No guarantees are made about this function's stability. You may use it at your own risk.
45
46 # Type
47
48 ```
49 _cudaCapabilityIsSupported
50 :: (cudaMajorMinorVersion :: Version)
51 -> (cudaCapabilityInfo :: CudaCapabilityInfo)
52 -> Bool
53 ```
54
55 # Inputs
56
57 `cudaMajorMinorVersion`
58
59 : The CUDA version to check
60
61 `cudaCapabilityInfo`
62
63 : The capability information to check
64 */
65 _cudaCapabilityIsSupported =
66 cudaMajorMinorVersion: cudaCapabilityInfo:
67 let
68 lowerBoundSatisfied = lib.versionAtLeast cudaMajorMinorVersion cudaCapabilityInfo.minCudaMajorMinorVersion;
69 upperBoundSatisfied =
70 cudaCapabilityInfo.maxCudaMajorMinorVersion == null
71 || lib.versionAtLeast cudaCapabilityInfo.maxCudaMajorMinorVersion cudaMajorMinorVersion;
72 in
73 lowerBoundSatisfied && upperBoundSatisfied;
74
75 /**
76 Generates a CUDA variant name from a version.
77
78 NOTE: No guarantees are made about this function's stability. You may use it at your own risk.
79
80 # Type
81
82 ```
83 _mkCudaVariant :: (version :: String) -> String
84 ```
85
86 # Inputs
87
88 `version`
89
90 : The version string
91
92 # Examples
93
94 :::{.example}
95 ## `_cuda.lib._mkCudaVariant` usage examples
96
97 ```nix
98 _mkCudaVariant "11.0"
99 => "cuda11"
100 ```
101 :::
102 */
103 _mkCudaVariant = version: "cuda${lib.versions.major version}";
104
105 /**
106 A predicate which, given a package, returns true if the package has a free license or one of NVIDIA's licenses.
107
108 This function is intended to be provided as `config.allowUnfreePredicate` when `import`-ing Nixpkgs.
109
110 # Type
111
112 ```
113 allowUnfreeCudaPredicate :: (package :: Package) -> Bool
114 ```
115 */
116 allowUnfreeCudaPredicate =
117 package:
118 lib.all (
119 license:
120 license.free
121 || lib.elem license.shortName [
122 "CUDA EULA"
123 "cuDNN EULA"
124 "cuSPARSELt EULA"
125 "cuTENSOR EULA"
126 "NVidia OptiX EULA"
127 ]
128 ) (lib.toList package.meta.license);
129}