[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