base16-schemes: unstable-2024-06-21 -> unstable-2024-11-12
[NixPkgs.git] / pkgs / by-name / sp / spfft / package.nix
blob9423978ed24ef9d261ab85ac3890b4ac01e6f05b
1 { stdenv
2 , lib
3 , fetchFromGitHub
4 , fftw
5 , cmake
6 , mpi
7 , gfortran
8 , llvmPackages
9 , cudaPackages
10 , rocmPackages
11 , config
12 , gpuBackend ? (
13   if config.cudaSupport
14   then "cuda"
15   else if config.rocmSupport
16   then "rocm"
17   else "none"
21 assert builtins.elem gpuBackend [ "none" "cuda" "rocm" ];
23 stdenv.mkDerivation rec {
24   pname = "SpFFT";
25   version = "1.1.0";
27   src = fetchFromGitHub {
28     owner = "eth-cscs";
29     repo = pname;
30     rev = "v${version}";
31     hash = "sha256-hZdB/QcjL8rjvR1YZS+CHe5U5zxedpfDq6msMih4Elc=";
32   };
34   nativeBuildInputs = [
35     cmake
36     gfortran
37    ] ++ lib.optional (gpuBackend == "cuda") cudaPackages.cuda_nvcc;
39   buildInputs = [
40     fftw
41     mpi
42   ] ++ lib.optionals (gpuBackend == "cuda") [
43     cudaPackages.libcufft
44     cudaPackages.cuda_cudart
45   ] ++ lib.optionals (gpuBackend == "rocm") [
46     rocmPackages.clr
47     rocmPackages.rocfft
48     rocmPackages.hipfft
49   ] ++ lib.optional stdenv.hostPlatform.isDarwin llvmPackages.openmp
50   ;
52   cmakeFlags = [
53     "-DSPFFT_OMP=ON"
54     "-DSPFFT_MPI=ON"
55     "-DSPFFT_SINGLE_PRECISION=OFF"
56     "-DSPFFT_FORTRAN=ON"
57     # Required due to broken CMake files
58     "-DCMAKE_INSTALL_LIBDIR=lib"
59     "-DCMAKE_INSTALL_INCLUDEDIR=include"
60   ]
61   ++ lib.optional (gpuBackend == "cuda") "-DSPFFT_GPU_BACKEND=CUDA"
62   ++ lib.optionals (gpuBackend == "rocm") [
63     "-DSPFFT_GPU_BACKEND=ROCM"
64     "-DHIP_ROOT_DIR=${rocmPackages.clr}"
65   ];
68   meta = with lib; {
69     description = "Sparse 3D FFT library with MPI, OpenMP, CUDA and ROCm support";
70     homepage = "https://github.com/eth-cscs/SpFFT";
71     license = licenses.bsd3;
72     maintainers = [ maintainers.sheepforce ];
73     platforms = platforms.linux;
74   };