Merge remote-tracking branch 'origin/master' into stdenv-updates
This commit is contained in:
@@ -1,50 +1,65 @@
|
||||
{ stdenv, fetchurl, gfortran, tolerateCpuTimingInaccuracy ? true, shared ? false }:
|
||||
{ stdenv, fetchurl, gfortran, tolerateCpuTimingInaccuracy ? true, shared ? false
|
||||
, cpuConfig ? if stdenv.isi686 then "-b 32 -A 18 -V 1" else "-b 64 -A 31 -V 192"
|
||||
}:
|
||||
|
||||
# Atlas detects the CPU and optimizes its build accordingly. This is great when
|
||||
# the code is run on the same machine that built the binary, but in case of a
|
||||
# central build farm like Hydra, this feature is dangerous because the code may
|
||||
# be generated utilizing fancy features that users who download the binary
|
||||
# cannot execute.
|
||||
#
|
||||
# To avoid these issues, the build is configured using the 'cpuConfig'
|
||||
# parameter as follows:
|
||||
#
|
||||
# | x86 CPU | x86_64 CPU |
|
||||
# |---------------------------------------------+------------------------|
|
||||
# | -b 32 | -b 64 |
|
||||
# | -A 18 (Pentium II) | -A 31 (Athlon K7) |
|
||||
# | -V 1 (No SIMD: Pentium II doesn't have SSE) | -V 192 (SSE1 and SSE2) |
|
||||
#
|
||||
# Users who want to compile a highly optimized version of ATLAS that's suitable
|
||||
# for their local machine can override these settings accordingly.
|
||||
|
||||
let
|
||||
version = "3.10.1";
|
||||
|
||||
optionalString = stdenv.lib.optionalString;
|
||||
optional = stdenv.lib.optional;
|
||||
in
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "atlas-3.9.67";
|
||||
name = "atlas-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = mirror://sourceforge/math-atlas/atlas3.9.67.tar.bz2;
|
||||
sha256 = "06xxlv440z8a3qmfrh17p28girv71c6awvpw5vhpspr0pcsgk1pa";
|
||||
url = "mirror://sourceforge/math-atlas/atlas${version}.tar.bz2";
|
||||
sha256 = "11ncgdc7kzb2y2gqb3sgarm5saj9fr07r3h2yh2h5bja429b85d2";
|
||||
};
|
||||
|
||||
buildInputs = [ gfortran ];
|
||||
|
||||
# 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.
|
||||
patches = optional tolerateCpuTimingInaccuracy ./disable-timing-accuracy-check.patch;
|
||||
|
||||
# Configure outside of the source directory.
|
||||
preConfigure = '' mkdir build; cd build; configureScript=../configure; '';
|
||||
|
||||
# * -fPIC allows to build atlas inside shared objects, as octave does.
|
||||
# * -fPIC is passed even in non-shared builds so that the ATLAS code can be
|
||||
# used to inside of shared libraries, like Octave does.
|
||||
#
|
||||
# * 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.
|
||||
# * Atlas detects the cpu and does some tricks. For example, notices the
|
||||
# hydra AMD Family 10h computer, and uses a SSE trick for it (bit 17 of MXCSR)
|
||||
# available, for what I know, only in that family. So we hardcode K7
|
||||
# -A 31 = Athlon K7
|
||||
# -A 18 = Pentium II
|
||||
# -V 192 = SSE1|SSE2 (Or it takes SSE3 somehow in my machine without SSE3)
|
||||
# -V 1 = No SIMD (Pentium II does not have any SSE)
|
||||
# -t 0 = No threading
|
||||
configureFlags = "-Fa alg -fPIC -t 0"
|
||||
+ optionalString stdenv.isi686 " -b 32 -A 18 -V 1"
|
||||
+ optionalString stdenv.isx86_64 " -A 31 -V 192"
|
||||
+ optionalString tolerateCpuTimingInaccuracy " -Si cputhrchk 0"
|
||||
+ optionalString shared " --shared "
|
||||
;
|
||||
|
||||
buildInputs = [ gfortran ];
|
||||
# * -t 0 disables use of multi-threading. It's not quite clear what the
|
||||
# consequences of that setting are and whether it's necessary or not.
|
||||
configureFlags = "-Fa alg -fPIC -t 0 ${cpuConfig}" + optionalString shared " --shared";
|
||||
|
||||
doCheck = true;
|
||||
|
||||
meta = {
|
||||
homepage = "http://math-atlas.sourceforge.net/";
|
||||
description = "Automatically Tuned Linear Algebra Software (ATLAS)";
|
||||
license = "GPL";
|
||||
license = stdenv.lib.licenses.bsd3;
|
||||
|
||||
longDescription = ''
|
||||
The ATLAS (Automatically Tuned Linear Algebra Software) project is an ongoing
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
diff -ubr ATLAS-orig/CONFIG/src/config.c ATLAS/CONFIG/src/config.c
|
||||
--- ATLAS-orig/CONFIG/src/config.c 2013-02-06 11:23:47.078036878 +0100
|
||||
+++ ATLAS/CONFIG/src/config.c 2013-02-06 11:24:16.481120888 +0100
|
||||
@@ -711,17 +711,7 @@
|
||||
|
||||
int ProbeCPUThrottle(int verb, char *targarg, enum OSTYPE OS, enum ASMDIA asmb)
|
||||
{
|
||||
- int i, iret;
|
||||
- char *ln;
|
||||
- i = strlen(targarg) + 22 + 12;
|
||||
- ln = malloc(i*sizeof(char));
|
||||
- assert(ln);
|
||||
- sprintf(ln, "%s -O %d -s %d -t", targarg, OS, asmb);
|
||||
- iret = GetIntProbe(verb, ln, "arch", "CPU THROTTLE", 0);
|
||||
- free(ln);
|
||||
- if (iret) printf("CPU Throttling apparently enabled!\n");
|
||||
- else printf("Cannot detect CPU throttling.\n");
|
||||
- return(iret);
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
char *NewAppendedString_SFLAG(char *old, char *flag, char *str)
|
||||
Reference in New Issue
Block a user