{ 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 ' '#include ' ''; nativeBuildInputs = [ cmake gfortran pkg-config ] ++ lib.optional (gpuBackend == "cuda") cudaPackages.cuda_nvcc; buildInputs = [ blas lapack gsl libxc hdf5 spglib spfft spla costa scalapack boost eigen libvdwxc ] ++ lib.optionals (gpuBackend == "cuda") [ cudaPackages.cuda_cudart cudaPackages.cuda_profiler_api cudaPackages.cudatoolkit cudaPackages.libcublas ] ++ lib.optionals (gpuBackend == "rocm") [ rocmPackages.clr rocmPackages.rocblas ] ++ lib.optional stdenv.isDarwin llvmPackages.openmp ; propagatedBuildInputs = [ mpi ]; CXXFLAGS = [ # GCC 13: error: 'uintptr_t' in namespace 'std' does not name a type "-include cstdint" ]; 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 ]; }; }