build-bazel-package: added rm of extra local folders for toolchain configuration...
[NixPkgs.git] / pkgs / by-name / sp / spfft / package.nix
blob1045173353b3a811783c25a2a699d4771b1bc2f4
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   ),
23 assert builtins.elem gpuBackend [
24   "none"
25   "cuda"
26   "rocm"
29 stdenv.mkDerivation rec {
30   pname = "SpFFT";
31   version = "1.1.0";
33   src = fetchFromGitHub {
34     owner = "eth-cscs";
35     repo = pname;
36     rev = "v${version}";
37     hash = "sha256-hZdB/QcjL8rjvR1YZS+CHe5U5zxedpfDq6msMih4Elc=";
38   };
40   nativeBuildInputs = [
41     cmake
42     gfortran
43   ] ++ lib.optional (gpuBackend == "cuda") cudaPackages.cuda_nvcc;
45   buildInputs =
46     [
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;
61   cmakeFlags =
62     [
63       "-DSPFFT_OMP=ON"
64       "-DSPFFT_MPI=ON"
65       "-DSPFFT_SINGLE_PRECISION=OFF"
66       "-DSPFFT_FORTRAN=ON"
67       # Required due to broken CMake files
68       "-DCMAKE_INSTALL_LIBDIR=lib"
69       "-DCMAKE_INSTALL_INCLUDEDIR=include"
70     ]
71     ++ lib.optional (gpuBackend == "cuda") "-DSPFFT_GPU_BACKEND=CUDA"
72     ++ lib.optionals (gpuBackend == "rocm") [
73       "-DSPFFT_GPU_BACKEND=ROCM"
74       "-DHIP_ROOT_DIR=${rocmPackages.clr}"
75     ];
77   meta = with lib; {
78     description = "Sparse 3D FFT library with MPI, OpenMP, CUDA and ROCm support";
79     homepage = "https://github.com/eth-cscs/SpFFT";
80     license = licenses.bsd3;
81     maintainers = [ maintainers.sheepforce ];
82     platforms = platforms.linux;
83   };