[108383] trunk/dports/math/atlas/Portfile
vince at macports.org
vince at macports.org
Sun Jul 21 21:53:21 PDT 2013
Revision: 108383
https://trac.macports.org/changeset/108383
Author: vince at macports.org
Date: 2013-07-21 21:53:21 -0700 (Sun, 21 Jul 2013)
Log Message:
-----------
1. Add a +perf option to compile with clang-3.3/dragonegg-3.3-gfortran-4.8 (best code)
2. Remove the outdated mpclang32 option
3. Makes ATLAS work with the new Haswell processors (albeit no FMA kernel is yet available)
Modified Paths:
--------------
trunk/dports/math/atlas/Portfile
Modified: trunk/dports/math/atlas/Portfile
===================================================================
--- trunk/dports/math/atlas/Portfile 2013-07-22 04:10:31 UTC (rev 108382)
+++ trunk/dports/math/atlas/Portfile 2013-07-22 04:53:21 UTC (rev 108383)
@@ -7,7 +7,6 @@
license BSD
name atlas
version 3.10.1
-revision 5
# additional versions
set lapackversion 3.4.2
@@ -36,26 +35,25 @@
patchfiles patch-emit_mm_c.diff \
patch-ATL_cmm4x4x128_av_c.diff
+# patch-archinfo_x86_c.diff\
+# patch-tfc_c.diff
-
checksums atlas3.10.1.tar.bz2 \
-rmd160 67f928ad900caa300b23e2f824b8a495f416c8d6 \
-sha256 a215b492204aae0205f4028e7c4076492a5d6a564f8f859ff062fd79587bcc86 \
+ rmd160 67f928ad900caa300b23e2f824b8a495f416c8d6 \
+ sha256 a215b492204aae0205f4028e7c4076492a5d6a564f8f859ff062fd79587bcc86 \
lapack-3.4.2.tgz \
-rmd160 8740c35c9a85b71424fe1ffeed192256aebeb431 \
-sha256 60a65daaf16ec315034675942618a2230521ea7adf85eea788ee54841072faf0
+ rmd160 8740c35c9a85b71424fe1ffeed192256aebeb431 \
+ sha256 60a65daaf16ec315034675942618a2230521ea7adf85eea788ee54841072faf0
+compiler.blacklist macports-clang-3.1 macports-clang-3.0 \
+ macports-clang-2.9
-compiler.blacklist macports-clang-3.1 macports-clang-3.0 \
- macports-clang-2.9
+set gcc_version 0
+set use_clang ""
-set gcc_version 0
-set use_clang ""
+variant gcc48 conflicts gcc46 gcc47 clang mpclang33 perf \
+ description {build using macports-gcc-4.8} {
-variant gcc48 conflicts gcc46 gcc47 \
- clang mpclang32 mpclang33 \
- description {build using macports-gcc-4.8} {
-
depends_build-append port:gcc48
configure.compiler macports-gcc-4.8
}
@@ -66,9 +64,8 @@
set use_clang ""
}
-variant gcc47 conflicts gcc46 gcc48 \
- clang mpclang32 mpclang33 \
- description {build using macports-gcc-4.7} {
+variant gcc47 conflicts gcc46 gcc48 clang mpclang33 perf \
+ description {build using macports-gcc-4.7} {
depends_build-append port:gcc47
configure.compiler macports-gcc-4.7
@@ -80,9 +77,8 @@
set use_clang ""
}
-variant gcc46 conflicts gcc47 gcc48 \
- clang mpclang32 mpclang33 \
- description {build using macports-gcc-4.6} {
+variant gcc46 conflicts gcc47 gcc48 clang mpclang33 perf\
+ description {build using macports-gcc-4.6} {
depends_build-append port:gcc46
configure.compiler macports-gcc-4.6
@@ -95,9 +91,8 @@
}
-variant clang conflicts gcc46 gcc47 gcc48 \
- mpclang32 mpclang33 \
- description {use XCode clang and gfortran} {
+variant clang conflicts gcc46 gcc47 gcc48 mpclang33 \
+ description {use XCode clang and gfortran} {
pre-fetch {
return -code error "Use of clang is temporarily disabled.\
@@ -113,37 +108,36 @@
set gcc_version 0
}
-variant mpclang32 conflicts gcc46 gcc47 gcc48 \
- clang mpclang33 \
- description {use mp-clang-3.2 and gfortran} {
+variant mpclang33 conflicts gcc46 gcc47 gcc48 clang perf\
+ description {use mp-clang-3.3 and gfortran} {
- pre-fetch {
- return -code error "Use of clang is temporarily disabled.\
- Please choose gcc47 instead."
- }
-
- depends_build-append port:clang-3.2
- configure.compiler macports-clang-3.2
+ depends_build-append port:clang-3.3
+ configure.compiler macports-clang-3.3
}
-if {[variant_isset mpclang32]} {
+if {[variant_isset mpclang33]} {
- set use_clang "32"
+ set use_clang "33"
set gcc_version 0
}
-variant mpclang33 conflicts gcc46 gcc47 gcc48 \
- clang mpclang32 \
- description {use mp-clang-3.3 and gfortran} {
+variant perf conflicts gcc46 gcc47 gcc48 mpclang33 clang \
+ description {Uses clang-mp-3.3 for C and dragonegg-3.3 for Fortran} {
depends_build-append port:clang-3.3
configure.compiler macports-clang-3.3
+ depends_build-append port:dragonegg-3.3-gcc-4.8
+ configure.f77 ${prefix}/bin/dragonegg-3.3-gfortran-mp-4.8
+
+ set clang_flags "-O3 -fPIC -fomit-frame-pointer"
+ set gcc_flags "${clang_flags} \
+ -specs=${prefix}/libexec/dragonegg/llvm33gcc48-integrated-as.specs"
}
-if {[variant_isset mpclang33]} {
+if {[variant_isset perf]} {
set use_clang "33"
- set gcc_version 0
+ set gcc_version 48
}
variant nofortran description {Forgo use of fortran compiler} {
@@ -151,6 +145,26 @@
# AVX or higher?
+if {(${os.major} > 11 && \
+ (![catch {sysctl hw.optional.fma} result1] && $result1 == 1)) ||
+ (![catch {sysctl hw.cpufamily} result2] && $result2 == 280134364)} {
+
+ set has_fma "yes"
+} else {
+
+ set has_fma "no"
+}
+
+if {(${os.major} > 11 && \
+ (![catch {sysctl hw.optional.avx2_0} result1] && $result1 == 1)) ||
+ (![catch {sysctl hw.cpufamily} result2] && $result2 == 280134364)} {
+
+ set has_avx2 "yes"
+} else {
+
+ set has_avx2 "no"
+}
+
if {(${os.major} > 10 && \
(![catch {sysctl hw.optional.avx1_0} result1] && $result1 == 1)) ||
(![catch {sysctl hw.cpufamily} result2] && $result2 == 1418770316)} {
@@ -166,7 +180,7 @@
if {![variant_isset gcc46] && ![variant_isset gcc47] && \
![variant_isset gcc48] && ![variant_isset clang] && \
- ![variant_isset mpclang32] && ![variant_isset mpclang33]} {
+ ![variant_isset perf] && ![variant_isset mpclang33]} {
if {${has_avx} == "no"} {
@@ -221,12 +235,12 @@
-fno-schedule-insns2 -fPIC"
# Clang
- if {${use_clang} == "32" || ${use_clang} == "XCode" } {
+ if {${use_clang} == "XCode" } {
pre-fetch {
- #ui_warn "Compiling Atlas with this version of clang is\
- # likely *NOT* to work. Please use clang-3.3 or\
- # higher."
+ ui_warn "Compiling Atlas with this version of clang is\
+ likely *NOT* to work. Please use clang-3.3 or\
+ higher."
}
set clang_flags "-O3 -fomit-frame-pointer -fPIC"
} else {
@@ -237,9 +251,19 @@
}
# Vectorizing unit flags
- if {${has_avx} == "yes"} {
+ if {${has_fma} == "yes"} {
+
+ # Only Clang handles AVX+ correctly
+ set gvct_flag "-msse4.2"
+ # downgrade FMA to AVX for the time being
+ set cvct_flag "-mavx"
+ configure.args-append -A 26 -V 480
+ } elseif {${has_avx2} == "yes"} {
+
+ set gvct_flag "-msse4.2"
+ set cvct_flag "-mavx"
+ } elseif {${has_avx} == "yes"} {
- # GCC compilers do not support AVX on OS X
set gvct_flag "-msse4.2"
set cvct_flag "-mavx"
} elseif {${os.major} > 9 && \
@@ -387,30 +411,36 @@
if {${use_clang} != "" && ${fortran} == 1} {
- set gflist [glob -noc ${prefix}/bin/gfortran-mp-4.*]
- if {[llength ${gflist}] == 0} {
+ if {![variant_isset perf]} {
+ set gflist [glob -noc ${prefix}/bin/gfortran-mp-4.*]
+ if {[llength ${gflist}] == 0} {
- # No fortran compiler found, bail out
- return -code error "Atlas could not detect any fortran compiler.\
- If you really don’t need the fortran interface\
- to be built, please use the +nofortran option,\
- else install a fortran compiler (e.g. gcc4X)\
- before building Atlas."
- } else {
+ # No fortran compiler found, bail out
+ return -code error "Atlas could not detect any fortran compiler.\
+ If you really don’t need the fortran interface\
+ to be built, please use the +nofortran option,\
+ else install a fortran compiler (e.g. gcc4X)\
+ before building Atlas."
+ } else {
- # Select most recent gfortran
- global gcc_version
+ # Select most recent gfortran
+ global gcc_version
- configure.f77 [lindex [lsort -dec ${gflist}] 0]
- set gcc_version \
- [join [split [string range ${configure.f77} end-2 end] "."] ""]
+ configure.f77 [lindex [lsort -dec ${gflist}] 0]
+ set gcc_version \
+ [join [split [string range ${configure.f77} end-2 end] "."] ""]
+ }
}
}
if {${fortran} == 1} {
# Output the F77 selected compiler
- ui_msg "Selected F77 compiler: gfortran${gcc_version}"
+ if {[variant_isset perf]} {
+ ui_msg "Using dragonegg-3.3-gfortran-mp-4.8 as Fortran compiler."
+ } else {
+ ui_msg "Selected F77 compiler: gfortran${gcc_version}"
+ }
} else {
# No Fortran
@@ -453,28 +483,14 @@
# AVX stuff. GCC compilers cannot use AVX instruction set because the
# system as(1) is outdated
- # Clang 3.2 has a bug affecting some AVX instructions
- # Clang 3.3 should be fine
+ # Clang 3.3 is fine
- if {${has_avx} == "yes"} {
+ if {${has_avx} == "yes" && ${use_clang} == ""} {
- if {${use_clang} == ""} {
-
- # Force Core i1 arch for ASM kernels
- ui_warn "GCC compilers on MacOS do not support AVX:\
- downgrading."
- configure.args-append -A 25
- } else {
-
- # Clang: AVX only on versions >= 3.3
- if {${use_clang} == "32" || ${use_clang} == "XCode" } {
-
- ui_warn "AVX support is broken in these versions\
- of clang. Please use clang-3.3 or higher.\
- Downgrading."
- configure.args-append -A 25
- }
- }
+ # Force Core i1 arch for ASM kernels
+ ui_warn "GCC compilers on MacOS do not support AVX:\
+ downgrading."
+ configure.args-append -A 25
}
if {${build_arch} == "ppc"} {
@@ -484,12 +500,12 @@
}
if {${use_clang} == ""} {
-
+
# GCC
configure.args-append -F acg "'${gcc_flags} ${gvct_flag}'"
-
+
if {${fortran} == 1} {
-
+
configure.args-append -C if ${configure.f77}
configure.args-append -F if "'${gcc_flags} ${gvct_flag}'"
configure.args-append -Ss f77lib \
@@ -505,7 +521,13 @@
} else {
# clang
+ if {[variant_isset perf]} {
+
+ append cvct_flag " -march=native"
+ set gvct_flag ${cvct_flag}
+ }
configure.args-append -F acg "'${clang_flags} ${cvct_flag}'"
+
if {${fortran} == 1} {
configure.args-append -C if ${configure.f77}
@@ -750,7 +772,7 @@
set libdir ${build.dir}/lib
reinplace "s|^LIBTOOL=.*$|LIBTOOL=\$\(GCC\) \$\(GCCFLAGS\)|" \
${libdir}/Makefile
- reinplace "s|dynamic|dynamiclib|g" ${libdir}/Makefile
+ reinplace "s|-dynamic|-dynamiclib|g" ${libdir}/Makefile
# On mono-processors machines, build libsatlas.dylib only
if {${no_threads} == 1} {
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20130721/94cb66d1/attachment-0001.html>
More information about the macports-changes
mailing list