_cuda: introduce to organize CUDA package set backbone

Signed-off-by: Connor Baker <ConnorBaker01@gmail.com>

+2 -2
doc/languages-frameworks/cuda.section.md
···
### Updating supported compilers and GPUs {#updating-supported-compilers-and-gpus}
-
1. Update `nvccCompatibilities` in `pkgs/development/cuda-modules/lib/data/nvcc.nix` to include the newest release of NVCC, as well as any newly supported host compilers.
-
2. Update `cudaCapabilityToInfo` in `pkgs/development/cuda-modules/lib/data/cuda.nix` to include any new GPUs supported by the new release of CUDA.
+
1. Update `nvccCompatibilities` in `pkgs/development/cuda-modules/_cuda/data/nvcc.nix` to include the newest release of NVCC, as well as any newly supported host compilers.
+
2. Update `cudaCapabilityToInfo` in `pkgs/development/cuda-modules/_cuda/data/cuda.nix` to include any new GPUs supported by the new release of CUDA.
### Updating the CUDA Toolkit runfile installer {#updating-the-cuda-toolkit}
+65
pkgs/development/cuda-modules/_cuda/db/default.nix
···
+
{
+
lib,
+
bootstrapData,
+
db,
+
}:
+
+
bootstrapData
+
// {
+
/**
+
All CUDA capabilities, sorted by version.
+
+
NOTE: Since the capabilities are sorted by version and architecture/family-specific features are
+
appended to the minor version component, the sorted list groups capabilities by baseline feature
+
set.
+
+
# Type
+
+
```
+
allSortedCudaCapabilities :: [CudaCapability]
+
```
+
+
# Example
+
+
```
+
allSortedCudaCapabilities = [
+
"5.0"
+
"5.2"
+
"6.0"
+
"6.1"
+
"7.0"
+
"7.2"
+
"7.5"
+
"8.0"
+
"8.6"
+
"8.7"
+
"8.9"
+
"9.0"
+
"9.0a"
+
"10.0"
+
"10.0a"
+
"10.0f"
+
"10.1"
+
"10.1a"
+
"10.1f"
+
"10.3"
+
"10.3a"
+
"10.3f"
+
];
+
```
+
*/
+
allSortedCudaCapabilities = lib.sort lib.versionOlder (lib.attrNames db.cudaCapabilityToInfo);
+
+
/**
+
Mapping of CUDA micro-architecture name to capabilities belonging to that micro-architecture.
+
+
# Type
+
+
```
+
cudaArchNameToCapabilities :: AttrSet NonEmptyStr (NonEmptyListOf CudaCapability)
+
```
+
*/
+
cudaArchNameToCapabilities = lib.groupBy (
+
cudaCapability: db.cudaCapabilityToInfo.${cudaCapability}.archName
+
) db.allSortedCudaCapabilities;
+
}
+30
pkgs/development/cuda-modules/_cuda/default.nix
···
+
# The _cuda attribute set is a fixed-point which contains the static functionality required to construct CUDA package
+
# sets. For example, `_cuda.cudaData` includes information about NVIDIA's redistributables (such as the names NVIDIA
+
# uses for different systems), `_cuda.cudaLib` contains utility functions like `formatCapabilities` (which generate
+
# common arguments passed to NVCC and `cmakeFlags`), and `_cuda.cudaFixups` contains `callPackage`-able functions
+
# which are provided to the corresponding package's `overrideAttrs` attribute to provide package-specific fixups
+
# out of scope of the generic redistributable builder.
+
#
+
# Since this attribute set is used to construct the CUDA package sets, it must exist outside the fixed point of the
+
# package sets. Make these attributes available directly in the package set construction could cause confusion if
+
# users override the attribute set with the expection that changes will be reflected in the enclosing CUDA package
+
# set. To avoid this, we declare `_cuda` and inherit its members here, at top-level. (This also allows us to benefit
+
# from import caching, as it should be evaluated once per system, rather than per-system and CUDA package set.)
+
+
let
+
lib = import ../../../../lib;
+
in
+
lib.fixedPoints.makeExtensible (final: {
+
bootstrapData = import ./db/bootstrap {
+
inherit lib;
+
};
+
db = import ./db {
+
inherit (final) bootstrapData db;
+
inherit lib;
+
};
+
fixups = import ./fixups { inherit lib; };
+
lib = import ./lib {
+
_cuda = final;
+
inherit lib;
+
};
+
})
+1 -1
pkgs/development/cuda-modules/cusparselt/extension.nix
···
# Patch version changes should not break the build, so we only use major and minor
# computeName :: RedistribRelease -> String
computeName =
-
{ version, ... }: cudaLib.utils.mkVersionedName redistName (lib.versions.majorMinor version);
+
{ version, ... }: cudaLib.mkVersionedName redistName (lib.versions.majorMinor version);
in
final: _:
let
+1 -1
pkgs/development/cuda-modules/cutensor/extension.nix
···
# Patch version changes should not break the build, so we only use major and minor
# computeName :: RedistribRelease -> String
computeName =
-
{ version, ... }: cudaLib.utils.mkVersionedName redistName (lib.versions.majorMinor version);
+
{ version, ... }: cudaLib.mkVersionedName redistName (lib.versions.majorMinor version);
in
final: _:
let
pkgs/development/cuda-modules/fixups/cuda_compat.nix pkgs/development/cuda-modules/_cuda/fixups/cuda_compat.nix
pkgs/development/cuda-modules/fixups/cuda_cudart.nix pkgs/development/cuda-modules/_cuda/fixups/cuda_cudart.nix
pkgs/development/cuda-modules/fixups/cuda_demo_suite.nix pkgs/development/cuda-modules/_cuda/fixups/cuda_demo_suite.nix
pkgs/development/cuda-modules/fixups/cuda_gdb.nix pkgs/development/cuda-modules/_cuda/fixups/cuda_gdb.nix
pkgs/development/cuda-modules/fixups/cuda_nvcc.nix pkgs/development/cuda-modules/_cuda/fixups/cuda_nvcc.nix
pkgs/development/cuda-modules/fixups/cuda_nvprof.nix pkgs/development/cuda-modules/_cuda/fixups/cuda_nvprof.nix
pkgs/development/cuda-modules/fixups/cuda_sanitizer_api.nix pkgs/development/cuda-modules/_cuda/fixups/cuda_sanitizer_api.nix
pkgs/development/cuda-modules/fixups/cudnn.nix pkgs/development/cuda-modules/_cuda/fixups/cudnn.nix
+1 -3
pkgs/development/cuda-modules/fixups/default.nix pkgs/development/cuda-modules/_cuda/fixups/default.nix
···
-
let
-
lib = import ../../../../lib;
-
in
+
{ lib }:
lib.concatMapAttrs (
fileName: _type:
let
pkgs/development/cuda-modules/fixups/driver_assistant.nix pkgs/development/cuda-modules/_cuda/fixups/driver_assistant.nix
pkgs/development/cuda-modules/fixups/fabricmanager.nix pkgs/development/cuda-modules/_cuda/fixups/fabricmanager.nix
pkgs/development/cuda-modules/fixups/imex.nix pkgs/development/cuda-modules/_cuda/fixups/imex.nix
pkgs/development/cuda-modules/fixups/libcufile.nix pkgs/development/cuda-modules/_cuda/fixups/libcufile.nix
pkgs/development/cuda-modules/fixups/libcusolver.nix pkgs/development/cuda-modules/_cuda/fixups/libcusolver.nix
pkgs/development/cuda-modules/fixups/libcusparse.nix pkgs/development/cuda-modules/_cuda/fixups/libcusparse.nix
pkgs/development/cuda-modules/fixups/libcusparse_lt.nix pkgs/development/cuda-modules/_cuda/fixups/libcusparse_lt.nix
pkgs/development/cuda-modules/fixups/libcutensor.nix pkgs/development/cuda-modules/_cuda/fixups/libcutensor.nix
pkgs/development/cuda-modules/fixups/nsight_compute.nix pkgs/development/cuda-modules/_cuda/fixups/nsight_compute.nix
pkgs/development/cuda-modules/fixups/nsight_systems.nix pkgs/development/cuda-modules/_cuda/fixups/nsight_systems.nix
pkgs/development/cuda-modules/fixups/nvidia_driver.nix pkgs/development/cuda-modules/_cuda/fixups/nvidia_driver.nix
+2 -2
pkgs/development/cuda-modules/fixups/tensorrt.nix pkgs/development/cuda-modules/_cuda/fixups/tensorrt.nix
···
{
-
cudaLib,
+
_cuda,
cudaOlder,
cudaPackages,
cudaMajorMinorVersion,
···
# unless it is not available, in which case the default cudnn derivation will be used.
cudnn =
let
-
desiredName = cudaLib.utils.mkVersionedName "cudnn" (
+
desiredName = _cuda.lib.mkVersionedName "cudnn" (
lib.versions.majorMinor finalAttrs.passthru.featureRelease.cudnnVersion
);
in
+5 -6
pkgs/development/cuda-modules/generic-builders/manifest.nix
···
autoPatchelfHook,
backendStdenv,
callPackage,
-
cudaFixups,
-
cudaLib,
+
_cuda,
fetchurl,
lib,
markForCudatoolkitRootHook,
···
# Last step before returning control to `callPackage` (adds the `.override` method)
# we'll apply (`overrideAttrs`) necessary package-specific "fixup" functions.
# Order is significant.
-
maybeFixup = cudaFixups.${pname} or null;
+
maybeFixup = _cuda.fixups.${pname} or null;
fixup = if maybeFixup != null then callPackage maybeFixup { } else { };
# Get the redist systems for which package provides distributables.
···
# redistSystem :: String
# The redistSystem is the name of the system for which the redistributable is built.
# It is `"unsupported"` if the redistributable is not supported on the target system.
-
redistSystem = cudaLib.utils.getRedistSystem backendStdenv.hasJetsonCudaCapability hostPlatform.system;
+
redistSystem = _cuda.lib.getRedistSystem backendStdenv.hasJetsonCudaCapability hostPlatform.system;
-
sourceMatchesHost = lib.elem hostPlatform.system (cudaLib.utils.getNixSystems redistSystem);
+
sourceMatchesHost = lib.elem hostPlatform.system (_cuda.lib.getNixSystems redistSystem);
in
(backendStdenv.mkDerivation (finalAttrs: {
# NOTE: Even though there's no actual buildPhase going on here, the derivations of the
···
broken = lists.any trivial.id (attrsets.attrValues finalAttrs.brokenConditions);
platforms = trivial.pipe supportedRedistSystems [
# Map each redist system to the equivalent nix systems.
-
(lib.concatMap cudaLib.utils.getNixSystems)
+
(lib.concatMap _cuda.lib.getNixSystems)
# Take all the unique values.
lib.unique
# Sort the list.
+1 -2
pkgs/development/cuda-modules/generic-builders/multiplex.nix
···
# Compute versioned attribute name to be used in this package set
# Patch version changes should not break the build, so we only use major and minor
# computeName :: Package -> String
-
computeName =
-
{ version, ... }: cudaLib.utils.mkVersionedName pname (lib.versions.majorMinor version);
+
computeName = { version, ... }: cudaLib.mkVersionedName pname (lib.versions.majorMinor version);
# The newest package for each major-minor version, with newest first.
# newestPackages :: List Package
+1 -59
pkgs/development/cuda-modules/lib/data/cuda.nix pkgs/development/cuda-modules/_cuda/db/bootstrap/cuda.nix
···
-
{ cudaLib, lib }:
+
{ lib }:
{
-
/**
-
All CUDA capabilities, sorted by version.
-
-
NOTE: Since the capabilities are sorted by version and architecture/family-specific features are
-
appended to the minor version component, the sorted list groups capabilities by baseline feature
-
set.
-
-
# Type
-
-
```
-
allSortedCudaCapabilities :: [CudaCapability]
-
```
-
-
# Example
-
-
```
-
allSortedCudaCapabilities = [
-
"5.0"
-
"5.2"
-
"6.0"
-
"6.1"
-
"7.0"
-
"7.2"
-
"7.5"
-
"8.0"
-
"8.6"
-
"8.7"
-
"8.9"
-
"9.0"
-
"9.0a"
-
"10.0"
-
"10.0a"
-
"10.0f"
-
"10.1"
-
"10.1a"
-
"10.1f"
-
"10.3"
-
"10.3a"
-
"10.3f"
-
];
-
```
-
*/
-
allSortedCudaCapabilities = lib.sort lib.versionOlder (
-
lib.attrNames cudaLib.data.cudaCapabilityToInfo
-
);
-
-
/**
-
Mapping of CUDA micro-architecture name to capabilities belonging to that micro-architecture.
-
-
# Type
-
-
```
-
cudaArchNameToCapabilities :: AttrSet NonEmptyStr (NonEmptyListOf CudaCapability)
-
```
-
*/
-
cudaArchNameToCapabilities = lib.groupBy (
-
cudaCapability: cudaLib.data.cudaCapabilityToInfo.${cudaCapability}.archName
-
) cudaLib.data.allSortedCudaCapabilities;
/**
Attribute set of supported CUDA capability mapped to information about that capability.
+3 -5
pkgs/development/cuda-modules/lib/data/default.nix pkgs/development/cuda-modules/_cuda/db/bootstrap/default.nix
···
-
{ cudaLib, lib }:
+
{ lib }:
{
# See ./cuda.nix for documentation.
-
inherit (import ./cuda.nix { inherit cudaLib lib; })
-
allSortedCudaCapabilities
-
cudaArchNameToCapabilities
+
inherit (import ./cuda.nix { inherit lib; })
cudaCapabilityToInfo
;
···
cudaPackagesPath :: Path
```
*/
-
cudaPackagesPath = ./..;
+
cudaPackagesPath = ./../../..;
}
pkgs/development/cuda-modules/lib/data/nvcc.nix pkgs/development/cuda-modules/_cuda/db/bootstrap/nvcc.nix
pkgs/development/cuda-modules/lib/data/redist.nix pkgs/development/cuda-modules/_cuda/db/bootstrap/redist.nix
-13
pkgs/development/cuda-modules/lib/default.nix
···
-
let
-
lib = import ../../../../lib;
-
in
-
lib.fixedPoints.makeExtensible (final: {
-
data = import ./data {
-
inherit lib;
-
cudaLib = final;
-
};
-
utils = import ./utils {
-
inherit lib;
-
cudaLib = final;
-
};
-
})
+5 -5
pkgs/development/cuda-modules/lib/utils/assertions.nix pkgs/development/cuda-modules/_cuda/lib/assertions.nix
···
-
{ cudaLib, lib }:
+
{ _cuda, lib }:
{
/**
Evaluate assertions and add error context to return value.
···
_evaluateAssertions =
assertions:
let
-
failedAssertionsString = cudaLib.utils._mkFailedAssertionsString assertions;
+
failedAssertionsString = _cuda.lib._mkFailedAssertionsString assertions;
in
if failedAssertionsString == "" then
true
···
# Examples
:::{.example}
-
## `cudaLib.utils._mkFailedAssertionsString` usage examples
+
## `_cuda.lib._mkFailedAssertionsString` usage examples
```nix
_mkFailedAssertionsString [
···
# Examples
:::{.example}
-
## `cudaLib.utils._mkMissingPackagesAssertions` usage examples
+
## `_cuda.lib._mkMissingPackagesAssertions` usage examples
```nix
{
···
}:
let
inherit (lib.attrsets) recursiveUpdate;
-
inherit (cudaLib.utils) _mkMissingPackagesAssertions;
+
inherit (_cuda.lib) _mkMissingPackagesAssertions;
in
prevAttrs: {
passthru = prevAttrs.passthru or { } // {
+1 -1
pkgs/development/cuda-modules/lib/utils/cuda.nix pkgs/development/cuda-modules/_cuda/lib/cuda.nix
···
# Examples
:::{.example}
-
## `cudaLib.utils._mkCudaVariant` usage examples
+
## `_cuda.lib._mkCudaVariant` usage examples
```nix
_mkCudaVariant "11.0"
+9 -6
pkgs/development/cuda-modules/lib/utils/default.nix pkgs/development/cuda-modules/_cuda/lib/default.nix
···
-
{ cudaLib, lib }:
+
{
+
_cuda,
+
lib,
+
}:
{
# See ./assertions.nix for documentation.
-
inherit (import ./assertions.nix { inherit cudaLib lib; })
+
inherit (import ./assertions.nix { inherit _cuda lib; })
_evaluateAssertions
_mkFailedAssertionsString
_mkMissingPackagesAssertions
···
;
# See ./meta.nix for documentation.
-
inherit (import ./meta.nix { inherit cudaLib lib; })
+
inherit (import ./meta.nix { inherit _cuda lib; })
_mkMetaBadPlatforms
_mkMetaBroken
;
# See ./redist.nix for documentation.
-
inherit (import ./redist.nix { inherit cudaLib lib; })
+
inherit (import ./redist.nix { inherit _cuda lib; })
_redistSystemIsSupported
getNixSystems
getRedistSystem
···
;
# See ./strings.nix for documentation.
-
inherit (import ./strings.nix { inherit cudaLib lib; })
+
inherit (import ./strings.nix { inherit _cuda lib; })
dotsToUnderscores
dropDots
formatCapabilities
···
;
# See ./versions.nix for documentation.
-
inherit (import ./versions.nix { inherit cudaLib lib; })
+
inherit (import ./versions.nix { inherit _cuda lib; })
majorMinorPatch
trimComponents
;
+3 -3
pkgs/development/cuda-modules/lib/utils/meta.nix pkgs/development/cuda-modules/_cuda/lib/meta.nix
···
-
{ cudaLib, lib }:
+
{ _cuda, lib }:
{
/**
Returns a list of bad platforms for a given package if assertsions in `finalAttrs.passthru.platformAssertions`
···
_mkMetaBadPlatforms =
warn: finalAttrs:
let
-
failedAssertionsString = cudaLib.utils._mkFailedAssertionsString finalAttrs.passthru.platformAssertions;
+
failedAssertionsString = _cuda.lib._mkFailedAssertionsString finalAttrs.passthru.platformAssertions;
hasFailedAssertions = failedAssertionsString != "";
finalStdenv = finalAttrs.finalPackage.stdenv;
in
···
_mkMetaBroken =
warn: finalAttrs:
let
-
failedAssertionsString = cudaLib.utils._mkFailedAssertionsString finalAttrs.passthru.brokenAssertions;
+
failedAssertionsString = _cuda.lib._mkFailedAssertionsString finalAttrs.passthru.brokenAssertions;
hasFailedAssertions = failedAssertionsString != "";
in
lib.warnIf (warn && hasFailedAssertions)
+5 -5
pkgs/development/cuda-modules/lib/utils/redist.nix pkgs/development/cuda-modules/_cuda/lib/redist.nix
···
-
{ cudaLib, lib }:
+
{ _cuda, lib }:
{
/**
Returns a boolean indicating whether the provided redist system is supported by any of the provided redist systems.
···
# Examples
:::{.example}
-
## `cudaLib.utils._redistSystemIsSupported` usage examples
+
## `cudaLib._redistSystemIsSupported` usage examples
```nix
_redistSystemIsSupported "linux-x86_64" [ "linux-x86_64" ]
···
# Examples
:::{.example}
-
## `cudaLib.utils.getNixSystems` usage examples
+
## `cudaLib.getNixSystems` usage examples
```nix
getNixSystems "linux-sbsa"
···
# Examples
:::{.example}
-
## `cudaLib.utils.getRedistSystem` usage examples
+
## `cudaLib.getRedistSystem` usage examples
```nix
getRedistSystem true "aarch64-linux"
···
mkRedistUrl =
redistName: relativePath:
lib.concatStringsSep "/" (
-
[ cudaLib.data.redistUrlPrefix ]
+
[ _cuda.db.redistUrlPrefix ]
++ (
if redistName != "tensorrt" then
[
+21 -18
pkgs/development/cuda-modules/lib/utils/strings.nix pkgs/development/cuda-modules/_cuda/lib/strings.nix
···
-
{ cudaLib, lib }:
+
{ _cuda, lib }:
+
let
+
cudaLib = _cuda.lib;
+
in
{
/**
Replaces dots in a string with underscores.
···
# Examples
:::{.example}
-
## `cudaLib.utils.dotsToUnderscores` usage examples
+
## `cudaLib.dotsToUnderscores` usage examples
```nix
dotsToUnderscores "1.2.3"
···
# Examples
:::{.example}
-
## `cudaLib.utils.dropDots` usage examples
+
## `cudaLib.dropDots` usage examples
```nix
dropDots "1.2.3"
···
realArches :: List String
```
*/
-
realArches = lib.map cudaLib.utils.mkRealArchitecture cudaCapabilities;
+
realArches = lib.map cudaLib.mkRealArchitecture cudaCapabilities;
/**
The virtual architectures for the given CUDA capabilities.
···
virtualArches :: List String
```
*/
-
virtualArches = lib.map cudaLib.utils.mkVirtualArchitecture cudaCapabilities;
+
virtualArches = lib.map cudaLib.mkVirtualArchitecture cudaCapabilities;
/**
The gencode flags for the given CUDA capabilities.
···
*/
gencode =
let
-
base = lib.map (cudaLib.utils.mkGencodeFlag "sm") cudaCapabilities;
-
forward = cudaLib.utils.mkGencodeFlag "compute" (lib.last cudaCapabilities);
+
base = lib.map (cudaLib.mkGencodeFlag "sm") cudaCapabilities;
+
forward = cudaLib.mkGencodeFlag "compute" (lib.last cudaCapabilities);
in
base ++ lib.optionals cudaForwardCompat [ forward ];
in
···
cmakeCudaArchitecturesString :: String
```
*/
-
cmakeCudaArchitecturesString = cudaLib.utils.mkCmakeCudaArchitecturesString cudaCapabilities;
+
cmakeCudaArchitecturesString = cudaLib.mkCmakeCudaArchitecturesString cudaCapabilities;
/**
The gencode string for the given CUDA capabilities.
···
# Examples
:::{.example}
-
## `cudaLib.utils.mkCmakeCudaArchitecturesString` usage examples
+
## `cudaLib.mkCmakeCudaArchitecturesString` usage examples
```nix
mkCmakeCudaArchitecturesString [ "8.9" "10.0a" ]
···
```
:::
*/
-
mkCmakeCudaArchitecturesString = lib.concatMapStringsSep ";" cudaLib.utils.dropDots;
+
mkCmakeCudaArchitecturesString = lib.concatMapStringsSep ";" cudaLib.dropDots;
/**
Produces a gencode flag from a CUDA capability.
···
# Examples
:::{.example}
-
## `cudaLib.utils.mkGencodeFlag` usage examples
+
## `cudaLib.mkGencodeFlag` usage examples
```nix
mkGencodeFlag "sm" "8.9"
···
mkGencodeFlag =
archPrefix: cudaCapability:
let
-
cap = cudaLib.utils.dropDots cudaCapability;
+
cap = cudaLib.dropDots cudaCapability;
in
"-gencode=arch=compute_${cap},code=${archPrefix}_${cap}";
···
# Examples
:::{.example}
-
## `cudaLib.utils.mkRealArchitecture` usage examples
+
## `cudaLib.mkRealArchitecture` usage examples
```nix
mkRealArchitecture "8.9"
···
```
:::
*/
-
mkRealArchitecture = cudaCapability: "sm_" + cudaLib.utils.dropDots cudaCapability;
+
mkRealArchitecture = cudaCapability: "sm_" + cudaLib.dropDots cudaCapability;
/**
Create a versioned attribute name from a version by replacing dots with underscores.
···
# Examples
:::{.example}
-
## `cudaLib.utils.mkVersionedName` usage examples
+
## `cudaLib.mkVersionedName` usage examples
```nix
mkVersionedName "hello" "1.2.3"
···
```
:::
*/
-
mkVersionedName = name: version: "${name}_${cudaLib.utils.dotsToUnderscores version}";
+
mkVersionedName = name: version: "${name}_${cudaLib.dotsToUnderscores version}";
/**
Produces a virtual architecture string from a CUDA capability.
···
# Examples
:::{.example}
-
## `cudaLib.utils.mkVirtualArchitecture` usage examples
+
## `cudaLib.mkVirtualArchitecture` usage examples
```nix
mkVirtualArchitecture "8.9"
···
```
:::
*/
-
mkVirtualArchitecture = cudaCapability: "compute_" + cudaLib.utils.dropDots cudaCapability;
+
mkVirtualArchitecture = cudaCapability: "compute_" + cudaLib.dropDots cudaCapability;
}
+7 -4
pkgs/development/cuda-modules/lib/utils/versions.nix pkgs/development/cuda-modules/_cuda/lib/versions.nix
···
-
{ cudaLib, lib }:
+
{ _cuda, lib }:
+
let
+
cudaLib = _cuda.lib;
+
in
{
/**
Extracts the major, minor, and patch version from a string.
···
# Examples
:::{.example}
-
## `cudaLib.utils.majorMinorPatch` usage examples
+
## `_cuda.lib.majorMinorPatch` usage examples
```nix
majorMinorPatch "11.0.3.4"
···
```
:::
*/
-
majorMinorPatch = cudaLib.utils.trimComponents 3;
+
majorMinorPatch = cudaLib.trimComponents 3;
/**
Get a version string with no more than than the specified number of components.
···
# Examples
:::{.example}
-
## `cudaLib.utils.trimComponents` usage examples
+
## `_cuda.lib.trimComponents` usage examples
```nix
trimComponents 1 "1.2.3.4"
+3 -3
pkgs/development/cuda-modules/packages/backendStdenv.nix
···
# Cf. https://github.com/NixOS/nixpkgs/pull/218265 for context
{
config,
-
cudaLib,
+
_cuda,
cudaMajorMinorVersion,
lib,
pkgs,
···
}:
let
inherit (builtins) toJSON;
-
inherit (cudaLib.data) allSortedCudaCapabilities cudaCapabilityToInfo nvccCompatibilities;
-
inherit (cudaLib.utils)
+
inherit (_cuda.db) allSortedCudaCapabilities cudaCapabilityToInfo nvccCompatibilities;
+
inherit (_cuda.lib)
_cudaCapabilityIsDefault
_cudaCapabilityIsSupported
_evaluateAssertions
+3 -2
pkgs/development/cuda-modules/tests/flags.nix
···
{
+
cudaData,
cudaLib,
cudaNamePrefix,
lib,
···
}:
let
inherit (builtins) deepSeq toJSON tryEval;
-
inherit (cudaLib.data) cudaCapabilityToInfo;
-
inherit (cudaLib.utils) formatCapabilities;
+
inherit (cudaData) cudaCapabilityToInfo;
+
inherit (cudaLib) formatCapabilities;
inherit (lib.asserts) assertMsg;
in
# When changing names or formats: pause, validate, and update the assert
+2 -3
pkgs/top-level/all-packages.nix
···
cron = isc-cron;
-
cudaLib = import ../development/cuda-modules/lib;
-
-
cudaFixups = import ../development/cuda-modules/fixups;
+
# Top-level fix-point used in `cudaPackages`' internals
+
_cuda = import ../development/cuda-modules/_cuda;
cudaPackages_11_0 = callPackage ./cuda-packages.nix { cudaMajorMinorVersion = "11.0"; };
cudaPackages_11_1 = callPackage ./cuda-packages.nix { cudaMajorMinorVersion = "11.1"; };
+13 -10
pkgs/top-level/cuda-packages.nix
···
# I've (@connorbaker) attempted to do that, though I'm unsure of how this will interact with overrides.
{
config,
-
cudaLib,
+
_cuda,
cudaMajorMinorVersion,
lib,
newScope,
···
versions
;
+
cudaLib = _cuda.lib;
+
# Since Jetson capabilities are never built by default, we can check if any of them were requested
# through final.config.cudaCapabilities and use that to determine if we should change some manifest versions.
# Copied from backendStdenv.
jetsonCudaCapabilities = lib.filter (
-
cudaCapability: cudaLib.data.cudaCapabilityToInfo.${cudaCapability}.isJetson
-
) cudaLib.data.allSortedCudaCapabilities;
+
cudaCapability: _cuda.db.cudaCapabilityToInfo.${cudaCapability}.isJetson
+
) _cuda.db.allSortedCudaCapabilities;
hasJetsonCudaCapability =
lib.intersectLists jetsonCudaCapabilities (config.cudaCapabilities or [ ]) != [ ];
-
redistSystem = cudaLib.utils.getRedistSystem hasJetsonCudaCapability stdenv.hostPlatform.system;
+
redistSystem = _cuda.lib.getRedistSystem hasJetsonCudaCapability stdenv.hostPlatform.system;
passthruFunction = final: {
# NOTE:
-
# It is important that cudaLib and cudaFixups are not part of the package set fixed-point. As described by
+
# It is important that _cuda is not part of the package set fixed-point. As described by
# @SomeoneSerge:
# > The layering should be: configuration -> (identifies/is part of) cudaPackages -> (is built using) cudaLib.
# > No arrows should point in the reverse directions.
# That is to say that cudaLib should only know about package sets and configurations, because it implements
# functionality for interpreting configurations, resolving them against data, and constructing package sets.
# This decision is driven both by a separation of concerns and by "NAMESET STRICTNESS" (see above).
+
# Also see the comment in `pkgs/top-level/all-packages.nix` about the `_cuda` attribute.
inherit cudaMajorMinorVersion;
···
};
flags =
-
cudaLib.utils.formatCapabilities {
+
cudaLib.formatCapabilities {
inherit (final.backendStdenv) cudaCapabilities cudaForwardCompat;
-
inherit (cudaLib.data) cudaCapabilityToInfo;
+
inherit (_cuda.db) cudaCapabilityToInfo;
}
# TODO(@connorbaker): Enable the corresponding warnings in `../development/cuda-modules/aliases.nix` after some
# time to allow users to migrate to cudaLib and backendStdenv.
// {
-
inherit (cudaLib.utils) dropDots;
+
inherit (cudaLib) dropDots;
cudaComputeCapabilityToName =
-
cudaCapability: cudaLib.data.cudaCapabilityToInfo.${cudaCapability}.archName;
-
dropDot = cudaLib.utils.dropDots;
+
cudaCapability: _cuda.db.cudaCapabilityToInfo.${cudaCapability}.archName;
+
dropDot = cudaLib.dropDots;
isJetsonBuild = final.backendStdenv.hasJetsonCudaCapability;
};
+2 -2
pkgs/top-level/release-cuda.nix
···
let
lib = import ../../lib;
-
cudaLib = import ../development/cuda-modules/lib;
+
inherit (import ../development/cuda-modules/_cuda) cudaLib;
in
{
···
# Attributes passed to nixpkgs.
nixpkgsArgs ? {
config = {
-
allowUnfreePredicate = cudaLib.utils.allowUnfreeCudaPredicate;
+
allowUnfreePredicate = cudaLib.allowUnfreeCudaPredicate;
"${variant}Support" = true;
inHydra = true;