From f16a133fcd9dbc3544a67a4743baf98d537f5706 Mon Sep 17 00:00:00 2001 From: Alex James Date: Sat, 2 Aug 2025 13:37:40 -0500 Subject: [PATCH 1/2] openblas: avoid building tests with doCheck=false --- pkgs/development/libraries/science/math/openblas/default.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkgs/development/libraries/science/math/openblas/default.nix b/pkgs/development/libraries/science/math/openblas/default.nix index 69b51422100b..6c502ab1ed36 100644 --- a/pkgs/development/libraries/science/math/openblas/default.nix +++ b/pkgs/development/libraries/science/math/openblas/default.nix @@ -275,6 +275,9 @@ stdenv.mkDerivation rec { }) ); + # The default "all" target unconditionally builds the "tests" target. + buildFlags = lib.optionals (!doCheck) [ "shared" ]; + doCheck = true; checkTarget = "tests"; From fec607a9e37ab99e962501a7d6662e63b7ab5589 Mon Sep 17 00:00:00 2001 From: Alex James Date: Sun, 3 Aug 2025 11:17:34 -0500 Subject: [PATCH 2/2] openblas: add patch to disable buggy SME SGEMM kernel OpenBLAS 0.3.30 added a SGEMM kernel for Arm's Scalable Matrix Extension (SME). Unfortunately the SME SGEMM kernel produces incorrect results on Apple M4, which manifests as test failures while building OpenBLAS [1] and numpy [2]. Add a patch to disable the buggy SME kernel for now. [1]: hxxps://github.com/OpenMathLib/OpenBLAS/issues/5414 [2]: hxxps://github.com/numpy/numpy/issues/29393 --- .../libraries/science/math/openblas/default.nix | 6 ++++++ .../math/openblas/disable-sme-sgemm-kernel.patch | 13 +++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 pkgs/development/libraries/science/math/openblas/disable-sme-sgemm-kernel.patch diff --git a/pkgs/development/libraries/science/math/openblas/default.nix b/pkgs/development/libraries/science/math/openblas/default.nix index 6c502ab1ed36..7f359ebacbdb 100644 --- a/pkgs/development/libraries/science/math/openblas/default.nix +++ b/pkgs/development/libraries/science/math/openblas/default.nix @@ -194,6 +194,12 @@ stdenv.mkDerivation rec { hash = "sha256-foP2OXUL6ttgYvCxLsxUiVdkPoTvGiHomdNudbSUmSE="; }; + patches = [ + # Remove this once https://github.com/OpenMathLib/OpenBLAS/issues/5414 is + # resolved. + ./disable-sme-sgemm-kernel.patch + ]; + postPatch = '' # cc1: error: invalid feature modifier 'sve2' in '-march=armv8.5-a+sve+sve2+bf16' substituteInPlace Makefile.arm64 --replace "+sve2+bf16" "" diff --git a/pkgs/development/libraries/science/math/openblas/disable-sme-sgemm-kernel.patch b/pkgs/development/libraries/science/math/openblas/disable-sme-sgemm-kernel.patch new file mode 100644 index 000000000000..ae85a039b254 --- /dev/null +++ b/pkgs/development/libraries/science/math/openblas/disable-sme-sgemm-kernel.patch @@ -0,0 +1,13 @@ +diff --git a/interface/gemm.c b/interface/gemm.c +index c5182c266..7056422e1 100644 +--- a/interface/gemm.c ++++ b/interface/gemm.c +@@ -436,7 +436,7 @@ void CNAME(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANS + #endif + #if defined(ARCH_ARM64) && (defined(USE_SGEMM_KERNEL_DIRECT)||defined(DYNAMIC_ARCH)) + #if defined(DYNAMIC_ARCH) +- if (support_sme1()) ++ if (false) + #endif + if (beta == 0 && alpha == 1.0 && order == CblasRowMajor && TransA == CblasNoTrans && TransB == CblasNoTrans) { + SGEMM_DIRECT(m, n, k, a, lda, b, ldb, c, ldc);