[104549] trunk/dports/math/atlas
vince at macports.org
vince at macports.org
Wed Mar 27 10:47:13 PDT 2013
Revision: 104549
https://trac.macports.org/changeset/104549
Author: vince at macports.org
Date: 2013-03-27 10:47:13 -0700 (Wed, 27 Mar 2013)
Log Message:
-----------
Update portfile to gcc47 default, remove gcc45 variant and enables clang-3.3 as default for AVX machines
Added Paths:
-----------
trunk/dports/math/atlas/Portfile
Removed Paths:
-------------
trunk/dports/math/atlas/Portfile
trunk/dports/math/atlas/files/patch-atlcomp_txt.diff
Deleted: trunk/dports/math/atlas/Portfile
===================================================================
--- trunk/dports/math/atlas/Portfile 2013-03-27 17:24:13 UTC (rev 104548)
+++ trunk/dports/math/atlas/Portfile 2013-03-27 17:47:13 UTC (rev 104549)
@@ -1,568 +0,0 @@
-# $Id$
-
-PortSystem 1.0
-PortGroup muniversal 1.0
-
-categories math
-license BSD
-name atlas
-version 3.10.1
-revision 2
-
-# additional versions
-set lapackversion 3.4.2
-set lapackname lapack
-set atlasdist ${name}${version}.tar.bz2
-set lapackdist ${lapackname}-${lapackversion}.tgz
-
-maintainers vince
-platforms darwin
-
-description Portable optimal linear algebra software
-long_description Provides a complete BLAS and LAPACK API.\
- ATLAS achieves performance on par\
- with machine-specific tuned libraries.
-
-homepage http://math-atlas.sourceforge.net/
-
-master_sites sourceforge:math-atlas:atlas \
- http://www.netlib.org/lapack:lapack
-
-distfiles ${atlasdist}:atlas \
- ${lapackdist}:lapack
-
-patchfiles patch-atlcomp_txt.diff \
- patch-emit_mm_c.diff \
- patch-ATL_cmm4x4x128_av_c.diff
-
-
-checksums atlas3.10.1.tar.bz2 \
-rmd160 67f928ad900caa300b23e2f824b8a495f416c8d6 \
-sha256 a215b492204aae0205f4028e7c4076492a5d6a564f8f859ff062fd79587bcc86 \
- lapack-3.4.2.tgz \
-rmd160 8740c35c9a85b71424fe1ffeed192256aebeb431 \
-sha256 60a65daaf16ec315034675942618a2230521ea7adf85eea788ee54841072faf0
-
-
-variant gcc48 conflicts gcc45 gcc46 gcc47 \
- clang mpclang31 mpclang32 \
- description {build using gcc 4.8} {
-}
-
-variant gcc47 conflicts gcc45 gcc46 gcc48 \
- clang mpclang31 mpclang32 \
- description {build using macports-gcc-4.7} {
-}
-
-variant gcc46 conflicts gcc45 gcc47 gcc48 \
- clang mpclang31 mpclang32 \
- description {build using macports-gcc-4.6} {
-}
-
-variant gcc45 conflicts gcc46 gcc47 gcc48 \
- clang mpclang31 mpclang32 \
- description {build using macports-gcc-4.5} {
-}
-
-variant clang conflicts gcc45 gcc46 gcc47 gcc48 \
- mpclang31 mpclang32 \
- description {use Apple clang and gfortran} {
-}
-
-variant mpclang31 conflicts gcc45 gcc46 gcc47 gcc48 \
- clang mpclang32 \
- description {use mp-clang 3.1 and gfortran} {
-
- depends_build-append port:clang-3.1
-}
-
-variant mpclang32 conflicts gcc45 gcc46 gcc47 gcc48 \
- clang mpclang31 \
- description {use mp-clang 3.2 and gfortran} {
-
- depends_build-append port:clang-3.2
-}
-
-variant dragonegg conflicts gcc45 gcc46 gcc47 gcc48 \
- description {use dragonegg with gcc46} {
-
- return -code error "Use of dragonegg is momentarily outdated."
-}
-
-variant nofortran description {Forgo use of fortran compiler} {
-}
-
-# Select proper gcc version (or clang)
-# The clang compiler bundled with Xcode < 4.3 is not suitable for
-# Atlas compiling.
-
-if {[vercmp $xcodeversion 4.3] < 0} {
-
- if {[variant_isset clang] || [variant_isset dragonegg]} {
-
- pre-fetch {
- return -code error "XCode is too old to use clang."
- }
- }
-
- if {[variant_isset gcc45]} {
-
- set gccversion 4.5
- } elseif {[variant_isset gcc46]} {
-
- set gccversion 4.6
- } elseif {[variant_isset gcc47]} {
-
- set gccversion 4.7
- } elseif {[variant_isset gcc48]} {
-
- set gccversion 4.8
- } elseif {[variant_isset mpclang31]} {
-
- configure.compiler macports-clang-3.1
- } elseif {[variant_isset mpclang32]} {
-
- configure.cc ${prefix}/bin/clang-mp-3.2
- } else {
-
- # Defaults to gcc47
- set gccversion 4.7
- default_variants +gcc47
- }
-} else {
-
- # On Xcode > 4.2 we may use the standard Clang
- if {[variant_isset gcc45]} {
-
- set gccversion 4.5
- } elseif {[variant_isset gcc46]} {
-
- set gccversion 4.6
- } elseif {[variant_isset gcc47]} {
-
- set gccversion 4.7
- } elseif {[variant_isset gcc48]} {
-
- set gccversion 4.8
- } elseif {[variant_isset dragonegg]} {
-
- set gccversion 4.6
- } elseif {[variant_isset mpclang31]} {
-
- configure.compiler macports-clang-3.1
- } elseif {[variant_isset mpclang32]} {
-
- configure.cc ${prefix}/bin/clang-mp-3.2
- } elseif {[variant_isset clang]} {
-
- configure.compiler clang
-
- } else {
-
- # Defaults to gcc47
- set gccversion 4.7
- default_variants +gcc47
- }
-}
-
-depends_build port:bzip2 \
- port:gzip
-
-if {[info exists gccversion]} {
-
- set gccnumber [join [split ${gccversion} .] ""]
- configure.compiler macports-gcc-${gccversion}
-
- depends_build-append port:gcc${gccnumber}
-} else {
-
- set use_clang 1
-}
-
-# No cross-compilation possible
-
-if {${os.arch} == "i386"} {
-
- set universal_archs_supported {i386 x86_64}
-} else {
-
- set universal_archs_supported {ppc ppc64}
-}
-
-if {${build_arch} == "x86_64" || ${build_arch} == "ppc64" } {
-
- set my_arch 64
-} else {
-
- set my_arch 32
-}
-
-configure.args \
- -C ac ${configure.cc} \
- --with-netlib-lapack-tarfile=${distpath}/${lapackdist} \
- -O 12 \
- -v 5 \
- -b ${my_arch} \
- -Fa alg -fPIC \
- --dylibs
-
-# Dragonegg
-
-if {[variant_isset dragonegg]} {
- configure.args-delete -Fa alg -fPIC
- configure.args-append -Fa alg '-fPIC -fplugin=${prefix}/lib/dragonegg46.so'
-}
-
-# Add the appropriate configure flag to specify if we do
-# or don’t have a fortran compiler
-
-if {[variant_isset nofortran]} {
-
- configure.args-append --nof77
-}
-
-# MacPorts defaults to ppc on G4 and G5, so we must override 64-bit
-# detection by Atlas, even if we are on a G5
-
-if {${build_arch} == "ppc" && ![variant_isset universal]} {
-
- configure.args-delete --cc=${configure.cc} \
- -Fa alg -fPIC
-
- configure.args-append --cc='${configure.cc} -m32 \
- -force_cpusubtype_ALL' \
- -A 4 \
- -Fa alg '-fPIC -m32 -force_cpusubtype_ALL'
-
- # On Leopard, we may warn the user that ppc is not as efficient as ppc64
- if {${os.major} == 9} {
-
- pre-configure {
-
- if {![catch {sysctl hw.cpu64bit_capable} result] && \
- $result == 1} {
-
- ui_msg "Compiling for ppc on a ppc64 machine."
- ui_msg "This could lead to inferior performance."
- }
- }
- }
-}
-
-if {(${os.major} >= 11 && \
- ![catch {sysctl hw.optional.avx1_0} result1] && \
- $result1 == 1) || \
- (${os.major} > 8 && \
- ![catch {sysctl hw.cpufamily} result2] && \
- $result2 == 1418770316)} {
-
- # Core i2 processors (AVX)
- # AVX instruction can’t be used with GCC because Apple bundled as(1)
- # does not support it. Use clang instead.
-
- if {![info exists use_clang]} {
-
- # Force Core i1 arch
- pre-fetch {
- ui_warn "GCC compilers do not support AVX."
- }
- configure.args-append -A 25
- } else {
-
- configure.args-append -Fa acg -fPIC
- }
-}
-
-if {[variant_isset universal]} {
-
- configure.universal_args-delete --disable-dependency-tracking
- configure.args-delete --cc=${configure.cc} \
- -b ${my_arch} \
- -Fa alg -fPIC
-
- lappend merger_configure_args(ppc) --cc='${configure.cc} -m32'\
- -b 32 \
- -A 4 \
- -t 0 \
- -s gas_ppc \
- -Fa alg '-fPIC -m32 \
- -force_cpusubtype_ALL'
-
- lappend merger_configure_args(ppc64) --cc='${configure.cc} -m64'\
- -b 64 \
- -A 5 \
- -t 0 \
- -s gas_ppc \
- -Fa alg '-fPIC -m64 \
- -force_cpusubtype_ALL'
-
- lappend merger_configure_args(i386) --cc='${configure.cc} -m32'\
- -b 32 \
- -A 24 \
- -s gas_x86_32 \
- -Fa alg '-fPIC -m32'
-
- lappend merger_configure_args(x86_64) --cc='${configure.cc} -m64'\
- -b 64 \
- -s gas_x86_64 \
- -Fa alg '-fPIC -m64'
-}
-
-# If we use gcc >= 46, add OpenMP support
-
-if {[info exists gccversion] && ${gccnumber} > 45} {
- configure.args-append -Si omp 1
-}
-
-pre-fetch {
- # If we run on a mono-processor machine (PPC), then disable threading
-
- if {![catch {sysctl hw.logicalcpu} result] && $result == 1} {
- configure.args-append -t 0
- ui_msg "Building sequential only version of atlas."
- }
-}
-
-
-extract {
- # extract Atlas and move to a consistent working directory name
- system -W ${workpath} "bunzip2 -dc ${distpath}/${atlasdist} | \
- gnutar --no-same-owner -xf -"
- system "mv ${workpath}/ATLAS ${workpath}/${name}-${version}"
-}
-
-post-patch {
- if { ${build_arch} == "ppc" || ${build_arch} == "ppc64" } {
- reinplace \
- "s|cMVFLAGS=\\\\\"%s\\\\\"|cMVFLAGS=\\\\\"-force_cpusubtype_ALL\ %s\\\\\"|" \
- ${worksrcpath}/include/atlas_mvtesttime.h
-
- # Remove all references to threads directories
- exec sed -i bak -E "/.*threads.*/d" ${worksrcpath}/Make.top
- }
-}
-
-# Change the default compilers
-pre-configure {
-
- set cc [lindex [split ${configure.cc} '/'] end]
-
- # Make gcc-mp-4.x and gfortran-mp-4.x be detected as GCC variants
- if {[info exists gccnumber]} {
- set ff [lindex [split ${configure.f77} '/'] end]
- reinplace "s|-MPGCC-|${cc}|" \
- ${worksrcpath}/CONFIG/src/probe_comp.c
- reinplace "s|-MPFORTRAN-|${ff}|" \
- ${worksrcpath}/CONFIG/src/probe_comp.c
- reinplace "s|-MPPATH-|${prefix}/bin|" \
- ${worksrcpath}/CONFIG/src/probe_comp.c
- if {${build_arch} == "ppc"} {
-
- reinplace "s|XXX|'${cc}' '-O3 -maltivec \
- -mabi=altivec -mcpu=7400 -mtune=7400 \
- -fno-schedule-insns \
- -fschedule-insns2'|" \
- ${worksrcpath}/CONFIG/src/atlcomp.txt
- } elseif {${build_arch} == "ppc64"} {
-
- reinplace "s|XXX|'${cc}' '-O3 -maltivec \
- -mabi=altivec -mcpu=970 -mtune=970 \
- -mvrsave -mpowerpc64 \
- -fno-schedule-insns \
- -fno-schedule-insns2'|" \
- ${worksrcpath}/CONFIG/src/atlcomp.txt
- } else {
-
- reinplace "s|XXX|'${cc}' '-fomit-frame-pointer \
- -mfpmath=sse -msse3 -O2 \
- -fno-schedule-insns2'|" \
- ${worksrcpath}/CONFIG/src/atlcomp.txt
- }
- } else {
- reinplace "s|XXX|'${cc}' '-Oz -fomit-frame-pointer'|" \
- ${worksrcpath}/CONFIG/src/atlcomp.txt
- }
-
- # Forces goodgcc
-
- reinplace -E "s|GOODGCC =.*|GOODGCC = ${configure.cc}\");|" \
- ${worksrcpath}/CONFIG/src/SpewMakeInc.c
-
- # If we use clang, we must grasp a gfortran compiler to build
- # Fortran sources (do not impact overall Atlas performance)
-
- if {[info exists use_clang]} {
- ui_msg "Use of clang is still experimental and may result in\
- reduced performance or misbehavior. Use with caution."
- }
-
- if {[info exists use_clang] && ![variant_isset nofortran]} {
-
- set gflist [glob -noc ${prefix}/bin/gfortran-mp-4.*]
-
- if {[llength ${gflist}] == 0} {
-
- # No fortran compiler found. Act as if +nofortran was set.
- ui_msg "No fortran compiler found. \
- Disabling fortran interface."
- configure.args-append --nof77
- } else {
-
- # Select most recent gfortran
- global gccnumber
-
- configure.f77 [lindex [lsort -dec ${gflist}] 0]
- set gccnumber \
- [join [split [string range ${configure.f77} end-2 end] "."] ""]
- ui_msg "Selected gfortran${gccnumber}."
- }
- }
-
- # Select the proper gfortran and corresponding libgfortran library
- if {[info exists gccnumber] && ![variant_isset nofortran]} {
-
- configure.args-append -C if ${configure.f77}
- set libgfbasepath ${prefix}/lib/gcc${gccnumber}
- if {[variant_isset universal]} {
-
- foreach arch ${universal_archs_to_use} {
-
- set libgfarchpath ${libgfbasepath}/${arch}
- if {[file exists ${libgfarchpath}/libgfortran.dylib]} {
-
- lappend merger_configure_args($arch) \
- -Ss f77lib ${libgfarchpath}/libgfortran.dylib
- } else {
-
- lappend merger_configure_args($arch) \
- -Ss f77lib ${libgfbasepath}/libgfortran.dylib
- }
- }
- } else {
-
- configure.args-append -Ss f77lib \
- ${libgfbasepath}/libgfortran.dylib
- }
- }
-
- # Create build trees
- if {[variant_isset universal]} {
- foreach arch ${universal_archs_to_use} {
- copy ${workpath}/${name}-${version} \
- ${workpath}/${name}-${version}-${arch}
- }
- }
-
- reinplace "s|cc=gcc|cc=${configure.cc}|g" ${worksrcpath}/configure
- reinplace "s|-no-cpp-precomp||g" \
- ${workpath}/${name}-${version}/CONFIG/src/atlcomp.txt
-
- # Get some system specific variables for maximum optimization
- set cpufreq [expr {[sysctl hw.cpufrequency]/1000000}]
- ui_debug "Setting CPU Frequency for: ${cpufreq}"
-
- if {${os.arch} == "powerpc"} {
- configure.args-append -D c -DWALL
- } else {
- configure.args-append -D c -DPentiumCPS=${cpufreq}
- }
-
- if {[variant_isset universal]} {
- foreach arch ${universal_archs_to_use} {
- file mkdir ${workpath}/${name}-${version}-${arch}/build
- }
- } else {
- file mkdir ${workpath}/${name}-${version}/build
- }
-}
-
-# We configure from the build directory
-configure.dir ${workpath}/${name}-${version}/build
-configure.cmd ../configure
-
-post-configure {
- if {[variant_isset universal]} {
-
- set archs ${universal_archs_to_use}
- } else {
-
- set archs ${build_arch}
- }
-
- foreach arch ${archs} {
- if {![variant_isset universal]} {
-
- set atlas_path ${workpath}/${name}-${version}
- } else {
-
- set atlas_path ${workpath}/${name}-${version}-${arch}
- }
-
- # Recursively remove directories
- ui_debug "patch to recursively remove directories on clean"
- reinplace "s|rm -f|rm -rf|g" ${atlas_path}/build/Makefile
-
- # Ensure libgomp is linked
- if {[info exists gccversion] && ${gccnumber} > 45} {
- set gmpfx ${prefix}/lib/gcc${gccnumber}
- if {[file exists ${gmpfx}/${arch}/libgomp.dylib]} {
- reinplace -E \
- "s|(LIBS =.*)|\\1 ${gmpfx}/${arch}/libgomp.dylib|" \
- ${atlas_path}/build/Make.inc
- } else {
- reinplace -E \
- "s|(LIBS =.*)|\\1 ${gmpfx}/libgomp.dylib|" \
- ${atlas_path}/build/Make.inc
- }
- }
- }
-}
-
-build.env-append "CC=${configure.cc} CXX=${configure.cxx}"
-use_parallel_build no
-build.target build
-build.dir ${workpath}/${name}-${version}/build
-
-post-build {
- if {! [variant_isset universal]} {
- set libdir ${build.dir}/lib
- reinplace "s|^LIBTOOL=.*$|LIBTOOL=\$\(GCC\) \$\(GCCFLAGS\)|" \
- ${libdir}/Makefile
- reinplace "s|dynamic|dynamiclib|g" ${libdir}/Makefile
-
- # On mono-processors machines, build libsatlas.dylib only
- if {![catch {sysctl hw.logicalcpu} result] && $result == 1} {
- system -W ${libdir} "${build.cmd} dylib"
- } else {
- system -W ${libdir} "${build.cmd} shared_all"
- }
- } else {
- foreach arch ${universal_archs_to_use} {
- set libdir ${workpath}/${name}-${version}-${arch}/build/lib
- reinplace "s|^LIBTOOL=.*$|LIBTOOL=\$\(GCC\) \$\(GCCFLAGS\)|" \
- ${libdir}/Makefile
- reinplace "s|dynamic|dynamiclib|g" ${libdir}/Makefile
-
- # Same as above
- if {![catch {sysctl hw.logicalcpu} result] && $result == 1} {
- system -W ${libdir} "${build.cmd} dylib"
- } else {
- system -W ${libdir} "${build.cmd} shared_all"
- }
- }
- }
-}
-
-destroot.dir ${build.dir}
-destroot.destdir DESTDIR=${destroot}${prefix}
-
-post-destroot {
- # On monoprocessor machines, make tatlas and satlas synonymous
- if {![catch {sysctl hw.logicalcpu} result] && $result == 1} {
- set libdir ${destroot}${prefix}/lib
- system -W ${libdir} "ln -s libsatlas.dylib libtatlas.dylib"
- }
-}
-
-livecheck.name math-atlas
-livecheck.distname Stable
Added: trunk/dports/math/atlas/Portfile
===================================================================
--- trunk/dports/math/atlas/Portfile (rev 0)
+++ trunk/dports/math/atlas/Portfile 2013-03-27 17:47:13 UTC (rev 104549)
@@ -0,0 +1,743 @@
+# $Id: Portfile 104220 2013-03-21 03:37:44Z larryv at macports.org $
+
+PortSystem 1.0
+PortGroup muniversal 1.0
+
+categories math
+license BSD
+name atlas
+version 3.10.1
+revision 3
+
+# additional versions
+set lapackversion 3.4.2
+set lapackname lapack
+set atlasdist ${name}${version}.tar.bz2
+set lapackdist ${lapackname}-${lapackversion}.tgz
+
+maintainers vince
+platforms darwin
+
+description Portable optimal linear algebra software
+long_description Provides a complete BLAS and LAPACK API.\nATLAS\
+ achieves performance on par\
+ with machine-specific tuned libraries.
+
+# No precompiled binaries
+archive_sites
+
+homepage http://math-atlas.sourceforge.net/
+
+master_sites sourceforge:math-atlas:atlas \
+ http://www.netlib.org/lapack:lapack
+
+distfiles ${atlasdist}:atlas \
+ ${lapackdist}:lapack
+
+patchfiles patch-emit_mm_c.diff \
+ patch-ATL_cmm4x4x128_av_c.diff
+
+
+checksums atlas3.10.1.tar.bz2 \
+rmd160 67f928ad900caa300b23e2f824b8a495f416c8d6 \
+sha256 a215b492204aae0205f4028e7c4076492a5d6a564f8f859ff062fd79587bcc86 \
+ lapack-3.4.2.tgz \
+rmd160 8740c35c9a85b71424fe1ffeed192256aebeb431 \
+sha256 60a65daaf16ec315034675942618a2230521ea7adf85eea788ee54841072faf0
+
+
+set gcc_version 0
+set use_clang ""
+
+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
+
+ set gcc_version 48
+ set use_clang ""
+}
+
+variant gcc47 conflicts gcc46 gcc48 \
+ clang mpclang32 mpclang33 \
+ description {build using macports-gcc-4.7} {
+
+ depends_build-append port:gcc47
+ configure.compiler macports-gcc-4.7
+
+ set gcc_version 47
+ set use_clang ""
+}
+
+variant gcc46 conflicts gcc47 gcc48 \
+ clang mpclang32 mpclang33 \
+ description {build using macports-gcc-4.6} {
+
+ depends_build-append port:gcc46
+ configure.compiler macports-gcc-4.6
+
+ set gcc_version 46
+ set use_clang ""
+
+}
+
+variant clang conflicts gcc46 gcc47 gcc48 \
+ mpclang32 mpclang33 \
+ description {use XCode clang and gfortran} {
+
+ if {[vercmp $xcodeversion 4.3] < 0} {
+ pre-fetch {
+ return -code error "Your version of clang is too old!"
+ }
+ }
+
+ configure.compiler clang
+
+ set use_clang "XCode"
+ set gcc_version 0
+}
+
+variant mpclang32 conflicts gcc46 gcc47 gcc48 \
+ clang mpclang33 \
+ description {use mp-clang-3.2 and gfortran} {
+
+ depends_build-append port:clang-3.2
+ configure.compiler macports-clang-3.2
+
+ set use_clang "32"
+ set gcc_version 0
+}
+
+variant mpclang33 conflicts gcc46 gcc47 gcc48 \
+ clang mpclang32 \
+ description {use mp-clang-3.3 and gfortran} {
+
+ depends_build-append port:clang-3.3
+ configure.compiler macports-clang-3.3
+
+ set use_clang "33"
+ set gcc_version 0
+}
+
+variant nofortran description {Forgo use of fortran compiler} {
+}
+
+# AVX or higher?
+
+if {${os.major} > 10 && \
+ ![catch {sysctl hw.optional.avx1_0} result1] && $result1 == 1} {
+
+ set has_avx "yes"
+} else {
+
+ set has_avx "no"
+}
+
+# If none of the above variants is chosen, make gcc47 the default for
+# up to SSE4.2 (Core i1) capable processors, and mp-clang-3.3 for newer
+
+if {![variant_isset gcc46] && ![variant_isset gcc47] && \
+ ![variant_isset gcc48] && ![variant_isset clang] && \
+ ![variant_isset mpclang32] && ![variant_isset mpclang33]} {
+
+ if {${has_avx} == "no"} {
+
+ # Defaults to gcc47
+ default_variants +gcc47
+ set gcc_version 47
+ set use_clang ""
+ } else {
+
+ # Defaults to clang-mp-3.3
+ default_variants +mpclang33
+ set gcc_version 0
+ set use_clang "33"
+ }
+}
+
+set universal [variant_isset universal]
+
+# Finds the type of CPU we are running on
+if {${os.arch} == "i386"} {
+
+ set universal_archs_supported {i386 x86_64}
+ set native_arch [exec sysctl -n hw.machine]
+} else {
+
+ set universal_archs_supported {ppc ppc64}
+ if {[exec sysctl -n hw.cpusubtype] == 100} {
+
+ set native_arch "ppc64"
+ } else {
+
+ set native_arch "ppc"
+ }
+}
+
+configure.args \
+ --with-netlib-lapack-tarfile=${distpath}/${lapackdist} \
+ -O 12 \
+ -v 5 \
+ --dylibs
+
+# Chose the right flags for GCC and Clang compilers
+
+if {${build_arch} == "i386" || ${build_arch} == "x86_64"} {
+
+ # General flags
+ # GCC
+ set gcc_flags "-fomit-frame-pointer -mfpmath=sse -O3\
+ -fno-schedule-insns2 -fPIC"
+
+ # Clang
+ if {${use_clang} == "32" || ${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."
+ }
+ set clang_flags "-O3 -fomit-frame-pointer -fPIC"
+ } else {
+
+ # Clang 3.3 – Use loop and straight vectorizer
+ set clang_flags "-O3 -fomit-frame-pointer -fPIC\
+ -fvectorize -fslp-vectorize"
+
+ }
+
+ # Vectorizing unit flags
+ if {${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 && \
+ ![catch {sysctl hw.optional.sse4_2} result1] && $result1 == 1} {
+
+ set gvct_flag "-msse4.2"
+ set cvct_flag "-msse4.2"
+ } elseif {${os.major} > 9 && \
+ ![catch {sysctl hw.optional.sse4_1} result1] && $result1 == 1} {
+
+ set gvct_flag "-msse4.1"
+ set cvct_flag "-msse4.1"
+ } elseif {${os.major} > 8 && \
+ ![catch {sysctl hw.optional.supplementalsse3} result1] && $result1 == 1} {
+
+ set gvct_flag "-mssse3"
+ set cvct_flag "-mssse3"
+ } else {
+
+ # Default vectorization flag is sse3 (CoreSolo / CoreDuo)
+ set gvct_flag "-msse3"
+ set cvct_flag "-msse3"
+ }
+} elseif {${build_arch} == "ppc"} {
+
+ # PPC
+ set gcc_flags "-O3 -mcpu=7400 -mtune=7400\
+ -fno-schedule-insns -fschedule-insns2 -fPIC"
+ set clang_flags "-O3 -arch ppc -fPIC"
+
+ set gvct_flag "-maltivec -mabi=altivec"
+ set cvct_flag "-maltivec"
+
+ configure.args-append --cc="'${configure.cc} -m32 \
+ -force_cpusubtype_ALL'" \
+ -A 4
+
+ # On Leopard, we may warn the user that ppc
+ # is not as efficient as ppc64
+ if {${native_arch} = "ppc64"} {
+
+ ui_msg "Compiling for ppc on a G5 machine.\
+ This could lead to reduced performance."
+ }
+
+} else {
+
+ # PPC64
+ set gcc_flags "-mcpu=970 -mtune=970 -mvrsave -mpowerpc64\
+ -fno-schedule-insns -fschedule-insns2 -fPIC"
+ # Clang has no PPC64 target so compile for PPC
+ set clang_flags "-O3 -arch ppc -fPIC"
+
+ set gvct_flag "-maltivec -mabi=altivec"
+ set cvct_flag "-maltivec"
+}
+
+# Basic universal config
+# Advanced config (flags) is done during pre-configure phase
+
+if {${universal} == 1} {
+
+ configure.universal_args-delete --disable-dependency-tracking
+
+ lappend merger_configure_args(ppc) --cflags=-m32 \
+ -b 32 \
+ -A 4 \
+ -s gas_ppc \
+ -Fa alg -force_cpusubtype_ALL
+
+ lappend merger_configure_args(ppc64) --cflags=-m64 \
+ -b 64 \
+ -A 5 \
+ -s gas_ppc \
+ -Fa alg -force_cpusubtype_ALL
+
+ lappend merger_configure_args(i386) --cflags=-m32 \
+ -b 32 \
+ -A 22 \
+ -V 6 \
+ -s gas_x86_32
+
+ lappend merger_configure_args(x86_64) --cflags=-m64 \
+ -b 64 \
+ -s gas_x86_64
+}
+
+# Threading
+# If we run on a mono-processor machine (PPC), then disable threading
+
+if {![catch {sysctl hw.logicalcpu} result] && $result == 1} {
+
+ configure.args-append -t 0
+ set no_threads 1
+} else {
+
+ set no_threads 0
+
+ # Threading relies on OpenMP if gcc compilers are selected
+ if {${gcc_version} != 0} {
+
+ configure.args-append -Si omp 1
+ }
+}
+
+# Phases (moonlike)
+
+extract {
+ # extract Atlas and move to a consistent working directory name
+ system -W ${workpath} "bunzip2 -dc ${distpath}/${atlasdist} | \
+ gnutar --no-same-owner -xf -"
+ system "mv ${workpath}/ATLAS ${workpath}/${name}-${version}"
+}
+
+post-patch {
+ if {${build_arch} == "ppc" || ${build_arch} == "ppc64"} {
+ reinplace \
+ "s|cMVFLAGS=\\\\\"%s\\\\\"|cMVFLAGS=\\\\\"-force_cpusubtype_ALL\ %s\\\\\"|" \
+ ${worksrcpath}/include/atlas_mvtesttime.h
+
+ # Remove all references to threads directories
+ exec sed -i bak -E "/.*threads.*/d" ${worksrcpath}/Make.top
+ }
+}
+
+# Change the default compilers
+pre-configure {
+
+ # Inform user of selected C compiler
+ ui_msg "Selected C compiler: ${configure.cc}"
+
+ # Fortran stuff
+ set fortran [expr ! [variant_isset nofortran]]
+
+ # If we use clang, we must grasp a gfortran compiler to build
+ # Fortran sources (do not impact overall Atlas performance)
+
+ if {${use_clang} != "" && ${fortran} == 1} {
+
+ set gflist [glob -noc ${prefix}/bin/gfortran-mp-4.*]
+ if {[llength ${gflist}] == 0} {
+
+ # No fortran compiler found. Act as if nofortran was set.
+ ui_warn "No gfortran-mp-4.* compiler found.\
+ Disabling fortran API."
+ set fortran 0
+ } else {
+
+ # 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] "."] ""]
+ }
+ }
+
+ if {${fortran} == 1} {
+
+ # Output the F77 selected compiler
+ ui_msg "Selected F77 compiler: gfortran${gcc_version}"
+ } else {
+
+ # No Fortran
+ configure.args-append --nof77
+ }
+
+ # Now set the flags according to the compiler family chosen
+ # Also set “width” of the processor (32 or 64-bit)
+
+ if {${gcc_version} != 0} {
+ set libgccpath ${prefix}/lib/gcc${gcc_version}
+ }
+
+ # Non-universal builds
+ if {${universal} == 0} {
+
+ configure.args-append -C acg ${configure.cc}
+
+ # If we build for the CPU of the machine, use
+ # machine arch tuning.
+ # -march=natives supersedes -msse4.2 so disable it on AVX
+ # capable machines
+ if {${has_avx} == "no"} {
+
+ append gcc_flags " -march=native"
+ }
+ append clang_flags " -march=native"
+
+ # 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
+
+ if {${has_avx} == "yes"} {
+
+ 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
+ }
+ }
+ }
+
+ 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 \
+ ${libgccpath}/libgfortran.dylib
+ }
+ if {${build_arch} == "x86_64" || ${build_arch} == "ppc64"} {
+
+ configure.args-append -b 64
+ } else {
+
+ configure.args-append -b 32
+ }
+ } else {
+
+ # clang
+ configure.args-append -F acg "'${clang_flags} ${cvct_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 \
+ ${libgccpath}/libgfortran.dylib
+ }
+
+ if {${build_arch} == "x86_64"} {
+
+ configure.args-append -b 64
+ } else {
+
+ # Clang has no ppc64 target so ppc64 ➸ regular ppc (32 bit)
+ configure.args-append -b 32
+ }
+ }
+
+ # Create build directory
+ file mkdir ${worksrcpath}/build
+ } else {
+
+ # Universal builds
+ foreach arch ${universal_archs_to_use} {
+
+ # Init ‘universal’ flags
+ set gcc_univ_flags ${gcc_flags}
+ set gvct_univ_flag ${gvct_flag}
+ set clang_univ_flags ${clang_flags}
+ set cvct_univ_flag ${cvct_flag}
+ set gcc_supp_flags ""
+ set clang_supp_flags ""
+
+ # We build for the native architecture
+ if {${arch} == ${native_arch}} {
+
+ if {${has_avx} == "no"} {
+
+ append gcc_supp_flags "-march=native "
+ }
+ append clang_supp_flags "-march=native "
+ }
+
+ # Non-native targets. Apply a priori flags.
+
+ # Clamp i386 optimization to -sse3 in universal builds and
+ # forces clang/gcc to use -m32 flag
+ if {${arch} == "i386" && ${native_arch} != "i386"} {
+
+ set gvct_univ_flag "-msse3"
+ set cvct_univ_flag "-msse3"
+
+ append gcc_supp_flags "-m32"
+ append clang_supp_flags "-m32"
+ }
+
+ # For x86_64 builds, be conservative and use only -ssse3
+ # Core2 CPU and SSE3 ASM kernels
+ if {${arch} == "x86_64" && ${native_arch} != "x86_64"} {
+
+ set gvct_univ_flag "-mssse3"
+ set cvct_univ_flag "-mssse3"
+
+ append gcc_supp_flags "-m64"
+ append clang_supp_flags "-m64"
+
+ lappend merger_configure_args("x86_64") -A 25 -V 6
+ }
+
+ # ppc (on Intel or ppc64 machines)
+ if {${arch} == "ppc" && ${native_arch} != "ppc"} {
+
+ set gcc_univ_flags "-O3 -mcpu=7400 -mtune=7400\
+ -fno-schedule-insns -fschedule-insns2\
+ -fPIC"
+ set clang_univ_flags "-O3 -arch ppc -fPIC"
+
+ set gvct_univ_flag "-maltivec -mabi=altivec"
+ set cvct_univ_flag "-maltivec"
+
+ append gcc_supp_flags "-m32"
+ append clang_supp_flags "-m32"
+ }
+
+ # ppc64 (only for gcc, for clang this is taken to be the
+ # same target as ppc)
+ if {${arch} == "ppc64" && ${native_arch} != "ppc64"} {
+
+ set gcc_univ_flags "-mcpu=970 -mtune=970 -mvrsave \
+ -mpowerpc64 -fno-schedule-insns\
+ -fschedule-insns2 -fPIC"
+ set clang_univ_flags "-O3 -arch ppc -fPIC"
+
+ set gvct_univ_flag "-maltivec -mabi=altivec"
+ set cvct_univ_flag "-maltivec"
+
+ append gcc_supp_flags "-m64"
+ append clang_supp_flags "-m64"
+ }
+
+ # Now add the flags to merger_configure_args(${arch})
+ # Same code as the non-universal case
+ lappend merger_configure_args(${arch}) -C acg ${configure.cc}
+ if {${use_clang} == ""} {
+
+ # GCC
+ lappend merger_configure_args(${arch}) \
+ -F acg "'${gcc_univ_flags} ${gcc_supp_flags}\
+ ${gvct_univ_flag}'"
+
+ if {${fortran} == 1} {
+
+ lappend merger_configure_args(${arch}) \
+ -C if ${configure.f77} \
+ -F if "'${gcc_univ_flags} ${gcc_supp_flags}\
+ ${gvct_univ_flag}'"
+
+ set libgccarchpath ${libgccpath}/${arch}
+ if {[file exists ${libgccarchpath}/libgfortran.dylib]} {
+
+ lappend merger_configure_args(${arch}) \
+ -Ss f77lib ${libgccarchpath}/libgfortran.dylib
+ } else {
+
+ lappend merger_configure_args(${arch}) \
+ -Ss f77lib ${libgccpath}/libgfortran.dylib
+ }
+ }
+ } else {
+
+ # clang
+ lappend merger_configure_args(${arch}) \
+ -F acg "'${clang_univ_flags} ${clang_supp_flags}\
+ ${cvct_univ_flag}'"
+
+ if {${fortran} == 1} {
+
+ lappend merger_configure_args(${arch}) \
+ -C if ${configure.f77} \
+ -F if "'${gcc_univ_flags} ${gcc_supp_flags}\
+ ${gvct_univ_flag}'"
+
+ set libgccarchpath ${libgccpath}/${arch}
+ if {[file exists ${libgccarchpath}/libgfortran.dylib]} {
+
+ lappend merger_configure_args(${arch}) \
+ -Ss f77lib ${libgccarchpath}/libgfortran.dylib
+ } else {
+
+ lappend merger_configure_args(${arch}) \
+ -Ss f77lib ${libgccpath}/libgfortran.dylib
+ }
+ }
+ }
+
+ # Remove spurious { } from arguments list
+ set merger_configure_args(${arch}) \
+ [join [split $merger_configure_args(${arch}) "{}"]]
+
+ # Create ${arch} build tree
+ copy ${workpath}/${name}-${version} \
+ ${workpath}/${name}-${version}-${arch}
+ file mkdir ${workpath}/${name}-${version}-${arch}/build
+ }
+ }
+
+ # Overrides goodgcc
+ reinplace -E "s|GOODGCC =.*|GOODGCC = ${configure.cc}\");|" \
+ ${worksrcpath}/CONFIG/src/SpewMakeInc.c
+
+ # Some further tweaks
+ reinplace "s|cc=gcc|cc=${configure.cc}|g" \
+ ${worksrcpath}/configure
+ reinplace "s|-no-cpp-precomp||g" \
+ ${worksrcpath}/CONFIG/src/atlcomp.txt
+
+ # Get some system specific variables for maximum optimization
+ set cpufreq [expr {[sysctl hw.cpufrequency] / 1000000}]
+
+ if {${os.arch} == "powerpc"} {
+
+ configure.args-append -D c -DWALL
+ } else {
+
+ configure.args-append -D c -DPentiumCPS=${cpufreq}
+ }
+}
+
+# We configure from the build directory
+configure.dir ${worksrcpath}/build
+configure.cmd ../configure
+
+post-configure {
+
+ # Store in ${atlas_paths} the ${worksrcpath}s corresponding to the
+ # archs Atlas is being built for.
+ set atlas_paths {}
+ if {${universal} == 1} {
+
+ foreach arch ${universal_archs_to_use} {
+
+ lappend atlas_paths ${workpath}/${name}-${version}-${arch}
+ }
+ } else {
+
+ lappend atlas_paths ${worksrcpath}
+ }
+
+ foreach path ${atlas_paths} {
+
+ # Recursively remove directories
+ ui_debug "Patch to recursively remove directories on clean."
+ reinplace "s|rm -f|rm -rf|g" ${path}/build/Makefile
+
+ # Threading — ensure libgomp is correctly pulled in during link
+ if {${gcc_version} != 0 && ${no_threads} == 0} {
+
+ set gmpfx ${prefix}/lib/gcc${gcc_version}
+ set arch [lindex [split [lindex [split $path "/"] end] "-"] 2]
+ if {${arch} != "" && \
+ [file exists ${gmpfx}/${arch}/libgomp.dylib]} {
+
+ reinplace -E \
+ "s|(LIBS =.*)|\\1 ${gmpfx}/${arch}/libgomp.dylib|" \
+ ${path}/build/Make.inc
+ } else {
+
+ reinplace -E \
+ "s|(LIBS =.*)|\\1 ${gmpfx}/libgomp.dylib|" \
+ ${path}/build/Make.inc
+ }
+ }
+ }
+}
+
+build.env-append "CC=${configure.cc} CXX=${configure.cxx}"
+use_parallel_build no
+build.target build
+build.dir ${worksrcpath}/build
+
+post-build {
+ if {${universal} == 0} {
+
+ set libdir ${build.dir}/lib
+ reinplace "s|^LIBTOOL=.*$|LIBTOOL=\$\(GCC\) \$\(GCCFLAGS\)|" \
+ ${libdir}/Makefile
+ reinplace "s|dynamic|dynamiclib|g" ${libdir}/Makefile
+
+ # On mono-processors machines, build libsatlas.dylib only
+ if {${no_threads} == 1} {
+
+ system -W ${libdir} "${build.cmd} dylib"
+ } else {
+
+ system -W ${libdir} "${build.cmd} shared_all"
+ }
+ } else {
+
+ foreach arch ${universal_archs_to_use} {
+
+ set libdir ${workpath}/${name}-${version}-${arch}/build/lib
+ reinplace "s|^LIBTOOL=.*$|LIBTOOL=\$\(GCC\) \$\(GCCFLAGS\)|" \
+ ${libdir}/Makefile
+ reinplace "s|dynamic|dynamiclib|g" ${libdir}/Makefile
+
+ # Same as above
+ if {${no_threads} == 1} {
+
+ system -W ${libdir} "${build.cmd} dylib"
+ } else {
+
+ system -W ${libdir} "${build.cmd} shared_all"
+ }
+ }
+ }
+}
+
+destroot.dir ${build.dir}
+destroot.destdir DESTDIR=${destroot}${prefix}
+
+post-destroot {
+ # On monoprocessor machines, make tatlas and satlas synonymous
+ if {${no_threads} == 1} {
+
+ set libdir ${destroot}${prefix}/lib
+ system -W ${libdir} "ln -s libsatlas.dylib libtatlas.dylib"
+ }
+}
+
+livecheck.name math-atlas
+livecheck.distname Stable
Deleted: trunk/dports/math/atlas/files/patch-atlcomp_txt.diff
===================================================================
--- trunk/dports/math/atlas/files/patch-atlcomp_txt.diff 2013-03-27 17:24:13 UTC (rev 104548)
+++ trunk/dports/math/atlas/files/patch-atlcomp_txt.diff 2013-03-27 17:47:13 UTC (rev 104549)
@@ -1,52 +0,0 @@
---- CONFIG/src/atlcomp.txt.orig 2012-07-07 13:04:15.000000000 +0200
-+++ CONFIG/src/atlcomp.txt 2012-07-07 13:30:54.000000000 +0200
-@@ -43,16 +43,20 @@
- 'gcc-4' '-fomit-frame-pointer -mfpmath=sse -O2 -fno-schedule-insns2'
- MACH=Corei2 OS=ALL LVL=1000 COMPS=smc,dmc,skc,dkc,icc,gcc,xcc
- 'gcc' '-fomit-frame-pointer -mfpmath=sse -O2 -fno-schedule-insns2'
--MACH=Corei2 OS=ALL LVL=50 COMPS=skc,dkc,icc,xcc
-- 'clang' '-fomit-frame-pointer -mavx -O2 -m64 -Wno-parentheses'
-+MACH=Corei2 OS=ALL LVL=1010 COMPS=smc,dmc,skc,dkc,icc,gcc,xcc
-+ XXX
- MACH=Corei1 OS=Win9x,WinNT,Win64 LVL=1005 COMPS=smc,dmc,skc,dkc,icc,gcc
- 'gcc-4' '-fomit-frame-pointer -mfpmath=sse -O2 -fno-schedule-insns2'
- MACH=Corei1 OS=ALL LVL=1000 COMPS=smc,dmc,skc,dkc,icc,gcc
- 'gcc' '-fomit-frame-pointer -mfpmath=sse -O2 -fno-schedule-insns2'
-+MACH=Corei1 OS=ALL LVL=1010 COMPS=smc,dmc,skc,dkc,icc,gcc,xcc
-+ XXX
- MACH=Core2 OS=Win9x,WinNT,Win64 LVL=1005 COMPS=smc,dmc,skc,dkc,icc
- 'gcc-4' '-fomit-frame-pointer -mfpmath=sse -O2'
- MACH=Core2 OS=ALL LVL=1000 COMPS=smc,dmc,skc,dkc,icc,gcc
- 'gcc' '-fomit-frame-pointer -mfpmath=sse -O2'
-+MACH=Core2 OS=ALL LVL=1010 COMPS=smc,dmc,skc,dkc,icc,gcc,xcc
-+ XXX
- MACH=Atom OS=ALL LVL=1000 COMPS=smc,dmc,skc,dkc
- 'gcc' '-O3 -fno-schedule-insns2 -funroll-all-loops -fno-tree-ch'
- MACH=Atom OS=ALL LVL=1000 COMPS=icc,gcc
-@@ -106,6 +110,8 @@
- 'gcc-4' '-fomit-frame-pointer -O3 -mfpmath=387'
- MACH=CoreSolo,CoreDuo OS=ALL LVL=1000 COMPS=smc,dmc,skc,dkc,icc,gcc
- 'gcc' '-fomit-frame-pointer -O3 -mfpmath=387'
-+MACH=CoreSolo,CoreDuo OS=ALL LVL=1010 COMPS=smc,dmc,skc,dkc,icc,gcc,xcc
-+ XXX
- # 3rd generation opteron (Barcelona and descendents)
- MACH=AMD64K10h OS=ALL LVL=1000 COMPS=f77
- 'gfortran' '-fomit-frame-pointer -mfpmath=sse -O2'
-@@ -177,6 +183,8 @@
- 'gcc' '-Os -maltivec -mabi=altivec -mcpu=7400 -mtune=7400'
- MACH=PPCG4 OS=ALL LVL=1000 COMPS=icc,skc,dkc,xcc,gcc
- 'gcc' '-O3 -maltivec -mabi=altivec -mcpu=7400 -mtune=7400 -fno-schedule-insns -fschedule-insns2'
-+MACH=PPCG4 OS=ALL LVL=1010 COMPS=smc,dmc,skc,dkc,icc,gcc,xcc
-+ XXX
- #
- # PowerPC970
- #
-@@ -186,6 +194,8 @@
- 'gcc' '-mpowerpc64 -maltivec -mabi=altivec -mcpu=970 -mtune=970 -O2'
- MACH=PPCG5 OS=ALL LVL=1000 COMPS=skc
- 'gcc' '-mpowerpc64 -maltivec -mabi=altivec -mcpu=970 -mtune=970 -O2 -mvrsave'
-+MACH=PPCG5 OS=ALL LVL=1010 COMPS=smc,dmc,skc,dkc,icc,gcc,xcc
-+ XXX
- MACH=POWER7 OS=ALL LVL=1010 COMPS=icc,smc,dmc,skc,dkc,xcc,gcc
- 'gcc' '-O2 -mvsx -mcpu=power7 -mtune=power7 -m64 -mvrsave -funroll-all-loops'
- MACH=POWER7 OS=ALL LVL=1010 COMPS=f77
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20130327/4ff9026b/attachment-0001.html>
More information about the macports-changes
mailing list