summaryrefslogtreecommitdiff
path: root/sci-libs/spqr/spqr-4.3.6-r1.ebuild
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
}