diff mbox series

[bug#52186,core-updates-frozen] gnu: libunwind-julia: Fix build on i686-linux.

Message ID 20211129182108.54695-1-zimon.toutoune@gmail.com
State Accepted
Headers show
Series [bug#52186,core-updates-frozen] gnu: libunwind-julia: Fix build on i686-linux. | expand

Checks

Context Check Description
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue

Commit Message

Simon Tournier Nov. 29, 2021, 6:21 p.m. UTC
* gnu/packages/julia.scm (libunwind)[origin]<patches>: Add patch.
* gnu/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch: New file.
* gnu/local/mk (dist_patch_DATA): Register it.
---
 gnu/local.mk                                  |  1 +
 gnu/packages/julia.scm                        | 18 +++++----
 ...libunwind-julia-fix-GCC10-fno-common.patch | 40 +++++++++++++++++++
 3 files changed, 52 insertions(+), 7 deletions(-)
 create mode 100644 gnu/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch


base-commit: f22dfba53032c59fb260173143abf0e4e9a4f1e1

Comments

Simon Tournier Nov. 29, 2021, 6:51 p.m. UTC | #1
Hi,

This patch fixes all  broken Julia on i686 for core-updates-frozen.


On Mon, 29 Nov 2021 at 19:21, zimoun <zimon.toutoune@gmail.com> wrote:

> diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
> index 83aa8b1099..17f4a9a169 100644
> --- a/gnu/packages/julia.scm
> +++ b/gnu/packages/julia.scm
> @@ -71,13 +71,17 @@ (define libunwind-julia
>          (base32
>           "1y0l08k6ak1mqbfj6accf9s5686kljwgsl4vcqpxzk5n74wpm6a3"))
>         (patches
> -        (list
> -         (julia-patch "libunwind-prefer-extbl"
> -                      "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
> -         (julia-patch "libunwind-static-arm"
> -                      "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")
> -         (julia-patch "libunwind-cfa-rsp"
> -                      "1aswjhvysahhldbzh1afbf0hsjxrvs6xidsz2i7s1cjkjbdiia1z")))))
> +        (append
> +            ;; Fix linker issue for i686-linux because GCC10 changed default
> +            ;; (see '-fno-common' option).
> +            (search-patches "libunwind-julia-fix-GCC10-fno-common.patch")

Here, the patch could be conditionally applied depending on the
architecture.  It would avoid to rebuild all Julia packages for x86_64.
Although, they are not broke, I guess. ;-)

Let me know or please go ahead. :-)


Cheers,
simon
Simon Tournier Dec. 1, 2021, 3:52 p.m. UTC | #2
Hi,

This series allow the julia package itself to build on i686-linux.  Then, it
fixes julia-* packages for i686-linux.  Note that julia and julia-* are
currently broken on master for i686-linux.

Both julia and julia-* are not impacted on x86_64 by  these changes.

These packages are still broken…

   /gnu/store/h97dzpkn7h4fxhl8xag8s7cfypg1l96d-julia-sundials-jll-5.2.1+0.drv
   /gnu/store/q489ygk7y0y3xxcyi1c72c9lwrvgkfvd-sundials-julia-5.2.0.drv
   /gnu/store/7g5443kq028lv44f0kdj5p14w5xcx9c4-julia-pyplot-2.10.0.drv
   /gnu/store/iy5liqrkdlvvx6bmiczxxi5zmyj4999v-julia-pycall-1.92.5.drv
   /gnu/store/x2na68r5qbyhnilmqpi50sr3iwf9y2fd-julia-gr-0.58.1.drv

…but, IMHO, they can wait another round.  Only pycall (so pyplot) and gr are
failing on core-updates-frozen only.  The 2 other (sundials) are currently
broken on master.


Cheers,
simon



zimoun (17):
  gnu: libunwind-julia: Fix build on i686-linux.
  gnu: julia-datastructures: Fix tests on i686-linux.
  gnu: julia-benchmarktools: Fix tests on i686-linux.
  gnu: julia-finitedifferences: Fix tests on i686-linux.
  gnu: julia-configurations: Fix tests on i686-linux.
  gnu: julia-lazyarrays: Fix tests on i686-linux.
  gnu: julia-blockarrays: Fix tests on i686-linux.
  gnu: julia-mappedarrays: Fix tests on i686-linux.
  gnu: julia-arrayinterface: Disable tests for i686.
  gnu: julia-interpolations: Disable tests in i686-linux.
  gnu: julia-reversediff: Disable tests on i686-linux.
  gnu: julia-intervalsets: Fix tests on i686-linux.
  gnu: julia-woodburymatrices: Fix tests on i686-linux.
  gnu: julia-mutablearithmetics: Fix tests on i686-linux.
  gnu: julia-structarrays: Fix tests on i686-linux.
  gnu: julia-geometrybasics: Fix tests on i686-linux.
  gnu: julia-forwarddiff: Disable tests on i686-linux.

 gnu/local.mk                                  |   1 +
 gnu/packages/julia-xyz.scm                    | 189 +++++++++++++++++-
 gnu/packages/julia.scm                        |  18 +-
 ...libunwind-julia-fix-GCC10-fno-common.patch |  40 ++++
 4 files changed, 232 insertions(+), 16 deletions(-)
 create mode 100644 gnu/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch


base-commit: 68d090002a1a5623494006fca3e2c2c97d3ff676
Efraim Flashner Dec. 4, 2021, 5:54 p.m. UTC | #3
On Wed, Dec 01, 2021 at 04:52:56PM +0100, zimoun wrote:
> Hi,
> 
> This series allow the julia package itself to build on i686-linux.  Then, it
> fixes julia-* packages for i686-linux.  Note that julia and julia-* are
> currently broken on master for i686-linux.
> 
> Both julia and julia-* are not impacted on x86_64 by  these changes.
> 
> These packages are still broken…
> 
>    /gnu/store/h97dzpkn7h4fxhl8xag8s7cfypg1l96d-julia-sundials-jll-5.2.1+0.drv
>    /gnu/store/q489ygk7y0y3xxcyi1c72c9lwrvgkfvd-sundials-julia-5.2.0.drv
>    /gnu/store/7g5443kq028lv44f0kdj5p14w5xcx9c4-julia-pyplot-2.10.0.drv
>    /gnu/store/iy5liqrkdlvvx6bmiczxxi5zmyj4999v-julia-pycall-1.92.5.drv
>    /gnu/store/x2na68r5qbyhnilmqpi50sr3iwf9y2fd-julia-gr-0.58.1.drv
> 
> …but, IMHO, they can wait another round.  Only pycall (so pyplot) and gr are
> failing on core-updates-frozen only.  The 2 other (sundials) are currently
> broken on master.
> 
> 
> Cheers,
> simon
> 

I made a couple of changes, mostly to use target-x86-32? and
target-64bit?. Patches pushed! Thanks.
Simon Tournier Dec. 4, 2021, 6:27 p.m. UTC | #4
Hi Efraim,

Thanks!


On Sat, 04 Dec 2021 at 19:54, Efraim Flashner <efraim@flashner.co.il> wrote:

> I made a couple of changes, mostly to use target-x86-32? and
> target-64bit?. Patches pushed! Thanks.

I get 44 instances using ’string-prefix? “i686”’ vs 5 instance using
’target-x86-32’.  For my information, why is target-x86-32 preferred
here? 


--8<---------------cut here---------------start------------->8---
$ find . -name "*.scm" | xargs grep 'string-prefix' | grep i686 
./build-aux/compile-all.scm:    (if (string-prefix? "i686" %host-type)
./guix/utils.scm:      (string-prefix? "i686-" target)))
./gnu/build/bootloader.scm:                            ((string-prefix? "i686" system)
./gnu/packages/video.scm:     (if (string-prefix? "i686" (%current-system))
./gnu/packages/scheme.scm:                         (string-prefix? "i686" system))
./gnu/packages/scheme.scm:                       (string-prefix? "i686" system))
./gnu/packages/linux.scm:               (or (string-prefix? "i686-" system)
./gnu/packages/maths.scm:        ((string-prefix? "i686" system)
./gnu/packages/maths.scm:               (string-prefix? "i686" system)
./gnu/packages/maths.scm:                       (string-prefix? "i686" system))
./gnu/packages/maths.scm:                                  (string-prefix? "i686" system))
./gnu/packages/image.scm:                                    ((string-prefix? "i686" target)
./gnu/packages/tls.scm:                           ((string-prefix? "i686" target)
./gnu/packages/databases.scm:                      ,@(if (string-prefix? "i686" (%current-system))
./gnu/packages/music.scm:                         (string-prefix? "i686" system))
./gnu/packages/music.scm:                            (string-prefix? "i686" system)))
./gnu/packages/music.scm:                         (string-prefix? "i686" system))
./gnu/packages/gstreamer.scm:         ,@(if (string-prefix? "i686" (or (%current-target-system)
./gnu/packages/gl.scm:         ,@(if (string-prefix? "i686" (or (%current-target-system)
./gnu/packages/algebra.scm:              ((string-prefix? "i686" system)
./gnu/packages/python-xyz.scm:               (when (string-prefix? "i686" ,(%current-system))
./gnu/packages/machine-learning.scm:                                     ((string-prefix? "i686" system)
./gnu/packages/machine-learning.scm:                              (string-prefix? "i686" system)))
./gnu/packages/xorg.scm:     (filter (lambda (system) (string-prefix? "i686-" system))
./gnu/packages/xorg.scm:       (filter (lambda (system) (or (string-prefix? "i686-" system)
./gnu/packages/compression.scm:       ,@(if (string-prefix? "i686" (or (%current-target-system)
./gnu/packages/compression.scm:                        ((string-prefix? "i686" system)
./gnu/packages/compression.scm:                 ((string-prefix? "i686" system)
./gnu/packages/node.scm:                                        ((? (cut string-prefix? "i686" <>))
./gnu/packages/node.scm:                                         ((? (cut string-prefix? "i686" <>))
./gnu/packages/haskell-web.scm:       #:tests? ,(not (string-prefix? "i686" (or (%current-target-system)
./gnu/packages/package-management.scm:                                     (string-prefix? "i686" system)))
./gnu/packages/bioinformatics.scm:                      (string-prefix? "i686" system))
./gnu/packages/graph.scm:                                        ((string-prefix? "i686" system)
./gnu/packages/graph.scm:                                       ((string-prefix? "i686" system)
./gnu/packages/lean.scm:                   (not (or (string-prefix? "i686" arch)
./gnu/packages/virtualization.scm:                  ((? (cut string-prefix? "i686" <>))
./gnu/packages/virtualization.scm:   ((string-prefix? "i686" system)
./gnu/packages/virtualization.scm:                                   ((string-prefix? "i686" system)
./gnu/packages/password-utils.scm:                         (string-prefix? "i686" system)) "sse2")
./gnu/ci.scm:    (and (or (string-prefix? "i686-" system)
./gnu/system/install.scm:                                      (string-prefix? "i686" %host-type))))
./gnu/tests/install.scm:   ((string-prefix? "i686" system)
./gnu/tests/install.scm:                            ((string-prefix? "i686" #$system)
--8<---------------cut here---------------end--------------->8---

--8<---------------cut here---------------start------------->8---
$ find . -name "*.scm" | xargs grep 'target-x86-32'
./guix/utils.scm:            target-x86-32?
./guix/utils.scm:(define* (target-x86-32? #:optional (target (or (%current-target-system)
./tests/utils.scm:(test-equal "target-x86-32?"
./tests/utils.scm:  (map target-x86-32?
./gnu/packages/webkit.scm:             ,@(if (target-x86-32?)
--8<---------------cut here---------------end--------------->8---

Cheers,
simon
Efraim Flashner Dec. 5, 2021, 9:49 a.m. UTC | #5
On Sat, Dec 04, 2021 at 07:27:45PM +0100, zimoun wrote:
> Hi Efraim,
> 
> Thanks!
> 
> 
> On Sat, 04 Dec 2021 at 19:54, Efraim Flashner <efraim@flashner.co.il> wrote:
> 
> > I made a couple of changes, mostly to use target-x86-32? and
> > target-64bit?. Patches pushed! Thanks.
> 
> I get 44 instances using ’string-prefix? “i686”’ vs 5 instance using
> ’target-x86-32’.  For my information, why is target-x86-32 preferred
> here? 
> 

The string-prefix way is the current way on master to do it. On
core-updates we now have the different target macros to try to make all
the different times everything comes up have less chance of mistakes.
Simon Tournier Dec. 5, 2021, 10:36 a.m. UTC | #6
Hi,

On Sun, 05 Dec 2021 at 11:49, Efraim Flashner <efraim@flashner.co.il> wrote:

> The string-prefix way is the current way on master to do it. On
> core-updates we now have the different target macros to try to make all
> the different times everything comes up have less chance of mistakes.

Thanks for explaining.  On a side note, these macros are not documented
in the manual, if I read correctly.


Cheers,
simon
diff mbox series

Patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 604c6cf151..6e71ad404e 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1386,6 +1386,7 @@  dist_patch_DATA =						\
   %D%/packages/patches/libtirpc-hurd.patch			\
   %D%/packages/patches/libtommath-fix-linkage.patch		\
   %D%/packages/patches/libtool-skip-tests2.patch		\
+  %D%/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch \
   %D%/packages/patches/libusb-0.1-disable-tests.patch		\
   %D%/packages/patches/libusb-for-axoloti.patch			\
   %D%/packages/patches/libutils-add-includes.patch		\
diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index 83aa8b1099..17f4a9a169 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -71,13 +71,17 @@  (define libunwind-julia
         (base32
          "1y0l08k6ak1mqbfj6accf9s5686kljwgsl4vcqpxzk5n74wpm6a3"))
        (patches
-        (list
-         (julia-patch "libunwind-prefer-extbl"
-                      "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
-         (julia-patch "libunwind-static-arm"
-                      "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")
-         (julia-patch "libunwind-cfa-rsp"
-                      "1aswjhvysahhldbzh1afbf0hsjxrvs6xidsz2i7s1cjkjbdiia1z")))))
+        (append
+            ;; Fix linker issue for i686-linux because GCC10 changed default
+            ;; (see '-fno-common' option).
+            (search-patches "libunwind-julia-fix-GCC10-fno-common.patch")
+            (list
+             (julia-patch "libunwind-prefer-extbl"
+                          "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
+             (julia-patch "libunwind-static-arm"
+                          "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")
+             (julia-patch "libunwind-cfa-rsp"
+                          "1aswjhvysahhldbzh1afbf0hsjxrvs6xidsz2i7s1cjkjbdiia1z"))))))
     (home-page "https://github.com/JuliaLang/tree/master/deps/")))
 
 (define (julia-patch-url version name)
diff --git a/gnu/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch b/gnu/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch
new file mode 100644
index 0000000000..8ef4b111e4
--- /dev/null
+++ b/gnu/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch
@@ -0,0 +1,40 @@ 
+Fix compilation with -fno-common.
+
+Borrowed from upstream 29e17d8d2ccbca07c423e3089a6d5ae8a1c9cb6e.
+Author:     Yichao Yu <yyc1992@gmail.com>
+AuthorDate: Tue Mar 31 00:43:32 2020 -0400
+Commit:     Dave Watson <dade.watson@gmail.com>
+CommitDate: Tue Mar 31 08:06:29 2020 -0700
+
+diff --git a/src/x86/Ginit.c b/src/x86/Ginit.c
+index f6b8dc2..9550efa 100644
+--- a/src/x86/Ginit.c
++++ b/src/x86/Ginit.c
+@@ -54,13 +54,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -71,7 +64,12 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+