Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
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}