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