diff --git a/pkgs/by-name/wa/wannier90/package.nix b/pkgs/by-name/wa/wannier90/package.nix new file mode 100644 index 000000000000..9a06bc5faabf --- /dev/null +++ b/pkgs/by-name/wa/wannier90/package.nix @@ -0,0 +1,73 @@ +{ 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 ]; + }; +}