Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ 2 addDriverRunpath, 3 autoAddDriverRunpath, 4 autoPatchelfHook, 5 backendStdenv, 6 cmake, 7 cuda_cccl ? null, 8 cuda_cudart ? null, 9 cuda_nvcc ? null, 10 cudaAtLeast, 11 cudaOlder, 12 cudatoolkit, 13 cusparselt ? null, 14 cutensor ? null, 15 fetchFromGitHub, 16 lib, 17 libcusparse ? null, 18 setupCudaHook, 19}: 20 21let 22 base = backendStdenv.mkDerivation (finalAttrs: { 23 src = fetchFromGitHub { 24 owner = "NVIDIA"; 25 repo = "CUDALibrarySamples"; 26 rev = "e57b9c483c5384b7b97b7d129457e5a9bdcdb5e1"; 27 sha256 = "0g17afsmb8am0darxchqgjz1lmkaihmnn7k1x4ahg5gllcmw8k3l"; 28 }; 29 version = 30 lib.strings.substring 0 7 finalAttrs.src.rev + "-" + lib.versions.majorMinor cudatoolkit.version; 31 nativeBuildInputs = [ 32 cmake 33 addDriverRunpath 34 ]; 35 buildInputs = [ cudatoolkit ]; 36 postFixup = '' 37 for exe in $out/bin/*; do 38 addDriverRunpath $exe 39 done 40 ''; 41 meta = { 42 description = "examples of using libraries using CUDA"; 43 longDescription = '' 44 CUDA Library Samples contains examples demonstrating the use of 45 features in the math and image processing libraries cuBLAS, cuTENSOR, 46 cuSPARSE, cuSOLVER, cuFFT, cuRAND, NPP and nvJPEG. 47 ''; 48 license = lib.licenses.bsd3; 49 platforms = [ "x86_64-linux" ]; 50 maintainers = with lib.maintainers; [ obsidian-systems-maintenance ]; 51 teams = [ lib.teams.cuda ]; 52 }; 53 }); 54in 55 56{ 57 cublas = base.overrideAttrs ( 58 finalAttrs: _: { 59 pname = "cuda-library-samples-cublas"; 60 sourceRoot = "${finalAttrs.src.name}/cuBLASLt"; 61 } 62 ); 63 64 cusolver = base.overrideAttrs ( 65 finalAttrs: _: { 66 pname = "cuda-library-samples-cusolver"; 67 sourceRoot = "${finalAttrs.src.name}/cuSOLVER/gesv"; 68 } 69 ); 70 71 cutensor = base.overrideAttrs ( 72 finalAttrs: prevAttrs: { 73 pname = "cuda-library-samples-cutensor"; 74 75 sourceRoot = "${finalAttrs.src.name}/cuTENSOR"; 76 77 buildInputs = prevAttrs.buildInputs or [ ] ++ [ cutensor ]; 78 79 cmakeFlags = prevAttrs.cmakeFlags or [ ] ++ [ 80 "-DCUTENSOR_EXAMPLE_BINARY_INSTALL_DIR=${builtins.placeholder "out"}/bin" 81 ]; 82 83 # CUTENSOR_ROOT is double escaped 84 postPatch = prevAttrs.postPatch or "" + '' 85 substituteInPlace CMakeLists.txt \ 86 --replace-fail "\''${CUTENSOR_ROOT}/include" "${lib.getDev cutensor}/include" 87 ''; 88 89 CUTENSOR_ROOT = cutensor; 90 91 meta = prevAttrs.meta or { } // { 92 broken = cutensor == null; 93 }; 94 } 95 ); 96 97 cusparselt = base.overrideAttrs ( 98 finalAttrs: prevAttrs: { 99 pname = "cuda-library-samples-cusparselt"; 100 101 sourceRoot = "${finalAttrs.src.name}/cuSPARSELt/matmul"; 102 103 buildInputs = prevAttrs.buildInputs or [ ] ++ lib.optionals (cudaOlder "11.4") [ cudatoolkit ]; 104 105 nativeBuildInputs = 106 prevAttrs.nativeBuildInputs or [ ] 107 ++ [ 108 cmake 109 addDriverRunpath 110 (lib.getDev cusparselt) 111 (lib.getDev libcusparse) 112 ] 113 ++ lib.optionals (cudaOlder "11.4") [ cudatoolkit ] 114 ++ lib.optionals (cudaAtLeast "11.4") [ 115 cuda_nvcc 116 (lib.getDev cuda_cudart) # <cuda_runtime_api.h> 117 ] 118 ++ lib.optionals (cudaAtLeast "12.0") [ 119 cuda_cccl # <nv/target> 120 ]; 121 122 postPatch = prevAttrs.postPatch or "" + '' 123 substituteInPlace CMakeLists.txt \ 124 --replace-fail "''${CUSPARSELT_ROOT}/lib64/libcusparseLt.so" "${lib.getLib cusparselt}/lib/libcusparseLt.so" \ 125 --replace-fail "''${CUSPARSELT_ROOT}/lib64/libcusparseLt_static.a" "${lib.getStatic cusparselt}/lib/libcusparseLt_static.a" 126 ''; 127 128 postInstall = prevAttrs.postInstall or "" + '' 129 mkdir -p $out/bin 130 cp matmul_example $out/bin/ 131 cp matmul_example_static $out/bin/ 132 ''; 133 134 CUDA_TOOLKIT_PATH = lib.getLib cudatoolkit; 135 CUSPARSELT_PATH = lib.getLib cusparselt; 136 137 meta = prevAttrs.meta or { } // { 138 broken = 139 # Base dependencies 140 (cusparselt == null || libcusparse == null) 141 # CUDA 11.4+ dependencies 142 || (cudaAtLeast "11.4" && (cuda_nvcc == null || cuda_cudart == null)) 143 # CUDA 12.0+ dependencies 144 || (cudaAtLeast "12.0" && cuda_cccl == null); 145 }; 146 } 147 ); 148}