Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
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}