nixpkgs/pkgs/by-name/wa/wannier90/package.nix
2023-12-04 17:06:47 +01:00

74 lines
1.6 KiB
Nix

{ stdenv
, lib
, gfortran
, blas
, lapack
, python3
, fetchFromGitHub
}:
assert (!blas.isILP64);
assert blas.isILP64 == lapack.isILP64;
stdenv.mkDerivation rec {
pname = "wannier90";
version = "3.1.0";
nativeBuildInputs = [ gfortran ];
buildInputs = [
blas
lapack
];
src = fetchFromGitHub {
owner = "wannier-developers";
repo = "wannier90";
rev = "v${version}";
hash = "sha256-+Mq7lM6WuwAnK/2FlDz9gNRIg2sRazQRezb3BfD0veY=";
};
# test cases are removed as error bounds of wannier90 are obviously to tight
postPatch = ''
rm -r test-suite/tests/testpostw90_{fe_kpathcurv,fe_kslicecurv,si_geninterp,si_geninterp_wsdistance}
rm -r test-suite/tests/testw90_example26 # Fails without AVX optimizations
patchShebangs test-suite/run_tests test-suite/testcode/bin/testcode.py
'';
configurePhase = ''
cp config/make.inc.gfort make.inc
'';
buildFlags = [ "all" "dynlib" ];
preInstall = ''
installFlagsArray+=(
PREFIX=$out
)
'';
postInstall = ''
cp libwannier.so $out/lib/libwannier.so
mkdir $out/include
find ./src/obj/ -name "*.mod" -exec cp {} $out/include/. \;
'';
doCheck = true;
checkInputs = [ python3 ];
checkTarget = [ "test-serial" ];
preCheck = ''
export OMP_NUM_THREADS=4
'';
enableParallelBuilding = true;
hardeningDisable = [ "format" ];
meta = with lib; {
description = "Calculation of maximally localised Wannier functions";
homepage = "https://github.com/wannier-developers/wannier90";
license = licenses.gpl2Plus;
platforms = [ "x86_64-linux" ];
maintainers = [ maintainers.sheepforce ];
};
}