commit: a982ad56b88359465458734a665baa12361e908a
Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 11 19:10:23 2025 +0000
Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sun Sep 28 18:19:49 2025 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=a982ad56
sci-libs/flexiblas: Support installing as a system BLAS/LAPACK
Add a system-blas flag that installs symlinks to make FlexiBLAS
the provider for libblas, libcblas, liblapack and liblapacke.
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>
...blas-9999.ebuild => flexiblas-3.4.82-r3.ebuild} | 105 +++++++++++++++++++--
sci-libs/flexiblas/flexiblas-9999.ebuild | 90 ++++++++++++++++--
sci-libs/flexiblas/metadata.xml | 4 +
3 files changed, 182 insertions(+), 17 deletions(-)
diff --git a/sci-libs/flexiblas/flexiblas-9999.ebuild
b/sci-libs/flexiblas/flexiblas-3.4.82-r3.ebuild
similarity index 63%
copy from sci-libs/flexiblas/flexiblas-9999.ebuild
copy to sci-libs/flexiblas/flexiblas-3.4.82-r3.ebuild
index c77186b3f6bc..6310a8eb3a19 100644
--- a/sci-libs/flexiblas/flexiblas-9999.ebuild
+++ b/sci-libs/flexiblas/flexiblas-3.4.82-r3.ebuild
@@ -3,21 +3,24 @@
EAPI=8
-inherit cmake git-r3 multilib toolchain-funcs
+inherit cmake multilib toolchain-funcs
+MY_P=flexiblas-release-v${PV}
DESCRIPTION="A BLAS and LAPACK wrapper library with runtime exchangable
backends"
HOMEPAGE="
https://www.mpi-magdeburg.mpg.de/projects/flexiblas/
https://gitlab.mpi-magdeburg.mpg.de/software/flexiblas-release/
"
-EGIT_REPO_URI="
- https://gitlab.mpi-magdeburg.mpg.de/software/flexiblas-release.git
+SRC_URI="
+
https://gitlab.mpi-magdeburg.mpg.de/software/flexiblas-release/-/archive/v${PV}/${MY_P}.tar.bz2
"
+S=${WORKDIR}/${MY_P}
# BSD for vendored cblas/lapacke
LICENSE="LGPL-3+ BSD"
SLOT="0"
-IUSE="blis index64 mkl openblas openmp tbb test"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~x86"
+IUSE="blis index64 mkl openblas openmp system-blas tbb test"
RESTRICT="!test? ( test )"
# flexiblas only supports gnu-openmp using clang/gcc
@@ -29,9 +32,23 @@ DEPEND="
openmp? ( sci-libs/mkl[gnu-openmp] )
)
openblas? ( sci-libs/openblas:=[index64(-)?] )
+ system-blas? ( sci-libs/lapack[flexiblas(-)] )
"
RDEPEND="
${DEPEND}
+ system-blas? (
+ !app-eselect/eselect-blas
+ !app-eselect/eselect-cblas
+ !app-eselect/eselect-lapack
+ !sci-libs/lapack[-flexiblas(-)]
+ )
+"
+PDEPEND="
+ system-blas? (
+ elibc_glibc? (
+ sci-libs/blas-lapack-aux-wrapper[index64?]
+ )
+ )
"
pkg_pretend() {
@@ -47,6 +64,12 @@ pkg_setup() {
}
src_prepare() {
+ local PATCHES=(
+ # extracted from
+ #
https://gitlab.mpi-magdeburg.mpg.de/software/flexiblas-release/-/commit/04021ceada30f136036a22dc6c811b3d352b199d
+ "${FILESDIR}/${P}-xerbla-array.patch"
+ )
+
cmake_src_prepare
# remove bundled netlib blas/lapack
@@ -95,25 +118,47 @@ src_configure() {
-DEXTRA="${extra// /;}"
# respect CFLAGS
-DLTO=OFF
- # use system sci-libs/lapack
- -DSYS_BLAS_LIBRARY="${libdir}/libblas.so"
- -DSYS_LAPACK_LIBRARY="${libdir}/liblapack.so"
# these are used only with -DEXTRA
-Dblis_LIBRARY="${libdir}/libblis.so"
-Dopenblas_LIBRARY="${libdir}/libopenblas.so"
)
+ # use system sci-libs/lapack
+ if use system-blas; then
+ # this is sci-libs/lapack[flexiblas] install
+ mycmakeargs+=(
+ -DSYS_BLAS_LIBRARY="${libdir}/libblas-reference.so"
+ -DSYS_LAPACK_LIBRARY="${libdir}/liblapack-reference.so"
+ )
+ else
+ mycmakeargs+=(
+ -DSYS_BLAS_LIBRARY="${libdir}/libblas.so"
+ -DSYS_LAPACK_LIBRARY="${libdir}/liblapack.so"
+ )
+ fi
+
cmake_src_configure
if use index64; then
mycmakeargs+=(
-DINTEGER8=ON
- -DSYS_BLAS_LIBRARY="${libdir}/libblas64.so"
- -DSYS_LAPACK_LIBRARY="${libdir}/liblapack64.so"
-Dblis_LIBRARY="${libdir}/libblis64.so"
-Dopenblas_LIBRARY="${libdir}/libopenblas64.so"
)
+ if use system-blas; then
+ # this is sci-libs/lapack[flexiblas] install
+ mycmakeargs+=(
+
-DSYS_BLAS_LIBRARY="${libdir}/libblas64-reference.so"
+
-DSYS_LAPACK_LIBRARY="${libdir}/liblapack64-reference.so"
+ )
+ else
+ mycmakeargs+=(
+ -DSYS_BLAS_LIBRARY="${libdir}/libblas64.so"
+ -DSYS_LAPACK_LIBRARY="${libdir}/liblapack64.so"
+ )
+ fi
+
BUILD_DIR=${BUILD_DIR}-ilp64 cmake_src_configure
fi
@@ -198,7 +243,47 @@ src_install() {
cmake_src_install
use index64 && BUILD_DIR=${BUILD_DIR}-ilp64 cmake_src_install
- # verify built backends
+ # Verify built backends.
verify_backends flexiblas "${BACKENDS[@]}"
use index64 && verify_backends flexiblas64 "${BACKENDS_ILP64[@]}"
+
+ # Install symlinks for system BLAS / LAPACK use.
+ if use system-blas; then
+ local libdir="/usr/$(get_libdir)"
+ local fn suffix
+ for fn in cblas.h lapack.h
lapacke{,_config,_mangling,_utils}.h; do
+ dosym "flexiblas/${fn}" "/usr/include/${fn}"
+ done
+
+ # On glibc, we can use sci-libs/blas-lapack-aux-wrapper.
+ if ! use elibc_glibc; then
+ for suffix in '' $(usev index64 64); do
+ for fn in blas cblas lapack lapacke; do
+ dosym "libflexiblas${suffix}.so.3" \
+
"${libdir}/lib${fn}${suffix}.so.3"
+ dosym "libflexiblas${suffix}.so" \
+ "${libdir}/lib${fn}${suffix}.so"
+ dosym "flexiblas${suffix}.pc" \
+
"${libdir}/pkgconfig/${fn}${suffix}.pc"
+ done
+ done
+ fi
+ fi
+}
+
+pkg_postinst() {
+ if use system-blas; then
+ # eselect-{blas,lapack} doesn't clean up its configs
+ local prev_opt=$(shopt -p nullglob)
+ shopt -s nullglob
+ local files=(
+ "${EROOT}"/etc/ld.so.conf.d/81-blas-*.conf
+ "${EROOT}"/etc/ld.so.conf.d/82-lapack-*.conf
+ )
+ ${prev_opt}
+
+ if [[ ${files[@]} ]]; then
+ rm -v "${files[@]}"
+ fi
+ fi
}
diff --git a/sci-libs/flexiblas/flexiblas-9999.ebuild
b/sci-libs/flexiblas/flexiblas-9999.ebuild
index c77186b3f6bc..13f3775404c0 100644
--- a/sci-libs/flexiblas/flexiblas-9999.ebuild
+++ b/sci-libs/flexiblas/flexiblas-9999.ebuild
@@ -17,7 +17,7 @@ EGIT_REPO_URI="
# BSD for vendored cblas/lapacke
LICENSE="LGPL-3+ BSD"
SLOT="0"
-IUSE="blis index64 mkl openblas openmp tbb test"
+IUSE="blis elibc_glibc index64 mkl openblas openmp system-blas tbb test"
RESTRICT="!test? ( test )"
# flexiblas only supports gnu-openmp using clang/gcc
@@ -29,9 +29,23 @@ DEPEND="
openmp? ( sci-libs/mkl[gnu-openmp] )
)
openblas? ( sci-libs/openblas:=[index64(-)?] )
+ system-blas? ( sci-libs/lapack[flexiblas(-)] )
"
RDEPEND="
${DEPEND}
+ system-blas? (
+ !app-eselect/eselect-blas
+ !app-eselect/eselect-cblas
+ !app-eselect/eselect-lapack
+ !sci-libs/lapack[-flexiblas(-)]
+ )
+"
+PDEPEND="
+ system-blas? (
+ elibc_glibc? (
+ sci-libs/blas-lapack-aux-wrapper[index64?]
+ )
+ )
"
pkg_pretend() {
@@ -95,25 +109,47 @@ src_configure() {
-DEXTRA="${extra// /;}"
# respect CFLAGS
-DLTO=OFF
- # use system sci-libs/lapack
- -DSYS_BLAS_LIBRARY="${libdir}/libblas.so"
- -DSYS_LAPACK_LIBRARY="${libdir}/liblapack.so"
# these are used only with -DEXTRA
-Dblis_LIBRARY="${libdir}/libblis.so"
-Dopenblas_LIBRARY="${libdir}/libopenblas.so"
)
+ # use system sci-libs/lapack
+ if use system-blas; then
+ # this is sci-libs/lapack[flexiblas] install
+ mycmakeargs+=(
+ -DSYS_BLAS_LIBRARY="${libdir}/libblas-reference.so"
+ -DSYS_LAPACK_LIBRARY="${libdir}/liblapack-reference.so"
+ )
+ else
+ mycmakeargs+=(
+ -DSYS_BLAS_LIBRARY="${libdir}/libblas.so"
+ -DSYS_LAPACK_LIBRARY="${libdir}/liblapack.so"
+ )
+ fi
+
cmake_src_configure
if use index64; then
mycmakeargs+=(
-DINTEGER8=ON
- -DSYS_BLAS_LIBRARY="${libdir}/libblas64.so"
- -DSYS_LAPACK_LIBRARY="${libdir}/liblapack64.so"
-Dblis_LIBRARY="${libdir}/libblis64.so"
-Dopenblas_LIBRARY="${libdir}/libopenblas64.so"
)
+ if use system-blas; then
+ # this is sci-libs/lapack[flexiblas] install
+ mycmakeargs+=(
+
-DSYS_BLAS_LIBRARY="${libdir}/libblas64-reference.so"
+
-DSYS_LAPACK_LIBRARY="${libdir}/liblapack64-reference.so"
+ )
+ else
+ mycmakeargs+=(
+ -DSYS_BLAS_LIBRARY="${libdir}/libblas64.so"
+ -DSYS_LAPACK_LIBRARY="${libdir}/liblapack64.so"
+ )
+ fi
+
BUILD_DIR=${BUILD_DIR}-ilp64 cmake_src_configure
fi
@@ -198,7 +234,47 @@ src_install() {
cmake_src_install
use index64 && BUILD_DIR=${BUILD_DIR}-ilp64 cmake_src_install
- # verify built backends
+ # Verify built backends.
verify_backends flexiblas "${BACKENDS[@]}"
use index64 && verify_backends flexiblas64 "${BACKENDS_ILP64[@]}"
+
+ # Install symlinks for system BLAS / LAPACK use.
+ if use system-blas; then
+ local libdir="/usr/$(get_libdir)"
+ local fn suffix
+ for fn in cblas.h lapack.h
lapacke{,_config,_mangling,_utils}.h; do
+ dosym "flexiblas/${fn}" "/usr/include/${fn}"
+ done
+
+ # On glibc, we can use sci-libs/blas-lapack-aux-wrapper.
+ if ! use elibc_glibc; then
+ for suffix in '' $(usev index64 64); do
+ for fn in blas cblas lapack lapacke; do
+ dosym "libflexiblas${suffix}.so.3" \
+
"${libdir}/lib${fn}${suffix}.so.3"
+ dosym "libflexiblas${suffix}.so" \
+ "${libdir}/lib${fn}${suffix}.so"
+ dosym "flexiblas${suffix}.pc" \
+
"${libdir}/pkgconfig/${fn}${suffix}.pc"
+ done
+ done
+ fi
+ fi
+}
+
+pkg_postinst() {
+ if use system-blas; then
+ # eselect-{blas,lapack} doesn't clean up its configs
+ local prev_opt=$(shopt -p nullglob)
+ shopt -s nullglob
+ local files=(
+ "${EROOT}"/etc/ld.so.conf.d/81-blas-*.conf
+ "${EROOT}"/etc/ld.so.conf.d/82-lapack-*.conf
+ )
+ ${prev_opt}
+
+ if [[ ${files[@]} ]]; then
+ rm -v "${files[@]}"
+ fi
+ fi
}
diff --git a/sci-libs/flexiblas/metadata.xml b/sci-libs/flexiblas/metadata.xml
index a26b789b77c7..ac3f817d0ce9 100644
--- a/sci-libs/flexiblas/metadata.xml
+++ b/sci-libs/flexiblas/metadata.xml
@@ -10,6 +10,10 @@
<flag name="index64">Build a separate ILP64 library in addition
to LP64</flag>
<flag name="mkl">Support <pkg>sci-libs/mkl</pkg> provider</flag>
<flag name="openblas">Support <pkg>sci-libs/openblas</pkg>
provider</flag>
+ <flag name="system-blas">
+ Install symlinks to use FlexiBLAS as the system BLAS /
LAPACK
+ provider.
+ </flag>
<flag name="tbb">
Support <pkg>sci-libs/mkl</pkg> with
<pkg>dev-cpp/tbb</pkg>
threading.