libfmvoice: 0-unstable-2024-11-08 -> 0-unstable-2024-12-11 (#364919)
[NixPkgs.git] / pkgs / by-name / si / sirius / package.nix
blob9d1b48d4171cc63b2063d1b066d53ae073c7a91a
2   stdenv,
3   lib,
4   fetchFromGitHub,
5   cmake,
6   pkg-config,
7   mpi,
8   mpiCheckPhaseHook,
9   gfortran,
10   blas,
11   lapack,
12   gsl,
13   libxc,
14   hdf5,
15   spglib,
16   spfft,
17   spla,
18   costa,
19   umpire,
20   scalapack,
21   boost,
22   eigen,
23   libvdwxc,
24   enablePython ? false,
25   pythonPackages ? null,
26   llvmPackages,
27   cudaPackages,
28   rocmPackages,
29   config,
30   gpuBackend ? (
31     if config.cudaSupport then
32       "cuda"
33     else if config.rocmSupport then
34       "rocm"
35     else
36       "none"
37   ),
40 assert builtins.elem gpuBackend [
41   "none"
42   "cuda"
43   "rocm"
45 assert enablePython -> pythonPackages != null;
47 stdenv.mkDerivation rec {
48   pname = "SIRIUS";
49   version = "7.6.1";
51   src = fetchFromGitHub {
52     owner = "electronic-structure";
53     repo = pname;
54     rev = "v${version}";
55     hash = "sha256-JvI75AbthNThXep2jcriLTPC8GGiPgrg5nYCCbCi+EI=";
56   };
58   outputs = [
59     "out"
60     "dev"
61   ];
63   nativeBuildInputs = [
64     cmake
65     gfortran
66     pkg-config
67   ] ++ lib.optional (gpuBackend == "cuda") cudaPackages.cuda_nvcc;
69   buildInputs =
70     [
71       blas
72       lapack
73       gsl
74       libxc
75       hdf5
76       umpire
77       mpi
78       spglib
79       spfft
80       spla
81       costa
82       scalapack
83       boost
84       eigen
85       libvdwxc
86     ]
87     ++ lib.optionals (gpuBackend == "cuda") [
88       cudaPackages.cuda_cudart
89       cudaPackages.cuda_profiler_api
90       cudaPackages.cudatoolkit
91       cudaPackages.libcublas
92     ]
93     ++ lib.optionals (gpuBackend == "rocm") [
94       rocmPackages.clr
95       rocmPackages.rocblas
96     ]
97     ++ lib.optionals stdenv.hostPlatform.isDarwin [
98       llvmPackages.openmp
99     ]
100     ++ lib.optionals enablePython (
101       with pythonPackages;
102       [
103         python
104         pybind11
105       ]
106     );
108   propagatedBuildInputs =
109     [
110       (lib.getBin mpi)
111     ]
112     ++ lib.optionals enablePython (
113       with pythonPackages;
114       [
115         mpi4py
116         voluptuous
117         numpy
118         h5py
119         scipy
120         pyyaml
121       ]
122     );
124   CXXFLAGS = [
125     # GCC 13: error: 'uintptr_t' in namespace 'std' does not name a type
126     "-include cstdint"
127   ];
129   cmakeFlags =
130     [
131       "-DSIRIUS_USE_SCALAPACK=ON"
132       "-DSIRIUS_USE_VDWXC=ON"
133       "-DSIRIUS_CREATE_FORTRAN_BINDINGS=ON"
134       "-DSIRIUS_USE_OPENMP=ON"
135       "-DBUILD_TESTING=ON"
136     ]
137     ++ lib.optionals (gpuBackend == "cuda") [
138       "-DSIRIUS_USE_CUDA=ON"
139       "-DCUDA_TOOLKIT_ROOT_DIR=${cudaPackages.cudatoolkit}"
140       (lib.cmakeFeature "CMAKE_CUDA_ARCHITECTURES" cudaPackages.flags.cmakeCudaArchitecturesString)
141     ]
142     ++ lib.optionals (gpuBackend == "rocm") [
143       "-DSIRIUS_USE_ROCM=ON"
144       "-DHIP_ROOT_DIR=${rocmPackages.clr}"
145     ]
146     ++ lib.optionals enablePython [
147       "-DSIRIUS_CREATE_PYTHON_MODULE=ON"
148     ];
150   doCheck = true;
152   # Can not run parallel checks generally as it requires exactly multiples of 4 MPI ranks
153   # Even cpu_serial tests had to be disabled as they require scalapack routines in the sandbox
154   # and run into the same problem as MPI tests
155   checkPhase = ''
156     runHook preCheck
158     ctest --output-on-failure --label-exclude integration_test
160     runHook postCheck
161   '';
163   nativeCheckInputs = [
164     mpiCheckPhaseHook
165   ];
167   meta = with lib; {
168     description = "Domain specific library for electronic structure calculations";
169     homepage = "https://github.com/electronic-structure/SIRIUS";
170     license = licenses.bsd2;
171     platforms = platforms.linux;
172     maintainers = [ maintainers.sheepforce ];
173   };