diff mbox series

bug#42888: [PATCH] gnu: rust: Fix install phase for non-x86_64 platforms.

Message ID 87mu1d8vzo.fsf@gmx.com
State Accepted
Headers show
Series bug#42888: [PATCH] gnu: rust: Fix install phase for non-x86_64 platforms. | expand

Checks

Context Check Description
cbaines/applying patch fail View Laminar job

Commit Message

Pierre Langlois Sept. 25, 2020, 8:03 p.m. UTC
Marius Bakke writes:

> Pierre Langlois <pierre.langlois@gmx.com> writes:
>
>> Hello Guix!
>>
>> Pierre Langlois writes:
>>
>>> Hi Jakub,
>>>
>>> Jakub Kądziołka writes:
>>>
>>
>> (snip)
>>
>>>> Pierre,
>>>>
>>>> thanks for your patch! I was working on a similar change before, but
>>>> when I tried it, it failed even earlier in the bootstrap chain. It
>>>> might've been QEMU weirdness, though, a la #42448.
>>>>
>>>>> @@ -612,9 +613,10 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
>>>>>                         (cargo-out (assoc-ref outputs "cargo")))
>>>>>                     (for-each
>>>>>                       (lambda (file) (delete-manifest-file out file))
>>>>> -                     '("install.log"
>>>>> +                     `("install.log"
>>>>>                         "manifest-rust-docs"
>>>>> -                       "manifest-rust-std-x86_64-unknown-linux-gnu"
>>>>> +                       ,,(string-append "manifest-rust-std-"
>>>>> +                                        (nix-system->gnu-triplet-for-rust))
>>>>>                         "manifest-rustc"))
>>>>>                     (for-each
>>>>>                       (lambda (file) (delete-manifest-file cargo-out file))
>>>>
>>>> If I understand the code correctly, this quasiquote is unnecessary, as
>>>> the host-side code will evaluate to a string that can be inserted as-is,
>>>> without another unquote on the build side.
>>>>
>>>> Fixing this would mean that the patch can go on master, since it would
>>>> now only trigger rebuilds on architectures that are already broken.
>>>
>>> Ooooh yeah, that'll be much better, I've attached a patch that does just
>>> that. I can confirm it doesn't trigger a full rebuild, nice!
>>>
>>
>> I've just rebased this patch and fixed a little formatting issue. I've
>> made sure, it doesn't trigger any rust rebuilds on x86.
>>
>> Is this OK to commit?
>
> LGTM!  Thanks a lot for tackling this long-standing issue.

Thanks! Pushed as 2bab532fdfaa54a085abc0ac7fc2c859ee31f640.

>
> Were you able to build all the way to the latest Rust?

No not yet :-/, I got it building up to 1.26, having to fix most steps
with tests failing here and there. In the end I ran out of steam trying
to build 1.27 and thought we'd be better off waiting until we can
bootstrap from 1.29. I don't remember exactly what issues I had with
1.27, I've attacked my WIP patch in case somebody is interested
actually!

After that, I gave the patches on https://issues.guix.gnu.org/38110 a
go, however as Danny mentions on the thread, linking consumes too much
memory. I'm using a RockPro64 and it only has 4G of RAM.

Somebody on github https://github.com/thepowersgang/mrustc/issues/138
mentioned we could try building with LLD so I tried that as well (patch
attached) but memory consumption was still too much. That being said, I
might not have had any swap file at the time, I'll try again :-).

Soooo, yeah I don't know what the best approach is. We can try and get
the current chain building and start upstreaming bits of my WIP patch or
try and find a solution for the mrustc memory issue.

Anyway, I haven't given up! :-) I'd really like to see IceCat on aarch64
eventually for the PineBook Pro. Although there are quite a few other
things to fix on that platform first.

Thanks,
Pierre
diff mbox series

Patch

From 30b2f19fc1edabbcf929d400f289220875440ffe Mon Sep 17 00:00:00 2001
From: Pierre Langlois <pierre.langlois@gmx.com>
Date: Tue, 1 Sep 2020 00:46:47 +0100
Subject: [PATCH 1/2] mrustc: Use lld.

---
 gnu/packages/patches/mrustc-use-lld.patch | 12 ++++++++++++
 gnu/packages/rust.scm                     |  9 +++++++--
 2 files changed, 19 insertions(+), 2 deletions(-)
 create mode 100644 gnu/packages/patches/mrustc-use-lld.patch

diff --git a/gnu/packages/patches/mrustc-use-lld.patch b/gnu/packages/patches/mrustc-use-lld.patch
new file mode 100644
index 0000000000..2df1f6f8f2
--- /dev/null
+++ b/gnu/packages/patches/mrustc-use-lld.patch
@@ -0,0 +1,12 @@ 
+diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp
+index df0abf6f..7ab8d183 100644
+--- a/src/trans/codegen_c.cpp
++++ b/src/trans/codegen_c.cpp
+@@ -953,6 +953,7 @@ namespace {
+                     break;
+                 }
+                 args.push_back(m_outfile_path_c.c_str());
++                args.push_back("-fuse-ld=lld");
+                 switch(out_ty)
+                 {
+                 case CodegenOutput::DynamicLibrary:
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 89d0ffee31..97952e8ebe 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -128,14 +128,17 @@ 
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "194ny7vsks5ygiw7d8yxjmp1qwigd71ilchis6xjl6bb2sj97rd2"))))
+                  "194ny7vsks5ygiw7d8yxjmp1qwigd71ilchis6xjl6bb2sj97rd2"))
+                (patches (search-patches "mrustc-use-lld.patch"))))
       (outputs '("out" "cargo"))
       (build-system gnu-build-system)
       (inputs
-       `(("zlib" ,zlib)))
+       `(("lld" ,lld)
+         ("zlib" ,zlib)))
       (native-inputs
        `(("bison" ,bison)
          ("flex" ,flex)
+         ("gcc" ,gcc-10)
          ;; Required for the libstd sources.
          ("rustc" ,(package-source rust-1.29))))
       (arguments
@@ -418,6 +421,8 @@  safety and thread safety guarantees.")
        ("cmake" ,cmake-minimal)
        ("flex" ,flex) ; For the tests
        ("gdb" ,gdb)   ; For the tests
+       ("gcc" ,gcc-10)
+       ("lld" ,lld)
        ("procps" ,procps) ; For the tests
        ("python-2" ,python-2)
        ("rustc-bootstrap" ,mrustc)
--
2.28.0