blob: c72f7e044f3812d3fbdd8559a5dfc503d4c67d6c (
plain)
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
|
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit cmake cuda toolchain-funcs
Sparse_PV="7.12.2"
Sparse_P="SuiteSparse-${Sparse_PV}"
DESCRIPTION="Multithreaded multifrontal sparse QR factorization library"
HOMEPAGE="https://people.engr.tamu.edu/davis/suitesparse.html"
SRC_URI="https://github.com/DrTimothyAldenDavis/SuiteSparse/archive/refs/tags/v${Sparse_PV}.tar.gz -> ${Sparse_P}.gh.tar.gz"
S="${WORKDIR}/${Sparse_P}/${PN^^}"
LICENSE="GPL-2+"
SLOT="0/$(ver_cut 1)"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86"
IUSE="cuda doc test"
RESTRICT="!test? ( test )"
DEPEND="
>=sci-libs/suitesparseconfig-${Sparse_PV}:=
>=sci-libs/cholmod-5.3.4:=
virtual/blas
cuda? (
dev-util/nvidia-cuda-toolkit:=
x11-drivers/nvidia-drivers
)
"
RDEPEND="${DEPEND}"
BDEPEND="
doc? (
virtual/latex-base
dev-texlive/texlive-plaingeneric
)
"
src_prepare() {
cmake_src_prepare
if use cuda; then
cuda_src_prepare
fi
}
src_configure() {
# Define SUITESPARSE_INCLUDEDIR_POSTFIX to "" otherwise it take
# the value suitesparse, and the include directory would be set to
# /usr/include/suitesparse
# This need to be set in all suitesparse ebuilds.
local mycmakeargs=(
-DBUILD_STATIC_LIBS=OFF
-DSPQR_USE_CUDA=$(usex cuda)
-DSUITESPARSE_DEMOS=$(usex test)
-DSUITESPARSE_INCLUDEDIR_POSTFIX=""
)
if has_version 'virtual/blas[index64]'; then
mycmakeargs+=( -DSUITESPARSE_USE_64BIT_BLAS=ON )
fi
if has_version 'virtual/blas[flexiblas]'; then
mycmakeargs+=( -DBLA_VENDOR=FlexiBLAS )
else
mycmakeargs+=( -DBLA_VENDOR=Generic )
fi
# TODO: Figure out how to make sci-libs/mkl work. Bug 974246
if use cuda; then
cuda_add_sandbox
addpredict "/dev/char/"
mycmakeargs+=(
-DSUITESPARSE_CUDA_ARCHITECTURES="${CUDAARCHS:-all-major}"
)
local -x CUDAHOSTCXX="$(cuda_gccdir)"
local -x CUDAHOSTLD="$(tc-getCXX)"
fi
cmake_src_configure
}
src_test() {
# Because we are not using cmake_src_test,
# we have to manually go to BUILD_DIR
cd "${BUILD_DIR}" || die
local simple=(
ash219
west0067
)
local demo=(
a04
a0
a1
a2
a4
ash219
b1_ss
bcspwr01
bfwa62
c2
c32
GD01_b
GD06_theory
GD98_a
lfat5b
LFAT5
lp_e226_transposed
lpi_galenet
lpi_itest6
lp_share1b
r2
Ragusa16
s32
Tina_AskCal
Tina_AskCal_perm
west0067
young1c
)
local simples=(
qrsimple
qrsimplec
qrsimplec_int32
)
local demos=(
qrdemo
qrdemo_int32
qrdemoc
qrdemoc_int32
)
declare -A testsuite
local i
local j
for i in "${simples[@]}"; do
testsuite["${i}"]=${simple[@]}
done
for i in "${demos[@]}"; do
testsuite["${i}"]=${demo[@]}
done
# Run demo files
for i in ${!testsuite[@]}; do
for j in ${testsuite[${i[@]}]}; do
./${i} < "${S}"/Matrix/${j}.mtx || die "failed testing ${i} with ${j}"
done
done
einfo "All tests passed"
}
src_install() {
if use doc; then
pushd "${S}/Doc" || die
emake clean
rm -rf *.pdf || die
emake
popd || die
DOCS="${S}/Doc/*.pdf"
fi
cmake_src_install
}
|