diff --git a/pkgs/development/libraries/science/math/atlas/default.nix b/pkgs/development/libraries/science/math/atlas/default.nix index 12ee83ca88d..74d20621089 100644 --- a/pkgs/development/libraries/science/math/atlas/default.nix +++ b/pkgs/development/libraries/science/math/atlas/default.nix @@ -1,27 +1,46 @@ -{ stdenv, fetchurl, gfortran }: +{ stdenv, fetchurl, gfortran, tolerateCpuTimingInaccuracy ? true }: + +let + optionalString = stdenv.lib.optionalString; +in stdenv.mkDerivation { name = "atlas-3.9.67"; - + src = fetchurl { url = mirror://sf/math-atlas/atlas3.9.67.tar.bz2; sha256 = "06xxlv440z8a3qmfrh17p28girv71c6awvpw5vhpspr0pcsgk1pa"; }; - # configure outside of the source directory + # Configure outside of the source directory. preConfigure = '' mkdir build; cd build; configureScript=../configure; ''; - # the manual says you should pass -fPIC as configure arg .. It works - configureFlags = "-Fa alg -fPIC" + - (if stdenv.isi686 then " -b 32" else ""); + # * The manual says you should pass -fPIC as configure arg. Not sure why, but + # it works. + # + # * Atlas aborts the build if it detects that some kind of CPU frequency + # scaling is active on the build machine because that feature offsets the + # performance timings. We ignore that check, however, because with binaries + # being pre-built on Hydra those timings aren't accurate for the local + # machine in the first place. + configureFlags = "-Fa alg -fPIC" + + optionalString stdenv.isi686 " -b 32" + + optionalString tolerateCpuTimingInaccuracy " -Si cputhrchk 0"; buildInputs = [ gfortran ]; doCheck = true; meta = { - description = "Atlas library"; + homepage = "http://math-atlas.sourceforge.net/"; + description = "Automatically Tuned Linear Algebra Software (ATLAS)"; license = "GPL"; - homepage = http://math-atlas.sourceforge.net/; + + longDescription = '' + The ATLAS (Automatically Tuned Linear Algebra Software) project is an ongoing + research effort focusing on applying empirical techniques in order to provide + portable performance. At present, it provides C and Fortran77 interfaces to a + portably efficient BLAS implementation, as well as a few routines from LAPACK. + ''; }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 57f73fb43fc..635b918d3a9 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8296,7 +8296,13 @@ let ### SCIENCE/MATH - atlas = callPackage ../development/libraries/science/math/atlas { }; + atlas = callPackage ../development/libraries/science/math/atlas { + # The build process measures CPU capabilities and optimizes the + # library to perform best on that particular machine. That is a + # great feature, but it's of limited use with pre-built binaries + # coming from a central build farm. + tolerateCpuTimingInaccuracy = true; + }; blas = callPackage ../development/libraries/science/math/blas { };