From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 5E7B7158200 for ; Tue, 16 Sep 2025 17:35:33 +0000 (UTC) Received: from lists.gentoo.org (bobolink.gentoo.org [140.211.166.189]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: relay-lists.gentoo.org@gentoo.org) by smtp.gentoo.org (Postfix) with ESMTPSA id 459D23410A3 for ; Tue, 16 Sep 2025 17:35:33 +0000 (UTC) Received: from bobolink.gentoo.org (localhost [127.0.0.1]) by bobolink.gentoo.org (Postfix) with ESMTP id E1C8B110572; Tue, 16 Sep 2025 17:35:29 +0000 (UTC) Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by bobolink.gentoo.org (Postfix) with ESMTPS id D7596110572 for ; Tue, 16 Sep 2025 17:35:29 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 8E74E340E21 for ; Tue, 16 Sep 2025 17:35:29 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 1C85A3985 for ; Tue, 16 Sep 2025 17:35:28 +0000 (UTC) From: "Michał Górny" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Michał Górny" Message-ID: <1758044115.eaf5598e69b2f71f82bddf9d280ab07d3feb330e.mgorny@gentoo> Subject: [gentoo-commits] repo/gentoo:master commit in: sci-libs/blis/ X-VCS-Repository: repo/gentoo X-VCS-Files: sci-libs/blis/blis-1.0-r1.ebuild sci-libs/blis/metadata.xml X-VCS-Directories: sci-libs/blis/ X-VCS-Committer: mgorny X-VCS-Committer-Name: Michał Górny X-VCS-Revision: eaf5598e69b2f71f82bddf9d280ab07d3feb330e X-VCS-Branch: master Date: Tue, 16 Sep 2025 17:35:28 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 74940baa-f17f-4c66-aeea-a909f5f522e3 X-Archives-Hash: c36eada9ffd17af70b2d31732621c081 commit: eaf5598e69b2f71f82bddf9d280ab07d3feb330e Author: Michał Górny gentoo org> AuthorDate: Sat Sep 13 15:01:38 2025 +0000 Commit: Michał Górny gentoo 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 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. + Build an ILP64 libblis64 in addition to LP64 libblis Use openmp threadding model Use pthread threadding model Use no threadding model