nixpkgs/pkgs/by-name/si/sirius/package.nix

126 lines
2.3 KiB
Nix

{ stdenv
, lib
, fetchFromGitHub
, cmake
, pkg-config
, mpi
, mpiCheckPhaseHook
, openssh
, gfortran
, blas
, lapack
, gsl
, libxc
, hdf5
, spglib
, spfft
, spla
, costa
, scalapack
, boost
, eigen
, libvdwxc
, llvmPackages
, cudaPackages
, rocmPackages
, config
, gpuBackend ? (
if config.cudaSupport
then "cuda"
else if config.rocmSupport
then "rocm"
else "none"
)
}:
assert builtins.elem gpuBackend [ "none" "cuda" "rocm" ];
stdenv.mkDerivation rec {
pname = "SIRIUS";
version = "7.4.3";
src = fetchFromGitHub {
owner = "electronic-structure";
repo = pname;
rev = "v${version}";
hash = "sha256-s4rO+dePvtvn41wxCvbqgQGrEckWmfng7sPX2M8OPB0=";
};
postPatch = ''
substituteInPlace src/gpu/acc_blas_api.hpp \
--replace '#include <rocblas.h>' '#include <rocblas/rocblas.h>'
'';
nativeBuildInputs = [
cmake
gfortran
pkg-config
];
buildInputs = [
blas
lapack
gsl
libxc
hdf5
spglib
spfft
spla
costa
scalapack
boost
eigen
libvdwxc
]
++ lib.optional (gpuBackend == "cuda") cudaPackages.cudatoolkit
++ lib.optionals (gpuBackend == "rocm") [
rocmPackages.clr
rocmPackages.rocblas
] ++ lib.optional stdenv.isDarwin llvmPackages.openmp
;
propagatedBuildInputs = [ mpi ];
cmakeFlags = [
"-DUSE_SCALAPACK=ON"
"-DBUILD_TESTING=ON"
"-DUSE_VDWXC=ON"
"-DCREATE_FORTRAN_BINDINGS=ON"
"-DUSE_OPENMP=ON"
"-DBUILD_TESTING=ON"
]
++ lib.optionals (gpuBackend == "cuda") [
"-DUSE_CUDA=ON"
"-DCUDA_TOOLKIT_ROOT_DIR=${cudaPackages.cudatoolkit}"
]
++ lib.optionals (gpuBackend == "rocm") [
"-DUSE_ROCM=ON"
"-DHIP_ROOT_DIR=${rocmPackages.clr}"
];
doCheck = true;
# Can not run parallel checks generally as it requires exactly multiples of 4 MPI ranks
checkPhase = ''
runHook preCheck
ctest --output-on-failure --label-exclude integration_test
ctest --output-on-failure -L cpu_serial
runHook postCheck
'';
nativeCheckInputs = [
mpiCheckPhaseHook
openssh
];
meta = with lib; {
description = "Domain specific library for electronic structure calculations";
homepage = "https://github.com/electronic-structure/SIRIUS";
license = licenses.bsd2;
platforms = platforms.linux;
maintainers = [ maintainers.sheepforce ];
};
}