at master 173 lines 3.5 kB view raw
1{ 2 lib, 3 stdenv, 4 fetchFromGitHub, 5 rocmUpdateScript, 6 cmake, 7 clr, 8 python3, 9 rocm-cmake, 10 sqlite, 11 boost, 12 fftw, 13 fftwFloat, 14 gtest, 15 openmp, 16 rocrand, 17 gpuTargets ? clr.localGpuTargets or clr.gpuTargets, 18}: 19 20stdenv.mkDerivation (finalAttrs: { 21 pname = "rocfft${clr.gpuArchSuffix}"; 22 version = "6.3.3"; 23 24 src = fetchFromGitHub { 25 owner = "ROCm"; 26 repo = "rocFFT"; 27 rev = "rocm-${finalAttrs.version}"; 28 hash = "sha256-RrxdwZ64uC7lQzyJI1eGHX2dmRnW8TfNThnuvuz5XWo="; 29 }; 30 31 nativeBuildInputs = [ 32 cmake 33 clr 34 python3 35 rocm-cmake 36 ]; 37 38 # FIXME: rocfft_aot_helper runs at the end of the build and has a risk of timing it out 39 # due to a long period with no terminal output 40 buildInputs = [ sqlite ]; 41 42 cmakeFlags = [ 43 "-DCMAKE_C_COMPILER=hipcc" 44 "-DCMAKE_CXX_COMPILER=hipcc" 45 "-DSQLITE_USE_SYSTEM_PACKAGE=ON" 46 # Manually define CMAKE_INSTALL_<DIR> 47 # See: https://github.com/NixOS/nixpkgs/pull/197838 48 "-DCMAKE_INSTALL_BINDIR=bin" 49 "-DCMAKE_INSTALL_LIBDIR=lib" 50 "-DCMAKE_INSTALL_INCLUDEDIR=include" 51 ] 52 ++ lib.optionals (gpuTargets != [ ]) [ 53 "-DAMDGPU_TARGETS=${lib.concatStringsSep ";" gpuTargets}" 54 ]; 55 56 passthru = { 57 test = stdenv.mkDerivation { 58 pname = "${finalAttrs.pname}-test"; 59 inherit (finalAttrs) version src; 60 61 sourceRoot = "${finalAttrs.src.name}/clients/tests"; 62 63 nativeBuildInputs = [ 64 cmake 65 clr 66 rocm-cmake 67 ]; 68 69 buildInputs = [ 70 boost 71 fftw 72 fftwFloat 73 finalAttrs.finalPackage 74 gtest 75 openmp 76 rocrand 77 ]; 78 79 cmakeFlags = [ 80 "-DCMAKE_C_COMPILER=hipcc" 81 "-DCMAKE_CXX_COMPILER=hipcc" 82 ]; 83 84 postInstall = '' 85 rm -r "$out/lib/fftw" 86 rmdir "$out/lib" 87 ''; 88 }; 89 90 benchmark = stdenv.mkDerivation { 91 pname = "${finalAttrs.pname}-benchmark"; 92 inherit (finalAttrs) version src; 93 94 sourceRoot = "${finalAttrs.src.name}/clients/rider"; 95 96 nativeBuildInputs = [ 97 cmake 98 clr 99 rocm-cmake 100 ]; 101 102 buildInputs = [ 103 boost 104 finalAttrs.finalPackage 105 openmp 106 (python3.withPackages ( 107 ps: with ps; [ 108 pandas 109 scipy 110 ] 111 )) 112 rocrand 113 ]; 114 115 cmakeFlags = [ 116 "-DCMAKE_C_COMPILER=hipcc" 117 "-DCMAKE_CXX_COMPILER=hipcc" 118 ]; 119 120 postInstall = '' 121 cp -a ../../../scripts/perf "$out/bin" 122 ''; 123 }; 124 125 samples = stdenv.mkDerivation { 126 pname = "${finalAttrs.pname}-samples"; 127 inherit (finalAttrs) version src; 128 129 sourceRoot = "${finalAttrs.src.name}/clients/samples"; 130 131 nativeBuildInputs = [ 132 cmake 133 clr 134 rocm-cmake 135 ]; 136 137 buildInputs = [ 138 boost 139 finalAttrs.finalPackage 140 openmp 141 rocrand 142 ]; 143 144 cmakeFlags = [ 145 "-DCMAKE_C_COMPILER=hipcc" 146 "-DCMAKE_CXX_COMPILER=hipcc" 147 ]; 148 149 installPhase = '' 150 runHook preInstall 151 mkdir "$out" 152 cp -a bin "$out" 153 runHook postInstall 154 ''; 155 }; 156 157 updateScript = rocmUpdateScript { 158 name = finalAttrs.pname; 159 inherit (finalAttrs.src) owner; 160 inherit (finalAttrs.src) repo; 161 }; 162 }; 163 164 requiredSystemFeatures = [ "big-parallel" ]; 165 166 meta = with lib; { 167 description = "FFT implementation for ROCm"; 168 homepage = "https://github.com/ROCm/rocFFT"; 169 license = with licenses; [ mit ]; 170 teams = [ teams.rocm ]; 171 platforms = platforms.linux; 172 }; 173})