[bug#34820] gnu: rust: Update to 1.32.0

Message ID 9E833478-6D25-4549-B90A-8244CCED81DD@gmail.com
State Accepted
Headers show
Series [bug#34820] gnu: rust: Update to 1.32.0 | expand

Checks

Context Check Description
cbaines/applying patch success Successfully applied

Commit Message

Ivan Petkov March 12, 2019, 2:21 a.m. UTC
* gnu/packages/rust.scm (rust-source): Rename to...
(rust-source-pre-1.32): ... this.
(rust-source): New variable.
(rust-bootstrapped-package-pre-1.32): New variable.
(rust): Rename to...
(rust-1.32): ...this.
(rust): New variable
---
 gnu/packages/rust.scm | 189 ++++++++++++++++++++++++++++++++----------
 1 file changed, 143 insertions(+), 46 deletions(-)

Comments

Ivan Petkov March 18, 2019, 3:07 a.m. UTC | #1
Friendly ping! 
Already have a patch ready for packaging rust 1.33 :)

Thanks,
—Ivan
Danny Milosavljevic March 19, 2019, 1:47 a.m. UTC | #2
Hi Ivan,

thanks for the reminder!

It's currently building in a private branch on bayfront.guixsd.org - let's see...
Ivan Petkov March 22, 2019, 3:33 p.m. UTC | #3
Thanks for submitting a build job!

Just curious, is there a public API to see the status/logs of the build similar to Hydra?
If not I’ll just wait for an email from you :)

—Ivan
Danny Milosavljevic March 26, 2019, 1:21 p.m. UTC | #4
Hi Ivan,

On Fri, 22 Mar 2019 08:33:46 -0700
Ivan Petkov <ivanppetkov@gmail.com> wrote:

> Thanks for submitting a build job!
> 
> Just curious, is there a public API to see the status/logs of the build similar to Hydra?

I don't know.

> If not I’ll just wait for an email from you :)

I got a test failure while building rust 1.30.1, in ui/run-pass/issues/issue-44056.rs .

error: test run failed!
status: signal: 4
command: "/tmp/guix-build-rust-1.30.1.drv-0/rustc-1.30.1-src/build/x86_64-unknown-linux-gnu/test/ui/run-pass/issues/issue-44056/a"
thread '[ui] ui/run-pass/issues/issue-44056.rs' panicked at 'explicit panic', tools/compiletest/src/runtest.rs:3205:9

test result: FAILED. 6764 passed; 1 failed; 25 ignored; 0 measured; 0 filtered

command did not execute successfully: "/tmp/guix-build-rust-1.30.1.drv-0/rustc-1
.30.1-src/build/x86_64-unknown-linux-gnu/stage0-tools-bin/compiletest" "--compil
e-lib-path" "/tmp/guix-build-rust-1.30.1.drv-0/rustc-1.30.1-src/build/x86_64-unk
nown-linux-gnu/stage2/lib" "--run-lib-path" "/tmp/guix-build-rust-1.30.1.drv-0/r
ustc-1.30.1-src/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-unknown
-linux-gnu/lib" "--rustc-path" "/tmp/guix-build-rust-1.30.1.drv-0/rustc-1.30.1-s
rc/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "--src-base" "/tmp/guix-buil
d-rust-1.30.1.drv-0/rustc-1.30.1-src/src/test/ui" "--build-base" "/tmp/guix-buil
d-rust-1.30.1.drv-0/rustc-1.30.1-src/build/x86_64-unknown-linux-gnu/test/ui" "--
stage-id" "stage2-x86_64-unknown-linux-gnu" "--mode" "ui" "--target" "x86_64-unk
nown-linux-gnu" "--host" "x86_64-unknown-linux-gnu" "--llvm-filecheck" "/gnu/sto
re/slhclazbx16ij6kyggz667sycmyy9iii-llvm-7.0.1/bin/FileCheck" "--host-rustcflags
" "-Crpath -O -Zunstable-options " "--target-rustcflags" "-Crpath -O -Zunstable-
options  -Lnative=/tmp/guix-build-rust-1.30.1.drv-0/rustc-1.30.1-src/build/x86_6
4-unknown-linux-gnu/native/rust-test-helpers" "--docck-python" "/gnu/store/g87ha
mjyipk1j6dfq5pjfzfnfb64spbv-python2-2.7.15/bin/python2" "--lldb-python" "/gnu/st
ore/g87hamjyipk1j6dfq5pjfzfnfb64spbv-python2-2.7.15/bin/python2" "--gdb" "/gnu/s
tore/pp6nvrw47ip2r54k4kyk5a8fhyxvhsb8-gdb-8.2/bin/gdb" "--verbose" "--quiet" "--llvm-version" "7.0.1\n" "--system-llvm" "--cc" "" "--cxx" "" "--cflags" "" "--llvm-components" "" "--llvm-cxxflags" "" "--adb-path" "adb" "--adb-test-dir" "/data/tmp/work" "--android-cross-path" ""
expected success, got: exit code: 101

I'm rebuilding that with "--keep-failed" now...
Danny Milosavljevic March 26, 2019, 2:13 p.m. UTC | #5
Upstream: https://github.com/rust-lang/rust/issues/55996
Ivan Petkov March 26, 2019, 3 p.m. UTC | #6
Hi Danny,

> On Mar 26, 2019, at 6:21 AM, Danny Milosavljevic <dannym@scratchpost.org> wrote:
> 
> I got a test failure while building rust 1.30.1, in ui/run-pass/issues/issue-44056.rs .

Hmm, I think I hit this too. The patch attempts to mark the test as ignored,
similar to what we do in earlier rust versions.

> I'm rebuilding that with "--keep-failed" now…

Could you check what the issue-44056 test file contains in case the
substitution didn’t work right?

Thanks,
—Ivan
Danny Milosavljevic March 26, 2019, 6:14 p.m. UTC | #7
Hi Ivan,

the test has been moved to ./src/test/ui/run-pass/issues/issue-44056.rs

> Could you check what the issue-44056 test file contains in case the
> substitution didn’t work right?

The substitution phase has been deleted in rust-1.30 and thus can't work.

I've now reinstated an adjusted phase and restarted the build... let's see.
Ivan Petkov March 26, 2019, 7:18 p.m. UTC | #8
> On Mar 26, 2019, at 11:14 AM, Danny Milosavljevic <dannym@scratchpost.org> wrote:

> the test has been moved to ./src/test/ui/run-pass/issues/issue-44056.rs

> I've now reinstated an adjusted phase and restarted the build... let's see.

Great, thanks for fixing this, it looks like I got the path wrong in the original patch, and I added the phase to 1.32 instead of 1.31

—Ivan
Brett Gilio March 27, 2019, 1:51 a.m. UTC | #9
Ivan Petkov writes:

>> On Mar 26, 2019, at 11:14 AM, Danny Milosavljevic <dannym@scratchpost.org> wrote:
>
>> the test has been moved to ./src/test/ui/run-pass/issues/issue-44056.rs
>
>> I've now reinstated an adjusted phase and restarted the build... let's see.
>
> Great, thanks for fixing this, it looks like I got the path wrong in the original patch, and I added the phase to 1.32 instead of 1.31
>
> —Ivan

LGTM, I want to try maintaining a local build for nightly which requires
1.33 atm. Do we have an ETA on how long until we can get that? What can
I do to help?
Ivan Petkov March 27, 2019, 2:19 a.m. UTC | #10
Hi Brett!

> On Mar 26, 2019, at 6:51 PM, Brett Gilio <brettg@posteo.net> wrote:
> 
> LGTM, I want to try maintaining a local build for nightly which requires
> 1.33 atm. Do we have an ETA on how long until we can get that? What can
> I do to help?

I actually have a patch ready for packaging 1.33, just been holding off to
avoid the noise while we get 1.31/1.32 built. Happy to post put it up if
you'd like to see a copy!

As far as maintaining nightlies goes, I think it would be a challenge to
keep up manually, unless you happen to have some cron job that builds a
new version daily. I've been considering packaging rustup within guix
after 1.33 lands, which might make it possible to develop with nightly
rust without having to maintain a nightly build within guix itself.

Not sure what challenges there may be with the rustup approach though
(will the prebuild binaries work well with guix?). I'd be happy to hear
if you make any progress though!

—Ivan
Brett Gilio March 27, 2019, 2:58 a.m. UTC | #11
Ivan Petkov writes:

> Hi Brett!
>
>> On Mar 26, 2019, at 6:51 PM, Brett Gilio <brettg@posteo.net> wrote:
>> 
>> LGTM, I want to try maintaining a local build for nightly which requires
>> 1.33 atm. Do we have an ETA on how long until we can get that? What can
>> I do to help?
>
> I actually have a patch ready for packaging 1.33, just been holding off to
> avoid the noise while we get 1.31/1.32 built. Happy to post put it up if
> you'd like to see a copy!
>
> As far as maintaining nightlies goes, I think it would be a challenge to
> keep up manually, unless you happen to have some cron job that builds a
> new version daily. I've been considering packaging rustup within guix
> after 1.33 lands, which might make it possible to develop with nightly
> rust without having to maintain a nightly build within guix itself.
>
> Not sure what challenges there may be with the rustup approach though
> (will the prebuild binaries work well with guix?). I'd be happy to hear
> if you make any progress though!
>
> —Ivan

You are probably right, there are definitely going to be some liability
issues about working with the nightly branch. But it was something I was
interested in investigating. The more we deal with rust on Guix, the
more I think that rustup is going to have to become a necessity if we
want to attract more Rust developers to using Guix. Nightly is almost a
requirement for a good few.

You might be knowing that Nix has the rustup toolchain, and it seems to
work fine. Although, there is the nasty linker issue which requires
building all rust projects in a nix-shell with the mozilla rust
channel. So, there is definitely some potential challenges there, but it
is definitely something we need to investigate imo.

Also, yes, please send me the patch off list.

Brett
Danny Milosavljevic March 27, 2019, 11:02 a.m. UTC | #12
Hi,

On Tue, 26 Mar 2019 21:58:07 -0500
Brett Gilio <brettg@posteo.net> wrote:

> > Not sure what challenges there may be with the rustup approach though

Without using the Guix package manager?  That depends on whether they can
install into $HOME.  If so, it's not difficult.

> > (will the prebuild binaries work well with guix?).

We had prebuilt Rust binaries before, but we had to patch them slightly
using patchelf.

From a strategic standpoint we'd like to reduce the number of bootstrap
seeds required for Guix packages, not increase them.  But I guess as
long as they are optional (not dependencies of anything else), that's
the user's choice.

> You are probably right, there are definitely going to be some liability
> issues about working with the nightly branch. But it was something I was
> interested in investigating. The more we deal with rust on Guix, the
> more I think that rustup is going to have to become a necessity if we
> want to attract more Rust developers to using Guix. Nightly is almost a
> requirement for a good few.

I think Rust is one of the few languages getting it right in this regard:
There is a "stable" setting where you can only access APIs in the runtime
and/or language that won't change.  If there are unfinished experimental
APIs they can expose them (to programs not written to require the "stable"
setting) and later on change them and tell everyone "I told you so".

As a distribution, we usually package stable versions of software, so it
does make sense that if the feature is unstable (subject to change in
incompatible ways in less than, say, 1 month) then it's not available.

Long story short, I don't use Rust for production projects because some
important things are not deemed stable yet--and I had to do too much
pointless rewriting in my life just because some other API changed.

But there should be nothing stopping a user from testing Rust some other
way (install into $HOME etc).

In order to test Rust nightly I use a Docker container and this script:

dannym@dayas ~/.local/bin$ cat in-rust-nightly 
#!/bin/sh

p="`realpath \".\"`"
# example: cargo build --release
if [ "$1" = "" ]
then
        set -- sh
fi

exec docker run --rm -e USER="${USER}" --user "$(id -u)":"$(id -g)" -v "$PWD":"${p}" -w "${p}" rustlang/rust:nightly "$@"
Danny Milosavljevic March 28, 2019, 11:23 p.m. UTC | #13
Rust 1.31.1 moved the test again so it failed.

Fixing...
Danny Milosavljevic March 31, 2019, 7:12 p.m. UTC | #14
Rust 1.32.0 just built fine.

I've pushed a variant of this patchset to master.

Thanks!
Ivan Petkov April 1, 2019, 3:25 a.m. UTC | #15
> On Mar 31, 2019, at 12:12 PM, Danny Milosavljevic <dannym@scratchpost.org> wrote:
> 
> Rust 1.32.0 just built fine.
> 
> I've pushed a variant of this patchset to master.

Awesome, thanks again for your help Danny!

—Ivan

Patch

diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index be916743fb..5aa70cc962 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -70,7 +70,10 @@ 
     (_                (nix-system->gnu-triplet system))))
 
 
-(define* (rust-source version hash #:key (patches '()))
+(define* (rust-source-pre-1.32 version hash
+                               #:key
+                               (patches '())
+                               (patch-flags '("-p1")))
   (origin
     (method url-fetch)
     (uri (string-append "https://static.rust-lang.org/dist/"
@@ -78,16 +81,51 @@ 
     (sha256 (base32 hash))
     (modules '((guix build utils)))
     (snippet '(begin (delete-file-recursively "src/llvm") #t))
-    (patches (map search-patch patches))))
+    (patches (map search-patch patches))
+    (patch-flags patch-flags)))
+
+(define* (rust-bootstrapped-package-pre-1.32 base-rust version checksum
+                                             #:key
+                                             (patches '())
+                                             (patch-flags '("-p1")))
+  "Bootstrap rust VERSION with source checksum CHECKSUM patched with PATCHES using BASE-RUST.
+Specific to rust versions before 1.32."
+  (package
+    (inherit base-rust)
+    (version version)
+    (source
+     (rust-source-pre-1.32 version checksum #:patches patches #:patch-flags patch-flags))
+    (native-inputs
+     (alist-replace "cargo-bootstrap" (list base-rust "cargo")
+                    (alist-replace "rustc-bootstrap" (list base-rust)
+                                   (package-native-inputs base-rust))))))
+
+(define* (rust-source version hash
+                      #:key
+                      (patches '())
+                      (patch-flags '("-p1")))
+  (origin
+    (method url-fetch)
+    (uri (string-append "https://static.rust-lang.org/dist/"
+                        "rustc-" version "-src.tar.gz"))
+    (sha256 (base32 hash))
+    (modules '((guix build utils)))
+    (snippet '(begin (delete-file-recursively "src/llvm")
+                     (delete-file-recursively "vendor/jemalloc-sys/jemalloc")
+                     #t))
+    (patches (map search-patch patches))
+    (patch-flags patch-flags)))
 
 (define* (rust-bootstrapped-package base-rust version checksum
-                                    #:key (patches '()))
+                                    #:key
+                                    (patches '())
+                                    (patch-flags '("-p1")))
   "Bootstrap rust VERSION with source checksum CHECKSUM patched with PATCHES using BASE-RUST."
   (package
     (inherit base-rust)
     (version version)
     (source
-     (rust-source version checksum #:patches patches))
+     (rust-source version checksum #:patches patches #:patch-flags patch-flags))
     (native-inputs
      (alist-replace "cargo-bootstrap" (list base-rust "cargo")
                     (alist-replace "rustc-bootstrap" (list base-rust)
@@ -116,7 +154,7 @@ 
          ("flex" ,flex)
          ;; Required for the libstd sources.
          ("rustc"
-          ,(rust-source "1.19.0" "0l8c14qsf42rmkqy92ahij4vf356dbyspxcips1aswpvad81y8qm"))))
+          ,(rust-source-pre-1.32 "1.19.0" "0l8c14qsf42rmkqy92ahij4vf356dbyspxcips1aswpvad81y8qm"))))
       (arguments
        `(#:test-target "local_tests"
          #:make-flags (list (string-append "LLVM_CONFIG="
@@ -189,7 +227,7 @@  safety and thread safety guarantees.")
   (package
     (name "rust")
     (version "1.19.0")
-    (source (rust-source version "0l8c14qsf42rmkqy92ahij4vf356dbyspxcips1aswpvad81y8qm"
+    (source (rust-source-pre-1.32 version "0l8c14qsf42rmkqy92ahij4vf356dbyspxcips1aswpvad81y8qm"
             #:patches '("rust-1.19-mrustc.patch")))
     (outputs '("out" "cargo"))
     (properties '((timeout . 72000)               ;20 hours
@@ -425,7 +463,7 @@  safety and thread safety guarantees.")
 
 (define-public rust-1.20
   (let ((base-rust
-         (rust-bootstrapped-package rust-1.19 "1.20.0"
+         (rust-bootstrapped-package-pre-1.32 rust-1.19 "1.20.0"
           "0542y4rnzlsrricai130mqyxl8r6rd991frb4qsnwb27yigqg91a")))
     (package
       (inherit base-rust)
@@ -564,7 +602,7 @@  jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
                    #t))))))))))
 
 (define-public rust-1.21
-  (let ((base-rust (rust-bootstrapped-package rust-1.20 "1.21.0"
+  (let ((base-rust (rust-bootstrapped-package-pre-1.32 rust-1.20 "1.21.0"
                     "1yj8lnxybjrybp00fqhxw8fpr641dh8wcn9mk44xjnsb4i1c21qp")))
     (package
       (inherit base-rust)
@@ -580,7 +618,7 @@  jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
                  #t)))))))))
 
 (define-public rust-1.22
-  (let ((base-rust (rust-bootstrapped-package rust-1.21 "1.22.1"
+  (let ((base-rust (rust-bootstrapped-package-pre-1.32 rust-1.21 "1.22.1"
                     "1lrzzp0nh7s61wgfs2h6ilaqi6iq89f1pd1yaf65l87bssyl4ylb")))
     (package
       (inherit base-rust)
@@ -596,7 +634,7 @@  jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
                  #t)))))))))
 
 (define-public rust-1.23
-  (let ((base-rust (rust-bootstrapped-package rust-1.22 "1.23.0"
+  (let ((base-rust (rust-bootstrapped-package-pre-1.32 rust-1.22 "1.23.0"
                     "14fb8vhjzsxlbi6yrn1r6fl5dlbdd1m92dn5zj5gmzfwf4w9ar3l")))
     (package
       (inherit base-rust)
@@ -615,8 +653,8 @@  jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
 
 (define-public rust-1.24
   (let ((base-rust
-         (rust-bootstrapped-package rust-1.23 "1.24.1"
-                                    "1vv10x2h9kq7fxh2v01damdq8pvlp5acyh1kzcda9sfjx12kv99y")))
+         (rust-bootstrapped-package-pre-1.32 rust-1.23 "1.24.1"
+          "1vv10x2h9kq7fxh2v01damdq8pvlp5acyh1kzcda9sfjx12kv99y")))
     (package
       (inherit base-rust)
       (arguments
@@ -637,7 +675,7 @@  jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
 ;;; Keep using llvm 3.9.1 until builds become determenistic
 (define-public rust-1.25
   (let ((base-rust
-         (rust-bootstrapped-package rust-1.24 "1.25.0"
+         (rust-bootstrapped-package-pre-1.32 rust-1.24 "1.25.0"
           "0baxjr99311lvwdq0s38bipbnj72pn6fgbk6lcq7j555xq53mxpf"
           #:patches '("rust-1.25-accept-more-detailed-gdb-lines.patch"))))
     (package
@@ -668,7 +706,7 @@  jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
 
 (define-public rust-1.26
   (let ((base-rust
-         (rust-bootstrapped-package rust-1.25 "1.26.2"
+         (rust-bootstrapped-package-pre-1.32 rust-1.25 "1.26.2"
           "0047ais0fvmqvngqkdsxgrzhb0kljg8wy85b01kbbjc88hqcz7pv"
           #:patches '("rust-coresimd-doctest.patch"
                       "rust-1.25-accept-more-detailed-gdb-lines.patch"))))
@@ -723,13 +761,13 @@  jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
 
 (define-public rust-1.27
   (let ((base-rust
-         (rust-bootstrapped-package rust-1.26 "1.27.2"
-                                    "0pg1s37bhx9zqbynxyydq5j6q7kij9vxkcv8maz0m25prm88r0cs"
-                                    #:patches
-                                    '("rust-coresimd-doctest.patch"
-                                      "rust-bootstrap-stage0-test.patch"
-                                      "rust-1.25-accept-more-detailed-gdb-lines.patch"
-                                      "rust-reproducible-builds.patch"))))
+         (rust-bootstrapped-package-pre-1.32 rust-1.26 "1.27.2"
+          "0pg1s37bhx9zqbynxyydq5j6q7kij9vxkcv8maz0m25prm88r0cs"
+          #:patches
+          '("rust-coresimd-doctest.patch"
+            "rust-bootstrap-stage0-test.patch"
+            "rust-1.25-accept-more-detailed-gdb-lines.patch"
+            "rust-reproducible-builds.patch"))))
     (package
       (inherit base-rust)
       (arguments
@@ -752,13 +790,13 @@  jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
 
 (define-public rust-1.28
   (let ((base-rust
-         (rust-bootstrapped-package rust-1.27 "1.28.0"
-                                    "11k4rn77bca2rikykkk9fmprrgjswd4x4kaq7fia08vgkir82nhx"
-                                    #:patches
-                                    '("rust-coresimd-doctest.patch"
-                                      "rust-bootstrap-stage0-test.patch"
-                                      "rust-1.25-accept-more-detailed-gdb-lines.patch"
-                                      "rust-reproducible-builds.patch"))))
+         (rust-bootstrapped-package-pre-1.32 rust-1.27 "1.28.0"
+          "11k4rn77bca2rikykkk9fmprrgjswd4x4kaq7fia08vgkir82nhx"
+          #:patches
+          '("rust-coresimd-doctest.patch"
+            "rust-bootstrap-stage0-test.patch"
+            "rust-1.25-accept-more-detailed-gdb-lines.patch"
+            "rust-reproducible-builds.patch"))))
     (package
       (inherit base-rust)
       (inputs
@@ -786,22 +824,22 @@  jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
 
 (define-public rust-1.29
   (let ((base-rust
-         (rust-bootstrapped-package rust-1.28 "1.29.2"
-                                    "1jb787080z754caa2w3w1amsygs4qlzj9rs1vy64firfmabfg22h"
-                                    #:patches
-                                    '("rust-1.25-accept-more-detailed-gdb-lines.patch"
-                                      "rust-reproducible-builds.patch"))))
+         (rust-bootstrapped-package-pre-1.32 rust-1.28 "1.29.2"
+          "1jb787080z754caa2w3w1amsygs4qlzj9rs1vy64firfmabfg22h"
+          #:patches
+          '("rust-1.25-accept-more-detailed-gdb-lines.patch"
+            "rust-reproducible-builds.patch"))))
     (package
       (inherit base-rust))))
 
 (define-public rust-1.30
   (let ((base-rust
-         (rust-bootstrapped-package rust-1.29 "1.30.1"
-                                    "0aavdc1lqv0cjzbqwl5n59yd0bqdlhn0zas61ljf38yrvc18k8rn"
-                                    #:patches
-                                    '("rust-1.25-accept-more-detailed-gdb-lines.patch"
-                                      "rust-1.30-gdb-llvm.patch"
-                                      "rust-reproducible-builds.patch"))))
+         (rust-bootstrapped-package-pre-1.32 rust-1.29 "1.30.1"
+          "0aavdc1lqv0cjzbqwl5n59yd0bqdlhn0zas61ljf38yrvc18k8rn"
+          #:patches
+          '("rust-1.25-accept-more-detailed-gdb-lines.patch"
+            "rust-1.30-gdb-llvm.patch"
+            "rust-reproducible-builds.patch"))))
     (package
       (inherit base-rust)
       (inputs
@@ -838,14 +876,14 @@  jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
              ;; moved elsewhere, so the patch doesn't apply.
              (delete 'disable-amd64-avx-test))))))))
 
-(define-public rust
+(define-public rust-1.31
   (let ((base-rust
-         (rust-bootstrapped-package rust-1.30 "1.31.1"
-                                    "0sk84ff0cklybcp0jbbxcw7lk7mrm6kb6km5nzd6m64dy0igrlli"
-                                    #:patches
-                                    '("rust-1.25-accept-more-detailed-gdb-lines.patch"
-                                      "rust-1.30-gdb-llvm.patch"
-                                      "rust-reproducible-builds.patch"))))
+         (rust-bootstrapped-package-pre-1.32 rust-1.30 "1.31.1"
+          "0sk84ff0cklybcp0jbbxcw7lk7mrm6kb6km5nzd6m64dy0igrlli"
+          #:patches
+          '("rust-1.25-accept-more-detailed-gdb-lines.patch"
+            "rust-1.30-gdb-llvm.patch"
+            "rust-reproducible-builds.patch"))))
     (package
       (inherit base-rust)
       (arguments
@@ -874,3 +912,62 @@  jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
                  (substitute* "src/libstd/process.rs"
                    (("```rust") "```rust,no_run"))
                  #t)))))))))
+
+(define-public rust
+  (let ((base-rust
+         (rust-bootstrapped-package rust-1.31 "1.32.0"
+          "0ji2l9xv53y27xy72qagggvq47gayr5lcv2jwvmfirx029vlqnac"
+          #:patches '("rust-reproducible-builds.patch")
+          ;; the vendor directory has moved to the root of
+          ;; the tarball, so we have to strip an extra prefix
+          #:patch-flags '("-p2"))))
+    (package
+      (inherit base-rust)
+      (inputs
+       ;; Downgrade to LLVM 6, all LTO tests appear to fail with LLVM 7.0.1
+       (alist-replace "llvm" (list llvm-6)
+                      (package-inputs base-rust)))
+      (arguments
+       (substitute-keyword-arguments (package-arguments base-rust)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             ;; Cargo.lock and the vendor/ directory have been moved to the
+             ;; root of the rust tarball
+             (replace 'patch-cargo-checksums
+               (lambda* _
+                 (substitute* "Cargo.lock"
+                   (("(\"checksum .* = )\".*\"" all name)
+                    (string-append name "\"" ,%cargo-reference-hash "\"")))
+                 (for-each
+                  (lambda (filename)
+                    (use-modules (guix build cargo-utils))
+                    (delete-file filename)
+                    (let* ((dir (dirname filename)))
+                      (display (string-append
+                                "patch-cargo-checksums: generate-checksums for "
+                                dir "\n"))
+                      (generate-checksums dir ,%cargo-reference-project-file)))
+                  (find-files "vendor" ".cargo-checksum.json"))
+                 #t))
+             (add-after 'enable-codegen-tests 'override-jemalloc
+               (lambda* (#:key inputs #:allow-other-keys)
+                 ;; The compiler is no longer directly built against jemalloc,
+                 ;; but rather via the jemalloc-sys crate (which vendors the
+                 ;; jemalloc source). To use jemalloc we must enable linking to
+                 ;; it (otherwise it would use the system allocator), and set
+                 ;; an environment variable pointing to the compiled jemalloc.
+                 (substitute* "config.toml"
+                   (("^jemalloc =.*$") "")
+                   (("[[]rust[]]") "\n[rust]\njemalloc=true\n"))
+                 (setenv "JEMALLOC_OVERRIDE" (string-append (assoc-ref inputs "jemalloc")
+                                                            "/lib/libjemalloc_pic.a"))
+                 #t))
+             (add-after 'patch-tests 'disable-amd64-avx-test
+               ;; That test would fail on x86_64 machines without avx.
+               (lambda* _
+                 (substitute* "src/test/ui/issues/issue-44056.rs"
+                   (("only-x86_64") "ignore-test"))
+                 #t))
+             ;; Remove no longer relevant steps
+             (delete 'remove-flaky-test)
+             (delete 'patch-aarch64-test))))))))