aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius Bakke <mbakke@fastmail.com>2018-06-20 15:18:35 +0200
committerMarius Bakke <mbakke@fastmail.com>2018-06-20 16:02:04 +0200
commitb7a46ed22764db9097aba96e68143d46b2a75be0 (patch)
treeebd39d6181a8adb0685fbff29b7ef2cb06077ab9
parent0106d6b40dc0b8f1c81326e633bfa5134a446a9c (diff)
downloadguix-b7a46ed22764db9097aba96e68143d46b2a75be0.tar
guix-b7a46ed22764db9097aba96e68143d46b2a75be0.tar.gz
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.
-rw-r--r--gnu/local.mk1
-rw-r--r--gnu/packages/maths.scm15
-rw-r--r--gnu/packages/patches/openblas-fix-tests-i686.patch35
3 files changed, 51 insertions, 0 deletions
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 @@ parts of it.")
#: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 @@ parts of it.")
`(("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