public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "WANG Xuerui" <xen0n@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: sci-libs/openblas/files/, sci-libs/openblas/
Date: Fri, 13 May 2022 12:58:01 +0000 (UTC)	[thread overview]
Message-ID: <1652446647.c3426da5b81db4d54864ea17d31074e0c60d7e35.xen0n@gentoo> (raw)

commit:     c3426da5b81db4d54864ea17d31074e0c60d7e35
Author:     WANG Xuerui <xen0n <AT> gentoo <DOT> org>
AuthorDate: Fri May 13 12:44:07 2022 +0000
Commit:     WANG Xuerui <xen0n <AT> gentoo <DOT> org>
CommitDate: Fri May 13 12:57:27 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c3426da5

sci-libs/openblas: fix build on loong

Closes: https://bugs.gentoo.org/844013
Signed-off-by: WANG Xuerui <xen0n <AT> gentoo.org>

 .../openblas/files/openblas-0.3.20-fix-loong.patch | 178 +++++++++++++++++++++
 sci-libs/openblas/openblas-0.3.20.ebuild           |   1 +
 2 files changed, 179 insertions(+)

diff --git a/sci-libs/openblas/files/openblas-0.3.20-fix-loong.patch b/sci-libs/openblas/files/openblas-0.3.20-fix-loong.patch
new file mode 100644
index 000000000000..2745d26cb3a5
--- /dev/null
+++ b/sci-libs/openblas/files/openblas-0.3.20-fix-loong.patch
@@ -0,0 +1,178 @@
+https://github.com/xianyi/OpenBLAS/pull/3626, rebased on top of v0.3.20.
+
+From: WANG Xuerui <xen0n@gentoo.org>
+Date: Fri, 13 May 2022 15:26:33 +0800
+Subject: [PATCH 1/3] Move LoongArch make rules to Makefile.loongarch64
+
+--- a/Makefile.loongarch64
++++ b/Makefile.loongarch64
+@@ -1,3 +1,4 @@
+-ifdef BINARY64
+-else
++ifeq ($(CORE), LOONGSON3R5)
++CCOMMON_OPT += -march=loongarch64 -mabi=lp64
++FCOMMON_OPT += -march=loongarch64 -mabi=lp64
+ endif
+--- a/Makefile.system
++++ b/Makefile.system
+@@ -886,13 +886,6 @@ ifeq ($(OSNAME), AIX)
+ BINARY_DEFINED = 1
+ endif
+ 
+-ifeq ($(ARCH), loongarch64)
+-ifeq ($(CORE), LOONGSON3R5)
+-CCOMMON_OPT += -march=loongarch64 -mabi=lp64
+-FCOMMON_OPT += -march=loongarch64 -mabi=lp64
+-endif
+-endif
+-
+ endif
+ 
+ ifndef BINARY_DEFINED
+From: WANG Xuerui <xen0n@gentoo.org>
+Date: Fri, 13 May 2022 15:53:22 +0800
+Subject: [PATCH 2/3] Probe for old-world LASX flavor on LoongArch and use
+ generic DGEMM kernel otherwise
+
+See: https://bugs.gentoo.org/844013
+--- a/Makefile.system
++++ b/Makefile.system
+@@ -1683,6 +1683,7 @@ export TARGET_CORE
+ export NO_AVX512
+ export NO_AVX2
+ export BUILD_BFLOAT16
++export NO_LASX
+ 
+ export SBGEMM_UNROLL_M
+ export SBGEMM_UNROLL_N
+--- a/c_check
++++ b/c_check
+@@ -270,6 +270,37 @@ if (($architecture eq "x86") || ($architecture eq "x86_64")) {
+     }
+ }
+ 
++$no_lasx = 0;
++if (($architecture eq "loongarch64")) {
++    eval "use File::Temp qw(tempfile)";
++    if ($@){
++        warn "could not load PERL module File::Temp, so could not check compiler compatibility with the LoongArch LASX extension";
++        # Assume no LASX, because currently LASX is only present in vendor
++        # toolchains, undocumented nor upstreamed.
++        $no_lasx = 1;
++    } else {
++        # Old-world assembly flavor: LASX registers named "$xrNN", different
++        # from the ISA manual which suggests "$xNN". This is the flavor we
++        # currently support.
++        #
++        # As the LASX ISA manual is not out yet, we cannot predict what the
++        # new-world flavor would look like, so do not probe flavor for now.
++        # The compiler flags are also unsuitable for new-world gcc.
++        ($fh,$tmpf) = tempfile( SUFFIX => '.c' , UNLINK => 1 );
++        $code = '"xvld $xr0, $a0, 0\n"';
++        print $fh "int main(void){ __asm__ volatile($code); }\n";
++        $args = " -march=loongarch64 -mabi=lp64 -mlasx -c -o $tmpf.o $tmpf";
++        my @cmd = ("$compiler_name $flags $args >/dev/null 2>/dev/null");
++        system(@cmd) == 0;
++        if ($? != 0) {
++            $no_lasx = 1;
++        } else {
++            $no_lasx = 0;
++        }
++        unlink("$tmpf.o");
++    }
++}
++
+ $c11_atomics = 0;
+ if ($data =~ /HAVE_C11/) {
+     eval "use File::Temp qw(tempfile)";
+@@ -393,6 +424,7 @@ print MAKEFILE "HAVE_MSA=1\n" if $have_msa eq 1;
+ print MAKEFILE "MSA_FLAGS=$msa_flags\n" if $have_msa eq 1;
+ print MAKEFILE "NO_AVX512=1\n" if $no_avx512 eq 1;
+ print MAKEFILE "NO_AVX2=1\n" if $no_avx2 eq 1;
++print MAKEFILE "NO_LASX=1\n" if $no_lasx eq 1;
+ print MAKEFILE "OLDGCC=1\n" if $oldgcc eq 1;
+ 
+ $os           =~ tr/[a-z]/[A-Z]/;
+--- a/kernel/loongarch64/KERNEL.LOONGSON3R5
++++ b/kernel/loongarch64/KERNEL.LOONGSON3R5
+@@ -1,3 +1,7 @@
++ifeq ($(NO_LASX), 1)
++# No LASX support in compiler, unable to consume the optimized version
++# leave out DGEMMKERNEL to pull in the generic version
++else
+ DGEMMKERNEL    = dgemm_kernel_16x4.S
+ DGEMMINCOPY    = dgemm_ncopy_16.S
+ DGEMMITCOPY    = dgemm_tcopy_16.S
+@@ -7,6 +11,7 @@ DGEMMINCOPYOBJ = dgemm_incopy.o
+ DGEMMITCOPYOBJ = dgemm_itcopy.o
+ DGEMMONCOPYOBJ = dgemm_oncopy.o
+ DGEMMOTCOPYOBJ = dgemm_otcopy.o
++endif
+ 
+ DTRSMKERNEL_LN  = ../generic/trsm_kernel_LN.c
+ DTRSMKERNEL_LT  = ../generic/trsm_kernel_LT.c
+From: WANG Xuerui <xen0n@gentoo.org>
+Date: Fri, 13 May 2022 16:23:46 +0800
+Subject: [PATCH 3/3] Fix ABI CFLAGS setting on new-world LoongArch
+
+See: https://bugs.gentoo.org/844013
+--- a/Makefile.loongarch64
++++ b/Makefile.loongarch64
+@@ -1,4 +1,13 @@
+ ifeq ($(CORE), LOONGSON3R5)
+-CCOMMON_OPT += -march=loongarch64 -mabi=lp64
+-FCOMMON_OPT += -march=loongarch64 -mabi=lp64
++CCOMMON_OPT += -march=loongarch64
++FCOMMON_OPT += -march=loongarch64
++
++ifeq ($(LOONGARCH_CC_FLAVOR), NEW)
++CCOMMON_OPT += -mabi=lp64d
++FCOMMON_OPT += -mabi=lp64d
++endif
++ifeq ($(LOONGARCH_CC_FLAVOR), OLD)
++CCOMMON_OPT += -mabi=lp64
++FCOMMON_OPT += -mabi=lp64
++endif
+ endif
+--- a/Makefile.system
++++ b/Makefile.system
+@@ -1683,6 +1683,7 @@ export TARGET_CORE
+ export NO_AVX512
+ export NO_AVX2
+ export BUILD_BFLOAT16
++export LOONGARCH_CC_FLAVOR
+ export NO_LASX
+ 
+ export SBGEMM_UNROLL_M
+--- a/c_check
++++ b/c_check
+@@ -270,6 +270,21 @@ if (($architecture eq "x86") || ($architecture eq "x86_64")) {
+     }
+ }
+ 
++$loongarch_cc_flavor = "";
++if (($architecture eq "loongarch64")) {
++    # Currently there are only 2 flavors: new-world and old-world.
++    # They differ in ABI names accepted, so check it to avoid creating temp
++    # files.
++    $args = " -mabi=lp64d -E -o - /dev/null";
++    my @cmd = ("$compiler_name $flags $args >/dev/null 2>/dev/null");
++    system(@cmd) == 0;
++    if ($? != 0) {
++        $loongarch_cc_flavor = "OLD";
++    } else {
++        $loongarch_cc_flavor = "NEW";
++    }
++}
++
+ $no_lasx = 0;
+ if (($architecture eq "loongarch64")) {
+     eval "use File::Temp qw(tempfile)";
+@@ -424,6 +439,7 @@ print MAKEFILE "HAVE_MSA=1\n" if $have_msa eq 1;
+ print MAKEFILE "MSA_FLAGS=$msa_flags\n" if $have_msa eq 1;
+ print MAKEFILE "NO_AVX512=1\n" if $no_avx512 eq 1;
+ print MAKEFILE "NO_AVX2=1\n" if $no_avx2 eq 1;
++print MAKEFILE "LOONGARCH_CC_FLAVOR=$loongarch_cc_flavor\n" if $architecture eq "loongarch64";
+ print MAKEFILE "NO_LASX=1\n" if $no_lasx eq 1;
+ print MAKEFILE "OLDGCC=1\n" if $oldgcc eq 1;
+ 

diff --git a/sci-libs/openblas/openblas-0.3.20.ebuild b/sci-libs/openblas/openblas-0.3.20.ebuild
index 5d2349e6998f..5b1ac906fd43 100644
--- a/sci-libs/openblas/openblas-0.3.20.ebuild
+++ b/sci-libs/openblas/openblas-0.3.20.ebuild
@@ -28,6 +28,7 @@ BDEPEND="virtual/pkgconfig"
 PATCHES=(
 	"${FILESDIR}/${PN}-0.3.12-shared-blas-lapack.patch"
 	"${FILESDIR}/${PN}-0.3.20-fix-riscv.patch"
+	"${FILESDIR}/${PN}-0.3.20-fix-loong.patch"
 )
 
 pkg_pretend() {


             reply	other threads:[~2022-05-13 12:58 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-13 12:58 WANG Xuerui [this message]
  -- strict thread matches above, loose matches on Subject: below --
2025-10-12 14:14 [gentoo-commits] repo/gentoo:master commit in: sci-libs/openblas/files/, sci-libs/openblas/ Michał Górny
2025-09-11  3:29 Sam James
2025-09-11  3:29 Sam James
2025-02-06 10:02 Nowa Ammerlaan
2023-07-13 18:56 Michael Orlitzky
2023-07-07  0:31 Michael Orlitzky
2022-04-27 21:18 Jakov Smolić
2020-10-29 20:16 Sam James
2020-09-18 23:25 Sam James

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1652446647.c3426da5b81db4d54864ea17d31074e0c60d7e35.xen0n@gentoo \
    --to=xen0n@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox