Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at devShellTools-shell 83 lines 1.7 kB view raw
1{ 2 stdenv, 3 lib, 4 fetchFromGitHub, 5 fftw, 6 cmake, 7 mpi, 8 gfortran, 9 llvmPackages, 10 cudaPackages, 11 rocmPackages, 12 config, 13 gpuBackend ? ( 14 if config.cudaSupport then 15 "cuda" 16 else if config.rocmSupport then 17 "rocm" 18 else 19 "none" 20 ), 21}: 22 23assert builtins.elem gpuBackend [ 24 "none" 25 "cuda" 26 "rocm" 27]; 28 29stdenv.mkDerivation rec { 30 pname = "SpFFT"; 31 version = "1.1.1"; 32 33 src = fetchFromGitHub { 34 owner = "eth-cscs"; 35 repo = "SpFFT"; 36 rev = "v${version}"; 37 hash = "sha256-Qc/omdRv7dW9NJUOczMZJKhc+Z/sXeIxv3SbpegAGdU="; 38 }; 39 40 nativeBuildInputs = [ 41 cmake 42 gfortran 43 ] 44 ++ lib.optional (gpuBackend == "cuda") cudaPackages.cuda_nvcc; 45 46 buildInputs = [ 47 fftw 48 mpi 49 ] 50 ++ lib.optionals (gpuBackend == "cuda") [ 51 cudaPackages.libcufft 52 cudaPackages.cuda_cudart 53 ] 54 ++ lib.optionals (gpuBackend == "rocm") [ 55 rocmPackages.clr 56 rocmPackages.rocfft 57 rocmPackages.hipfft 58 ] 59 ++ lib.optional stdenv.hostPlatform.isDarwin llvmPackages.openmp; 60 61 cmakeFlags = [ 62 "-DSPFFT_OMP=ON" 63 "-DSPFFT_MPI=ON" 64 "-DSPFFT_SINGLE_PRECISION=OFF" 65 "-DSPFFT_FORTRAN=ON" 66 # Required due to broken CMake files 67 "-DCMAKE_INSTALL_LIBDIR=lib" 68 "-DCMAKE_INSTALL_INCLUDEDIR=include" 69 ] 70 ++ lib.optional (gpuBackend == "cuda") "-DSPFFT_GPU_BACKEND=CUDA" 71 ++ lib.optionals (gpuBackend == "rocm") [ 72 "-DSPFFT_GPU_BACKEND=ROCM" 73 "-DHIP_ROOT_DIR=${rocmPackages.clr}" 74 ]; 75 76 meta = with lib; { 77 description = "Sparse 3D FFT library with MPI, OpenMP, CUDA and ROCm support"; 78 homepage = "https://github.com/eth-cscs/SpFFT"; 79 license = licenses.bsd3; 80 maintainers = [ maintainers.sheepforce ]; 81 platforms = platforms.linux; 82 }; 83}