source: trunk/dports/math/OpenBLAS/Portfile

Last change on this file was 154295, checked in by michaelld@…, 9 months ago

OpenBLAS-devel: update to e54b6dda (20161018).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 8.8 KB
Line 
1# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
2# $Id: Portfile 154295 2016-10-26 16:39:14Z ryandesign@macports.org $
3
4PortSystem          1.0
5PortGroup           github 1.0
6PortGroup           muniversal 1.0
7
8name                OpenBLAS
9categories          math science
10license             BSD
11maintainers         nicos michaelld openmaintainer
12description         OpenBLAS is an optimized BLAS library based on GotoBLAS2
13long_description    ${description}
14platforms           darwin
15
16# Prevent precompiled binaries to let compilation optimise the library
17# for the user processor
18archive_sites
19
20subport OpenBLAS-devel {}
21if {[string first "-devel" $subport] > 0} {
22
23    github.setup    xianyi OpenBLAS e54b6ddaa09a96b85109f437755e7ddf86220451
24    version         20161018
25    checksums       rmd160 4711bd348001240d73eb53de0364079d2721df4a \
26                    sha256 cea9270f4df134fd0eac1c12ecdfa8546887539ba76acbbd7ddd31c920c281f3
27
28    name            ${github.project}-devel
29    conflicts       OpenBLAS
30
31    patchfiles      patch-libnoarch.devel.diff \
32                    patch-linkLib.devel.diff
33
34    livecheck.url   ${github.homepage}/commits/develop.atom
35
36} else {
37
38    github.setup    xianyi OpenBLAS 0.2.19 v
39    conflicts       OpenBLAS-devel
40
41checksums           rmd160  11f85eb4bb382e10298ac40d1e1fd4ecc46bb3da \
42                    sha256  878353b52940e0d5be32011cd5ba8440758f5270c3fa0f6f6200c26eabc53f1c
43
44    patchfiles      patch-libnoarch.release.diff \
45                    patch-linkLib.release.diff
46
47}
48
49variant gcc45 conflicts gcc46 gcc47 gcc48 gcc49 gcc5 gcc6 clang \
50    description "Use Gcc45 as compiler" { 
51    configure.compiler  macports-gcc-4.5
52}
53
54variant gcc46 conflicts gcc45 gcc47 gcc48 gcc49 gcc5 gcc6 clang \
55    description "Use Gcc46 as compiler" { 
56    configure.compiler  macports-gcc-4.6
57}
58
59variant gcc47 conflicts gcc45 gcc46 gcc48 gcc49 gcc5 gcc6 clang \
60    description "Use Gcc47 as compiler" { 
61    configure.compiler  macports-gcc-4.7
62}
63
64variant gcc48 conflicts gcc45 gcc46 gcc47 gcc49 gcc5 gcc6 clang \
65    description "Use Gcc48 as compiler" { 
66    configure.compiler  macports-gcc-4.8
67}
68
69variant gcc49 conflicts gcc45 gcc46 gcc47 gcc48 gcc5 gcc6 clang \
70    description "Use Gcc49 as compiler" { 
71    configure.compiler  macports-gcc-4.9
72}
73
74variant gcc5 conflicts gcc45 gcc46 gcc47 gcc48 gcc49 gcc6 clang \
75    description "Use Gcc5 as compiler" { 
76    configure.compiler  macports-gcc-5
77}
78
79variant gcc6 conflicts gcc45 gcc46 gcc47 gcc48 gcc49 gcc5 clang \
80    description "Use Gcc6 as compiler" { 
81    configure.compiler  macports-gcc-6
82}
83
84variant clang conflicts gcc45 gcc46 gcc47 gcc48 gcc49 gcc5 gcc6 \
85    description "Use Clang as compiler" {
86    if {[vercmp $xcodeversion 5.0] >= 0} {
87        configure.compiler      clang
88    } else {
89        # Xcode's clang < 5.0 does not support avx
90
91        #Use a compiler depending on system
92        if {${configure.cxx_stdlib} eq "libc++"} {
93            configure.compiler      macports-clang-3.7
94        } else {
95            configure.compiler      macports-clang-3.4
96        }
97    }
98    depends_build-append    port:gcc5
99    configure.fc            ${prefix}/bin/gfortran-mp-5
100
101}
102
103if {![variant_isset gcc45] && ![variant_isset gcc46] && ![variant_isset gcc47] && \
104    ![variant_isset gcc48] && ![variant_isset gcc49] && ![variant_isset gcc5] && \
105    ![variant_isset gcc6] && ![variant_isset clang]} {
106    if { ![catch {sysctl hw.optional.avx1_0} has_avx] && $has_avx == 1 } {
107        #Use clang if the processor has avx instructions
108        default_variants +clang       
109    } else {
110        #Else, use gcc5 as default
111        default_variants +gcc5
112    }
113}
114
115variant lapack description "Add Lapack/CLapack support to the library" { }
116default_variants-append +lapack
117
118use_configure       no
119
120pre-build {
121    if {[variant_isset universal]} {
122        foreach arch ${universal_archs_to_use} {
123            set makeINC [open ${worksrcpath}-${arch}/Makefile.rule "w"]
124            puts $makeINC "VERSION = 1"
125            puts $makeINC "LIBNAMESUFFIX = "
126
127            puts $makeINC "CC = ${configure.cc}"
128            puts $makeINC "FC = ${configure.fc}"
129
130            if {${arch} eq "x86_64" || ${arch} eq "ppc64"} {
131                puts $makeINC "BINARY = 64"
132            } else {
133                puts $makeINC "BINARY = 32"
134            }
135            if {![variant_isset clang]} {
136                 puts $makeINC "COMMON_OPT = -O3"
137            } else {
138                #Ensure to use the AVX-capable assembler
139                puts $makeINC "COMMON_OPT = -O3"
140            }
141            puts $makeINC "COMMON_PROF = -pg"
142   
143            if {![variant_isset lapack]} {
144                puts $makeINC "NO_LAPACK = 1"
145            }
146            if {![variant_isset clang]} {
147                puts $makeINC "NO_AVX = 1"
148            }
149            close $makeINC
150        }
151    } else {
152        set makeINC [open ${worksrcpath}/Makefile.rule "w"]
153        puts $makeINC "VERSION = 1"
154        puts $makeINC "LIBNAMESUFFIX = "
155
156        puts $makeINC "CC = ${configure.cc}"
157        puts $makeINC "FC = ${configure.fc}"
158
159        if {${build_arch} eq "x86_64" || ${build_arch} eq "ppc64"} {
160            puts $makeINC "BINARY = 64"
161        } else {
162            puts $makeINC "BINARY = 32"
163        }
164        if {![variant_isset clang]} {
165            puts $makeINC "COMMON_OPT = -O3"
166        } else {
167            #Ensure to use the AVX-capable assembler
168            puts $makeINC "COMMON_OPT = -O3"
169        }       
170        puts $makeINC "COMMON_PROF = -pg"
171
172        if {![variant_isset lapack]} {
173            puts $makeINC "NO_LAPACK = 1"
174        }
175        if {![variant_isset clang]} {
176            if { ![catch {sysctl hw.optional.avx1_0} has_avx] && $has_avx == 1 } {
177                ui_msg "Warning: the chosen compiler cannot handle advanced optimisation instructions."
178                ui_msg "         AVX instructions are disabled."
179            }
180            puts $makeINC "NO_AVX = 1"
181        }
182        close $makeINC
183    }
184}
185#Using system ones as default is set to bin/gcc-ar which does not exist,
186#and using gcc-mp ones end up in an error about a missing plugin
187#(see ticket #38551 for example)
188build.args          "AR=/usr/bin/ar RANLIB=/usr/bin/ranlib"
189destroot.args       "PREFIX=${prefix}"
190
191if {[variant_isset universal]} {
192    merger-post-destroot {
193        foreach arch ${universal_archs_to_use} {
194            move ${destroot}-${arch}${prefix}/include/cblas.h \
195                ${destroot}-${arch}${prefix}/include/cblas_openblas.h
196            #Correct library name
197            system "install_name_tool -id \
198                ${prefix}/lib/libopenblas-r1.dylib \
199                ${destroot}-${arch}${prefix}/lib/libopenblas-r1.dylib"
200            delete file ${destroot}-${arch}/${prefix}/lib/cmake
201            if {[variant_isset lapack]} {
202                #Install lapacke headers too
203                set LAPACKE_DIR [exec /bin/ls ${worksrcpath}/lapack-netlib | \
204                                     grep -i lapacke]
205                xinstall -m 755 ${worksrcpath}-${arch}/lapack-netlib/${LAPACKE_DIR}/include/lapacke_config.h \
206                    ${destroot}-${arch}${prefix}/include/lapacke_config.h
207                xinstall -m 755 ${worksrcpath}-${arch}/lapack-netlib/${LAPACKE_DIR}/include/lapacke_mangling.h \
208                    ${destroot}-${arch}${prefix}/include/lapacke_mangling.h
209                xinstall -m 755 ${worksrcpath}-${arch}/lapack-netlib/${LAPACKE_DIR}/include/lapacke_utils.h \
210                    ${destroot}-${arch}${prefix}/include/lapacke_utils.h
211                xinstall -m 755 ${worksrcpath}-${arch}/lapack-netlib/${LAPACKE_DIR}/include/lapacke.h \
212                    ${destroot}-${arch}${prefix}/include/lapacke.h
213            }
214        }
215    }
216} else {
217    post-destroot {
218        #Avoid conflict with Atlas
219        move ${destroot}${prefix}/include/cblas.h \
220            ${destroot}${prefix}/include/cblas_openblas.h
221        #Correct library name
222        system "install_name_tool -id \
223            ${prefix}/lib/libopenblas-r1.dylib \
224            ${destroot}${prefix}/lib/libopenblas-r1.dylib"
225        delete file ${destroot}/${prefix}/lib/cmake
226        if {[variant_isset lapack]} {
227            #Install lapacke headers too
228            set LAPACKE_DIR [exec /bin/ls ${worksrcpath}/lapack-netlib | \
229                                 grep -i lapacke]
230            xinstall -m 755 ${worksrcpath}/lapack-netlib/${LAPACKE_DIR}/include/lapacke_config.h \
231                ${destroot}${prefix}/include/lapacke_config.h
232            xinstall -m 755 ${worksrcpath}/lapack-netlib/${LAPACKE_DIR}/include/lapacke_mangling.h \
233                ${destroot}${prefix}/include/lapacke_mangling.h
234            xinstall -m 755 ${worksrcpath}/lapack-netlib/${LAPACKE_DIR}/include/lapacke_utils.h \
235                ${destroot}${prefix}/include/lapacke_utils.h
236            xinstall -m 755 ${worksrcpath}/lapack-netlib/${LAPACKE_DIR}/include/lapacke.h \
237                ${destroot}${prefix}/include/lapacke.h
238        }
239    }
240}
Note: See TracBrowser for help on using the repository browser.