commit:     eaf5598e69b2f71f82bddf9d280ab07d3feb330e
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 13 15:01:38 2025 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue Sep 16 17:35:15 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=eaf5598e

sci-libs/blis: Add index64, clean install up

Add a index64 flag as the new consistent flag for ILP64 API.  Unlike
the old index-64bit flag, it installs an ILP64 libblis64 in addition
to the LP64 libblis, therefore avoiding the ABI breakage and matching
the behavior of other packages better.  The naming follows Debian.

While at it, clean up the ebuild a bit.  Install the pkg-config file
to libdir rather than share, and remove the weird Makefile configs
that shouldn't be used by anything.

Closes: https://bugs.gentoo.org/962808
Closes: https://bugs.gentoo.org/962809
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 sci-libs/blis/blis-1.0-r1.ebuild | 183 +++++++++++++++++++++++++++++++++++++++
 sci-libs/blis/metadata.xml       |   1 +
 2 files changed, 184 insertions(+)

diff --git a/sci-libs/blis/blis-1.0-r1.ebuild b/sci-libs/blis/blis-1.0-r1.ebuild
new file mode 100644
index 000000000000..1c6dbd3a3a61
--- /dev/null
+++ b/sci-libs/blis/blis-1.0-r1.ebuild
@@ -0,0 +1,183 @@
+# Copyright 2019-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{11..13} )
+inherit python-any-r1 toolchain-funcs
+
+DESCRIPTION="BLAS-like Library Instantiation Software Framework"
+HOMEPAGE="https://github.com/flame/blis";
+SRC_URI="https://github.com/flame/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+CPU_USE=(
+       cpu_flags_ppc_{vsx,vsx3}
+       cpu_flags_arm_{neon,v7,v8,sve}
+       cpu_flags_x86_{ssse3,avx,fma3,fma4,avx2,avx512vl}
+)
+IUSE="doc eselect-ldso index64 openmp pthread serial static-libs ${CPU_USE[@]}"
+REQUIRED_USE="?? ( openmp pthread serial )"
+
+DEPEND="
+       eselect-ldso? (
+               !app-eselect/eselect-cblas
+               >=app-eselect/eselect-blas-0.2
+       )
+"
+RDEPEND="
+       ${DEPEND}
+"
+BDEPEND="
+       ${PYTHON_DEPS}
+       dev-lang/perl
+"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-0.6.0-blas-provider.patch
+       # to prevent QA Notice: pkg-config files with wrong LDFLAGS detected
+       "${FILESDIR}"/${PN}-0.8.1-pkg-config.patch
+       "${FILESDIR}"/${PN}-0.9.0-rpath.patch
+       "${FILESDIR}"/${PN}-1.0-no-helper-headers.patch
+       # https://github.com/flame/blis/pull/874
+       "${FILESDIR}"/${P}-gcc15.patch
+)
+
+get_confname() {
+       local confname=generic
+       if use x86 || use amd64; then
+               use cpu_flags_x86_ssse3 && confname=penryn
+               use cpu_flags_x86_avx && use cpu_flags_x86_fma3 && 
confname=sandybridge
+               use cpu_flags_x86_avx && use cpu_flags_x86_fma4 && 
confname=bulldozer
+               use cpu_flags_x86_avx && use cpu_flags_x86_fma4 && use 
cpu_flags_x86_fma3 && confname=piledriver
+               use cpu_flags_x86_avx2 && confname=haswell
+               use cpu_flags_x86_avx512vl && confname=skx
+       elif use arm || use arm64; then
+               use arm && confname=arm32
+               use arm64 && confname=arm64
+               use cpu_flags_arm_neon && use cpu_flags_arm_v7 && 
confname=cortexa9
+               use cpu_flags_arm_v8 && confname=cortexa53
+               use cpu_flags_arm_sve && confname=armsve
+       elif use ppc || use ppc64; then
+               confname=power
+               use cpu_flags_ppc_vsx && confname=power7
+               use cpu_flags_ppc_vsx3 && confname=power9
+       fi
+       echo ${confname}
+}
+
+src_configure() {
+       # This is not an autotools configure file. We don't use econf here.
+       local myconf=(
+               --enable-verbose-make
+               --prefix="${EPREFIX}/usr"
+               --libdir="${EPREFIX}/usr/$(get_libdir)"
+               $(use_enable static-libs static)
+               --enable-blas
+               --enable-cblas
+               --enable-shared
+       )
+       if use openmp; then
+               myconf+=( -t openmp )
+       elif use pthread; then
+               myconf+=( -t pthreads )
+       else
+               myconf+=( -t no )
+       fi
+       # confname must always come last
+       myconf+=( "$(get_confname)" )
+
+       local -x CC="$(tc-getCC)"
+       local -x AR="$(tc-getAR)"
+       local -x RANLIB="$(tc-getRANLIB)"
+
+       if use index64; then
+               einfo "Configuring ILP64 variant"
+               cp -r "${S}" "${S}-ilp64" || die
+               pushd "${S}-ilp64" >/dev/null || die
+               ./configure -b 64 -i 64 "${myconf[@]}" || die
+               popd >/dev/null || die
+       fi
+
+       einfo "Configuring LP64 variant"
+       ./configure "${myconf[@]}" || die
+}
+
+emake64() {
+       local overrides=(
+               LIBBLIS=libblis64
+               MK_INCL_DIR_INST="${ED}/usr/include/blis64"
+       )
+
+       emake -C "${S}-ilp64" "${overrides[@]}" "${@}"
+}
+
+src_compile() {
+       local -x DEB_LIBBLAS=libblas.so.3
+       local -x DEB_LIBCBLAS=libcblas.so.3
+       local -x LDS_BLAS="${FILESDIR}"/blas.lds
+       local -x LDS_CBLAS="${FILESDIR}"/cblas.lds
+       use index64 && emake64
+       emake
+}
+
+src_test() {
+       local -x LD_LIBRARY_PATH="lib/$(get_confname)"
+       emake testblis-fast
+       ./testsuite/check-blistest.sh ./output.testsuite || die
+       if use index64; then
+               emake64 testblis-fast
+               ./testsuite/check-blistest.sh "${S}-ilp64"/output.testsuite || 
die
+       fi
+}
+
+src_install() {
+       local libroot=/usr/$(get_libdir)
+       local install_args=(
+               DESTDIR="${D}"
+               # remove weird Makefile configs, they're incorrect for index64
+               # and nothing should be using them anyway
+               MK_SHARE_DIR_INST="${T}/discard"
+               # upstream installs .pc file to share, sigh
+               PC_SHARE_DIR_INST="${ED}${libroot}/pkgconfig"
+       )
+       emake "${install_args[@]}" install
+       if use index64; then
+               emake64 "${install_args[@]}" install
+               # we need to make blis64.pc with proper subst ourselves
+               sed -e 's:blis:&64:' "${ED}${libroot}/pkgconfig"/blis.pc \
+                       > "${ED}${libroot}/pkgconfig"/blis64.pc || die
+       fi
+       use doc && dodoc README.md docs/*.md
+
+       if use eselect-ldso; then
+               insinto "${libroot}/blas/blis"
+               doins lib/*/lib{c,}blas.so.3
+               dosym libblas.so.3 "${libroot}/blas/blis/libblas.so"
+               dosym libcblas.so.3 "${libroot}/blas/blis/libcblas.so"
+       fi
+}
+
+pkg_postinst() {
+       use eselect-ldso || return
+
+       local libdir=$(get_libdir) me="blis"
+
+       # check blas
+       eselect blas add ${libdir} "${EROOT}"/usr/${libdir}/blas/${me} ${me}
+       local current_blas=$(eselect blas show ${libdir} | cut -d' ' -f2)
+       if [[ ${current_blas} == "${me}" || -z ${current_blas} ]]; then
+               eselect blas set ${libdir} ${me}
+               elog "Current eselect: BLAS/CBLAS (${libdir}) -> [${me}]."
+       else
+               elog "Current eselect: BLAS/CBLAS (${libdir}) -> 
[${current_blas}]."
+               elog "To use blas [${me}] implementation, you have to issue (as 
root):"
+               elog "\t eselect blas set ${libdir} ${me}"
+       fi
+}
+
+pkg_postrm() {
+       use eselect-ldso && eselect blas validate
+}

diff --git a/sci-libs/blis/metadata.xml b/sci-libs/blis/metadata.xml
index 98aa69047727..2a5969eca30a 100644
--- a/sci-libs/blis/metadata.xml
+++ b/sci-libs/blis/metadata.xml
@@ -26,6 +26,7 @@
                routine calls. An object-based API unique to BLIS is also 
available.
        </longdescription>
        <use>
+               <flag name="index64">Build an ILP64 libblis64 in addition to 
LP64 libblis</flag>
                <flag name="openmp">Use openmp threadding model</flag>
                <flag name="pthread">Use pthread threadding model</flag>
                <flag name="serial">Use no threadding model</flag>

Reply via email to