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 michaelld@macports.org $ |
---|
3 | |
---|
4 | PortSystem 1.0 |
---|
5 | PortGroup github 1.0 |
---|
6 | PortGroup muniversal 1.0 |
---|
7 | |
---|
8 | name OpenBLAS |
---|
9 | categories math science |
---|
10 | license BSD |
---|
11 | maintainers nicos michaelld openmaintainer |
---|
12 | description OpenBLAS is an optimized BLAS library based on GotoBLAS2 |
---|
13 | long_description ${description} |
---|
14 | platforms darwin |
---|
15 | |
---|
16 | # Prevent precompiled binaries to let compilation optimise the library |
---|
17 | # for the user processor |
---|
18 | archive_sites |
---|
19 | |
---|
20 | subport OpenBLAS-devel {} |
---|
21 | if {[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 | |
---|
41 | checksums rmd160 11f85eb4bb382e10298ac40d1e1fd4ecc46bb3da \ |
---|
42 | sha256 878353b52940e0d5be32011cd5ba8440758f5270c3fa0f6f6200c26eabc53f1c |
---|
43 | |
---|
44 | patchfiles patch-libnoarch.release.diff \ |
---|
45 | patch-linkLib.release.diff |
---|
46 | |
---|
47 | } |
---|
48 | |
---|
49 | variant gcc45 conflicts gcc46 gcc47 gcc48 gcc49 gcc5 gcc6 clang \ |
---|
50 | description "Use Gcc45 as compiler" { |
---|
51 | configure.compiler macports-gcc-4.5 |
---|
52 | } |
---|
53 | |
---|
54 | variant gcc46 conflicts gcc45 gcc47 gcc48 gcc49 gcc5 gcc6 clang \ |
---|
55 | description "Use Gcc46 as compiler" { |
---|
56 | configure.compiler macports-gcc-4.6 |
---|
57 | } |
---|
58 | |
---|
59 | variant gcc47 conflicts gcc45 gcc46 gcc48 gcc49 gcc5 gcc6 clang \ |
---|
60 | description "Use Gcc47 as compiler" { |
---|
61 | configure.compiler macports-gcc-4.7 |
---|
62 | } |
---|
63 | |
---|
64 | variant gcc48 conflicts gcc45 gcc46 gcc47 gcc49 gcc5 gcc6 clang \ |
---|
65 | description "Use Gcc48 as compiler" { |
---|
66 | configure.compiler macports-gcc-4.8 |
---|
67 | } |
---|
68 | |
---|
69 | variant gcc49 conflicts gcc45 gcc46 gcc47 gcc48 gcc5 gcc6 clang \ |
---|
70 | description "Use Gcc49 as compiler" { |
---|
71 | configure.compiler macports-gcc-4.9 |
---|
72 | } |
---|
73 | |
---|
74 | variant gcc5 conflicts gcc45 gcc46 gcc47 gcc48 gcc49 gcc6 clang \ |
---|
75 | description "Use Gcc5 as compiler" { |
---|
76 | configure.compiler macports-gcc-5 |
---|
77 | } |
---|
78 | |
---|
79 | variant gcc6 conflicts gcc45 gcc46 gcc47 gcc48 gcc49 gcc5 clang \ |
---|
80 | description "Use Gcc6 as compiler" { |
---|
81 | configure.compiler macports-gcc-6 |
---|
82 | } |
---|
83 | |
---|
84 | variant 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 | |
---|
103 | if {![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 | |
---|
115 | variant lapack description "Add Lapack/CLapack support to the library" { } |
---|
116 | default_variants-append +lapack |
---|
117 | |
---|
118 | use_configure no |
---|
119 | |
---|
120 | pre-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) |
---|
188 | build.args "AR=/usr/bin/ar RANLIB=/usr/bin/ranlib" |
---|
189 | destroot.args "PREFIX=${prefix}" |
---|
190 | |
---|
191 | if {[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 | } |
---|