Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / by-name / si / sirius / package.nix
blob8518092203b8e6bf43706812fa50299e9bdaa0a7
1 { stdenv
2 , lib
3 , fetchFromGitHub
4 , cmake
5 , pkg-config
6 , mpi
7 , mpiCheckPhaseHook
8 , openssh
9 , gfortran
10 , blas
11 , lapack
12 , gsl
13 , libxc
14 , hdf5
15 , spglib
16 , spfft
17 , spla
18 , costa
19 , scalapack
20 , boost
21 , eigen
22 , libvdwxc
23 , llvmPackages
24 , cudaPackages
25 , rocmPackages
26 , config
27 , gpuBackend ? (
28   if config.cudaSupport
29   then "cuda"
30   else if config.rocmSupport
31   then "rocm"
32   else "none"
36 assert builtins.elem gpuBackend [ "none" "cuda" "rocm" ];
38 stdenv.mkDerivation rec {
39   pname = "SIRIUS";
40   version = "7.4.3";
42   src = fetchFromGitHub {
43     owner = "electronic-structure";
44     repo = pname;
45     rev = "v${version}";
46     hash = "sha256-s4rO+dePvtvn41wxCvbqgQGrEckWmfng7sPX2M8OPB0=";
47   };
49   postPatch = ''
50     substituteInPlace src/gpu/acc_blas_api.hpp \
51       --replace '#include <rocblas.h>' '#include <rocblas/rocblas.h>'
52   '';
54   nativeBuildInputs = [
55     cmake
56     gfortran
57     pkg-config
58   ];
60   buildInputs = [
61     blas
62     lapack
63     gsl
64     libxc
65     hdf5
66     spglib
67     spfft
68     spla
69     costa
70     scalapack
71     boost
72     eigen
73     libvdwxc
74   ]
75   ++ lib.optional (gpuBackend == "cuda") cudaPackages.cudatoolkit
76   ++ lib.optionals (gpuBackend == "rocm") [
77     rocmPackages.clr
78     rocmPackages.rocblas
79   ] ++ lib.optional stdenv.isDarwin llvmPackages.openmp
80   ;
82   propagatedBuildInputs = [ mpi ];
84   cmakeFlags = [
85     "-DUSE_SCALAPACK=ON"
86     "-DBUILD_TESTING=ON"
87     "-DUSE_VDWXC=ON"
88     "-DCREATE_FORTRAN_BINDINGS=ON"
89     "-DUSE_OPENMP=ON"
90     "-DBUILD_TESTING=ON"
91   ]
92   ++ lib.optionals (gpuBackend == "cuda") [
93     "-DUSE_CUDA=ON"
94     "-DCUDA_TOOLKIT_ROOT_DIR=${cudaPackages.cudatoolkit}"
95   ]
96   ++ lib.optionals (gpuBackend == "rocm") [
97     "-DUSE_ROCM=ON"
98     "-DHIP_ROOT_DIR=${rocmPackages.clr}"
99   ];
101   doCheck = true;
103   # Can not run parallel checks generally as it requires exactly multiples of 4 MPI ranks
104   checkPhase = ''
105     runHook preCheck
107     ctest --output-on-failure --label-exclude integration_test
108     ctest --output-on-failure -L cpu_serial
110     runHook postCheck
111   '';
113   nativeCheckInputs = [
114     mpiCheckPhaseHook
115     openssh
116   ];
118   meta = with lib; {
119     description = "Domain specific library for electronic structure calculations";
120     homepage = "https://github.com/electronic-structure/SIRIUS";
121     license = licenses.bsd2;
122     platforms = platforms.linux;
123     maintainers = [ maintainers.sheepforce ];
124   };