From b7a46ed22764db9097aba96e68143d46b2a75be0 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Wed, 20 Jun 2018 15:18:35 +0200 Subject: gnu: openblas: Fix build on i686. * gnu/packages/patches/openblas-fix-tests-i686.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it. * gnu/packages/maths.scm (openblas)[native-inputs]: Add it. [arguments]: Add phase to apply it on i686 systems only. --- gnu/local.mk | 1 + gnu/packages/maths.scm | 15 ++++++++++ gnu/packages/patches/openblas-fix-tests-i686.patch | 35 ++++++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 gnu/packages/patches/openblas-fix-tests-i686.patch diff --git a/gnu/local.mk b/gnu/local.mk index 4fc54e61c1..521c7f1691 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -967,6 +967,7 @@ dist_patch_DATA = \ %D%/packages/patches/omake-fix-non-determinism.patch \ %D%/packages/patches/ola-readdir-r.patch \ %D%/packages/patches/opencascade-oce-glibc-2.26.patch \ + %D%/packages/patches/openblas-fix-tests-i686.patch \ %D%/packages/patches/openexr-missing-samples.patch \ %D%/packages/patches/openfoam-4.1-cleanup.patch \ %D%/packages/patches/openldap-CVE-2017-9287.patch \ diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm index a644468627..7d70ac1fa6 100644 --- a/gnu/packages/maths.scm +++ b/gnu/packages/maths.scm @@ -2836,6 +2836,16 @@ (define-public openblas #:phases (modify-phases %standard-phases (delete 'configure) + ;; Conditionally apply a patch on i686 to avoid rebuilding + ;; all architectures. FIXME: This should be moved to the + ;; (source (patches ...)) field in the next rebuild cycle. + ,@(if (string-prefix? "i686" (or (%current-target-system) + (%current-system))) + `((add-after 'unpack 'fix-tests + (lambda* (#:key inputs #:allow-other-keys) + (invoke "patch" "-p1" + "--input" (assoc-ref inputs "i686-fix-tests.patch"))))) + '()) (add-before 'build 'set-extralib (lambda* (#:key inputs #:allow-other-keys) ;; Get libgfortran found when building in utest. @@ -2847,6 +2857,11 @@ (define-public openblas `(("fortran-lib" ,gfortran "lib"))) (native-inputs `(("cunit" ,cunit) + ,@(if (string-prefix? "i686" (or (%current-target-system) + (%current-system))) + `(("i686-fix-tests.patch" + ,(search-patch "openblas-fix-tests-i686.patch"))) + '()) ("fortran" ,gfortran) ("perl" ,perl))) (home-page "http://www.openblas.net/") diff --git a/gnu/packages/patches/openblas-fix-tests-i686.patch b/gnu/packages/patches/openblas-fix-tests-i686.patch new file mode 100644 index 0000000000..3325546ea3 --- /dev/null +++ b/gnu/packages/patches/openblas-fix-tests-i686.patch @@ -0,0 +1,35 @@ +Fix a test failure on some i686 systems: + +https://github.com/xianyi/OpenBLAS/issues/1575 + +This patch is a squashed version of these commits: + +https://github.com/xianyi/OpenBLAS/pull/1583 + +diff --git a/kernel/x86/KERNEL.NEHALEM b/kernel/x86/KERNEL.NEHALEM +index 835520ef..65b03ae5 100644 +--- a/kernel/x86/KERNEL.NEHALEM ++++ b/kernel/x86/KERNEL.NEHALEM +@@ -1,3 +1 @@ + include $(KERNELDIR)/KERNEL.PENRYN +-SSWAPKERNEL = ../arm/swap.c +-DSWAPKERNEL = ../arm/swap.c +diff --git a/kernel/x86/swap.S b/kernel/x86/swap.S +index 54b00b33..e30c2789 100644 +--- a/kernel/x86/swap.S ++++ b/kernel/x86/swap.S +@@ -138,6 +138,14 @@ + /* INCX != 1 or INCY != 1 */ + + .L14: ++ cmpl $0, %ebx ++ jne .L141 ++ cmpl $0, %ecx ++ jne .L141 ++/* INCX == 0 and INCY == 0 */ ++ jmp .L27 ++ ++.L141: + movl %edx, %eax + sarl $2, %eax + jle .L28 -- cgit v1.2.3