/
Portfile
210 lines (184 loc) · 7.41 KB
/
Portfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
# -*- 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
PortSystem 1.0
PortGroup cmake 1.1
PortGroup github 1.0
PortGroup linear_algebra 1.0
PortGroup mpi 1.0
github.setup pghysels STRUMPACK 7.2.0 v
name strumpack
revision 1
categories math science
license BSD
maintainers {@barracuda156 gmail.com:vital.had} openmaintainer
description Structured Matrix Package (LBNL)
long_description STRUMPACK (STRUctured Matrix PACKage) is a software library \
providing linear algebra routines and linear system solvers \
for sparse and for dense rank-structured linear systems.
homepage https://portal.nersc.gov/project/sparse/strumpack
checksums rmd160 354238dba4168641b4ee144c2fb846e3bb50b1f8 \
sha256 6988c00c3213f13e53d75fb474102358f4fecf07a4b4304b7123d86fdc784639 \
size 2006016
github.tarball_from archive
# https://github.com/pghysels/STRUMPACK/issues/116
# Drop with the next update.
patchfiles Fix-BPACK-interface.patch
depends_lib-append port:metis \
port:scotch
depends_build-append port:util-linux
compiler.cxx_standard 2014
compiler.openmp_version 4.5
compilers.choose fc f90 cc cxx
compilers.setup require_fortran
# Do not dump all headers into a generic include:
post-patch {
reinplace "s|DESTINATION include|DESTINATION include/strumpack|g" ${worksrcpath}/CMakeLists.txt ${worksrcpath}/src/CMakeLists.txt
foreach d {BLR clustering dense fortran HODLR HSS iterative kernel matlab misc python sparse structured} {
fs-traverse f ${worksrcpath}/src/${d} {
if {[file isfile ${f}]} {
if {[regexp "\.txt" ${f}]} {
reinplace "s|DESTINATION include|DESTINATION include/strumpack|g" ${f}
}
}
}
}
}
pre-configure {
if {[variant_isset openblas]} {
configure.args-append \
-DTPL_BLAS_LIBRARIES=${prefix}/lib/libopenblas.dylib \
-DTPL_LAPACK_LIBRARIES=${prefix}/lib/libopenblas.dylib
} elseif {[variant_isset accelerate]} {
configure.args-append \
-DTPL_BLAS_LIBRARIES=vecLibFort \
-DTPL_LAPACK_LIBRARIES=vecLibFort
}
}
configure.env-append \
GETOPT=${prefix}/bin/getopt
# In order to enable Bpack, Parmetis, Zfp etc., MPICH-based build is a requirement.
configure.args-append \
-DBUILD_SHARED_LIBS=ON \
-DSTRUMPACK_COUNT_FLOPS=OFF \
-DSTRUMPACK_MESSAGE_COUNTER=OFF \
-DSTRUMPACK_TASK_TIMERS=OFF \
-DSTRUMPACK_USE_BLAS64=OFF \
-DSTRUMPACK_USE_CUDA=OFF \
-DSTRUMPACK_USE_GETOPT=ON \
-DSTRUMPACK_USE_HIP=OFF \
-DSTRUMPACK_USE_MPI=OFF \
-DSTRUMPACK_USE_OPENMP=ON \
-DSTRUMPACK_USE_SYCL=OFF \
-DTPL_ENABLE_BPACK=OFF \
-DTPL_ENABLE_COMBBLAS=OFF \
-DTPL_ENABLE_MAGMA=OFF \
-DTPL_ENABLE_MATLAB=OFF \
-DTPL_ENABLE_PAPI=OFF \
-DTPL_ENABLE_PARMETIS=OFF \
-DTPL_ENABLE_PTSCOTCH=OFF \
-DTPL_ENABLE_SCOTCH=ON \
-DTPL_ENABLE_SLATE=OFF \
-DTPL_ENABLE_ZFP=OFF \
-DTPL_METIS_PREFIX=${prefix}
if {[string match *clang* ${configure.compiler}]} {
configure.ldflags-append \
-L${prefix}/lib/libomp \
-lomp
}
# MPICH version builds but tests performance is questionable.
if {[mpi_variant_isset]} {
PortGroup active_variants 1.1
# A hack until mpich-default is enabled for PPC:
if {${os.platform} eq "darwin" && ${os.arch} eq "powerpc"} {
mpi.setup require_fortran \
-gcc44 -gcc45 -gcc46 -gcc47 -gcc48 -gcc49 -gcc5 \
-clang -fortran
} else {
mpi.setup require_fortran \
-gcc44 -gcc45 -gcc46 -gcc47 -gcc48 -gcc49 -gcc5
}
depends_lib-append \
port:bpack \
port:gklib \
port:parmetis \
port:scalapack \
port:scotch \
port:zfp
require_active_variants \
port:gklib openmp
require_active_variants \
port:metis openmp
pre-configure {
configure.args-append \
-DMPI_RUN_COMMAND=${prefix}/bin/${mpi.exec} \
-DMPIEXEC_EXECUTABLE=${prefix}/bin/${mpi.exec}
}
configure.args-replace \
-DSTRUMPACK_USE_MPI=OFF -DSTRUMPACK_USE_MPI=ON \
-DTPL_ENABLE_BPACK=OFF -DTPL_ENABLE_BPACK=ON \
-DTPL_ENABLE_PARMETIS=OFF -DTPL_ENABLE_PARMETIS=ON \
-DTPL_ENABLE_ZFP=OFF -DTPL_ENABLE_ZFP=ON
if {![catch {set result [active_variants bpack mpi]}]} {
if {$result} {
if {![variant_isset mpi]} {
return -code error "bpack has mpi enabled, please use the same variant."
}
}
}
if {![catch {set result [active_variants bpack openmpi]}]} {
if {$result} {
if {![variant_isset openmpi]} {
return -code error "bpack has openmpi enabled, please use the same variant."
}
}
}
if {![catch {set result [active_variants parmetis mpi]}]} {
if {$result} {
if {![variant_isset mpi]} {
return -code error "parmetis has mpi enabled, please use the same variant."
}
}
}
if {![catch {set result [active_variants parmetis openmpi]}]} {
if {$result} {
if {![variant_isset openmpi]} {
return -code error "parmetis has openmpi enabled, please use the same variant."
}
}
}
if {![catch {set result [active_variants scalapack mpi]}]} {
if {$result} {
if {![variant_isset mpi]} {
return -code error "scalapack has mpi enabled, please use the same variant."
}
}
}
if {![catch {set result [active_variants scalapack openmpi]}]} {
if {$result} {
if {![variant_isset openmpi]} {
return -code error "scalapack has openmpi enabled, please use the same variant."
}
}
}
if {![catch {set result [active_variants scotch mpi]}]} {
if {$result} {
if {![variant_isset mpi]} {
return -code error "scotch has mpi enabled, please use the same variant."
}
}
}
if {![catch {set result [active_variants scotch openmpi]}]} {
if {$result} {
if {![variant_isset openmpi]} {
return -code error "scotch has openmpi enabled, please use the same variant."
}
}
}
}
depends_test-append port:wget
# FIXME: There are some failures on ppc: https://github.com/pghysels/STRUMPACK/issues/83
# Possibly precision-related. But anyway, do not use this to launch rockets.
test.run yes
test.cmd ctest
platform powerpc {
test.env-append OMP_NUM_THREADS=1
}