Skip to content

Instantly share code, notes, and snippets.

@ConnorBaker
Last active November 7, 2023 19:36
Show Gist options
  • Select an option

  • Save ConnorBaker/c7284a765789e3762cdc982d08df5a0b to your computer and use it in GitHub Desktop.

Select an option

Save ConnorBaker/c7284a765789e3762cdc982d08df5a0b to your computer and use it in GitHub Desktop.
Helper to build cudaPackages package set
#!/usr/bin/env bash
set -euo pipefail
json_cuda_packages_categorized=$(nix eval --impure --json .#cudaPackages --apply '
attrs:
let
drvKind = drvName:
let
drv = attrs.${drvName};
nonDrv = !(drv ? drvPath && drv ? meta);
unsupportedPlatform =
let
platforms = drv.meta.platforms or [];
platformIsPresent = builtins.elem builtins.currentSystem platforms;
platformsAreSpecified = [] != platforms;
platformIsSupported = platformsAreSpecified -> platformIsPresent;
in
!platformIsSupported;
broken = drv.meta.broken or false;
in
if nonDrv then "nonDrv"
else if unsupportedPlatform then "unsupportedPlatform"
else if broken then "broken"
else "supported";
categorized = builtins.groupBy drvKind (builtins.attrNames attrs);
expanded = categorized // {
broken = builtins.listToAttrs (builtins.map (drvName: {
name = drvName;
value =
if attrs.${drvName}.brokenConditions != {}
then attrs.${drvName}.brokenConditions
else { brokenReason = "unknown"; };
}) (categorized.broken or []));
unsupportedPlatform = builtins.listToAttrs (builtins.map (drvName: {
name = drvName;
value = attrs.${drvName}.meta.platforms or [];
}) (categorized.unsupportedPlatform or []));
};
in
expanded
')
echo "Categorized packages:"
echo "$json_cuda_packages_categorized" | jq
readarray -t drv_names < <(jq -cr '.supported | .[]' <<< "$json_cuda_packages_categorized")
declare -a installables=("${drv_names[@]/#/.#cudaPackages.}")
echo "Building ${#installables[@]} installables: ${installables[@]}"
nom build --impure --no-link --keep-going "${installables[@]}"
@ConnorBaker
Copy link
Author

Example output:

[connorbaker@nixos-desktop:~/nixpkgs]$ ./cudaPackages-build-helper.sh 
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
Categorized packages:
{
  "broken": {
    "nvidia_driver": {
      "brokenReason": "unknown"
    },
    "tensorrt_8_5": {
      "CUDA version is too new": false,
      "CUDA version is too old": false,
      "CUDNN version is too new": true,
      "CUDNN version is too old": false
    }
  },
  "nonDrv": [
    "callPackage",
    "cuda-library-samples",
    "cudaFlags",
    "cudaMajorMinorVersion",
    "cudaMajorVersion",
    "cudaVersion",
    "flags",
    "gpus",
    "lib",
    "newScope",
    "nvccCompatibilities",
    "override",
    "overrideDerivation",
    "overrideScope",
    "overrideScope'",
    "packages",
    "pkgs",
    "recurseForDerivations"
  ],
  "supported": [
    "autoAddOpenGLRunpathHook",
    "backendStdenv",
    "cuda-samples",
    "cuda_cccl",
    "cuda_cudart",
    "cuda_cuobjdump",
    "cuda_cupti",
    "cuda_cuxxfilt",
    "cuda_demo_suite",
    "cuda_documentation",
    "cuda_gdb",
    "cuda_memcheck",
    "cuda_nsight",
    "cuda_nvcc",
    "cuda_nvdisasm",
    "cuda_nvml_dev",
    "cuda_nvprof",
    "cuda_nvprune",
    "cuda_nvrtc",
    "cuda_nvtx",
    "cuda_nvvp",
    "cuda_profiler_api",
    "cuda_sanitizer_api",
    "cudatoolkit",
    "cudnn",
    "cudnn_8_6",
    "cudnn_8_7",
    "cudnn_8_8",
    "cudnn_8_9",
    "cutensor",
    "cutensor_1_3",
    "cutensor_1_4",
    "cutensor_1_5",
    "cutensor_1_6",
    "cutensor_1_7",
    "fabricmanager",
    "libcublas",
    "libcufft",
    "libcufile",
    "libcurand",
    "libcusolver",
    "libcusparse",
    "libnpp",
    "libnvidia_nscq",
    "libnvjpeg",
    "markForCudatoolkitRootHook",
    "nccl",
    "nccl-tests",
    "nsight_compute",
    "nsight_systems",
    "nvidia_fs",
    "saxpy",
    "setupCudaHook",
    "tensorrt",
    "tensorrt_8_6"
  ],
  "unsupportedPlatform": {
    "cuda_compat": [
      "aarch64-linux"
    ],
    "libcudla": [
      "aarch64-linux"
    ],
    "nsight_nvtx": [
      "x86_64-windows"
    ],
    "nsight_vse": [
      "x86_64-windows"
    ],
    "visual_studio_integration": [
      "x86_64-windows"
    ]
  }
}
Building 55 installables: .#cudaPackages.autoAddOpenGLRunpathHook .#cudaPackages.backendStdenv .#cudaPackages.cuda-samples .#cudaPackages.cuda_cccl .#cudaPackages.cuda_cudart .#cudaPackages.cuda_cuobjdump .#cudaPackages.cuda_cupti .#cudaPackages.cuda_cuxxfilt .#cudaPackages.cuda_demo_suite .#cudaPackages.cuda_documentation .#cudaPackages.cuda_gdb .#cudaPackages.cuda_memcheck .#cudaPackages.cuda_nsight .#cudaPackages.cuda_nvcc .#cudaPackages.cuda_nvdisasm .#cudaPackages.cuda_nvml_dev .#cudaPackages.cuda_nvprof .#cudaPackages.cuda_nvprune .#cudaPackages.cuda_nvrtc .#cudaPackages.cuda_nvtx .#cudaPackages.cuda_nvvp .#cudaPackages.cuda_profiler_api .#cudaPackages.cuda_sanitizer_api .#cudaPackages.cudatoolkit .#cudaPackages.cudnn .#cudaPackages.cudnn_8_6 .#cudaPackages.cudnn_8_7 .#cudaPackages.cudnn_8_8 .#cudaPackages.cudnn_8_9 .#cudaPackages.cutensor .#cudaPackages.cutensor_1_3 .#cudaPackages.cutensor_1_4 .#cudaPackages.cutensor_1_5 .#cudaPackages.cutensor_1_6 .#cudaPackages.cutensor_1_7 .#cudaPackages.fabricmanager .#cudaPackages.libcublas .#cudaPackages.libcufft .#cudaPackages.libcufile .#cudaPackages.libcurand .#cudaPackages.libcusolver .#cudaPackages.libcusparse .#cudaPackages.libnpp .#cudaPackages.libnvidia_nscq .#cudaPackages.libnvjpeg .#cudaPackages.markForCudatoolkitRootHook .#cudaPackages.nccl .#cudaPackages.nccl-tests .#cudaPackages.nsight_compute .#cudaPackages.nsight_systems .#cudaPackages.nvidia_fs .#cudaPackages.saxpy .#cudaPackages.setupCudaHook .#cudaPackages.tensorrt .#cudaPackages.tensorrt_8_6
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
warning: Git tree '/home/connorbaker/nixpkgs' is dirty
⏱︎ 45s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment