Ticket #10508: atlas-3.10.1.p0.diff
File atlas-3.10.1.p0.diff, 74.2 KB (added by , 8 years ago) |
---|
-
.hgignore
# HG changeset patch # User Jean-Pierre Flori <jean-pierre.flor@ssi.gouv.fr> # Date 1368607040 -7200 # Node ID 511e479516100247f47ebb3c1be86242f29025dd # Parent aa0dd68fa3342f8925da2521fc9ba2e1482c20a3 #10508: Update ATLAS to version 3.10.1 and LAPACK to version 3.4.2 diff --git a/.hgignore b/.hgignore
a b 1 1 src 2 lapack.*tar 3 patches/ATLAS-lib/Makefile.in 4 patches/ATLAS-lib/aclocal.m4 5 patches/ATLAS-lib/configure$ 6 patches/ATLAS-lib/config.guess 7 patches/ATLAS-lib/config.sub 8 patches/ATLAS-lib/install-sh 9 patches/ATLAS-lib/ltmain.sh 10 patches/ATLAS-lib/m4 11 patches/ATLAS-lib/missing -
SPKG.txt
diff --git a/SPKG.txt b/SPKG.txt
a b 2 2 3 3 == Description == 4 4 5 This spkg builds ATLAS for Sage. It is build per default on Linux , but should6 also work on OSX and Solaris.5 This spkg builds ATLAS for Sage. It is build per default on Linux and 6 Solaris, but should also work on OSX and Cygwin. 7 7 8 8 == License == 9 9 10 10 3-clause BSD 11 11 12 12 == SPKG Maintainers == 13 13 14 * David Kirkby 14 15 * William Stein 16 * Volker Braun 15 17 16 18 == Upstream Contact == 17 19 18 20 * Atlas devel mailing list. 19 20 21 * Clint Whaley has frequently answered questions from the Sage project 21 22 22 23 == Dependencies == 23 24 24 25 * Python 25 26 * Fortran 26 * Lapack27 27 28 28 == Build Instructions/Notes == 29 29 30 30 * patches/archinfo_linux.c.patch: Fix Itanium2 support on modern 31 31 RHEL 5 and SLES 10 systems 32 * patches/archinfo_x86.c.patch: add cpuid support for Pentium D, E models33 * patches/Make.top.patch: add make install target for shared libs34 32 * patches/probe_comp.c.patch: work around -m64 issue on Itanium2 35 * Tuning info for K732SSE1.tgz, PM32SSE2.tgz and PPCG432.tgz 36 * Changes linker flags on Solaris if the Sun linker is used. 37 * AN UPDATE TO THE LATEST ATLAS IS WELL OVERDUE, BUT THIS IS NON-TRIVIAL 38 * Changing this package, which takes a long time to build, so it (and the 39 Fortran package) did not use Python, would allow the ATLAS build to be 40 started sooner in parallel builds. This should reduce the overall time to 41 build Sage. 42 * The package is never installed on Cygwin or OS X. 33 * patches/long_filenames.patch: fix for long filenames (>128 chars) 34 * patches/shell.patch: replace two instances of "test -e" by "test -f", 35 as the former is not portable (in particular for the Solaris shell). 36 * lapack-x.y.z.tgz: The netlib lapack tarball. If you update this, 37 make sure you also update the LAPACK_TARBALL variable in 38 spkg-install. 39 * If you update atlas to a new version make sure that the 40 ATLAS_OSTYPE, ATLAS_MACHTYPE, and ATLAS_ISAEXT variables in 41 spkg-install remain in sync with atlas' CONFIG/include/atlconf.h 42 * The package is never installed on Cygwin or OS X, unless you set 43 SAGE_ATLAS_ARCH. 43 44 44 The package can be configured via two environment variables: 45 We are using a dummy autotools/libtools project (see 46 patches/ATLAS-lib) to repack the static ATLAS libraries into shared 47 libraries. 48 49 The package can be configured via three environment variables: 45 50 46 51 * SAGE_ATLAS_LIB=path 47 52 If this environment variable is set, the libraries libatlas, … … 54 59 The given architectural default and instruction set extensions are 55 60 used instead of the empirical tuning. Available architectures are 56 61 57 POWER3, POWER4, POWER5, PPCG4, PPCG5, P5, P5MMX, PPRO, PII, PIII, 58 PM, CoreSolo, CoreDuo, Core2Solo, Core2, Corei7, P4, P4E, 59 Efficeon, K7, HAMMER, AMD64K10h, UNKNOWNx86, IA64Itan, IA64Itan2, 60 USI, USII, USIII, USIV, UnknownUS, MIPSR1xK, MIPSICE9 62 POWER3, POWER4, POWER5, PPCG4, PPCG5, POWER6, POWER7, IBMz9, 63 IBMz10, IBMz196, x86x87, x86SSE1, x86SSE2, x86SSE3, P5, P5MMX, 64 PPRO, PII, PIII, PM, CoreSolo, CoreDuo, Core2Solo, Core2, Corei1, 65 Corei2, Atom, P4, P4E, Efficeon, K7, HAMMER, AMD64K10h, AMDDOZER, 66 UNKNOWNx86, IA64Itan, IA64Itan2, USI, USII, USIII, USIV, UST2, 67 UnknownUS, MIPSR1xK, MIPSICE9, ARMv7 61 68 62 69 and instruction set extensions are 63 70 64 AltiVec, SSE3, SSE2, SSE1, 3DNow71 VSX, AltiVec, AVXMAC, AVXFMA4, AVX, SSE3, SSE2, SSE1, 3DNow, NEON 65 72 66 73 In addition, you can also set 67 74 … … 73 80 74 81 For example, 75 82 76 SAGE_ATLAS_ARCH=Corei 7,SSE3,SSE2,SSE183 SAGE_ATLAS_ARCH=Corei2,AVX,SSE3,SSE2,SSE1 77 84 78 85 would be appropriate for a Core i7 CPU. 79 86 80 == TODO == 81 82 * The build is currently disabled on OSX until we sort out some 83 linking issues on OSX. 84 85 * On FreeBSD dynamic libraries don't work since the wrong flags are 86 passed to the linker. This will be fixed soon. 87 * If SAGE_ATLAS_SAVE_ARCHDEF = <path> is given, then a new archdef 88 file is created and saved to the given path. 87 89 88 90 == ChangeLog == 89 91 92 === atlas-3.10.1.p0, lapack-3.4.2 (Jean-Pierre Flori, 26 February 2013) === 93 * Trac #10508: Update ATLAS to version 3.10.1 and LAPACK to version 3.4.2. 94 * Removed patches integrated upstream. 95 * Add shell.patch to correctly build LAPACK on Solaris. 96 * Replace os.system() by subprocess.call() 97 98 === atlas-3.10.0.p1, lapack-3.4.1 (Volker Braun, September 20 2012) === 99 * Trac #10508: Fix for long file names. 100 * Disable tuning on Itanium, go straight to "fast". 101 102 === atlas-3.10.0.p0, lapack-3.4.1 (Jeroen Demeyer, 19 September 2012) === 103 * Trac #10508: re-run autotools in patches/ATLAS-lib to fix timestamps. 104 * Re-download sources to fix timestamps. 105 * Remove backup files (ending with ~). 106 * Uncompress lapack tarball, yielding a smaller spkg. 107 108 === atlas-3.10.0, lapack-3.4.1 (Volker Braun, July 11 2012) === 109 * Stable release 110 * Now OSX and Cygwin will attempt to build if SAGE_ATLAS_ARCH is set. 111 112 === atlas-3.9.85, lapack-3.4.1 (Volker Braun, July 9 2012) === 113 * Should be identical to the next stable release 114 115 === atlas-3.9.84, lapack-3.4.1 (Volker Braun, July 8 2012) === 116 * Update to the newest upstream version 117 * flush before os.system() 118 * completely new shared library build system 119 120 === atlas-3.9.80, lapack-3.4.1 (Volker Braun, June 23rd 2012) === 121 * Update to the newest upstream version 122 * remove obsoleted patches 123 124 === atlas-3.9.68, lapack-3.4.0 (Volker Braun, Jeroen Demeyer, March 6th 2012) === 125 * In src/CONFIG/src/Makefile, change "rm -f" to "rm -rf" in 126 the "clean" rule to support Xcode creating directories like 127 xspew.dSYM. 128 * update to latest upstream version 129 * Make atlas respect CC environment variable. 130 * Cygwin library name fix. 131 132 === atlas-3.9.32, lapack-3.3.0 (Volker Braun, December 5th 2010) === 133 * Introduce the SAGE_ATLAS_ARCH environment variable. 134 * Update to the developer release atlas-3.9.32 according to advice of 135 Clint Whaley (ATLAS developer). 136 * Now includes LAPACK source tarball. 137 90 138 === atlas-3.8.4.p1 (Jeroen Demeyer, 15 January 2012) === 91 139 * Trac #12312: Completely disable parallel make everywhere 92 140 … … 311 359 === atlas-3.7.37 (Michael Abshoff, Aug. 15th, 2007) === 312 360 * new upstream release (3.7.37), initial release 313 361 * {{{make check}}} added in spkg-check 314 315 ToDo316 317 * compile threading support conditionally318 -
configuration.py
diff --git a/configuration.py b/configuration.py
a b 13 13 # strings: 14 14 # 15 15 # system: Linux, SunOS, Darwin, FreeBSD, CYGWIN 16 # release: (Version number of the operating system, output of uname -r) 16 17 # machine: i386, x86_64, # Linux, Darwin, *BSD 17 18 # sun4u, i86pc # SunOS 18 19 # processor: i386, x86_64, powerpc, sparc 19 20 # bits: 32bit, 64bit 20 21 # fortran: g95, gfortran 21 # ld: GNU, Solaris 22 # ld: GNU, Solaris, Darwin 22 23 23 24 # The following pre-defined boolean values are determined from the 24 25 # strings. The keys are distinguished by a question mark at the 25 26 # end. If possible use these keys as they guard against typos. 26 27 # 27 28 # Linux?, Solaris?, Darwin?, FreeBSD?, CYGWIN? # system 29 # OS_X_Lion? # release 28 30 # Intel?, PPC?, SPARC? # processor 29 31 # 64bit?, 32bit? # bit width 30 32 # fortran_g95?, fortran_GNU? # sage_fortran 31 # linker_GNU?, linker_Solaris? 33 # linker_GNU?, linker_Solaris?, linker_Darwin? # ld 32 34 33 35 34 36 ###################################################################### … … 73 75 shutil.copy2(filename, destination) 74 76 75 77 78 def ln(source, destination): 79 """ 80 Portable implementation of "ln -sf" 81 """ 82 if os.path.exists(destination): 83 os.remove(destination) 84 print 'Linking', source, 'to', destination 85 os.symlink(source, destination) 86 87 88 def is_executable_file(fpath): 89 """ 90 Check that `fpath` is a file and executable (ie not a directory with +x set) 91 """ 92 return os.path.isfile(fpath) and os.access(fpath, os.X_OK) 93 94 def which(program): 95 """ 96 Portable implementation of "which" 97 """ 98 fpath, fname = os.path.split(program) 99 if fpath != '': 100 return program 101 for path in os.environ['PATH'].split(os.pathsep): 102 f = os.path.join(path, program) 103 if is_executable_file(f): 104 return f 105 raise ValueError('The program '+program+' is not in the $PATH.') 106 76 107 class edit_in_place(object): 77 108 """ 78 109 Edit a file in-place by search/replacing regular expressions. … … 102 133 except KeyError: 103 134 conf['system'] = platform.system() 104 135 136 try: 137 conf['release'] = subprocess.check_output(['uname', '-r']).strip() 138 except subprocess.CalledProcessError: 139 conf['release'] = "" 140 105 141 conf['Linux?' ] = (conf['system'] == 'Linux') 106 142 conf['Solaris?'] = (conf['system'] == 'SunOS') 107 143 conf['Darwin?' ] = (conf['system'] == 'Darwin') 144 conf['OS_X_Lion?'] = (conf['Darwin?'] and conf['release'].startswith('11.')) 108 145 conf['FreeBSD?'] = (conf['system'] == 'FreeBSD') 109 146 conf['CYGWIN?' ] = (conf['system'] == 'CYGWIN') 110 147 … … 114 151 115 152 conf['Intel?'] = (platform.machine() in ('i386', 'i486', 'i586', 'i686', 'x86_64', 116 153 'AMD64', 'i86pc')) 117 conf['IA64?'] = (platform.processor() == 'ia64') 154 conf['IA64?'] = ((platform.processor() == 'ia64') 155 or (platform.machine() == 'ia64')) 118 156 conf['PPC?'] = (platform.processor() == 'powerpc') 119 157 conf['SPARC?'] = (platform.processor() == 'sparc') 120 158 159 conf['generic_binary?'] = (os.environ.get('SAGE_FAT_BINARY', 'no') == 'yes') 121 160 122 161 ###################################################################### 123 162 ### bit width … … 178 217 conf['ld'] = 'GNU' 179 218 elif 'Solaris' in ld_version: 180 219 conf['ld'] = 'Solaris' 220 elif 'Apple' in ld_version: 221 conf['ld'] = 'Darwin' 181 222 else: 182 223 print 'Unknown linker: '+ld_version 183 224 conf['ld'] = None 184 225 185 226 conf['linker_GNU?'] = (conf['ld'] == 'GNU') 186 227 conf['linker_Solaris?'] = (conf['ld'] == 'Solaris') 228 conf['linker_Darwin?'] = (conf['ld'] == 'Darwin') 187 229 188 230 189 231 if conf['Solaris?'] and conf['linker_GNU?']: -
new file patches/ARCHS/IA64Itan264.tar.bz2
diff --git a/patches/ARCHS/IA64Itan264.tar.bz2 b/patches/ARCHS/IA64Itan264.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..8fa1890001f04dbdf4a135e376c400ba43313389 GIT binary patch literal 6886 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
-
new file patches/ARCHS/x86SSE264SSE2.tar.bz2
diff --git a/patches/ARCHS/x86SSE264SSE2.tar.bz2 b/patches/ARCHS/x86SSE264SSE2.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..467387b15fdb217279f4a49cfc71fde15b2a1037 GIT binary patch literal 8121 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 Tm8$hnL%?0h6yZWa@X&(@jx07n
-
new file patches/ATLAS-lib/Makefile.am
diff --git a/patches/ATLAS-lib/Makefile.am b/patches/ATLAS-lib/Makefile.am new file mode 100644
- + 1 ACLOCAL_AMFLAGS = -I m4 2 3 # Replace with the actual destination directory 4 SO_VERSION=3:0:1 5 6 # You shouldn't have to customize anything from here on 7 8 ATLAS_SERIAL_LIBS=libatlas.la libcblas.la libf77blas.la liblapack.la 9 10 ATLAS_PARALLEL_LIBS=libptcblas.la libptf77blas.la libptlapack.la 11 12 all: all_parallel 13 14 all_serial: $(ATLAS_SERIAL_LIBS) 15 16 all_parallel: all_serial $(ATLAS_PARALLEL_LIBS) 17 18 clean: 19 $(RM) -r -f .libs *.la *-obj 20 21 install: install_parallel 22 23 install_serial: $(ATLAS_SERIAL_LIBS) 24 $(MKDIR_P) @libdir@ 25 @LIBTOOL@ --mode=install $(INSTALL) -c libatlas.la @libdir@/libatlas.la 26 @LIBTOOL@ --mode=install $(INSTALL) -c libcblas.la @libdir@/libcblas.la 27 @LIBTOOL@ --mode=install $(INSTALL) -c libf77blas.la @libdir@/libf77blas.la 28 @LIBTOOL@ --mode=install $(INSTALL) -c liblapack.la @libdir@/liblapack.la 29 @LIBTOOL@ --finish @libdir@ 30 31 install_parallel: install_serial $(ATLAS_PARALLEL_LIBS) 32 $(MKDIR_P) @libdir@ 33 @LIBTOOL@ --mode=install $(INSTALL) -c libptcblas.la @libdir@/libptcblas.la 34 @LIBTOOL@ --mode=install $(INSTALL) -c libptf77blas.la @libdir@/libptf77blas.la 35 @LIBTOOL@ --mode=install $(INSTALL) -c libptlapack.la @libdir@/libptlapack.la 36 @LIBTOOL@ --finish @libdir@ 37 38 39 # In presence of multiple definitions of thread related functions, use the ones from *_mut.o 40 # Works with all nm output formats (BSD/POSIX/System V) 41 libatlas.la: libatlas.a 42 -$(RM) -r -f libatlas-obj 43 $(MKDIR) libatlas-obj 44 cd libatlas-obj && $(AR) x ../$< 45 if [ `$(NM) -g $< | $(EGREP) -w 'ATL_(Set|Reset|Free|Dec)AtomicCount' | $(GREP) -w T | wc -l` -gt 4 ]; then \ 46 $(RM) `ls -1 libatlas-obj/ATL_{Set,Reset,Free,Dec}AtomicCount_*.o | $(GREP) -v '_mut.o$$'`; \ 47 fi 48 @LIBTOOL@ --tag=CC --mode=link $(CC) @LIBTOOL_TYPE@ \ 49 -o $@ libatlas-obj/*.o \ 50 @PTHREAD_LIB@ -lm \ 51 -rpath @libdir@ -version-info $(SO_VERSION) 52 53 54 libcblas.la: libcblas.a libatlas.la 55 -$(RM) -r -f libcblas-obj 56 $(MKDIR) libcblas-obj 57 cd libcblas-obj && $(AR) x ../$< 58 @LIBTOOL@ --tag=CC --mode=link $(CC) @LIBTOOL_TYPE@ \ 59 -o $@ libcblas-obj/*.o \ 60 -latlas \ 61 -rpath @libdir@ -version-info $(SO_VERSION) 62 63 64 libptcblas.la: libptcblas.a libatlas.la 65 -$(RM) -r -f libptcblas-obj 66 $(MKDIR) libptcblas-obj 67 cd libptcblas-obj && $(AR) x ../$< 68 @LIBTOOL@ --tag=CC --mode=link $(CC) @LIBTOOL_TYPE@ \ 69 -o $@ libptcblas-obj/*.o \ 70 @PTHREAD_LIB@ -latlas \ 71 -rpath @libdir@ -version-info $(SO_VERSION) 72 73 74 libf77blas.la: libf77blas.a libatlas.la 75 -$(RM) -r -f libf77blas-obj 76 $(MKDIR) libf77blas-obj 77 cd libf77blas-obj && $(AR) x ../$< 78 @LIBTOOL@ --tag=F77 --mode=link $(F77) @LIBTOOL_TYPE@ \ 79 -o $@ libf77blas-obj/*.o \ 80 -latlas \ 81 -rpath @libdir@ -version-info $(SO_VERSION) 82 83 libptf77blas.la: libptf77blas.a libatlas.la 84 -$(RM) -r -f libptf77blas-obj 85 $(MKDIR) libptf77blas-obj 86 cd libptf77blas-obj && $(AR) x ../$< 87 @LIBTOOL@ --tag=F77 --mode=link $(F77) @LIBTOOL_TYPE@ \ 88 -o $@ libptf77blas-obj/*.o \ 89 @PTHREAD_LIB@ -latlas \ 90 -rpath @libdir@ -version-info $(SO_VERSION) 91 92 libf77refblas.la: libf77refblas.a 93 -$(RM) -r -f libf77refblas-obj 94 $(MKDIR) libf77refblas-obj 95 cd libf77refblas-obj && $(AR) x ../$< 96 @LIBTOOL@ --tag=F77 --mode=link $(F77) @LIBTOOL_TYPE@ \ 97 -o $@ libf77refblas-obj/*.o \ 98 -latlas \ 99 -rpath @libdir@ -version-info $(SO_VERSION) 100 101 liblapack.la: liblapack.a libatlas.la libcblas.la libf77blas.la 102 -$(RM) -r -f liblapack-obj 103 $(MKDIR) liblapack-obj 104 cd liblapack-obj && $(AR) x ../$< 105 @LIBTOOL@ --tag=F77 --mode=link $(F77) @LIBTOOL_TYPE@ \ 106 -o $@ liblapack-obj/*.o \ 107 -latlas -lcblas -lf77blas -lm \ 108 -rpath @libdir@ -version-info $(SO_VERSION) 109 110 libptlapack.la: libptlapack.a libatlas.la libptcblas.la libptf77blas.la 111 -$(RM) -r -f libptlapack-obj 112 $(MKDIR) libptlapack-obj 113 cd libptlapack-obj && $(AR) x ../$< 114 @LIBTOOL@ --tag=F77 --mode=link $(F77) @LIBTOOL_TYPE@ \ 115 -o $@ libptlapack-obj/*.o \ 116 @PTHREAD_LIB@ -latlas -lptcblas -lptf77blas -lm \ 117 -rpath @libdir@ -version-info $(SO_VERSION) 118 119 120 .PHONY: all all_serial all_parallel build install install_serial install_parallel clean -
new file patches/ATLAS-lib/README
diff --git a/patches/ATLAS-lib/README b/patches/ATLAS-lib/README new file mode 100644
- + 1 This is a stub autotools project to generate the system-dependent 2 libtool script. Nothing is compiled here. The Makefile.am unpacks the 3 atlas static libraries and repacks them into shared libraries. -
new file patches/ATLAS-lib/configure.ac
diff --git a/patches/ATLAS-lib/configure.ac b/patches/ATLAS-lib/configure.ac new file mode 100644
- + 1 AC_INIT([ATLAS],[3.10.1]) 2 AM_INIT_AUTOMAKE(foreign) 3 4 LT_INIT 5 6 AC_PROG_CC 7 AC_PROG_F77 8 9 AC_CONFIG_FILES([Makefile]) 10 AC_CONFIG_MACRO_DIR([m4]) 11 12 AC_CHECK_LIB(pthread, pthread_create, [PTHREAD_LIB="-lpthread"]) 13 AC_SUBST(PTHREAD_LIB) 14 15 AC_ARG_ENABLE([static], 16 [AS_HELP_STRING([--enable-static], 17 [also install static libtool library (default: no)])]) 18 AS_IF([test "x$enable_static" = "xyes"], 19 [libtool_type=""], 20 [libtool_type=-shared]) 21 AC_SUBST(LIBTOOL_TYPE, [$libtool_type]) 22 23 AC_OUTPUT -
new file patches/Makefile.patch
diff --git a/patches/Makefile.patch b/patches/Makefile.patch new file mode 100644
- + 1 --- src/CONFIG/src/Makefile 2012-06-23 17:27:27.000000000 +0100 2 +++ new/CONFIG/src/Makefile 2012-06-24 03:05:52.043151077 +0100 3 @@ -580,6 +580,6 @@ 4 confclean: $(CLEANdep) 5 rm -f *core* *.o config?.out 6 clean : $(CLEANdep) 7 - rm -f *.o x* config?.out *core* 8 + rm -rf *.o x* config?.out *core* 9 cleanall: clean 10 $(MAKE) -f Make.top clean -
patches/archinfo_linux.c.patch
diff --git a/patches/archinfo_linux.c.patch b/patches/archinfo_linux.c.patch
a b 1 --- archinfo_linux.c.orig 2011-06-15 10:25:07.837647902 -0700 2 +++ archinfo_linux.c 2011-06-15 10:26:16.728647870 -0700 3 @@ -100,12 +100,12 @@ 1 --- src/CONFIG/src/backend/archinfo_linux.c 2012-06-23 17:27:27.000000000 +0100 2 +++ new/CONFIG/src/backend/archinfo_linux.c 2012-06-24 03:17:47.297954105 +0100 3 @@ -117,7 +117,7 @@ 4 } 4 5 break; 5 6 case AFIA64: 6 res[0] = '\0'; 7 - ierr = CmndOneLine(NULL, "fgrep 'Itanium' /proc/cpuinfo", res); 8 + ierr = CmndOneLine(NULL, "fgrep 'IA-64' /proc/cpuinfo", res); 9 if (ierr || res[0] == '\0') 10 ierr = CmndOneLine(NULL, "fgrep \"model name\" /proc/cpuinfo", res); 11 if (!ierr && res[0] != '\0') 7 - res = atlsys_1L(NULL, "fgrep 'Itanium' /proc/cpuinfo", 0, 0); 8 + res = atlsys_1L(NULL, "fgrep 'IA-64' /proc/cpuinfo", 0, 0); 9 if (res && res[0] == '\0') 12 10 { 13 - if (strstr(res, "Itanium 2") || strstr(res, "McKinley")) 14 + if (strstr(res, "IA-64") || strstr(res, "McKinley")) 15 mach = IA64Itan2; 16 else if (strstr(res, "Itanium")) mach = IA64Itan; 17 } 11 free(res); 12 @@ -129,7 +129,7 @@ 13 { 14 if (res[0] != '\0') 15 { 16 - if (strstr(res, "Itanium 2") || strstr(res, "McKinley")) 17 + if (strstr(res, "IA-64") || strstr(res, "McKinley")) 18 mach = IA64Itan2; 19 else if (strstr(res, "Itanium")) mach = IA64Itan; 20 } -
new file patches/atlas-config
diff --git a/patches/atlas-config b/patches/atlas-config new file mode 100755
- + 1 #!/usr/bin/env python 2 3 import sys, errno, os, platform, time, glob, subprocess, signal, argparse 4 5 parser = argparse.ArgumentParser( 6 description='(Re-)Build ATLAS (http://math-atlas.sourceforge.net) ' 7 'according to the SAGE_ATLAS_ARCH environment variable') 8 9 parser.add_argument('--unthrottle', nargs=1, type=int, 10 help='switch CPU throttling off until PID finishes', 11 metavar='PID') 12 13 parser.add_argument('--archdef', action='store_const', const=True, 14 help='build archdef tarball and save it to the current directory') 15 16 17 def pid_exists(pid): 18 """ 19 Check whether pid exists in the current process table. 20 """ 21 if pid < 0: 22 return False 23 try: 24 os.kill(pid, 0) 25 except OSError, e: 26 return e.errno == errno.EPERM 27 else: 28 return True 29 30 31 def unthrottle_posix(pid): 32 cpus = list(glob.glob('/sys/devices/system/cpu/cpu*/cpufreq/scaling_governor')) 33 scaling_governor = [] 34 for cpu in cpus: 35 with open(cpu, 'r') as f: 36 scaling_governor.append(f.readline()) 37 for cpu in cpus: 38 with open(cpu, 'w') as f: 39 f.write('performance') 40 41 def signal_handler(signum, frame): 42 print 'Signal hanadler called with signal', signum 43 for cpu, governor in zip(cpus, scaling_governor): 44 with open(cpu, 'w') as f: 45 f.write(governor) 46 print 'Reverted throttling to the previous behaviour.' 47 sys.exit(0) 48 49 signal.signal(signal.SIGPIPE, signal_handler) 50 signal.signal(signal.SIGINT, signal_handler) 51 signal.signal(signal.SIGTERM, signal_handler) 52 53 try: 54 while pid_exists(pid): 55 time.sleep(1) 56 except KeyboardInterrupt: 57 pass 58 59 signal_handler(None, None) 60 61 62 def unthrottle(pid): 63 if os.name == 'posix': 64 unthrottle_posix(pid) 65 else: 66 print 'I don\'t know how to unthrottle your system ('+platform.system()+')' 67 sys.exit(3) 68 69 70 71 def is_throttled_posix(): 72 cpus = list(glob.glob('/sys/devices/system/cpu/cpu*/cpufreq/scaling_governor')) 73 for cpu in cpus: 74 with open(cpu, 'r') as f: 75 if f.readline().strip() != 'performance': 76 return True 77 return False 78 79 80 def is_throttled(): 81 if os.name == 'posix': 82 return is_throttled_posix() 83 else: 84 print 'I don\'t know how to unthrottle your system ('+platform.system()+')' 85 sys.exit(3) 86 87 88 def check_root(): 89 if os.name == 'posix': 90 if os.getuid() == 0: 91 return 92 print '\nError: You need to be root to (un)throttle the CPU.\n' 93 sys.exit(1) 94 else: 95 print 'I don\'t know how to probe administrator rights on your system ('+platform.system()+')' 96 sys.exit(3) 97 98 99 def check_nonroot(): 100 if os.name == 'posix': 101 if os.getuid() > 0: 102 return 103 print '\nError: You are crazy to run this as root, exiting.\n' 104 sys.exit(2) 105 else: 106 print 'I don\'t know how to probe administrator rights on your system ('+platform.system()+')' 107 sys.exit(3) 108 109 110 command = None 111 112 def wait_for_command(): 113 global command 114 if command is None: 115 return 116 else: 117 command.send_signal(signal.SIGTERM) 118 119 import atexit 120 atexit.register(wait_for_command) 121 122 123 def unthrottle_self(): 124 if os.name == 'posix': 125 global command 126 print 'Running sudo atlas-config --unthrottle to turn CPU throttling off.' 127 command = subprocess.Popen(['sudo', os.path.abspath( __file__ ), 128 '--unthrottle', str(os.getpid())]) 129 else: 130 print 'I don\'t know how to unthrottle your system ('+platform.system()+')' 131 sys.exit(2) 132 133 print 'Waiting for CPU throttling to be turned off...' 134 while is_throttled(): 135 time.sleep(1) 136 137 138 139 if __name__ == '__main__': 140 args = parser.parse_args() 141 142 if args.unthrottle: 143 check_root() 144 unthrottle(args.unthrottle[0]) 145 146 check_nonroot() 147 unthrottle_self() 148 print 149 if os.environ.get('SAGE_FAT_BINARY', 'no') == 'yes': 150 print 'Building ATLAS with SAGE_FAT_BINARY (generic archdefs).' 151 elif os.environ.has_key('SAGE_ATLAS_ARCH'): 152 print 'Building ATLAS with SAGE_ATLAS_ARCH =', os.environ['SAGE_ATLAS_ARCH'] 153 else: 154 print 'Building ATLAS without specifying architecture.' 155 print 'This may take many hours during which you should leave the computer otherwise' 156 print 'idle to obtain accurate timings.' 157 if args.archdef: 158 os.environ['SAGE_ATLAS_SAVE_ARCHDEF'] = os.getcwd() 159 print 'The resulting <archdef>.tar.bz2 will be saved in '+os.getcwd() 160 print 161 print 'You have 5 seconds to interrupt...' 162 time.sleep(1) 163 print 'You have 4 seconds to interrupt...' 164 time.sleep(1) 165 print 'You have 3 seconds to interrupt...' 166 time.sleep(1) 167 print 'You have 2 seconds to interrupt...' 168 time.sleep(1) 169 print 'You have 1 second to interrupt...' 170 time.sleep(1) 171 172 sys.stdout.flush() 173 sys.stderr.flush() 174 os.system('sage -f atlas') 175 176 177 178 179 180 181 -
new file patches/long_filenames.patch
diff --git a/patches/long_filenames.patch b/patches/long_filenames.patch new file mode 100644
- + 1 --- old/bin/extract.c 2012-07-10 20:22:50.000000000 +0100 2 +++ src/bin/extract.c 2012-09-20 17:28:33.989175811 +0100 3 @@ -21,10 +21,10 @@ 4 #include <assert.h> 5 #include <stdarg.h> 6 7 -#define NAMLEN 128 8 +#define NAMLEN 1024 9 #define LNLEN 2048 10 -#define HANLEN 50 11 -#define SUBLEN 128 12 +#define HANLEN 1024 13 +#define SUBLEN 1024 14 15 #define F_nFlags 16 16 #define F_Case 0 -
patches/probe_comp.c.patch
diff --git a/patches/probe_comp.c.patch b/patches/probe_comp.c.patch
a b 1 --- probe_comp.c.orig 2011-06-15 10:20:18.336648039 -07002 +++ probe_comp.c 2011-06-15 10:22:01.323647990 -07003 @@ - 532,6 +532,8 @@1 --- src/CONFIG/src/probe_comp.c 2012-06-23 17:27:27.000000000 +0100 2 +++ new/CONFIG/src/probe_comp.c 2012-06-24 03:20:46.118154762 +0100 3 @@ -607,6 +607,8 @@ 4 4 return(sp); 5 5 else if (OS == OSAIX) 6 6 sp = (ptrbits == 64) ? "-maix64" : "-maix32"; -
new file patches/shell.patch
diff --git a/patches/shell.patch b/patches/shell.patch new file mode 100644
- + 1 diff -dNru src.orig/makes/Make.Flp src/makes/Make.Flp 2 --- src.orig/makes/Make.Flp 2013-01-08 19:15:41.000000000 +0100 3 +++ src/makes/Make.Flp 2013-03-27 18:01:17.224597923 +0100 4 @@ -756,7 +756,7 @@ 5 6 $(FLAdir)/lapack_$(ARCH).a : $(FLAdir)/make.inc 7 cd $(FLAdir) ; $(PMAKE) lib 8 - if [ -e $(FLAdir)/liblapack.a ]; then \ 9 + if [ -f $(FLAdir)/liblapack.a ]; then \ 10 ln -s $(FLAdir)/liblapack.a $(FLAdir)/lapack_$(ARCH).a ; \ 11 fi 12 13 diff -dNru src.orig/makes/Make.ttune src/makes/Make.ttune 14 --- src.orig/makes/Make.ttune 2013-01-08 19:15:42.000000000 +0100 15 +++ src/makes/Make.ttune 2013-03-27 18:01:17.020597929 +0100 16 @@ -26,7 +26,7 @@ 17 - rm -f $(sumf) 18 echo "#ifndef ATLAS_SUMM_H" > $(sumf) 19 echo " #define ATLAS_SUMM_H" >> $(sumf) 20 - if [ -e res/aff.h ]; then \ 21 + if [ -f res/aff.h ]; then \ 22 cat res/aff.h >> $(sumf) ; \ 23 else \ 24 echo "#define ATL_TAFFINITY 0" >> $(sumf) ; \ -
spkg-install
diff --git a/spkg-install b/spkg-install
a b 9 9 ### Import stuff 10 10 ###################################################################### 11 11 12 import os, sys, shutil, time 13 from configuration import conf, cp, try_run, edit_in_place12 import os, sys, shutil, time, glob 13 from configuration import conf, cp, ln, which, try_run, edit_in_place 14 14 15 15 16 16 ###################################################################### … … 18 18 ### update ATLAS or LAPACK to a newer version 19 19 ###################################################################### 20 20 21 PATCH_DIR = os.path.join(conf['SPKG_DIR'], 'patches') 22 23 # the current lapack source tarball 24 LAPACK_TARFILE = os.path.join(conf['SPKG_DIR'], 'lapack-3.4.2.tar') 25 21 26 # temporary directory to build everything in 22 27 BUILD_DIR = os.path.join(conf['SPKG_DIR'], 'ATLAS-build') 28 BUILD_LIB_DIR = os.path.join(conf['SPKG_DIR'], 'ATLAS-lib') 23 29 24 30 # constants from src/CONFIG/include/atlconf.h 25 31 # Note: must be lists, not tuples, for Python-2.4 support 26 ATLAS_OSTYPE = ['UNKNOWN', 'Linux', 'SunOS', 'SunOS4', 'OSF1', 27 'IRIX', 'AIX', 'Win9x', 'WinNT', 'HPUX', 'FreeBSD', 'OSX'] 32 ATLAS_OSTYPE = ( # static char *osnam 33 'UNKNOWN', 'Linux', 'SunOS', 'SunOS4', 'OSF1', 34 'IRIX', 'AIX', 'Win9x', 'WinNT', 'Win64', 35 'HPUX', 'FreeBSD', 'OSX') 36 ATLAS_MACHTYPE = ( # static char *machnam 37 'UNKNOWN', 'POWER3', 'POWER4', 'POWER5', 'PPCG4', 'PPCG5', 38 'POWER6', 'POWER7', 'IBMz9', 'IBMz10', 'IBMz196', 39 'x86x87', 'x86SSE1', 'x86SSE2', 'x86SSE3', 40 'P5', 'P5MMX', 'PPRO', 'PII', 'PIII', 'PM', 'CoreSolo', 41 'CoreDuo', 'Core2Solo', 'Core2', 'Corei1', 'Corei2', 'Atom', 'P4', 'P4E', 42 'Efficeon', 'K7', 'HAMMER', 'AMD64K10h', 'AMDDOZER', 'UNKNOWNx86', 43 'IA64Itan', 'IA64Itan2', 44 'USI', 'USII', 'USIII', 'USIV', 'UST2', 'UnknownUS', 45 'MIPSR1xK', 'MIPSICE9', 'ARMv7') 28 46 29 ATLAS_MACHTYPE = ['UNKNOWN', 'POWER3', 'POWER4', 'POWER5', 'PPCG4', 'PPCG5', 30 'P5', 'P5MMX', 'PPRO', 'PII', 'PIII', 'PM', 'CoreSolo', 31 'CoreDuo', 'Core2Solo', 'Core2', 'Corei7', 'P4', 'P4E', 'Efficeon', 'K7', 32 'HAMMER', 'AMD64K10h', 'UNKNOWNx86', 'IA64Itan', 'IA64Itan2', 33 'USI', 'USII', 'USIII', 'USIV', 'UnknownUS', 'MIPSR1xK', 'MIPSICE9'] 34 35 ATLAS_ISAEXT = ['', 'AltiVec', 'SSE3', 'SSE2', 'SSE1', '3DNow'] 47 ATLAS_ISAEXT = ( # static char *ISAXNAM 48 'None', 'VSX', 'AltiVec', 'AVXMAC', 'AVXFMA4', 'AVX', 'SSE3', 'SSE2', 'SSE1', 49 '3DNow', 'NEON' ) 36 50 37 51 # we need to disable parallel builds 38 52 os.environ['MAKE'] += ' -j1' 53 MAKE = os.environ['MAKE'] 39 54 55 ###################################################################### 56 ### Some auxiliary functions to facilitate IO and error checking 57 ###################################################################### 58 59 # Run shell command "command", but flush stdout and stderr before doing 60 # this. Also echo commands which are executed. 61 def system_with_flush(command): 62 print 'Running', command 63 sys.stdout.flush() 64 sys.stderr.flush() 65 import subprocess 66 return subprocess.call(command, shell=True) 67 68 def assert_success(rc, good=None, bad=None): 69 if rc == 0: 70 if good is not None: 71 print good 72 return 73 print '-'*60 74 import traceback 75 traceback.print_stack(file=sys.stdout) 76 print '-'*60 77 if bad is not None: 78 print 'Error: ', bad 79 sys.exit(rc) 40 80 41 81 ###################################################################### 42 82 ### Skip building ATLAS on specific systems 43 83 ###################################################################### 44 84 45 85 # On Cygwin we simply require that the system-wide lapack is installed. 46 # This includes BLAS and is enough to build the rest of Sage. 47 if conf['CYGWIN?']: 48 lib = '/usr/lib/libblas.dll.a' 49 if not os.path.exists(lib): 50 print '*'*75 51 print 'On Cygwin you must install the standard LAPACK Cygwin package' 52 print 'via the Cygwin setup.exe program in the "Math" category.' 53 print '*'*75 54 sys.exit(1) 55 cp(lib, os.path.join(conf['SAGE_LOCAL'], 'lib')) 86 # This includes BLAS and LAPACK and is enough to build the rest of Sage. 87 if conf['CYGWIN?'] and not os.environ.has_key('SAGE_ATLAS_ARCH'): 88 libraries = ['/usr/lib/libblas.dll.a', '/usr/lib/liblapack.dll.a'] 89 for lib in libraries: 90 if not os.path.exists(lib): 91 print '*'*75 92 print 'Could not locate required file: "' + lib + '".' 93 print 'On Cygwin you must install the following standard LAPACK Cygwin packages' 94 print 'via the Cygwin setup.exe program in the "Math" category:' 95 print '* lapack,' 96 print '* liblapack-devel.' 97 print 'Alternatively you can try building your own ATLAS by setting' 98 print 'SAGE_ATLAS_ARCH to something sensible although that is not' 99 print 'officially supported.' 100 print '*'*75 101 sys.exit(1) 102 for lib in libraries: 103 cp(lib, os.path.join(conf['SAGE_LOCAL'], 'lib')) 56 104 sys.exit(0) 57 105 58 106 59 60 if conf['Darwin?']: 61 print 'Skipping build of ATLAS on OSX' 107 if conf['Darwin?'] and not os.environ.has_key('SAGE_ATLAS_ARCH'): 108 print 'Skipping build of ATLAS on OS X, using system library instead.' 109 print 'You can try building your own ATLAS by setting SAGE_ATLAS_ARCH' 110 print 'to something sensible although that is not officially supported.' 111 if conf['PPC?']: # OSX 10.4 PPC linker needs help to find the accelerate blas 112 veclib_dir = '/System/Library/Frameworks/Accelerate.framework/' + \ 113 'Versions/A/Frameworks/vecLib.framework/Versions/A' 114 for lib in [ 'libBLAS.dylib', 'libLAPACK.dylib']: 115 ln(os.path.join(veclib_dir, lib), 116 os.path.join(conf['SAGE_LOCAL'], 'lib', lib)) 62 117 sys.exit(0) 63 118 64 119 … … 68 123 69 124 if os.environ.has_key('SAGE_ATLAS_LIB'): 70 125 ATLAS_LIB = os.environ['SAGE_ATLAS_LIB'] 71 library_extensions = ['.a', '.so', '.dylib']72 126 libraries = ['libatlas', 'liblapack', 'libcblas', 'libf77blas'] 73 127 libraries_optional = ['libptcblas', 'libptf77blas'] 74 128 … … 77 131 return False 78 132 if not os.path.isdir(path): 79 133 return False 80 def library_exists(lib): 81 library_base = os.path.join(path, lib) 82 return any(os.path.exists(library_base+ext) for ext in library_extensions) 83 return all(library_exists(lib) for lib in libraries) 134 filenames = os.listdir(path) 135 for lib in libraries: 136 if not any(fname.startswith(lib) for fname in filenames): 137 print 'Cannot find '+lib+'.* in '+path 138 return False 139 return True 84 140 85 paths = [ os.path.join(ATLAS_LIB, 'lib'), 86 ATLAS_LIB, 87 None ] # None indicates error 141 paths = [ ATLAS_LIB, os.path.join(ATLAS_LIB, 'lib64'), os.path.join(ATLAS_LIB, 'lib') ] 142 ATLAS_LIB = None 88 143 for path in paths: 89 144 if is_atlas_lib_path(path): 90 145 ATLAS_LIB = path 91 146 break 92 147 93 if pathis None:148 if ATLAS_LIB is None: 94 149 print 'Unable to find one of liblapack, libcblas, libatlas or libf77blas' 95 150 print 'in the directory', ATLAS_LIB 96 151 print 'Set SAGE_ATLAS_LIB to the directory containing liblapack, libcblas,' 97 print 'libatlas and libf77blas (either .a or .so extensions) if you wish to'98 print ' use existing ATLAS libraries. For more details, see'152 print 'libatlas and libf77blas (either .a, .so, .dylib extensions) if' 153 print 'you wish to use existing ATLAS libraries. For more details, see' 99 154 print 'http://sagemath.org/doc/installation/source.html#environment-variables' 100 155 print 'Unset SAGE_ATLAS_LIB to build ATLAS from source.' 101 156 print 'Then type make.' … … 120 175 121 176 SAGE_LOCAL_LIB = os.path.join(conf['SAGE_LOCAL'], 'lib') 122 177 def symlinkOSlibrary(library_basename): 123 for ext in library_extensions: 124 lib = library_basename + ext 125 source = os.path.join(ATLAS_LIB, lib) 126 destination = os.path.join(SAGE_LOCAL_LIB, lib) 127 if not os.path.exists(source): 128 continue 129 # ln -sf source destination 178 filenames = [ fname for fname in os.listdir(path) 179 if fname.startswith(library_basename) ] 180 for fname in filenames: 181 source = os.path.join(ATLAS_LIB, fname) 182 destination = os.path.join(SAGE_LOCAL_LIB, fname) 130 183 print 'Symlinking '+source+' -> '+destination 131 184 try: 132 185 os.remove(destination) … … 145 198 ### Patch source 146 199 ###################################################################### 147 200 148 # Apply a TEMPORARY fix to allow ATLAS to build with 149 # gcc 4.4.0 on Solaris. Implemented 16th June 2009, by David Kirkby. 150 # One would expect to remove this within a couple of months, 151 # once the underlying issue in ATLAS is resolved. The patch 152 # forces GuessSmallNB() in src/tune/blas/gemm/mmsearch.c 153 # to return 28 as suggested by Clint Whaley. 154 # Changed on July 19th 2009 (see trac 6558) to be more selective and only 155 # apply the fix on sun4v machines which are based on the Sun T1, T2 and T2+ 156 # processors (codenamed Niagra). This is because there are no known problems 157 # on other Sun architectures such as sun4u, or any x86 based Solaris system. 158 if conf['Solaris?'] and conf['machine'] == 'sun4v': 159 cp('patches/mmsearch-with-temp-Solaris-fix.c', 160 'src/tune/blas/gemm/mmsearch.c') 201 # apply all patches 202 for fname in glob.glob(os.path.join(PATCH_DIR,'*.patch')): 203 rc = system_with_flush('patch -p0 --input '+os.path.join(PATCH_DIR, fname)) 204 assert_success(rc, bad='Applying '+fname+' failed.', good='Applied '+fname+'.') 161 205 162 # add dynamic libs make install targets to Make.top 163 cp('patches/Make.top', 164 'src') 206 # patches/Makefile 207 # fix for Xcode creating directories like xspew.dSYM 165 208 209 # patches/archinfo_linux.c 166 210 # add PPC4 7447 CPU and better Itanium2 detection: 167 cp('patches/archinfo_linux.c',168 'src/CONFIG/src/backend/archinfo_linux.c')169 211 170 # add Core2Duo and Dunnington CPUids 171 cp('patches/archinfo_x86.c', 172 'src/CONFIG/src/backend/archinfo_x86.c') 212 # patches/archinfo_x86.c 213 # add Core2Duo and Dunnington CPUid 173 214 215 # patches/probe_comp.c 174 216 # work around "-m64" cflag issue on Itanium 175 cp('patches/probe_comp.c',176 'src/CONFIG/src/probe_comp.c')177 217 178 # add K7, Pentium M and non-AltiVec G4 profiles179 cp('patches/*tgz', 180 218 # add extra architectural defaults 219 # currently IA64Itan264 and x86SSE264SSE2 220 cp('patches/ARCHS/*.tar.bz2', 'src/CONFIG/ARCHS') 181 221 182 222 # hardcoded gcc in SpewMakeInc.c 183 223 edit_in_place('src/CONFIG/src/SpewMakeInc.c') \ … … 185 225 .close() 186 226 187 227 228 # override throttling check if architecture is specified 229 edit_in_place('src/CONFIG/src/config.c') \ 230 .replace('if \(mach == MACHOther\)', 'if (mach != MACHOther) thrchk=0; else') \ 231 .close() 232 233 shutil.copytree(os.path.join(PATCH_DIR, 'ATLAS-lib'), BUILD_LIB_DIR) 234 188 235 ###################################################################### 189 236 ### configure 190 237 ###################################################################### … … 194 241 # ATLAS_ISAEXT) from environment variables: 195 242 arch = None 196 243 isa_ext = None 197 if os.environ.get('SAGE_FAT_BINARY', 'no') == 'yes' and conf['Intel?']: 198 print 'Sage "fat" binary mode set: Building SSE2 only Hammer binary' 244 archdef_dir = None 245 if conf['generic_binary?']: 246 print 'Sage "fat" binary mode set: Building "base" binary' 199 247 print 'NOTE: This can result in a Sage that is significantly slower at certain numerical' 200 248 print 'linear algebra since full FAT binary support has not been implemented yet.' 201 arch = 'HAMMER' 202 isa_ext = ('SSE2', 'SSE1') 249 arch, isa_ext, archdef_dir = configure_base() 203 250 elif os.environ.has_key('SAGE_ATLAS_ARCH'): 204 251 opts = os.environ['SAGE_ATLAS_ARCH'].split(',') 205 252 arch = opts[0] 253 if arch not in ATLAS_MACHTYPE + ('fast', 'base'): 254 print 'SAGE_ATLAS_ARCH architecture must be one of '+ ', '.join(ATLAS_MACHTYPE) 255 sys.exit(1) 206 256 if len(opts)>0: 207 257 isa_ext = opts[1:] 208 return (arch, isa_ext) 258 if not all(ext in ATLAS_ISAEXT for ext in isa_ext): 259 print 'SAGE_ATLAS_ARCH ISA extension must be one of '+ ', '.join(ATLAS_ISAEXT) 260 sys.exit(1) 261 return (arch, isa_ext, archdef_dir) 209 262 210 263 211 def configure(arch=None, isa_ext=None ):264 def configure(arch=None, isa_ext=None, archdef_dir=None): 212 265 """ 213 266 Configure for ``arch``. 214 267 … … 219 272 - ``isa_ext`` -- ``None`` or a sublist of ``ATLAS_ISAEXT`` 220 273 """ 221 274 if arch is None: 222 arch, isa_ext = configure_options_from_environment()275 arch, isa_ext, archdef_dir = configure_options_from_environment() 223 276 if arch=='fast': 224 returnconfigure_fast()225 if arch==' base':226 returnconfigure_base()277 arch, isa_ext, archdef_dir = configure_fast() 278 if arch=='generic' or arch=='base': 279 arch, isa_ext, archdef_dir = configure_base() 227 280 228 print 'Running configure with arch =', arch, 'and isa extensions', isa_ext 281 print 'Running configure with arch = '+str(arch)+ \ 282 ', isa extensions '+str(isa_ext)+ \ 283 ', archdef dir '+str(archdef_dir) 229 284 os.chdir(conf['SPKG_DIR']) 230 285 if os.path.isdir(BUILD_DIR): 231 286 shutil.rmtree(BUILD_DIR) 232 287 os.mkdir(BUILD_DIR) 233 288 os.chdir(BUILD_DIR) 234 289 290 # We need to provide full pathes to FC and CC to ATLAS configure script, 291 # so that it does not use 'find' and travel around the filesystem to find 292 # them. 293 # We first split the compiler executable names from potential options, e.g. 294 # as in 'gcc -m64', then use 'which' to locate them, and finally add the 295 # options back. 296 FC = os.environ['FC'] 297 FCsplit = FC.find(' ') 298 if FCsplit != -1: 299 FCbin, FCopt = FC[:FCsplit], FC[FCsplit:] 300 else: 301 FCbin, FCopt = FC, '' 302 303 CC = os.environ['CC'] 304 CCsplit = CC.find(' ') 305 if CCsplit != -1: 306 CCbin, CCopt = CC[:CCsplit], CC[CCsplit:] 307 else: 308 CCbin, CCopt = CC, '' 309 235 310 cmd = '../src/configure' 236 311 cmd += ' --prefix=' + conf['SAGE_LOCAL'] 237 cmd += ' --with-netlib-lapack =' + os.path.join(conf['SAGE_LOCAL'],'lib','liblapack.a')238 cmd += ' --cc="' + os.environ['CC']+ '"'312 cmd += ' --with-netlib-lapack-tarfile=' + LAPACK_TARFILE 313 cmd += ' --cc="' + CC + '"' 239 314 240 # -Si cputhrchk 0: Ignore/heed CPU throttle probe 241 cmd += ' -Si cputhrchk 0' 315 ## -Si latune 1: enable lapack tuning 316 ## typically adds 3-4 hours of install time 317 cmd += ' -Si latune 0' 242 318 243 319 # -Fa alg -fPIC: set flags so we can build dynamic libraries 244 320 cmd += ' -Fa alg -fPIC' … … 247 323 #cmd += ' -t 0' 248 324 249 325 # set fortran compiler 250 cmd += ' -C if sage_fortran'326 cmd += ' -C if "' + which(FCbin) + FCopt + '"' 251 327 252 328 # set C compiler 253 cmd += ' -C xc "' + os.environ['CC'] + '"' 254 cmd += ' -C ic "' + os.environ['CC'] + '"' 255 cmd += ' -C dm "' + os.environ['CC'] + '"' 256 cmd += ' -C sm "' + os.environ['CC'] + '"' 257 cmd += ' -C dk "' + os.environ['CC'] + '"' 258 cmd += ' -C sk "' + os.environ['CC'] + '"' 329 cmd += ' -C acg "' + which(CCbin) + CCopt + '"' 259 330 260 331 # set bit width 261 332 cmd += ' -b ' + conf['bits'][0:2] 262 333 263 334 # set OS type 264 system = None265 335 try: 266 system = ATLAS_OSTYPE.index(conf['system']) 267 except KeyError: 268 if conf['Darwin?']: system = ATLAS_OSTYPE.index('OSX') 269 if conf['CYGWIN?']: system = ATLAS_OSTYPE.index('WinNT') 270 if not system is None: 271 cmd += ' -O '+str(system) 336 if conf['Darwin?']: 337 atlas_osnam = 'OSX' 338 elif conf['CYGWIN?']: 339 atlas_osnam = 'WinNT' 340 else: 341 atlas_osnam = conf['system'] 342 atlas_system = ATLAS_OSTYPE.index(atlas_osnam) 343 cmd += ' -O '+str(atlas_system) 344 except ValueError: 345 pass 272 346 273 347 # set machine architecture 274 if not arch isNone:275 cmd += ' -A '+str(ATLAS_MACHTYPE.index(arch))348 if arch is not None: 349 cmd += ' -A '+str(ATLAS_MACHTYPE.index(arch)) 276 350 277 351 # set cpu instruction set extensions 278 if not isa_ext isNone:352 if isa_ext is not None: 279 353 isa_extension = sum(1 << ATLAS_ISAEXT.index(x) for x in isa_ext) 280 354 cmd += ' -V '+str(isa_extension) 281 355 282 print 'Running', cmd 283 rc = os.system(cmd) 356 # use a predefined archdef file in the archdef_dir directory 357 if archdef_dir is not None: 358 cmd += ' -Ss ADdir '+str(archdef_dir) 359 360 rc = system_with_flush(cmd) 284 361 return rc 285 362 286 363 287 364 def configure_fast(): 288 if conf['Intel?']: 289 print 'Fast configuration on Intel compatible CPUs.' 290 arch = 'HAMMER' 291 isa_ext = ('SSE3', 'SSE2', 'SSE1') 292 elif conf['SPARC?']: 293 print 'Fast configuration on SPARC.' 294 arch = 'USIV' 295 isa_ext = () 296 elif conf['PPC?']: 297 print 'Fast configuration on PPC.' 298 arch = 'POWER5' 299 isa_ext = ('AltiVec', ) 300 elif conf['IA64?']: 301 print 'Fast configuration on Itanium.' 302 arch = 'IA64Itan2' 303 isa_ext = () 304 else: 305 raise NotImplementedError, 'I don\'t know a "fast" configuration for your cpu.' 306 return configure(arch, isa_ext) 365 if conf['Intel?'] and conf['64bit?']: 366 print 'Fast configuration on Intel x86_64 compatible CPUs.' 367 arch = 'P4E' 368 isa_ext = ('SSE3', 'SSE2', 'SSE1') 369 archdef_dir = None 370 elif conf['Intel?'] and conf['32bit?']: 371 print 'Fast configuration on Intel i386 compatible CPUs.' 372 arch = 'x86SSE3' 373 isa_ext = ('SSE3', 'SSE2', 'SSE1') 374 archdef_dir = None 375 elif conf['SPARC?']: 376 print 'Fast configuration on SPARC.' 377 arch = 'USIV' 378 isa_ext = () 379 archdef_dir = None 380 elif conf['PPC?']: 381 print 'Fast configuration on PPC.' 382 arch = 'PPCG5' 383 isa_ext = ('AltiVec', ) 384 archdef_dir = None 385 elif conf['IA64?']: 386 print 'Fast configuration on Itanium.' 387 arch = 'IA64Itan2' 388 isa_ext = () 389 archdef_dir = None 390 else: 391 raise NotImplementedError, 'I don\'t know a "fast" configuration for your cpu.' 392 return (arch, isa_ext, archdef_dir) 307 393 308 394 309 395 def configure_base(): 310 if conf['Intel?']: 311 print 'Base configuration on Intel compatible CPUs.' 312 arch = 'P4' 313 isa_ext = ('SSE2', 'SSE1') 314 elif conf['SPARC?']: 315 print 'Base configuration on SPARC.' 316 arch = 'USIII' 317 isa_ext = () 318 elif conf['PPC?']: 319 print 'Base configuration on PPC.' 320 arch = 'POWER4' 321 isa_ext = () 322 elif conf['IA64?']: 323 print 'Base configuration on Itanium.' 324 arch = 'IA64Itan' 325 isa_ext = () 326 else: 327 raise NotImplementedError, 'I don\'t know a "base" configuration for your cpu.' 328 return configure(arch, isa_ext) 396 if conf['Intel?'] and conf['64bit?']: 397 print 'Generic configuration on Intel x86_64 compatible CPUs.' 398 arch = 'x86SSE2' 399 isa_ext = ('SSE2', 'SSE1') 400 archdef_dir = PATCH_DIR 401 elif conf['Intel?'] and conf['32bit?']: 402 print 'Generic configuration on Intel i386 compatible CPUs.' 403 arch = 'x86x87' 404 isa_ext = ('3DNow',) 405 archdef_dir = None 406 elif conf['SPARC?']: 407 print 'Base configuration on SPARC.' 408 arch = 'USIII' 409 isa_ext = () 410 archdef_dir = None 411 elif conf['PPC?']: 412 print 'Base configuration on PPC.' 413 arch = 'PPCG4' 414 isa_ext = () 415 archdef_dir = None 416 elif conf['IA64?']: 417 print 'Base configuration on Itanium.' 418 arch = 'IA64Itan' 419 isa_ext = () 420 archdef_dir = None 421 else: 422 raise NotImplementedError, 'I don\'t know a "base" configuration for your cpu.' 423 return (arch, isa_ext, archdef_dir) 329 424 330 425 331 426 … … 334 429 ### make 335 430 ###################################################################### 336 431 337 def make_ core():432 def make_atlas(): 338 433 os.chdir(BUILD_DIR) 339 rc = os.system('$MAKE')434 rc = system_with_flush(MAKE) 340 435 return rc 341 436 342 def make_atlas_library():343 os.chdir(os.path.join(BUILD_DIR, 'lib'))344 437 345 # don't put the path into the soname or we can't relocate it 346 edit_in_place('Makefile') \ 347 .replace('-soname \$\(LIBINSTdir\)/lib', '-soname lib') \ 348 .close() 438 def configure_atlas_library(): 439 os.chdir(BUILD_LIB_DIR) 440 static_library_dir = os.path.join(BUILD_DIR, 'lib') 441 for static_lib in glob.glob(os.path.join(static_library_dir, 'lib*.a')): 442 shutil.copy(static_lib, BUILD_LIB_DIR) 443 cmd = './configure' 444 cmd += ' --prefix=' + conf['SAGE_LOCAL'] 445 cmd += ' --libdir=' + os.path.join(conf['SAGE_LOCAL'],'lib') 446 cmd += ' --disable-static' 447 return system_with_flush(cmd) 448 349 449 350 if conf['linker_Solaris?']: 351 print "The Makefile generated in ATLAS for building shared libraries" 352 print "assumes the linker is the GNU linker, which it not true in" 353 print "your setup. (It is generally considered better to use the" 354 print "Sun linker in /usr/ccs/bin rather than the GNU linker from binutils)" 355 print "The linker flags in `pwd`/Makefile will be changed. " 356 print "'-shared' will be changed to '-G'" 357 print "'-soname' will be changed to '-h'" 358 print "'--whole-archive' will be changed to '-zallextract'" 359 print "'--no-whole-archive' will be changed to '-zdefaultextract'" 360 edit_in_place('Makefile') \ 361 .replace('-shared', '-G') \ 362 .replace('-soname', '-h') \ 363 .replace('--whole-archive', '-z allextract') \ 364 .replace('--no-whole-archive', '-z defaultextract') \ 365 .close() 366 if conf['Intel?']: 367 print "Change ldflag -melf_x86_64 to -64 as needed for Sun ld" 368 print "on 64-bit builds of ATLAS on x64 hardware" 369 edit_in_place('Make.inc').replace('-melf_x86_64', '-64').close() 370 print "Remove the linker flag -melf_i386 as needed for Sun ld" 371 print "on 32-bit builds of ATLAS on x86/x64 hardware" 372 edit_in_place('Make.inc').replace('-melf_i386', '').close() 373 374 rc = os.system('$MAKE shared cshared') 375 return rc 450 def make_atlas_library(target=None): 451 os.chdir(BUILD_LIB_DIR) 452 if target is None: 453 return system_with_flush(MAKE) 454 else: 455 return system_with_flush(MAKE + ' ' + target) 376 456 377 457 378 def make_lapack_library(): 379 os.chdir(os.path.join(BUILD_DIR, 'lib')) 380 sage_local_lib_dir = ' -L' + os.path.join(conf['SAGE_LOCAL'],'lib') 458 ###################################################################### 459 ### make and save archdef 460 ###################################################################### 381 461 382 libraries = [] 383 if conf['Linux?'] or conf['FreeBSD?']: 384 if conf['fortran_g95?']: 385 fortran_dir = '-L'+conf['fortran_g95_dir'] 386 fortran_lib = '-lf95' 387 else: 388 fortran_dir = '' 389 fortran_lib = '-lgfortran' 390 libraries = ['liblapack', 'libf77blas'] 391 # call gcc instead of ld in order to find libgfortran.so 392 cmd = os.environ['CC'] + ' ' + fortran_dir + sage_local_lib_dir + \ 393 ' -shared -Wl,-soname,{0}.so ' + \ 394 ' -Wl,-whole-archive {0}.a -Wl,-no-whole-archive' + \ 395 ' -o {0}.so -lc -lm ' + fortran_lib 396 397 if conf['Solaris?']: 398 if conf['64bit?']: 399 linker_flag_64 = '-64' 400 else: 401 linker_flag_64 = '' 402 libraries = ['libatlas', 'libf77blas', 'libcblas'] 403 cmd = '/usr/ccs/bin/ld ' + linker_flag_64 + sage_local_lib_dir + \ 404 ' -G -h {0}.so -o {0}.so -zallextract {0}.a -zdefaultextract -lc -lm -lgfortran' 405 406 rc = 0 407 for LIB in libraries: 408 cmd_LIB = cmd.format(LIB) 409 print 'Running', cmd_LIB 410 rc_LIB = os.system(cmd_LIB) 411 if rc_LIB!=0: 412 print 'Failed to build ATLAS library '+LIB+'.so' 413 rc = max(rc, abs(rc_LIB)) 414 415 # liblapack.so causes problems with R on Solaris. 416 if conf['Solaris?']: 417 try: 418 os.remove('liblapack.so') 419 except OSError: 420 pass 421 422 return rc 423 462 def build_and_save_archdef(): 463 try: 464 ARCHDEF_SAVE_DIR = os.environ['SAGE_ATLAS_SAVE_ARCHDEF'] 465 except KeyError: 466 return 467 os.chdir(os.path.join(BUILD_DIR, 'ARCHS')) 468 rc = system_with_flush(MAKE + ' ArchNew') 469 assert_success(rc, bad='Making archdef failed.', good='Finished building archdef.') 470 rc = system_with_flush(MAKE + ' tarfile') 471 assert_success(rc, bad='Making archdef tarfile failed.', good='Finished building archdef tarfile.') 472 for tarfile in glob.glob('*.tar.bz2'): 473 cp(tarfile, ARCHDEF_SAVE_DIR) 474 424 475 425 476 ###################################################################### 426 477 ### build atlas and lapack 427 478 ###################################################################### 428 479 429 def build(arch=None, isa_ext=None): 430 rc = configure(arch, isa_ext) 431 assert rc==0, 'Configure failed!' 432 print 'Finished configuring ATLAS.' 433 rc = make_core() 480 def build(arch=None, isa_ext=None, archdef_dir=None): 481 """ 482 Configure/build with given architectural information. 483 484 Return ``0`` if successfull. 485 """ 486 rc = configure(arch, isa_ext, archdef_dir) 487 assert_success(rc, bad='Configure failed.', good='Finished configuring ATLAS.') 488 return make_atlas() 489 490 def build_tuning(): 491 """ 492 Configure/build by going through the full tuning process. 493 494 Return ``0`` if successfull. 495 """ 496 rc = configure() 434 497 if rc!=0: 435 print 'ATLAS failed to build, possibly because of a loaded system.' 498 print 'Configure failed, possibly because you have CPU throttling enabled.' 499 print 'Skipping tuning attempts.' 500 return rc 501 print 'First attempt: automatic tuning.' 502 rc = make_atlas() 503 if rc==0: 504 return rc 505 print 'ATLAS failed to build, possibly because of throttling or a loaded system.' 506 print 'Waiting 1 minute...' 507 sys.stdout.flush() 508 time.sleep(60) 509 print 'Second attempt: Re-running make.' 510 return make_atlas() 511 512 513 # 514 # Workaround for specific platforms: Disable tuning and go straight to 515 # fast/base architectural defaults 516 # 517 skip_tuning = conf['IA64?'] # Itanium is dead and tuning is broken 518 519 520 rc = None 521 if os.environ.has_key('SAGE_ATLAS_ARCH') or conf['generic_binary?']: 522 print 'Building using specific architecture.' 523 rc = build() 524 else: 525 print 'Configuring ATLAS.' 526 if skip_tuning: 527 print 'Skipping tuning attempts (skip_tuning = True).' 528 rc = 1 # Fake failed tuning attempts 436 529 else: 437 print 'Finished building ATLAS core.' 438 return rc 530 rc = build_tuning() 531 if rc!=0: 532 print 'Third attempt: use "fast" options.' 533 rc = build(arch='fast') 534 if rc!=0: 535 print 'Fourth attempt: use "base" options.' 536 rc = build(arch='base') 439 537 538 assert_success(rc, bad='Failed to build ATLAS.', good='Finished building ATLAS core.') 440 539 441 print 'First attempt: automatic tuning.' 442 rc = build() 443 if rc!=0: 444 print 'Waiting 5 minutes...' 445 time.sleep(5*60) 446 print 'Second attempt: Re-running make.' 447 rc = make_core() 448 if rc!=0: 449 print 'Waiting 5 minutes...' 450 time.sleep(5*60) 451 try: 452 print 'Third attempt: use "fast" options.' 453 rc = build(arch='fast') 454 if rc!=0: 455 print 'Fourth attempt: use "base" options.' 456 rc = build(arch='base') 457 except NotImplementedError: 458 pass 540 build_and_save_archdef() 459 541 460 assert rc==0, 'Failed to build ATLAS.' 461 print 'Finished building ATLAS core.' 542 rc = configure_atlas_library() 543 assert_success(rc, bad='Configuring shared ATLAS library failed.', 544 good='Finished configuring shared ATLAS library.') 462 545 463 546 rc = make_atlas_library() 464 assert rc==0, 'Building shared ATLAS library failed.' 465 print 'Finished building shared ATLAS library.' 466 467 rc = make_lapack_library() 468 assert rc==0, 'Building LAPACK+ATLAS library failed.' 469 print 'Finished building LAPACK+ATLAS library.' 547 if rc!=0: 548 print 'Failed to build serial+parallel shared libraries, possibly because your' 549 print 'system does not support both. Trying to build serial libraries only.' 550 rc = make_atlas_library('all_serial') 551 have_parallel_libs = False 552 else: 553 have_parallel_libs = True 554 assert_success(rc, bad='Building shared ATLAS library failed.', 555 good='Finished building shared ATLAS library.') 470 556 471 557 472 558 ###################################################################### 473 559 ### install 474 560 ###################################################################### 475 561 476 def install(): 477 library_extensions = ['.a', '.so', '.dylib'] 478 libraries = ['libatlas', 'liblapack', 'libcblas', 'libf77blas', 'libptcblas', 'libptf77blas'] 479 for lib in libraries: 480 for ext in library_extensions: 481 try: 482 filename = os.path.join(conf['SAGE_LOCAL'], 'lib', lib+ext) 483 os.remove(filename) 484 print('Removed file from previous installation: '+filename) 485 except OSError: 486 pass 487 os.chdir(BUILD_DIR) 488 rc = os.system('$MAKE install') 489 os.chdir('..') 490 return rc 562 if have_parallel_libs: 563 rc = make_atlas_library('install') 564 else: 565 rc = make_atlas_library('install_serial') 566 assert_success(rc, bad='Installing the shared ATLAS library failed.', 567 good='Finished installing shared ATLAS library.') 491 568 492 rc = install()493 assert rc==0, 'Make install for ATLAS failed.'494 # will automatically print "Finished installing atlas-<version>.spkg"495 569 570 cp(os.path.join(PATCH_DIR, 'atlas-config'), 571 os.path.join(conf['SAGE_LOCAL'], 'bin')) 496 572