Ignore:
Timestamp:
Jul 22, 2013, 4:53:21 AM (7 years ago)
Author:
vince@…
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)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dports/math/atlas/Portfile

    r106139 r108383  
    88name                    atlas
    99version                 3.10.1
    10 revision                5
    1110
    1211# additional versions
     
    3736patchfiles              patch-emit_mm_c.diff \
    3837                        patch-ATL_cmm4x4x128_av_c.diff
    39 
     38#                        patch-archinfo_x86_c.diff\
     39#                        patch-tfc_c.diff
    4040
    4141checksums               atlas3.10.1.tar.bz2 \
    42 rmd160  67f928ad900caa300b23e2f824b8a495f416c8d6 \
    43 sha256  a215b492204aae0205f4028e7c4076492a5d6a564f8f859ff062fd79587bcc86 \
     42                        rmd160  67f928ad900caa300b23e2f824b8a495f416c8d6 \
     43                        sha256  a215b492204aae0205f4028e7c4076492a5d6a564f8f859ff062fd79587bcc86 \
    4444                        lapack-3.4.2.tgz \
    45 rmd160  8740c35c9a85b71424fe1ffeed192256aebeb431 \
    46 sha256  60a65daaf16ec315034675942618a2230521ea7adf85eea788ee54841072faf0
    47 
    48 
    49 compiler.blacklist          macports-clang-3.1 macports-clang-3.0 \
    50                             macports-clang-2.9
    51 
    52 set     gcc_version         0
    53 set     use_clang           ""
    54 
    55 variant gcc48               conflicts   gcc46 gcc47 \
    56                                         clang mpclang32 mpclang33 \
    57                             description {build using macports-gcc-4.8} {
     45                        rmd160  8740c35c9a85b71424fe1ffeed192256aebeb431 \
     46                        sha256  60a65daaf16ec315034675942618a2230521ea7adf85eea788ee54841072faf0
     47
     48compiler.blacklist       macports-clang-3.1 macports-clang-3.0 \
     49                         macports-clang-2.9
     50
     51set     gcc_version      0
     52set     use_clang        ""
     53
     54variant gcc48            conflicts   gcc46 gcc47 clang mpclang33 perf \
     55                         description {build using macports-gcc-4.8} {
    5856
    5957    depends_build-append    port:gcc48
     
    6765}
    6866
    69 variant gcc47               conflicts   gcc46 gcc48 \
    70                                         clang mpclang32 mpclang33 \
    71                             description {build using macports-gcc-4.7} {
     67variant gcc47           conflicts   gcc46 gcc48 clang mpclang33 perf \
     68                        description {build using macports-gcc-4.7} {
    7269
    7370    depends_build-append    port:gcc47
     
    8178}
    8279
    83 variant gcc46               conflicts   gcc47 gcc48 \
    84                                         clang mpclang32 mpclang33 \
    85                             description {build using macports-gcc-4.6} {
     80variant gcc46           conflicts   gcc47 gcc48 clang mpclang33 perf\
     81                        description {build using macports-gcc-4.6} {
    8682
    8783    depends_build-append    port:gcc46
     
    9692}
    9793
    98 variant clang               conflicts   gcc46 gcc47 gcc48 \
    99                                         mpclang32 mpclang33 \
    100                             description {use XCode clang and gfortran} {
     94variant clang           conflicts   gcc46 gcc47 gcc48 mpclang33 \
     95                        description {use XCode clang and gfortran} {
    10196
    10297    pre-fetch {
     
    114109}
    115110
    116 variant mpclang32           conflicts   gcc46 gcc47 gcc48 \
    117                                         clang mpclang33 \
    118                             description {use mp-clang-3.2 and gfortran} {
    119 
    120     pre-fetch {
    121         return -code error        "Use of clang is temporarily disabled.\
    122                                    Please choose gcc47 instead."
    123     }
    124 
    125     depends_build-append    port:clang-3.2
    126     configure.compiler      macports-clang-3.2
    127 }
    128 
    129 if {[variant_isset mpclang32]} {
    130 
    131     set use_clang           "32"
    132     set gcc_version         0
    133 }
    134 
    135 variant mpclang33           conflicts   gcc46 gcc47 gcc48 \
    136                                         clang mpclang32 \
    137                             description {use mp-clang-3.3 and gfortran} {
     111variant mpclang33       conflicts   gcc46 gcc47 gcc48 clang perf\
     112                        description {use mp-clang-3.3 and gfortran} {
    138113
    139114    depends_build-append    port:clang-3.3
     
    147122}
    148123
     124variant perf conflicts gcc46 gcc47 gcc48 mpclang33 clang \
     125             description {Uses clang-mp-3.3 for C and dragonegg-3.3 for Fortran} {
     126
     127    depends_build-append    port:clang-3.3
     128    configure.compiler      macports-clang-3.3
     129    depends_build-append    port:dragonegg-3.3-gcc-4.8
     130    configure.f77           ${prefix}/bin/dragonegg-3.3-gfortran-mp-4.8
     131
     132    set clang_flags         "-O3 -fPIC -fomit-frame-pointer"
     133    set gcc_flags           "${clang_flags} \
     134                            -specs=${prefix}/libexec/dragonegg/llvm33gcc48-integrated-as.specs"
     135}
     136
     137if {[variant_isset perf]} {
     138
     139    set use_clang           "33"
     140    set gcc_version         48
     141}
     142
    149143variant nofortran       description {Forgo use of fortran compiler} {
    150144}
    151145
    152146# AVX or higher?
     147
     148if {(${os.major} > 11 && \
     149        (![catch {sysctl hw.optional.fma} result1] && $result1 == 1)) ||
     150        (![catch {sysctl hw.cpufamily} result2] && $result2 == 280134364)} {
     151
     152    set has_fma "yes"
     153} else {
     154
     155    set has_fma "no"
     156}
     157
     158if {(${os.major} > 11 && \
     159        (![catch {sysctl hw.optional.avx2_0} result1] && $result1 == 1)) ||
     160        (![catch {sysctl hw.cpufamily} result2] && $result2 == 280134364)} {
     161
     162    set has_avx2 "yes"
     163} else {
     164
     165    set has_avx2 "no"
     166}
    153167
    154168if {(${os.major} > 10 && \
     
    167181if {![variant_isset gcc46] && ![variant_isset gcc47] && \
    168182    ![variant_isset gcc48] && ![variant_isset clang] && \
    169     ![variant_isset mpclang32] && ![variant_isset mpclang33]} {
     183    ![variant_isset perf] && ![variant_isset mpclang33]} {
    170184
    171185    if {${has_avx} == "no"} {
     
    222236
    223237    # Clang
    224     if {${use_clang} == "32" || ${use_clang} == "XCode" } {
     238    if {${use_clang} == "XCode" } {
    225239
    226240        pre-fetch {       
    227             #ui_warn "Compiling Atlas with this version of clang is\
    228             #        likely *NOT* to work. Please use clang-3.3 or\
    229             #        higher."
     241            ui_warn "Compiling Atlas with this version of clang is\
     242                    likely *NOT* to work. Please use clang-3.3 or\
     243                    higher."
    230244        }
    231245        set clang_flags "-O3 -fomit-frame-pointer -fPIC"
     
    238252
    239253    # Vectorizing unit flags
    240     if {${has_avx} == "yes"} {
    241 
    242         # GCC compilers do not support AVX on OS X
     254    if {${has_fma} == "yes"} {
     255   
     256        # Only Clang handles AVX+ correctly
     257        set gvct_flag   "-msse4.2"
     258        # downgrade FMA to AVX for the time being
     259        set cvct_flag   "-mavx"
     260        configure.args-append   -A 26 -V 480
     261    } elseif  {${has_avx2} == "yes"} {
     262   
     263        set gvct_flag   "-msse4.2"
     264        set cvct_flag   "-mavx"
     265    } elseif {${has_avx} == "yes"} {
     266
    243267        set gvct_flag   "-msse4.2"
    244268        set cvct_flag   "-mavx"
     
    388412    if {${use_clang} != "" && ${fortran} == 1} {
    389413
    390         set gflist  [glob -noc ${prefix}/bin/gfortran-mp-4.*]
    391         if {[llength ${gflist}] == 0} {
    392 
    393             # No fortran compiler found, bail out
    394             return -code error "Atlas could not detect any fortran compiler.\
    395                                 If you really don’t need the fortran interface\
    396                                 to be built, please use the +nofortran option,\
    397                                 else install a fortran compiler (e.g. gcc4X)\
    398                                 before building Atlas."
     414        if {![variant_isset perf]} {
     415            set gflist  [glob -noc ${prefix}/bin/gfortran-mp-4.*]
     416            if {[llength ${gflist}] == 0} {
     417
     418                # No fortran compiler found, bail out
     419                return -code error "Atlas could not detect any fortran compiler.\
     420                                    If you really don’t need the fortran interface\
     421                                    to be built, please use the +nofortran option,\
     422                                    else install a fortran compiler (e.g. gcc4X)\
     423                                    before building Atlas."
     424            } else {
     425
     426                # Select most recent gfortran
     427                global gcc_version
     428
     429                configure.f77   [lindex [lsort -dec ${gflist}] 0]
     430                set gcc_version   \
     431                [join [split [string range ${configure.f77} end-2 end] "."] ""]           
     432            }
     433        }
     434    }
     435
     436    if {${fortran} == 1} {
     437
     438        # Output the F77 selected compiler
     439        if {[variant_isset perf]} {
     440            ui_msg "Using dragonegg-3.3-gfortran-mp-4.8 as Fortran compiler."
    399441        } else {
    400 
    401             # Select most recent gfortran
    402             global gcc_version
    403 
    404             configure.f77   [lindex [lsort -dec ${gflist}] 0]
    405             set gcc_version   \
    406             [join [split [string range ${configure.f77} end-2 end] "."] ""]           
    407         }
    408     }
    409 
    410     if {${fortran} == 1} {
    411 
    412         # Output the F77 selected compiler
    413         ui_msg "Selected F77 compiler: gfortran${gcc_version}"
     442            ui_msg "Selected F77 compiler: gfortran${gcc_version}"
     443        }
    414444    } else {
    415445
     
    454484        # AVX stuff. GCC compilers cannot use AVX instruction set because the
    455485        # system as(1) is outdated
    456         # Clang 3.2 has a bug affecting some AVX instructions
    457         # Clang 3.3 should be fine
    458 
    459         if {${has_avx} == "yes"} {
    460 
    461             if {${use_clang} == ""} {
    462 
    463                 # Force Core i1 arch for ASM kernels
    464                 ui_warn "GCC compilers on MacOS do not support AVX:\
    465                         downgrading."
    466                 configure.args-append   -A 25
    467             } else {
    468 
    469                 # Clang: AVX only on versions >= 3.3
    470                 if {${use_clang} == "32" || ${use_clang} == "XCode" } {
    471 
    472                     ui_warn "AVX support is broken in these versions\
    473                              of clang. Please use clang-3.3 or higher.\
    474                             Downgrading."
    475                     configure.args-append   -A 25
    476                 }
    477             }
     486        # Clang 3.3 is fine
     487
     488        if {${has_avx} == "yes" && ${use_clang} == ""} {
     489
     490            # Force Core i1 arch for ASM kernels
     491            ui_warn "GCC compilers on MacOS do not support AVX:\
     492                    downgrading."
     493            configure.args-append   -A 25
    478494        }
    479495       
     
    485501
    486502        if {${use_clang} == ""} {
    487        
     503
    488504            # GCC
    489505            configure.args-append       -F acg "'${gcc_flags} ${gvct_flag}'"
    490            
     506
    491507            if {${fortran} == 1} {
    492            
     508
    493509                configure.args-append   -C if ${configure.f77}
    494510                configure.args-append   -F if "'${gcc_flags} ${gvct_flag}'"
     
    506522
    507523            # clang
     524            if {[variant_isset perf]} {
     525
     526                append cvct_flag       " -march=native"
     527                set gvct_flag           ${cvct_flag}
     528            }
    508529            configure.args-append   -F acg  "'${clang_flags} ${cvct_flag}'"
     530
    509531            if {${fortran} == 1} {
    510532
     
    751773        reinplace "s|^LIBTOOL=.*$|LIBTOOL=\$\(GCC\) \$\(GCCFLAGS\)|" \
    752774            ${libdir}/Makefile
    753         reinplace "s|dynamic|dynamiclib|g" ${libdir}/Makefile
     775        reinplace "s|-dynamic|-dynamiclib|g" ${libdir}/Makefile
    754776
    755777        # On mono-processors machines, build libsatlas.dylib only
Note: See TracChangeset for help on using the changeset viewer.