source: trunk/dports/math/atlas/Portfile @ 108383

Last change on this file since 108383 was 108383, checked in by vince@…, 7 years ago
  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)
  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 25.7 KB
Line 
1# $Id: Portfile 108383 2013-07-22 04:53:21Z vince@macports.org $
2
3PortSystem              1.0
4PortGroup               muniversal 1.0
5
6categories              math
7license                 BSD
8name                    atlas
9version                 3.10.1
10
11# additional versions
12set lapackversion       3.4.2
13set lapackname          lapack
14set atlasdist           ${name}${version}.tar.bz2
15set lapackdist          ${lapackname}-${lapackversion}.tgz
16
17maintainers             vince
18platforms               darwin
19
20description             Portable optimal linear algebra software
21long_description        Provides a complete BLAS and LAPACK API.\nATLAS\
22                        achieves performance on par\
23                        with machine-specific tuned libraries.
24
25# No precompiled binaries
26archive_sites
27
28homepage                http://math-atlas.sourceforge.net/
29
30master_sites            sourceforge:math-atlas:atlas \
31                        http://www.netlib.org/lapack:lapack
32
33distfiles               ${atlasdist}:atlas \
34                        ${lapackdist}:lapack
35
36patchfiles              patch-emit_mm_c.diff \
37                        patch-ATL_cmm4x4x128_av_c.diff
38#                        patch-archinfo_x86_c.diff\
39#                        patch-tfc_c.diff
40
41checksums               atlas3.10.1.tar.bz2 \
42                        rmd160  67f928ad900caa300b23e2f824b8a495f416c8d6 \
43                        sha256  a215b492204aae0205f4028e7c4076492a5d6a564f8f859ff062fd79587bcc86 \
44                        lapack-3.4.2.tgz \
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} {
56
57    depends_build-append    port:gcc48
58    configure.compiler      macports-gcc-4.8
59}
60
61if {[variant_isset gcc48]} {
62
63    set gcc_version         48
64    set use_clang           ""
65}
66
67variant gcc47           conflicts   gcc46 gcc48 clang mpclang33 perf \
68                        description {build using macports-gcc-4.7} {
69
70    depends_build-append    port:gcc47
71    configure.compiler      macports-gcc-4.7
72}
73
74if {[variant_isset gcc47]} {
75
76    set gcc_version         47
77    set use_clang           ""
78}
79
80variant gcc46           conflicts   gcc47 gcc48 clang mpclang33 perf\
81                        description {build using macports-gcc-4.6} {
82
83    depends_build-append    port:gcc46
84    configure.compiler      macports-gcc-4.6
85}
86
87if {[variant_isset gcc46]} {
88
89    set gcc_version         46
90    set use_clang           ""
91
92}
93
94variant clang           conflicts   gcc46 gcc47 gcc48 mpclang33 \
95                        description {use XCode clang and gfortran} {
96
97    pre-fetch {
98        return -code error        "Use of clang is temporarily disabled.\
99                                   Please choose gcc47 instead."
100    }
101
102    configure.compiler      clang
103}
104
105if {[variant_isset clang]} {
106
107    set use_clang           "XCode"
108    set gcc_version         0
109}
110
111variant mpclang33       conflicts   gcc46 gcc47 gcc48 clang perf\
112                        description {use mp-clang-3.3 and gfortran} {
113
114    depends_build-append    port:clang-3.3
115    configure.compiler      macports-clang-3.3
116}
117
118if {[variant_isset mpclang33]} {
119
120    set use_clang           "33"
121    set gcc_version         0
122}
123
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
143variant nofortran       description {Forgo use of fortran compiler} {
144}
145
146# 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}
167
168if {(${os.major} > 10 && \
169        (![catch {sysctl hw.optional.avx1_0} result1] && $result1 == 1)) ||
170        (![catch {sysctl hw.cpufamily} result2] && $result2 == 1418770316)} {
171
172    set has_avx "yes"
173} else {
174
175    set has_avx "no"
176}
177
178# If none of the above variants is chosen, make gcc47 the default for
179# up to SSE4.2 (Core i1) capable processors, and mp-clang-3.3 for newer
180
181if {![variant_isset gcc46] && ![variant_isset gcc47] && \
182    ![variant_isset gcc48] && ![variant_isset clang] && \
183    ![variant_isset perf] && ![variant_isset mpclang33]} {
184
185    if {${has_avx} == "no"} {
186   
187        # Defaults to gcc47
188        default_variants    +gcc47
189        set gcc_version     47
190        set use_clang       ""
191    } else {
192   
193        # Defaults to clang-mp-3.3
194        default_variants    +mpclang33
195        set gcc_version     0
196        set use_clang       "33"
197    }
198}
199
200set universal           [variant_isset universal]
201
202# Finds the type of CPU we are running on
203set native_arch ${build_arch}
204
205if {${os.arch} == "i386"} {
206
207    set universal_archs_supported {i386 x86_64}
208    if {![catch {exec sysctl -n hw.machine} result]} {
209        set native_arch ${result}
210    }
211} elseif {${os.arch} == "powerpc"} {
212
213    set universal_archs_supported {ppc  ppc64}
214    if {![catch {exec sysctl -n hw.cpusubtype} result] && $result == 100} {
215        set native_arch "ppc64"
216    } else {
217   
218        set native_arch "ppc"
219    }
220}
221
222configure.args \
223    --with-netlib-lapack-tarfile=${distpath}/${lapackdist} \
224    -O 12 \
225    -v 5 \
226    --dylibs
227
228# Chose the right flags for GCC and Clang compilers
229
230if {${build_arch} == "i386" || ${build_arch} == "x86_64"} {
231
232    # General flags
233    # GCC
234    set gcc_flags   "-fomit-frame-pointer -mfpmath=sse -O3\
235                     -fno-schedule-insns2 -fPIC"
236
237    # Clang
238    if {${use_clang} == "XCode" } {
239
240        pre-fetch {       
241            ui_warn "Compiling Atlas with this version of clang is\
242                    likely *NOT* to work. Please use clang-3.3 or\
243                    higher."
244        }
245        set clang_flags "-O3 -fomit-frame-pointer -fPIC"
246    } else {
247
248        # Clang 3.3 – Use loop and straight vectorizer
249        set clang_flags "-O3 -fomit-frame-pointer -fPIC"
250
251    }
252
253    # Vectorizing unit flags
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
267        set gvct_flag   "-msse4.2"
268        set cvct_flag   "-mavx"
269    } elseif {${os.major} > 9 && \
270            ![catch {sysctl hw.optional.sse4_2} result1] && $result1 == 1} {
271
272        set gvct_flag   "-msse4.2"
273        set cvct_flag   "-msse4.2"
274    } elseif {${os.major} > 9 && \
275            ![catch {sysctl hw.optional.sse4_1} result1] && $result1 == 1} {
276
277        set gvct_flag   "-msse4.1"
278        set cvct_flag   "-msse4.1"
279    } elseif {${os.major} > 8 && \
280    ![catch {sysctl hw.optional.supplementalsse3} result1] && $result1 == 1} {
281
282        set gvct_flag   "-mssse3"
283        set cvct_flag   "-mssse3"
284    } else {
285
286        # Default vectorization flag is sse3 (CoreSolo / CoreDuo)
287        set gvct_flag   "-msse3"
288        set cvct_flag   "-msse3"
289    }
290} elseif {${build_arch} == "ppc"} {
291
292    # PPC
293    set gcc_flags           "-O3 -mcpu=7400 -mtune=7400\
294                            -fno-schedule-insns -fschedule-insns2 -fPIC \
295                            -force_cpusubtype_ALL"
296    set clang_flags         "-O3 -arch ppc -fPIC"
297
298    set gvct_flag           "-maltivec -mabi=altivec"
299    set cvct_flag           "-maltivec"
300   
301    configure.args-append   -A 4
302
303    # On Leopard, we may warn the user that ppc
304    # is not as efficient as ppc64
305    pre-fetch {
306        if {${native_arch} == "ppc64"} {
307
308                ui_msg "Compiling for ppc on a G5 machine.\
309                        This could lead to reduced performance."
310        }
311    }
312
313} else {
314
315    # PPC64
316    set gcc_flags           "-mcpu=970 -mtune=970 -mvrsave -mpowerpc64\
317                            -fno-schedule-insns -fschedule-insns2 -fPIC \
318                            -force_cpusubtype_ALL"
319    # Clang has no PPC64 target so compile for PPC
320    set clang_flags         "-O3 -arch ppc -fPIC"
321
322    set gvct_flag           "-maltivec -mabi=altivec"
323    set cvct_flag           "-maltivec"
324}
325
326# Basic universal config
327# Advanced config (flags) is done during pre-configure phase
328
329if {${universal} == 1} {
330
331    configure.universal_args-delete         --disable-dependency-tracking
332
333    lappend merger_configure_args(ppc)      --cflags=-m32 \
334                                            -b 32 \
335                                            -A 4 \
336                                            -V 4 \
337                                            -s gas_ppc \
338                                            -Fa alg -force_cpusubtype_ALL
339
340    lappend merger_configure_args(ppc64)    --cflags=-m64 \
341                                            -b 64 \
342                                            -A 5 \
343                                            -V 4 \
344                                            -s gas_ppc \
345                                            -Fa alg -force_cpusubtype_ALL
346
347    lappend merger_configure_args(i386)     --cflags=-m32 \
348                                            -b 32 \
349                                            -A 22 \
350                                            -V 448 \
351                                            -t 2 \
352                                            -s gas_x86_32
353
354    lappend merger_configure_args(x86_64)   --cflags=-m64 \
355                                            -b 64 \
356                                            -s gas_x86_64
357}
358
359# Threading
360# If we run on a mono-processor machine (PPC), then disable threading
361
362if {![catch {sysctl hw.logicalcpu} result] && $result == 1} {
363
364    configure.args-append    -t 0
365    set no_threads  1
366} else {
367
368    set no_threads  0
369
370    # Threading relies on OpenMP if gcc compilers are selected
371    # Does not seem to work reliably. Disabled.
372    #if {${gcc_version} != 0} {
373
374        configure.args-append   -Si omp 0
375    #}
376}
377
378# Phases (moonlike)
379
380extract {
381    # extract Atlas and move to a consistent working directory name
382    system -W ${workpath}   "bunzip2 -dc ${distpath}/${atlasdist} | \
383                             gnutar --no-same-owner -xf -"
384    system  "mv ${workpath}/ATLAS ${workpath}/${name}-${version}"
385}
386
387post-patch {
388    if {${build_arch} == "ppc" || ${build_arch} == "ppc64"} {
389   
390        reinplace \
391        "s|cMVFLAGS=\\\\\"%s\\\\\"|cMVFLAGS=\\\\\"-force_cpusubtype_ALL\ %s\\\\\"|" \
392         ${worksrcpath}/include/atlas_mvtesttime.h
393    }
394
395    if {${no_threads} == 1} {
396        exec sed -i bak -E "/.*threads.*/d" ${worksrcpath}/Make.top
397    }
398}
399
400# Change the default compilers
401pre-configure {
402
403    # Inform user of selected C compiler
404    ui_msg "Selected C compiler: ${configure.cc}"
405
406    # Fortran stuff
407    set fortran [expr ! [variant_isset nofortran]]
408
409    # If we use clang, we must grasp a gfortran compiler to build
410    # Fortran sources (do not impact overall Atlas performance)
411
412    if {${use_clang} != "" && ${fortran} == 1} {
413
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."
441        } else {
442            ui_msg "Selected F77 compiler: gfortran${gcc_version}"
443        }
444    } else {
445
446        # No Fortran
447        configure.args-append   --nof77
448    }
449   
450    # Now set the flags according to the compiler family chosen
451    # Also set “width” of the processor (32 or 64-bit)
452
453    if {${gcc_version} != 0} {
454        set libgccpath                  ${prefix}/lib/gcc${gcc_version}
455    }
456
457    # Some tweaks on the original source before universal build
458    # duplicates it
459    # Overrides goodgcc
460    reinplace -E "s|GOODGCC =.*|GOODGCC = ${configure.cc}\");|" \
461        ${worksrcpath}/CONFIG/src/SpewMakeInc.c
462
463    # Some further tweaks
464    reinplace    "s|cc=gcc|cc=${configure.cc}|g" \
465                    ${worksrcpath}/configure
466    reinplace    "s|-no-cpp-precomp||g" \
467                    ${worksrcpath}/CONFIG/src/atlcomp.txt
468               
469    # Non-universal builds
470    if {${universal} == 0} {
471
472        configure.args-append   -C acg ${configure.cc}
473       
474        # If we build for the CPU of the machine, use
475        # machine arch tuning (except on ppc)
476        # -march=natives supersedes -msse4.2 so disable it on AVX
477        # capable machines
478        if {${has_avx} == "no" && ${build_arch} != "ppc"} {
479
480            append gcc_flags    " -march=native"
481        }
482        append clang_flags  " -march=native"
483       
484        # AVX stuff. GCC compilers cannot use AVX instruction set because the
485        # system as(1) is outdated
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
494        }
495       
496        if {${build_arch} == "ppc"} {
497       
498            # ppc uses altivec vectorizing unit
499            configure.args-append       -V 4
500        }
501
502        if {${use_clang} == ""} {
503
504            # GCC
505            configure.args-append       -F acg "'${gcc_flags} ${gvct_flag}'"
506
507            if {${fortran} == 1} {
508
509                configure.args-append   -C if ${configure.f77}
510                configure.args-append   -F if "'${gcc_flags} ${gvct_flag}'"
511                configure.args-append   -Ss f77lib \
512                                            ${libgccpath}/libgfortran.dylib
513            }
514            if {${build_arch} == "x86_64" || ${build_arch} == "ppc64"} {
515
516                configure.args-append   -b 64
517            } else {
518
519                configure.args-append   -b 32
520            }
521        } else {
522
523            # clang
524            if {[variant_isset perf]} {
525
526                append cvct_flag       " -march=native"
527                set gvct_flag           ${cvct_flag}
528            }
529            configure.args-append   -F acg  "'${clang_flags} ${cvct_flag}'"
530
531            if {${fortran} == 1} {
532
533                configure.args-append   -C if ${configure.f77}           
534                configure.args-append   -F if "'${gcc_flags} ${gvct_flag}'"
535                configure.args-append   -Ss f77lib \
536                                            ${libgccpath}/libgfortran.dylib
537            }
538
539            if {${build_arch} == "x86_64"} {
540
541                configure.args-append   -b 64
542            } else {
543
544                # Clang has no ppc64 target so ppc64 ➸ regular ppc (32 bit)
545                configure.args-append   -b 32
546            }
547        }
548       
549        # Create build directory
550        file mkdir ${worksrcpath}/build
551    } else {
552   
553        # Universal builds
554        foreach arch ${universal_archs_to_use} {
555           
556            # Init ‘universal’ flags
557            set gcc_univ_flags          ${gcc_flags}
558            set gvct_univ_flag          ${gvct_flag}
559            set clang_univ_flags        ${clang_flags}
560            set cvct_univ_flag          ${cvct_flag}
561            set gcc_supp_flags          ""
562            set clang_supp_flags        ""
563           
564            # We build for the native architecture
565            if {${arch} == ${native_arch} && ${build_arch} != "ppc"} {
566               
567                # Don’t add -march=native to a GCC build on an AVX
568                # machine because this flag overrides -msse4.2
569                if {${has_avx} == "no"} {
570               
571                    append gcc_supp_flags   "-march=native "
572                }
573                append clang_supp_flags     "-march=native "
574            }
575           
576            # Non-native targets. Apply a priori flags.
577
578            # Clamp i386 optimization to -sse3 in universal builds and
579            # forces clang/gcc to use -m32 flag
580            if {${arch} == "i386" && ${native_arch} != "i386"} {
581
582                set gvct_univ_flag      "-msse3"
583                set cvct_univ_flag      "-msse3"
584       
585                append gcc_supp_flags   "-m32"
586                append clang_supp_flags "-m32"
587            }
588           
589            # For x86_64 builds, be conservative and use only -ssse3
590            # Core2 CPU and SSE3 ASM kernels
591            if {${arch} == "x86_64" && ${native_arch} != "x86_64"} {
592           
593                set gvct_univ_flag      "-mssse3"
594                set cvct_univ_flag      "-mssse3"
595               
596                append gcc_supp_flags   "-m64"
597                append clang_supp_flags "-m64"
598               
599                lappend merger_configure_args("x86_64") -A 25 -V 448
600            }
601           
602            # ppc (on Intel or ppc64 machines)
603            if {${arch} == "ppc" && ${native_arch} != "ppc"} {
604           
605                set gcc_univ_flags      "-O3 -mcpu=7400 -mtune=7400\
606                                         -fno-schedule-insns -fschedule-insns2\
607                                         -fPIC"
608                set clang_univ_flags    "-O3 -arch ppc -fPIC"
609
610                set gvct_univ_flag      "-maltivec -mabi=altivec"
611                set cvct_univ_flag      "-maltivec"
612
613                append gcc_supp_flags   "-m32"
614                append clang_supp_flags "-m32"
615            }
616           
617            # ppc64 (only for gcc, for clang this is taken to be the
618            # same target as ppc)
619            if {${arch} == "ppc64" && ${native_arch} != "ppc64"} {
620           
621                set gcc_univ_flags      "-mcpu=970 -mtune=970 -mvrsave \
622                                         -mpowerpc64 -fno-schedule-insns\
623                                         -fschedule-insns2 -fPIC"
624                set clang_univ_flags    "-O3 -arch ppc -fPIC"
625
626                set gvct_univ_flag      "-maltivec -mabi=altivec"
627                set cvct_univ_flag      "-maltivec"
628
629                append gcc_supp_flags   "-m64"
630                append clang_supp_flags "-m64"
631            }
632           
633            # Now add the flags to merger_configure_args(${arch})
634            # Same code as the non-universal case
635            lappend merger_configure_args(${arch})  -C acg ${configure.cc}
636            if {${use_clang} == ""} {
637       
638                # GCC
639                lappend merger_configure_args(${arch}) \
640                    -F acg "'${gcc_univ_flags} ${gcc_supp_flags}\
641                             ${gvct_univ_flag}'"
642           
643                if {${fortran} == 1} {
644           
645                    lappend merger_configure_args(${arch}) \
646                        -C if ${configure.f77} \
647                        -F if "'${gcc_univ_flags} ${gcc_supp_flags}\
648                                ${gvct_univ_flag}'"
649               
650                    set libgccarchpath    ${libgccpath}/${arch}
651                    if {[file exists ${libgccarchpath}/libgfortran.dylib]} {
652
653                        lappend merger_configure_args(${arch}) \
654                            -Ss f77lib ${libgccarchpath}/libgfortran.dylib
655                    } else {
656
657                        lappend merger_configure_args(${arch}) \
658                            -Ss f77lib ${libgccpath}/libgfortran.dylib
659                    }
660                }
661            } else {
662
663                # clang
664                lappend merger_configure_args(${arch}) \
665                    -F acg "'${clang_univ_flags} ${clang_supp_flags}\
666                             ${cvct_univ_flag}'"
667           
668                if {${fortran} == 1} {
669           
670                    lappend merger_configure_args(${arch}) \
671                        -C if ${configure.f77} \
672                        -F if "'${gcc_univ_flags} ${gcc_supp_flags}\
673                                ${gvct_univ_flag}'"
674               
675                    set libgccarchpath    ${libgccpath}/${arch}
676                    if {[file exists ${libgccarchpath}/libgfortran.dylib]} {
677
678                        lappend merger_configure_args(${arch}) \
679                            -Ss f77lib ${libgccarchpath}/libgfortran.dylib
680                    } else {
681
682                        lappend merger_configure_args(${arch}) \
683                            -Ss f77lib ${libgccpath}/libgfortran.dylib
684                    }
685                }
686            }
687           
688            # Remove spurious { } from arguments list
689            set merger_configure_args(${arch}) \
690                [join [split $merger_configure_args(${arch}) "{}"]]
691               
692            # Create ${arch} build tree
693            copy ${workpath}/${name}-${version} \
694                ${workpath}/${name}-${version}-${arch}
695            file mkdir ${workpath}/${name}-${version}-${arch}/build
696        }
697    }
698   
699    # On PPC64 we need extra flags for configuring
700    if {${native_arch} == "ppc64"} {
701        configure.args-append   --cc="\"${configure.cc} -m32 \
702                                 -force_cpusubtype_ALL\""
703    }
704
705    # Get some system specific variables for maximum optimization
706    set cpufreq [expr {[sysctl hw.cpufrequency] / 1000000}]
707
708    if {${os.arch} == "powerpc"} {
709
710        configure.args-append    -D c -DWALL
711    } else {
712
713        configure.args-append    -D c -DPentiumCPS=${cpufreq}
714    }   
715}
716
717# We configure from the build directory
718configure.dir            ${worksrcpath}/build
719configure.cmd            ../configure
720
721post-configure {
722
723    # Store in ${atlas_paths} the ${worksrcpath}s corresponding to the
724    # archs Atlas is being built for.
725    set     atlas_paths {}
726    if {${universal} == 1} {
727
728        foreach arch ${universal_archs_to_use} {
729
730            lappend atlas_paths ${workpath}/${name}-${version}-${arch}
731        }
732    } else {
733
734        lappend atlas_paths ${worksrcpath}
735    }
736
737    foreach path ${atlas_paths} {
738
739        # Recursively remove directories
740        ui_debug    "Patch to recursively remove directories on clean."
741        reinplace   "s|rm -f|rm -rf|g" ${path}/build/Makefile
742
743        # Threading — ensure libgomp is correctly pulled in during link
744        #if {${gcc_version} != 0 && ${no_threads} == 0} {
745
746        #   set gmpfx    ${prefix}/lib/gcc${gcc_version}
747        #   set arch     [lindex [split [lindex [split $path "/"] end] "-"] 2]
748        #   if {${arch} != "" && \
749        #       [file exists ${gmpfx}/${arch}/libgomp.dylib]} {
750
751        #      reinplace -E \
752        #          "s|(LIBS =.*)|\\1 ${gmpfx}/${arch}/libgomp.dylib|" \
753        #          ${path}/build/Make.inc
754        #  } else {
755
756        #     reinplace -E \
757        #         "s|(LIBS =.*)|\\1 ${gmpfx}/libgomp.dylib|" \
758        #         ${path}/build/Make.inc
759        # }
760        #}
761    }
762}
763
764build.env-append        "CC=${configure.cc} CXX=${configure.cxx}"
765use_parallel_build      no
766build.target            build
767build.dir               ${worksrcpath}/build
768
769post-build {
770    if {${universal} == 0} {
771
772        set libdir ${build.dir}/lib
773        reinplace "s|^LIBTOOL=.*$|LIBTOOL=\$\(GCC\) \$\(GCCFLAGS\)|" \
774            ${libdir}/Makefile
775        reinplace "s|-dynamic|-dynamiclib|g" ${libdir}/Makefile
776
777        # On mono-processors machines, build libsatlas.dylib only
778        if {${no_threads} == 1} {
779
780            system -W ${libdir} "${build.cmd} dylib"
781        } else {
782
783            system -W ${libdir} "${build.cmd} shared_all"
784        }
785    } else {
786
787        foreach arch ${universal_archs_to_use} {
788
789            set libdir ${workpath}/${name}-${version}-${arch}/build/lib
790            reinplace "s|^LIBTOOL=.*$|LIBTOOL=\$\(GCC\) \$\(GCCFLAGS\)|" \
791                ${libdir}/Makefile
792            reinplace "s|dynamic|dynamiclib|g" ${libdir}/Makefile
793
794            # Same as above
795            if {${no_threads} == 1} {
796
797                system -W ${libdir} "${build.cmd} dylib"
798            } else {
799
800                system -W ${libdir} "${build.cmd} shared_all"
801            }
802        }
803    }
804}
805
806destroot.dir          ${build.dir}
807destroot.destdir      DESTDIR=${destroot}${prefix}
808
809post-destroot {
810    # On monoprocessor machines, make tatlas and satlas synonymous
811    if {${no_threads} == 1} {
812
813        set libdir ${destroot}${prefix}/lib
814        system -W ${libdir} "ln -s libsatlas.dylib libtatlas.dylib"
815    }
816}
817
818livecheck.name        math-atlas
819livecheck.distname    Stable
Note: See TracBrowser for help on using the repository browser.