[PATCH 0/2] Bootstrap rust@1.29.0 directly from mrustc@0.9.

DoneSubmitted by Danny Milosavljevic.
Details
5 participants
  • Danny Milosavljevic
  • Jakub Kądziołka
  • Ludovic Courtès
  • Maxim Cournoyer
  • Marius Bakke
Owner
unassigned
Severity
normal
D
D
Danny Milosavljevic wrote on 7 Nov 2019 23:27
(address . guix-patches@gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20191107222756.20064-1-dannym@scratchpost.org
Danny Milosavljevic (2): gnu: mrustc: Update to 0.9. gnu: rust: Bootstrap rust@1.29.0 from mrustc.
gnu/local.mk | 1 - ...ix-variable-length-integer-receiving.patch | 15 - gnu/packages/rust.scm | 494 ++++-------------- 3 files changed, 105 insertions(+), 405 deletions(-) delete mode 100644 gnu/packages/patches/mrustc-0.8.0-fix-variable-length-integer-receiving.patch
D
D
Danny Milosavljevic wrote on 7 Nov 2019 23:29
[PATCH 1/2] gnu: mrustc: Update to 0.9.
(address . 38110@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20191107223000.20242-1-dannym@scratchpost.org
* gnu/packages/patches/mrustc-0.8.0-fix-variable-length-integer-receiving.patch: Delete file.* gnu/local.mk (dist_patch_DATA): Remove it.* gnu/packages/rust.scm: Update to 0.9.[source](patches): Remove it.--- gnu/local.mk | 1 - ...fix-variable-length-integer-receiving.patch | 15 --------------- gnu/packages/rust.scm | 18 ++++++++---------- 3 files changed, 8 insertions(+), 26 deletions(-) delete mode 100644 gnu/packages/patches/mrustc-0.8.0-fix-variable-length-integer-receiving.patch
Toggle diff (92 lines)diff --git a/gnu/local.mk b/gnu/local.mkindex 2513b4003c..5f52372875 100644--- a/gnu/local.mk+++ b/gnu/local.mk@@ -1140,7 +1140,6 @@ dist_patch_DATA = \ %D%/packages/patches/mozjs38-tracelogger.patch \ %D%/packages/patches/mozjs38-version-detection.patch \ %D%/packages/patches/mrrescue-support-love-11.patch \- %D%/packages/patches/mrustc-0.8.0-fix-variable-length-integer-receiving.patch \ %D%/packages/patches/mtools-mformat-uninitialized.patch \ %D%/packages/patches/mumble-1.2.19-abs.patch \ %D%/packages/patches/mumps-build-parallelism.patch \diff --git a/gnu/packages/patches/mrustc-0.8.0-fix-variable-length-integer-receiving.patch b/gnu/packages/patches/mrustc-0.8.0-fix-variable-length-integer-receiving.patchdeleted file mode 100644index 9e76653a07..0000000000--- a/gnu/packages/patches/mrustc-0.8.0-fix-variable-length-integer-receiving.patch+++ /dev/null@@ -1,15 +0,0 @@-https://github.com/thepowersgang/mrustc/issues/109-From: Danny Milosavljevic <dannym@scratchpost.org>-Date: Fri, 3 Jan 2019 13:00:00 +0100----- mrustc/src/expand/proc_macro.cpp.orig 2019-02-01 14:16:54.208486062 +0100-+++ mrustc/src/expand/proc_macro.cpp 2019-02-01 14:17:14.350925705 +0100-@@ -977,7 +977,7 @@- for(;;)- {- auto b = recv_u8();-- v |= static_cast<uint64_t>(b) << ofs;-+ v |= static_cast<uint64_t>(b & 0x7F) << ofs;- if( (b & 0x80) == 0 )- break;- ofs += 7;diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scmindex f3fee4c126..a752f9ece4 100644--- a/gnu/packages/rust.scm+++ b/gnu/packages/rust.scm@@ -88,10 +88,10 @@ (package-native-inputs base-rust)))))) (define-public mrustc- (let ((rustc-version "1.19.0"))+ (let ((rustc-version "1.29.0")) (package (name "mrustc")- (version "0.8.0")+ (version "0.9") (source (origin (method git-fetch) (uri (git-reference@@ -100,9 +100,7 @@ (file-name (git-file-name name version)) (sha256 (base32- "0a7v8ccyzp1sdkwni8h1698hxpfz2sxhcpx42n6l2pbm0rbjp08i"))- (patches- (search-patches "mrustc-0.8.0-fix-variable-length-integer-receiving.patch"))))+ "194ny7vsks5ygiw7d8yxjmp1qwigd71ilchis6xjl6bb2sj97rd2")))) (outputs '("out" "cargo")) (build-system gnu-build-system) (inputs@@ -111,7 +109,7 @@ `(("bison" ,bison) ("flex" ,flex) ;; Required for the libstd sources.- ("rustc" ,(package-source rust-1.19))))+ ("rustc" ,(package-source rust-1.29)))) (arguments `(#:test-target "local_tests" #:make-flags (list (string-append "LLVM_CONFIG="@@ -135,8 +133,8 @@ ,(or (%current-target-system) (nix-system->gnu-triplet-for-rust))))) (invoke "tar" "xf" (assoc-ref inputs "rustc"))- (chdir "rustc-1.19.0-src")- (invoke "patch" "-p0" "../rust_src.patch")+ (chdir "rustc-1.29.0-src")+ (invoke "patch" "-p0" "../rustc-1.29.0-src.patch") (chdir "..") #t)) (replace 'configure@@ -147,8 +145,8 @@ (lambda _ (for-each (lambda (target) (invoke "make" "-f" "minicargo.mk" target))- '("output/libstd.hir" "output/libpanic_unwind.hir"- "output/libproc_macro.hir" "output/libtest.hir"))+ '("output/libstd.rlib" "output/libpanic_unwind.rlib"+ "output/libproc_macro.rlib" "output/libtest.rlib")) ;; Technically the above already does it - but we want to be clear. (invoke "make" "-C" "tools/minicargo"))) (replace 'install
D
D
Danny Milosavljevic wrote on 7 Nov 2019 23:30
[PATCH 2/2] gnu: rust: Bootstrap rust@1.29.0 from mrustc.
(address . 38110@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20191107223000.20242-2-dannym@scratchpost.org
* gnu/packages/rust.scm (rust-1.19): Delete variable.(rust-1.20): Delete variable.(rust-1.21): Delete variable.(rust-1.22): Delete variable.(rust-1.23): Delete variable.(rust-1.24): Delete variable.(rust-1.25): Delete variable.(rust-1.26): Delete variable.(rust-1.27): Delete variable.(rust-1.28): Delete variable.(rust-1.29): Bootstrap from mrustc.(rust-1.30)[inputs]: Remove llvm 3. Add llvm 6.--- gnu/packages/rust.scm | 476 +++++++++--------------------------------- 1 file changed, 97 insertions(+), 379 deletions(-)
Toggle diff (589 lines)diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scmindex a752f9ece4..0102a97a80 100644--- a/gnu/packages/rust.scm+++ b/gnu/packages/rust.scm@@ -178,18 +178,19 @@ safety and thread safety guarantees.") ;; Dual licensed. (license (list license:asl2.0 license:expat))))) -(define rust-1.19+(define rust-1.29 (package (name "rust")- (version "1.19.0")+ (version "1.29.0") (source (origin (method url-fetch)- (uri (rust-uri "1.19.0"))- (sha256 (base32 "0l8c14qsf42rmkqy92ahij4vf356dbyspxcips1aswpvad81y8qm"))+ (uri (rust-uri "1.29.0"))+ (sha256 (base32 "1sb15znckj8pc8q3g7cq03pijnida6cg64yqmgiayxkzskzk9sx4")) (modules '((guix build utils))) (snippet '(begin (delete-file-recursively "src/llvm") #t))- (patches (map search-patch '("rust-1.19-mrustc.patch")))))+ (patches (map search-patch '("rust-1.25-accept-more-detailed-gdb-lines.patch"+ "rust-reproducible-builds.patch"))))) (outputs '("out" "cargo")) (properties '((timeout . 72000) ;20 hours (max-silent-time . 18000))) ;5 hours (for armel)@@ -201,6 +202,7 @@ safety and thread safety guarantees.") (add-after 'unpack 'set-env (lambda* (#:key inputs #:allow-other-keys) ;; Disable test for cross compilation support.+;(write "X") (setenv "CFG_DISABLE_CROSS_TESTS" "1") (setenv "SHELL" (which "sh")) (setenv "CONFIG_SHELL" (which "sh"))@@ -208,24 +210,6 @@ safety and thread safety guarantees.") ;; guix llvm-3.9.1 package installs only shared libraries (setenv "LLVM_LINK_SHARED" "1") #t))- (add-after 'unpack 'patch-cargo-tomls- (lambda* (#:key inputs outputs #:allow-other-keys)- (substitute* "src/librustc_errors/Cargo.toml"- (("[[]dependencies[]]") "-[dependencies]-term = \"0.4.4\"-"))- (substitute* "src/librustc/Cargo.toml"- (("[[]dependencies[]]") "-[dependencies]-getopts = { path = \"../libgetopts\" }-"))- (substitute* "src/librustdoc/Cargo.toml"- (("[[]dependencies[]]") "-[dependencies]-test = { path = \"../libtest\" }-"))- #t)) (add-after 'unpack 'patch-tests (lambda* (#:key inputs #:allow-other-keys) (let ((bash (assoc-ref inputs "bash")))@@ -244,27 +228,29 @@ test = { path = \"../libtest\" } #[ignore] fn test_process_mask")) #t)))+ (add-after 'patch-tests 'patch-cargo-index-update+ (lambda* _+ (substitute* "src/tools/cargo/tests/testsuite/generate_lockfile.rs"+ ;; This test wants to update the crate index.+ (("fn no_index_update") "#[ignore]\nfn no_index_update"))+ #t)) (add-after 'patch-tests 'patch-aarch64-test (lambda* _- (substitute* "src/librustc_back/dynamic_lib.rs"+ (substitute* "src/librustc_metadata/dynamic_lib.rs" ;; This test is known to fail on aarch64 and powerpc64le: ;; https://github.com/rust-lang/rust/issues/45410 (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))- #t))- (add-after 'patch-tests 'use-readelf-for-tests- (lambda* _- ;; nm doesn't recognize the file format because of the- ;; nonstandard sections used by the Rust compiler, but readelf- ;; ignores them.- (substitute* "src/test/run-make/atomic-lock-free/Makefile"- (("\tnm ")- "\treadelf -c "))+ ;; This test fails on aarch64 with llvm@6.0:+ ;; https://github.com/rust-lang/rust/issues/49807+ ;; other possible solution:+ ;; https://github.com/rust-lang/rust/pull/47688+ (delete-file "src/test/debuginfo/by-value-self-argument-in-trait-impl.rs") #t)) (add-after 'patch-tests 'remove-unsupported-tests (lambda* _ ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH. ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>- (delete-file-recursively "src/test/run-make/linker-output-non-utf8")+ (delete-file-recursively "src/test/run-make-fulldeps/linker-output-non-utf8") #t)) (add-after 'patch-source-shebangs 'patch-cargo-checksums (lambda* _@@ -289,14 +275,20 @@ test = { path = \"../libtest\" } (replace 'build (lambda* (#:key inputs outputs #:allow-other-keys) (let ((rustc-bootstrap (assoc-ref inputs "rustc-bootstrap")))+;(invoke "ls" "src/vendor/getopts")+;(newline) (setenv "CFG_COMPILER_HOST_TRIPLE" ,(nix-system->gnu-triplet (%current-system))) (setenv "CFG_RELEASE" "") (setenv "CFG_RELEASE_CHANNEL" "stable") (setenv "CFG_LIBDIR_RELATIVE" "lib")- (setenv "CFG_VERSION" "1.19.0-stable-mrustc")+ (setenv "CFG_VERSION" "1.29.0-stable-mrustc") ; bad: (setenv "CFG_PREFIX" "mrustc") ; FIXME output path.- (mkdir-p "output")+ ;; Crate::load_extern_crate ignores the search path, so make+ ;; the situation easier for it.+ (copy-recursively (string-append rustc-bootstrap "/lib/mrust")+ "output")+ ;(mkdir-p "output") (invoke (string-append rustc-bootstrap "/tools/bin/minicargo") "src/rustc" "--vendor-dir" "src/vendor" "--output-dir" "output/rustc-build"@@ -311,7 +303,7 @@ test = { path = \"../libtest\" } (invoke (string-append rustc-bootstrap "/tools/bin/minicargo") "src/tools/cargo" "--vendor-dir" "src/vendor" "--output-dir" "output/cargo-build"- "-L" "output/"+ ;"-L" "output/" "-L" (string-append rustc-bootstrap "/lib/mrust") "-j" "1") ;; Now use the newly-built rustc to build the libraries.@@ -419,10 +411,10 @@ safety and thread safety guarantees.") ;; Dual licensed. (license (list license:asl2.0 license:expat)))) -(define-public rust-1.20+(define-public rust-1.30 (let ((base-rust- (rust-bootstrapped-package rust-1.19 "1.20.0"- "0542y4rnzlsrricai130mqyxl8r6rd991frb4qsnwb27yigqg91a")))+ (rust-bootstrapped-package rust-1.29 "1.30.1"+ "0aavdc1lqv0cjzbqwl5n59yd0bqdlhn0zas61ljf38yrvc18k8rn"))) (package (inherit base-rust) (source@@ -431,20 +423,45 @@ safety and thread safety guarantees.") (snippet '(begin (delete-file-recursively "src/jemalloc") (delete-file-recursively "src/llvm")+ (delete-file-recursively "src/llvm-emscripten")+ (delete-file-recursively "src/tools/clang")+ (delete-file-recursively "src/tools/lldb") #t)) (patches '()))) (outputs '("out" "doc" "cargo"))- ;; Since rust-1.19 is local, it's quite probable that Hydra- ;; will build rust-1.19 only as a dependency of rust-1.20.+ ;; Since rust-2.19 is local, it's quite probable that Hydra+ ;; will build rust-1.29 only as a dependency of rust-1.20. ;; But then Hydra will use the wrong properties, the ones here,- ;; for rust-1.19. Therefore, we copied the properties of- ;; rust-1.19 here.+ ;; for rust-1.29. Therefore, we copied the properties of+ ;; rust-1.29 here. (properties '((timeout . 72000) ;20 hours (max-silent-time . 18000))) ;5 hours (for armel)+ (inputs+ ;; Use LLVM 6.0+ (alist-replace "llvm" (list llvm-6)+ (package-inputs base-rust))) (arguments- (substitute-keyword-arguments (package-arguments rust-1.19)+ (substitute-keyword-arguments (package-arguments rust-1.29) ((#:phases phases) `(modify-phases ,phases+ (add-after 'unpack 'remove-flaky-test+ (lambda _+ ;; See <https://github.com/rust-lang/rust/issues/43402>.+ (when (file-exists? "src/test/run-make/issue-26092")+ (delete-file-recursively "src/test/run-make/issue-26092"))+ #t))+ (add-after 'configure 'enable-codegen-tests+ ;; Codegen tests should pass with llvm 6, so enable them.+ (lambda* _+ (substitute* "config.toml"+ (("codegen-tests = false") ""))+ #t))+ ;; The test has been moved elsewhere.+ (add-after 'patch-tests 'disable-amd64-avx-test+ (lambda _+ (substitute* "src/test/ui/issues/issue-44056.rs"+ (("only-x86_64") "ignore-test"))+ #t)) (add-after 'patch-tests 'patch-cargo-tests (lambda _ (substitute* "src/tools/cargo/tests/build.rs"@@ -466,12 +483,29 @@ safety and thread safety guarantees.") (("fn finds_author_git") "#[ignore]\nfn finds_author_git") (("fn finds_local_author_git") "#[ignore]\nfn finds_local_author_git")) #t))- (add-after 'patch-cargo-tests 'ignore-glibc-2.27-incompatible-test- ;; https://github.com/rust-lang/rust/issues/47863- (lambda _- (substitute* "src/test/run-pass/out-of-stack.rs"- (("// ignore-android") "// ignore-test\n// ignore-android"))- #t))+ (add-after 'patch-cargo-tests 'patch-cargo-env-shebang+ (lambda* (#:key inputs #:allow-other-keys)+ (let ((coreutils (assoc-ref inputs "coreutils")))+ (substitute* "src/tools/cargo/tests/testsuite/fix.rs"+ ;; Cargo has a test which explicitly sets a+ ;; RUSTC_WRAPPER environment variable which points+ ;; to /usr/bin/env. Since it's not a shebang, it+ ;; needs to be manually patched+ (("\"/usr/bin/env\"")+ (string-append "\"" coreutils "/bin/env\"")))+ #t)))+ (add-after 'patch-cargo-env-shebang 'ignore-cargo-package-tests+ (lambda* _+ (substitute* "src/tools/cargo/tests/testsuite/package.rs"+ ;; These tests largely check that cargo outputs warning/error+ ;; messages as expected. It seems that cargo outputs an+ ;; absolute path to something in the store instead of the+ ;; expected relative path (e.g. `[..]`) so we'll ignore+ ;; these for now+ (("fn include") "#[ignore]\nfn include")+ (("fn exclude") "#[ignore]\nfn exclude"))+ #t))+ (replace 'configure (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out"))@@ -523,16 +557,6 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\" "/tmp/cc") (setenv "PATH" (string-append "/tmp:" (getenv "PATH"))) #t))- (add-after 'provide-cc 'configure-archiver- (lambda* (#:key inputs #:allow-other-keys)- (substitute* "src/build_helper/lib.rs"- ;; Make sure "ar" is always used as the archiver.- (("\"musl\"") "\"\"")- ;; Then substitute "ar" by our name.- (("\"ar\"") (string-append "\""- (assoc-ref inputs "binutils")- "/bin/ar\"")))- #t)) (delete 'patch-cargo-tomls) (add-before 'build 'reset-timestamps-after-changes (lambda* _@@ -549,11 +573,14 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\" (invoke "./x.py" "build" "src/tools/cargo"))) (replace 'check (lambda* _- ;; Disable parallel execution to prevent EAGAIN errors when- ;; running tests.- (invoke "./x.py" "-j1" "test" "-vv")- (invoke "./x.py" "-j1" "test" "src/tools/cargo")- #t))+ ;; Enable parallel execution.+ (let ((parallel-job-spec+ (string-append "-j" (number->string+ (min 4+ (parallel-job-count))))))+ (invoke "./x.py" parallel-job-spec "test" "-vv")+ (invoke "./x.py" parallel-job-spec "test"+ "src/tools/cargo")))) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (invoke "./x.py" "install")@@ -591,315 +618,6 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\" `("LIBRARY_PATH" ":" suffix (,(string-append libc "/lib")))) #t)))))))))) -(define-public rust-1.21- (let ((base-rust (rust-bootstrapped-package rust-1.20 "1.21.0"- "1yj8lnxybjrybp00fqhxw8fpr641dh8wcn9mk44xjnsb4i1c21qp")))- (package- (inherit base-rust)- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'configure 'remove-ar- (lambda* (#:key inputs #:allow-other-keys)- ;; Remove because toml complains about "unknown field".- (substitute* "config.toml"- (("^ar =.*") "\n"))- #t)))))))))--(define-public rust-1.22- (let ((base-rust (rust-bootstrapped-package rust-1.21 "1.22.1"- "1lrzzp0nh7s61wgfs2h6ilaqi6iq89f1pd1yaf65l87bssyl4ylb")))- (package- (inherit base-rust)- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'unpack 'remove-flaky-test- (lambda _- ;; See <https://github.com/rust-lang/rust/issues/43402>.- (when (file-exists? "src/test/run-make/issue-26092")- (delete-file-recursively "src/test/run-make/issue-26092"))- #t)))))))))--(define-public rust-1.23- (let ((base-rust (rust-bootstrapped-package rust-1.22 "1.23.0"- "14fb8vhjzsxlbi6yrn1r6fl5dlbdd1m92dn5zj5gmzfwf4w9ar3l")))- (package- (inherit base-rust)- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (delete 'configure-archiver)- (delete 'remove-ar)- (add-after 'unpack 'dont-build-native- (lambda _- ;; XXX: Revisit this when we use gcc 6.- (substitute* "src/binaryen/CMakeLists.txt"- (("ADD_COMPILE_FLAG\\(\\\"-march=native\\\"\\)") ""))- #t)))))))))--(define-public rust-1.24- (let ((base-rust- (rust-bootstrapped-package rust-1.23 "1.24.1"- "1vv10x2h9kq7fxh2v01damdq8pvlp5acyh1kzcda9sfjx12kv99y")))- (package- (inherit base-rust)- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (delete 'use-readelf-for-tests)- (replace 'patch-aarch64-test- (lambda* _- (substitute* "src/librustc_metadata/dynamic_lib.rs"- ;; This test is known to fail on aarch64 and powerpc64le:- ;; https://github.com/rust-lang/rust/issues/45410- (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))- #t)))))))))--;;; Rust 1.25 release support work with llvm 6--but build with llvm 6 is-;;; not determenistic due to <https://github.com/rust-lang/rust/issues/50556>.-;;; 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"- "0baxjr99311lvwdq0s38bipbnj72pn6fgbk6lcq7j555xq53mxpf")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (snippet '(begin- (delete-file-recursively "src/jemalloc")- (delete-file-recursively "src/llvm")- (delete-file-recursively "src/llvm-emscripten")- #t))- (patches (map search-patch- '("rust-1.25-accept-more-detailed-gdb-lines.patch")))))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'patch-cargo-tests 'patch-cargo-index-update- (lambda _- (substitute* "src/tools/cargo/tests/generate-lockfile.rs"- ;; This test wants to update the crate index.- (("fn no_index_update") "#[ignore]\nfn no_index_update"))- #t))- (replace 'patch-aarch64-test- (lambda _- (substitute* "src/librustc_metadata/dynamic_lib.rs"- ;; This test is known to fail on aarch64 and powerpc64le:- ;; https://github.com/rust-lang/rust/issues/45410- (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))- ;; This test fails on aarch64 with llvm@6.0:- ;; https://github.com/rust-lang/rust/issues/49807- ;; other possible solution:- ;; https://github.com/rust-lang/rust/pull/47688- (delete-file "src/test/debuginfo/by-value-self-argument-in-trait-impl.rs")- #t))- (delete 'ignore-glibc-2.27-incompatible-test))))))))--(define-public rust-1.26- (let ((base-rust- (rust-bootstrapped-package rust-1.25 "1.26.2"- "0047ais0fvmqvngqkdsxgrzhb0kljg8wy85b01kbbjc88hqcz7pv")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (patches (map search-patch- '("rust-coresimd-doctest.patch"- "rust-1.25-accept-more-detailed-gdb-lines.patch")))))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- ;; binaryen was replaced with LLD project from LLVM- (delete 'dont-build-native)- (replace 'check- (lambda* _- ;; Enable parallel execution.- (let ((parallel-job-spec- (string-append "-j" (number->string- (min 4- (parallel-job-count))))))- (invoke "./x.py" parallel-job-spec "test" "-vv")- (invoke "./x.py" parallel-job-spec "test"- "src/tools/cargo"))))- (replace 'remove-unsupported-tests- (lambda* _- ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH.- ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>- (delete-file-recursively "src/test/run-make-fulldeps/linker-output-non-utf8")- #t))- (replace 'patch-cargo-tests- (lambda* _- (substitute* "src/tools/cargo/tests/testsuite/build.rs"- (("/usr/bin/env") (which "env"))- ;; Guix llvm is compiled without asmjs-unknown-emscripten.- (("fn wasm32_final_outputs") "#[ignore]\nfn wasm32_final_outputs"))- (substitute* "src/tools/cargo/tests/testsuite/death.rs"- ;; This is stuck when built in container.- (("fn ctrl_c_kills_everyone") "#[ignore]\nfn ctrl_c_kills_everyone"))- ;; Prints test output in the wrong order when built on- ;; i686-linux.- (substitute* "src/tools/cargo/tests/testsuite/test.rs"- (("fn cargo_test_env") "#[ignore]\nfn cargo_test_env"))-- ;; Avoid dependency on "git".- (substitute* "src/tools/cargo/tests/testsuite/new.rs"- (("fn author_prefers_cargo") "#[ignore]\nfn author_prefers_cargo")- (("fn finds_author_git") "#[ignore]\nfn finds_author_git")- (("fn finds_local_author_git") "#[ignore]\nfn finds_local_author_git"))- #t))- (add-after 'patch-cargo-tests 'disable-cargo-test-for-nightly-channel- (lambda* _- ;; This test failed to work on "nightly" channel builds- ;; https://github.com/rust-lang/cargo/issues/5648- (substitute* "src/tools/cargo/tests/testsuite/resolve.rs"- (("fn test_resolving_minimum_version_with_transitive_deps")- "#[ignore]\nfn test_resolving_minimum_version_with_transitive_deps"))- #t))- (replace 'patch-cargo-index-update- (lambda* _- (substitute* "src/tools/cargo/tests/testsuite/generate_lockfile.rs"- ;; This test wants to update the crate index.- (("fn no_index_update") "#[ignore]\nfn no_index_update"))- #t)))))))))--(define-public rust-1.27- (let ((base-rust- (rust-bootstrapped-package rust-1.26 "1.27.2"- "0pg1s37bhx9zqbynxyydq5j6q7kij9vxkcv8maz0m25prm88r0cs")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (patches (map search-patch '("rust-coresimd-doctest.patch"- "rust-bootstrap-stage0-test.patch"- "rust-1.25-accept-more-detailed-gdb-lines.patch"- "rust-reproducible-builds.patch")))))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-before 'install 'mkdir-prefix-paths- (lambda* (#:key outputs #:allow-other-keys)- ;; As result of https://github.com/rust-lang/rust/issues/36989- ;; `prefix' directory should exist before `install' call- (mkdir-p (assoc-ref outputs "out"))- (mkdir-p (assoc-ref outputs "cargo"))- #t))- (add-after 'patch-cargo-tests 'disable-thinlto-test- (lambda* _- ;; thinlto required llvm 6.0 for work- (substitute* "src/tools/cargo/tests/testsuite/path.rs"- (("fn thin_lto_works") "#[ignore]\nfn thin_lto_works"))- #t)))))))))--(define-public rust-1.28- (let ((base-rust- (rust-bootstrapped-package rust-1.27 "1.28.0"- "11k4rn77bca2rikykkk9fmprrgjswd4x4kaq7fia08vgkir82nhx")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (patches (map search-patch '("rust-coresimd-doctest.patch"- "rust-bootstrap-stage0-test.patch"- "rust-1.25-accept-more-detailed-gdb-lines.patch"- "rust-reproducible-builds.patch")))))- (inputs- ;; Use LLVM 6.0- (alist-replace "llvm" (list llvm-6)- (package-inputs base-rust)))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'configure 'enable-codegen-tests- ;; Codegen tests should pass with llvm 6, so enable them.- (lambda* _- (substitute* "config.toml"- (("codegen-tests = false") ""))- #t))- (add-after 'patch-tests 'disable-amd64-avx-test- ;; That test would fail on x86_64 machines without avx.- (lambda* _- (substitute* "src/test/run-pass/issue-44056.rs"- (("only-x86_64") "ignore-test"))- #t))- ;; The thinlto test should pass with llvm 6.- (delete 'disable-thinlto-test))))))))--(define-public rust-1.29- (let ((base-rust- (rust-bootstrapped-package rust-1.28 "1.29.2"- "1jb787080z754caa2w3w1amsygs4qlzj9rs1vy64firfmabfg22h")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (patches (map search-patch '("rust-1.25-accept-more-detailed-gdb-lines.patch"- "rust-reproducible-builds.patch"))))))))--(define-public rust-1.30- (let ((base-rust- (rust-bootstrapped-package rust-1.29 "1.30.1"- "0aavdc1lqv0cjzbqwl5n59yd0bqdlhn0zas61ljf38yrvc18k8rn")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (snippet '(begin- (delete-file-recursively "src/jemalloc")- (delete-file-recursively "src/llvm")- (delete-file-recursively "src/llvm-emscripten")- (delete-file-recursively "src/tools/clang")- (delete-file-recursively "src/tools/lldb")- #t))))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'patch-cargo-tests 'patch-cargo-env-shebang- (lambda* (#:key inputs #:allow-other-keys)- (let ((coreutils (assoc-ref inputs "coreutils")))- (substitute* "src/tools/cargo/tests/testsuite/fix.rs"- ;; Cargo has a test which explicitly sets a- ;; RUSTC_WRAPPER environment variable which points- ;; to /usr/bin/env. Since it's not a shebang, it- ;; needs to be manually patched- (("\"/usr/bin/env\"")- (string-append "\"" coreutils "/bin/env\"")))- #t)))- (add-after 'patch-cargo-env-shebang 'ignore-cargo-package-tests- (lambda* _- (substitute* "src/tools/cargo/tests/testsuite/package.rs"- ;; These tests largely check that cargo outputs warning/error- ;; messages as expected. It seems that cargo outputs an- ;; absolute path to something in the store instead of the- ;; expected relative path (e.g. `[..]`) so we'll ignore- ;; these for now- (("fn include") "#[ignore]\nfn include")- (("fn exclude") "#[ignore]\nfn exclude"))- #t))- ;; The test has been moved elsewhere.- (replace 'disable-amd64-avx-test- (lambda _- (substitute* "src/test/ui/run-pass/issues/issue-44056.rs"- (("only-x86_64") "ignore-test"))- #t)))))))))- (define-public rust-1.31 (let ((base-rust (rust-bootstrapped-package rust-1.30 "1.31.1"
D
D
Danny Milosavljevic wrote on 8 Nov 2019 00:17
Re: [PATCH 1/2] gnu: mrustc: Update to 0.9.
(address . 38110@debbugs.gnu.org)
20191108001703.6bba1088@scratchpost.org
(It might make sense to only update mrustc and not update the rust it bootstraps in this patch)
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCAAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAl3Epe8ACgkQ5xo1VCwwuqXsEwf+O2obVPlNlsIcdpQWkQv++dGs/J8LTejYnQaDCOWedGI33Y4cqGJDRToTJcd5EBefeDWa34fgRj+SSkrNipNedqdR2N8bDM7IqqkCjW+CROyc2wFqJ/okxa5DStMJn1mswkdDrr8L2PzqKvndb2IvStaU8x89hzvh6x2BF9d825cZgEBIKLoES5nCYhTh/Etf6U8ibkDuLAAmGBKT3FJ1GWmVvVWBTN2n3O6g8z5vs3DE2+wWFEfFfXakVM6j+UnDDhyu51cvf05mICWWXh+1J/p1/dyEB74lzG3fPE5EXtnGCiisLMlW7m2SyGvIDqVrnxigQ5jqhGONXc7YKnM9sg===DL2o-----END PGP SIGNATURE-----

D
D
Danny Milosavljevic wrote on 8 Nov 2019 00:18
Re: [PATCH 2/2] gnu: rust: Bootstrap rust@1.29.0 from mrustc.
(address . 38110@debbugs.gnu.org)
20191108001824.523f0e1d@scratchpost.org
(It might make sense to make it target 1.29.2--although mrustc upstream doesn'tdo that)
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCAAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAl3EpkAACgkQ5xo1VCwwuqWNXQf+ITZxPT7yspCh/xy4UQOhrR3vQzcKywL0C3cOUL4UdGyeVSk6sMXLuXXzmfbNLUiAE4eNwZx+VulXAERRmzog2UgjoMXAZ24Ez4yk6y4Ii++CAAO196cKlrXRiH7ggbVkvIi7p+pjb4filDK6qF53jH9CI+fR4ojmTQZocqF8IxmTibn1aE+M47D+OJOyDGb3wCaMaTOiNqdfaYTDDS1PySCrhcVB7hMR3zsHI9aNHVCMc1FrDSBbDbSti/ISRI6/6Hh4j8457D6VZnI/MIamu6wLysHYgMT35DJFNQMckCBKCvcekzdxLfJ8gzxa0NB1bekpVjFbEq1eLdOVd5/04g===6Djl-----END PGP SIGNATURE-----

D
D
Danny Milosavljevic wrote on 8 Nov 2019 03:46
[PATCH v2 0/2] Bootstrap rust@1.29.0 directly from mrustc@0.9.
(address . 38110@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20191108024659.10138-1-dannym@scratchpost.org
Danny Milosavljevic (2): gnu: mrustc: Update to 0.9. gnu: rust: Bootstrap rust@1.29.0 by mrustc@0.9.
gnu/local.mk | 1 - ...ix-variable-length-integer-receiving.patch | 15 - gnu/packages/rust.scm | 495 ++++-------------- 3 files changed, 106 insertions(+), 405 deletions(-) delete mode 100644 gnu/packages/patches/mrustc-0.8.0-fix-variable-length-integer-receiving.patch
D
D
Danny Milosavljevic wrote on 8 Nov 2019 03:46
[PATCH v2 1/2] gnu: mrustc: Update to 0.9.
(address . 38110@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20191108024659.10138-2-dannym@scratchpost.org
* gnu/packages/patches/mrustc-0.8.0-fix-variable-length-integer-receiving.patch: Delete file.* gnu/local.mk (dist_patch_DATA): Remove it.* gnu/packages/rust.scm (mrustc): Update to 0.9.[source](patches): Remove it.[arguments]<#:phases>[build-minicargo]: Modify.--- gnu/local.mk | 1 - ....0-fix-variable-length-integer-receiving.patch | 15 --------------- gnu/packages/rust.scm | 12 +++++------- 3 files changed, 5 insertions(+), 23 deletions(-) delete mode 100644 gnu/packages/patches/mrustc-0.8.0-fix-variable-length-integer-receiving.patch
Toggle diff (77 lines)diff --git a/gnu/local.mk b/gnu/local.mkindex 2513b4003c..5f52372875 100644--- a/gnu/local.mk+++ b/gnu/local.mk@@ -1140,7 +1140,6 @@ dist_patch_DATA = \ %D%/packages/patches/mozjs38-tracelogger.patch \ %D%/packages/patches/mozjs38-version-detection.patch \ %D%/packages/patches/mrrescue-support-love-11.patch \- %D%/packages/patches/mrustc-0.8.0-fix-variable-length-integer-receiving.patch \ %D%/packages/patches/mtools-mformat-uninitialized.patch \ %D%/packages/patches/mumble-1.2.19-abs.patch \ %D%/packages/patches/mumps-build-parallelism.patch \diff --git a/gnu/packages/patches/mrustc-0.8.0-fix-variable-length-integer-receiving.patch b/gnu/packages/patches/mrustc-0.8.0-fix-variable-length-integer-receiving.patchdeleted file mode 100644index 9e76653a07..0000000000--- a/gnu/packages/patches/mrustc-0.8.0-fix-variable-length-integer-receiving.patch+++ /dev/null@@ -1,15 +0,0 @@-https://github.com/thepowersgang/mrustc/issues/109-From: Danny Milosavljevic <dannym@scratchpost.org>-Date: Fri, 3 Jan 2019 13:00:00 +0100----- mrustc/src/expand/proc_macro.cpp.orig 2019-02-01 14:16:54.208486062 +0100-+++ mrustc/src/expand/proc_macro.cpp 2019-02-01 14:17:14.350925705 +0100-@@ -977,7 +977,7 @@- for(;;)- {- auto b = recv_u8();-- v |= static_cast<uint64_t>(b) << ofs;-+ v |= static_cast<uint64_t>(b & 0x7F) << ofs;- if( (b & 0x80) == 0 )- break;- ofs += 7;diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scmindex f3fee4c126..76b1466284 100644--- a/gnu/packages/rust.scm+++ b/gnu/packages/rust.scm@@ -91,7 +91,7 @@ (let ((rustc-version "1.19.0")) (package (name "mrustc")- (version "0.8.0")+ (version "0.9") (source (origin (method git-fetch) (uri (git-reference@@ -100,9 +100,7 @@ (file-name (git-file-name name version)) (sha256 (base32- "0a7v8ccyzp1sdkwni8h1698hxpfz2sxhcpx42n6l2pbm0rbjp08i"))- (patches- (search-patches "mrustc-0.8.0-fix-variable-length-integer-receiving.patch"))))+ "194ny7vsks5ygiw7d8yxjmp1qwigd71ilchis6xjl6bb2sj97rd2")))) (outputs '("out" "cargo")) (build-system gnu-build-system) (inputs@@ -136,7 +134,7 @@ (nix-system->gnu-triplet-for-rust))))) (invoke "tar" "xf" (assoc-ref inputs "rustc")) (chdir "rustc-1.19.0-src")- (invoke "patch" "-p0" "../rust_src.patch")+ (invoke "patch" "-p0" "../rustc-1.19.0-src.patch") (chdir "..") #t)) (replace 'configure@@ -147,8 +145,8 @@ (lambda _ (for-each (lambda (target) (invoke "make" "-f" "minicargo.mk" target))- '("output/libstd.hir" "output/libpanic_unwind.hir"- "output/libproc_macro.hir" "output/libtest.hir"))+ '("output/libstd.rlib" "output/libpanic_unwind.rlib"+ "output/libproc_macro.rlib" "output/libtest.rlib")) ;; Technically the above already does it - but we want to be clear. (invoke "make" "-C" "tools/minicargo"))) (replace 'install
D
D
Danny Milosavljevic wrote on 8 Nov 2019 03:46
[PATCH v2 2/2] gnu: rust: Bootstrap rust@1.29.0 by mrustc@0.9.
(address . 38110@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20191108024659.10138-3-dannym@scratchpost.org
* gnu/packages/patches/rustc-1.29.0-src.patch: New file.* gnu/local.mk (dist_patch_DATA): Add it.* gnu/packages/rust.scm (rust-1.19): Delete variable.(rust-1.20): Delete variable.(rust-1.21): Delete variable.(rust-1.22): Delete variable.(rust-1.23): Delete variable.(rust-1.24): Delete variable.(rust-1.25): Delete variable.(rust-1.26): Delete variable.(rust-1.27): Delete variable.(rust-1.28): Delete variable.(rust-1.29): Bootstrap from mrustc.[source]: Add patch.(rust-1.30)[inputs]: Remove llvm 3. Add llvm 6.(mrustc): Update rustc-version to 1.29.0.--- gnu/local.mk | 1 + gnu/packages/patches/rustc-1.29.0-src.patch | 86 ++++ gnu/packages/rust.scm | 494 +++++--------------- 3 files changed, 195 insertions(+), 386 deletions(-) create mode 100644 gnu/packages/patches/rustc-1.29.0-src.patch
Toggle diff (758 lines)diff --git a/gnu/local.mk b/gnu/local.mkindex 5f52372875..2c8db401f3 100644--- a/gnu/local.mk+++ b/gnu/local.mk@@ -1320,6 +1320,7 @@ dist_patch_DATA = \ %D%/packages/patches/rust-1.19-mrustc.patch \ %D%/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch \ %D%/packages/patches/rust-bootstrap-stage0-test.patch \+ %D%/packages/patches/rustc-1.29.0-src.patch \ %D%/packages/patches/rust-coresimd-doctest.patch \ %D%/packages/patches/rust-reproducible-builds.patch \ %D%/packages/patches/rxvt-unicode-escape-sequences.patch \diff --git a/gnu/packages/patches/rustc-1.29.0-src.patch b/gnu/packages/patches/rustc-1.29.0-src.patchnew file mode 100644index 0000000000..feeb7e71cf--- /dev/null+++ b/gnu/packages/patches/rustc-1.29.0-src.patch@@ -0,0 +1,86 @@+From mrustc 0.9.+# Add mrustc slice length intrinsics+--- rustc-1.29.0-src/src/libcore/intrinsics.rs++++ rustc-1.29.0-src/src/libcore/intrinsics.rs+@@ -678,5 +678,9 @@+ pub fn min_align_of_val<T: ?Sized>(_: &T) -> usize;+ ++ /// Obtain the length of a slice pointer++ #[cfg(rust_compiler="mrustc")]++ pub fn mrustc_slice_len<T>(pointer: *const [T]) -> usize;+++ /// Gets a static string slice containing the name of a type.+ pub fn type_name<T: ?Sized>() -> &'static str;++--- rustc-1.29.0-src/src/libcore/slice/mod.rs++++ rustc-1.29.0-src/src/libcore/slice/mod.rs+@@ -413,5 +413,7 @@+ pub const fn len(&self) -> usize {+- unsafe {+- Repr { rust: self }.raw.len+- }++ #[cfg(not(rust_compiler="mrustc"))]++ const fn len_inner<T>(s: &[T]) -> usize { unsafe { Repr { rust: s }.raw.len } };++ #[cfg(rust_compiler="mrustc")]++ const fn len_inner<T>(s: &[T]) -> usize { unsafe { ::intrinsics::mrustc_slice_len(s) } }++ len_inner(self)+ }+# Static-link rustc_codegen_llvm because mrustc doesn't have dylib support+--- rustc-1.29.0-src/src/librustc_driver/Cargo.toml++++ rustc-1.29.0-src/src/librustc_driver/Cargo.toml+@@ -39,1 +39,2 @@+ syntax_pos = { path = "../libsyntax_pos" }++rustc_codegen_llvm = { path = "../librustc_codegen_llvm" }+--- rustc-1.29.0-src/src/librustc_driver/lib.rs++++ rustc-1.29.0-src/src/librustc_driver/lib.rs+@@ -63,2 +63,3 @@+ extern crate syntax_pos;++extern crate rustc_codegen_llvm;+ +@@ -296,3 +296,7 @@+ }+ ++ if backend_name == "llvm" {++ return rustc_codegen_llvm::__rustc_codegen_backend;++ }+++ let target = session::config::host_triple();+# No workspace support in minicargo, patch cargo's Cargo.toml+--- rustc-1.29.0-src/src/tools/cargo/Cargo.toml++++ rustc-1.29.0-src/src/tools/cargo/Cargo.toml+@@ -60,5 +60,5 @@+ # A noop dependency that changes in the Rust repository, it's a bit of a hack.+ # See the `src/tools/rustc-workspace-hack/README.md` file in `rust-lang/rust`+ # for more information.+-rustc-workspace-hack = "1.0.0"++rustc-workspace-hack = { path = "../rustc-workspace-hack" }+ +# mrustc can't represent a 24 byte version of this enum (no way of storing the+# tag in padding)+--- rustc-1.29.0-src/src/librustc/ty/context.rs++++ rustc-1.29.0-src/src/librustc/ty/context.rs+@@ -805,5 +805,5 @@+ // Ensure our type representation does not grow+- #[cfg(target_pointer_width = "64")]+- assert!(mem::size_of::<ty::TypeVariants>() <= 24);+- #[cfg(target_pointer_width = "64")]+- assert!(mem::size_of::<ty::TyS>() <= 32);++ //#[cfg(target_pointer_width = "64")]++ //assert!(mem::size_of::<ty::TypeVariants>() <= 24);++ //#[cfg(target_pointer_width = "64")]++ //assert!(mem::size_of::<ty::TyS>() <= 32);++--- rustc-1.29.0-src/src/stdsimd/stdsimd/arch/detect/os/x86.rs++++ rustc-1.29.0-src/src/stdsimd/stdsimd/arch/detect/os/x86.rs+@@ -14,5 +14,11 @@+ /// Performs run-time feature detection.+ #[inline]++#[cfg(not(rust_compiler="mrustc"))]+ pub fn check_for(x: Feature) -> bool {+ cache::test(x as u32, detect_features)+ }++#[inline]++#[cfg(rust_compiler="mrustc")]++pub fn check_for(x: Feature) -> bool {++ false++}diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scmindex 76b1466284..75dc694f24 100644--- a/gnu/packages/rust.scm+++ b/gnu/packages/rust.scm@@ -88,7 +88,7 @@ (package-native-inputs base-rust)))))) (define-public mrustc- (let ((rustc-version "1.19.0"))+ (let ((rustc-version "1.29.0")) (package (name "mrustc") (version "0.9")@@ -109,7 +109,7 @@ `(("bison" ,bison) ("flex" ,flex) ;; Required for the libstd sources.- ("rustc" ,(package-source rust-1.19))))+ ("rustc" ,(package-source rust-1.29)))) (arguments `(#:test-target "local_tests" #:make-flags (list (string-append "LLVM_CONFIG="@@ -133,8 +133,8 @@ ,(or (%current-target-system) (nix-system->gnu-triplet-for-rust))))) (invoke "tar" "xf" (assoc-ref inputs "rustc"))- (chdir "rustc-1.19.0-src")- (invoke "patch" "-p0" "../rustc-1.19.0-src.patch")+ (chdir "rustc-1.29.0-src")+ (invoke "patch" "-p0" "../rustc-1.29.0-src.patch") (chdir "..") #t)) (replace 'configure@@ -178,19 +178,21 @@ safety and thread safety guarantees.") ;; Dual licensed. (license (list license:asl2.0 license:expat))))) -(define rust-1.19+(define rust-1.29 (package (name "rust")- (version "1.19.0")+ (version "1.29.0") (source (origin (method url-fetch)- (uri (rust-uri "1.19.0"))- (sha256 (base32 "0l8c14qsf42rmkqy92ahij4vf356dbyspxcips1aswpvad81y8qm"))+ (uri (rust-uri "1.29.0"))+ (sha256 (base32 "1sb15znckj8pc8q3g7cq03pijnida6cg64yqmgiayxkzskzk9sx4")) (modules '((guix build utils))) (snippet '(begin (delete-file-recursively "src/llvm") #t))- (patches (map search-patch '("rust-1.19-mrustc.patch")))))- (outputs '("out" "cargo"))+ (patches (map search-patch '("rust-1.25-accept-more-detailed-gdb-lines.patch"+ "rust-reproducible-builds.patch"+ "rustc-1.29.0-src.patch")))))+ (outputs '("out" "cargo" "doc")) (properties '((timeout . 72000) ;20 hours (max-silent-time . 18000))) ;5 hours (for armel) (arguments@@ -201,6 +203,7 @@ safety and thread safety guarantees.") (add-after 'unpack 'set-env (lambda* (#:key inputs #:allow-other-keys) ;; Disable test for cross compilation support.+(write "X") (setenv "CFG_DISABLE_CROSS_TESTS" "1") (setenv "SHELL" (which "sh")) (setenv "CONFIG_SHELL" (which "sh"))@@ -208,24 +211,6 @@ safety and thread safety guarantees.") ;; guix llvm-3.9.1 package installs only shared libraries (setenv "LLVM_LINK_SHARED" "1") #t))- (add-after 'unpack 'patch-cargo-tomls- (lambda* (#:key inputs outputs #:allow-other-keys)- (substitute* "src/librustc_errors/Cargo.toml"- (("[[]dependencies[]]") "-[dependencies]-term = \"0.4.4\"-"))- (substitute* "src/librustc/Cargo.toml"- (("[[]dependencies[]]") "-[dependencies]-getopts = { path = \"../libgetopts\" }-"))- (substitute* "src/librustdoc/Cargo.toml"- (("[[]dependencies[]]") "-[dependencies]-test = { path = \"../libtest\" }-"))- #t)) (add-after 'unpack 'patch-tests (lambda* (#:key inputs #:allow-other-keys) (let ((bash (assoc-ref inputs "bash")))@@ -244,27 +229,29 @@ test = { path = \"../libtest\" } #[ignore] fn test_process_mask")) #t)))+ (add-after 'patch-tests 'patch-cargo-index-update+ (lambda* _+ (substitute* "src/tools/cargo/tests/testsuite/generate_lockfile.rs"+ ;; This test wants to update the crate index.+ (("fn no_index_update") "#[ignore]\nfn no_index_update"))+ #t)) (add-after 'patch-tests 'patch-aarch64-test (lambda* _- (substitute* "src/librustc_back/dynamic_lib.rs"+ (substitute* "src/librustc_metadata/dynamic_lib.rs" ;; This test is known to fail on aarch64 and powerpc64le: ;; https://github.com/rust-lang/rust/issues/45410 (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))- #t))- (add-after 'patch-tests 'use-readelf-for-tests- (lambda* _- ;; nm doesn't recognize the file format because of the- ;; nonstandard sections used by the Rust compiler, but readelf- ;; ignores them.- (substitute* "src/test/run-make/atomic-lock-free/Makefile"- (("\tnm ")- "\treadelf -c "))+ ;; This test fails on aarch64 with llvm@6.0:+ ;; https://github.com/rust-lang/rust/issues/49807+ ;; other possible solution:+ ;; https://github.com/rust-lang/rust/pull/47688+ (delete-file "src/test/debuginfo/by-value-self-argument-in-trait-impl.rs") #t)) (add-after 'patch-tests 'remove-unsupported-tests (lambda* _ ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH. ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>- (delete-file-recursively "src/test/run-make/linker-output-non-utf8")+ (delete-file-recursively "src/test/run-make-fulldeps/linker-output-non-utf8") #t)) (add-after 'patch-source-shebangs 'patch-cargo-checksums (lambda* _@@ -284,19 +271,28 @@ test = { path = \"../libtest\" } #t)) ;; This phase is overridden by newer versions. (replace 'configure- (const #t))+ (lambda* (#:key inputs outputs #:allow-other-keys)+ (setenv "CXX" "g++")+ (setenv "HOST_CXX" "g++")+ #t)) ;; This phase is overridden by newer versions. (replace 'build (lambda* (#:key inputs outputs #:allow-other-keys) (let ((rustc-bootstrap (assoc-ref inputs "rustc-bootstrap")))+;(invoke "ls" "src/vendor/getopts")+;(newline) (setenv "CFG_COMPILER_HOST_TRIPLE" ,(nix-system->gnu-triplet (%current-system))) (setenv "CFG_RELEASE" "") (setenv "CFG_RELEASE_CHANNEL" "stable") (setenv "CFG_LIBDIR_RELATIVE" "lib")- (setenv "CFG_VERSION" "1.19.0-stable-mrustc")+ (setenv "CFG_VERSION" "1.29.0-stable-mrustc") ; bad: (setenv "CFG_PREFIX" "mrustc") ; FIXME output path.- (mkdir-p "output")+ ;; Crate::load_extern_crate ignores the search path, so make+ ;; the situation easier for it.+ (copy-recursively (string-append rustc-bootstrap "/lib/mrust")+ "output")+ ;(mkdir-p "output") (invoke (string-append rustc-bootstrap "/tools/bin/minicargo") "src/rustc" "--vendor-dir" "src/vendor" "--output-dir" "output/rustc-build"@@ -311,7 +307,7 @@ test = { path = \"../libtest\" } (invoke (string-append rustc-bootstrap "/tools/bin/minicargo") "src/tools/cargo" "--vendor-dir" "src/vendor" "--output-dir" "output/cargo-build"- "-L" "output/"+ ;"-L" "output/" "-L" (string-append rustc-bootstrap "/lib/mrust") "-j" "1") ;; Now use the newly-built rustc to build the libraries.@@ -396,7 +392,7 @@ test = { path = \"../libtest\" } ("which" ,which))) (inputs `(("jemalloc" ,jemalloc-4.5.0)- ("llvm" ,llvm-3.9.1)+ ("llvm" ,llvm-6) ("openssl" ,openssl-1.0) ("libssh2" ,libssh2) ; For "cargo" ("libcurl" ,curl))) ; For "cargo"@@ -419,10 +415,10 @@ safety and thread safety guarantees.") ;; Dual licensed. (license (list license:asl2.0 license:expat)))) -(define-public rust-1.20+(define-public rust-1.30 (let ((base-rust- (rust-bootstrapped-package rust-1.19 "1.20.0"- "0542y4rnzlsrricai130mqyxl8r6rd991frb4qsnwb27yigqg91a")))+ (rust-bootstrapped-package rust-1.29 "1.30.1"+ "0aavdc1lqv0cjzbqwl5n59yd0bqdlhn0zas61ljf38yrvc18k8rn"))) (package (inherit base-rust) (source@@ -431,20 +427,45 @@ safety and thread safety guarantees.") (snippet '(begin (delete-file-recursively "src/jemalloc") (delete-file-recursively "src/llvm")+ (delete-file-recursively "src/llvm-emscripten")+ (delete-file-recursively "src/tools/clang")+ (delete-file-recursively "src/tools/lldb") #t)) (patches '()))) (outputs '("out" "doc" "cargo"))- ;; Since rust-1.19 is local, it's quite probable that Hydra- ;; will build rust-1.19 only as a dependency of rust-1.20.+ ;; Since rust-2.19 is local, it's quite probable that Hydra+ ;; will build rust-1.29 only as a dependency of rust-1.20. ;; But then Hydra will use the wrong properties, the ones here,- ;; for rust-1.19. Therefore, we copied the properties of- ;; rust-1.19 here.+ ;; for rust-1.29. Therefore, we copied the properties of+ ;; rust-1.29 here. (properties '((timeout . 72000) ;20 hours (max-silent-time . 18000))) ;5 hours (for armel)+ (inputs+ ;; Use LLVM 6.0+ (alist-replace "llvm" (list llvm-6)+ (package-inputs base-rust))) (arguments- (substitute-keyword-arguments (package-arguments rust-1.19)+ (substitute-keyword-arguments (package-arguments rust-1.29) ((#:phases phases) `(modify-phases ,phases+ (add-after 'unpack 'remove-flaky-test+ (lambda _+ ;; See <https://github.com/rust-lang/rust/issues/43402>.+ (when (file-exists? "src/test/run-make/issue-26092")+ (delete-file-recursively "src/test/run-make/issue-26092"))+ #t))+ (add-after 'configure 'enable-codegen-tests+ ;; Codegen tests should pass with llvm 6, so enable them.+ (lambda* _+ (substitute* "config.toml"+ (("codegen-tests = false") ""))+ #t))+ ;; The test has been moved elsewhere.+ (add-after 'patch-tests 'disable-amd64-avx-test+ (lambda _+ (substitute* "src/test/ui/issues/issue-44056.rs"+ (("only-x86_64") "ignore-test"))+ #t)) (add-after 'patch-tests 'patch-cargo-tests (lambda _ (substitute* "src/tools/cargo/tests/build.rs"@@ -466,12 +487,29 @@ safety and thread safety guarantees.") (("fn finds_author_git") "#[ignore]\nfn finds_author_git") (("fn finds_local_author_git") "#[ignore]\nfn finds_local_author_git")) #t))- (add-after 'patch-cargo-tests 'ignore-glibc-2.27-incompatible-test- ;; https://github.com/rust-lang/rust/issues/47863- (lambda _- (substitute* "src/test/run-pass/out-of-stack.rs"- (("// ignore-android") "// ignore-test\n// ignore-android"))- #t))+ (add-after 'patch-cargo-tests 'patch-cargo-env-shebang+ (lambda* (#:key inputs #:allow-other-keys)+ (let ((coreutils (assoc-ref inputs "coreutils")))+ (substitute* "src/tools/cargo/tests/testsuite/fix.rs"+ ;; Cargo has a test which explicitly sets a+ ;; RUSTC_WRAPPER environment variable which points+ ;; to /usr/bin/env. Since it's not a shebang, it+ ;; needs to be manually patched+ (("\"/usr/bin/env\"")+ (string-append "\"" coreutils "/bin/env\"")))+ #t)))+ (add-after 'patch-cargo-env-shebang 'ignore-cargo-package-tests+ (lambda* _+ (substitute* "src/tools/cargo/tests/testsuite/package.rs"+ ;; These tests largely check that cargo outputs warning/error+ ;; messages as expected. It seems that cargo outputs an+ ;; absolute path to something in the store instead of the+ ;; expected relative path (e.g. `[..]`) so we'll ignore+ ;; these for now+ (("fn include") "#[ignore]\nfn include")+ (("fn exclude") "#[ignore]\nfn exclude"))+ #t))+ (replace 'configure (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out"))@@ -523,16 +561,6 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\" "/tmp/cc") (setenv "PATH" (string-append "/tmp:" (getenv "PATH"))) #t))- (add-after 'provide-cc 'configure-archiver- (lambda* (#:key inputs #:allow-other-keys)- (substitute* "src/build_helper/lib.rs"- ;; Make sure "ar" is always used as the archiver.- (("\"musl\"") "\"\"")- ;; Then substitute "ar" by our name.- (("\"ar\"") (string-append "\""- (assoc-ref inputs "binutils")- "/bin/ar\"")))- #t)) (delete 'patch-cargo-tomls) (add-before 'build 'reset-timestamps-after-changes (lambda* _@@ -549,11 +577,14 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\" (invoke "./x.py" "build" "src/tools/cargo"))) (replace 'check (lambda* _- ;; Disable parallel execution to prevent EAGAIN errors when- ;; running tests.- (invoke "./x.py" "-j1" "test" "-vv")- (invoke "./x.py" "-j1" "test" "src/tools/cargo")- #t))+ ;; Enable parallel execution.+ (let ((parallel-job-spec+ (string-append "-j" (number->string+ (min 4+ (parallel-job-count))))))+ (invoke "./x.py" parallel-job-spec "test" "-vv")+ (invoke "./x.py" parallel-job-spec "test"+ "src/tools/cargo")))) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (invoke "./x.py" "install")@@ -591,315 +622,6 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\" `("LIBRARY_PATH" ":" suffix (,(string-append libc "/lib")))) #t)))))))))) -(define-public rust-1.21- (let ((base-rust (rust-bootstrapped-package rust-1.20 "1.21.0"- "1yj8lnxybjrybp00fqhxw8fpr641dh8wcn9mk44xjnsb4i1c21qp")))- (package- (inherit base-rust)- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'configure 'remove-ar- (lambda* (#:key inputs #:allow-other-keys)- ;; Remove because toml complains about "unknown field".- (substitute* "config.toml"- (("^ar =.*") "\n"))- #t)))))))))--(define-public rust-1.22- (let ((base-rust (rust-bootstrapped-package rust-1.21 "1.22.1"- "1lrzzp0nh7s61wgfs2h6ilaqi6iq89f1pd1yaf65l87bssyl4ylb")))- (package- (inherit base-rust)- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'unpack 'remove-flaky-test- (lambda _- ;; See <https://github.com/rust-lang/rust/issues/43402>.- (when (file-exists? "src/test/run-make/issue-26092")- (delete-file-recursively "src/test/run-make/issue-26092"))- #t)))))))))--(define-public rust-1.23- (let ((base-rust (rust-bootstrapped-package rust-1.22 "1.23.0"- "14fb8vhjzsxlbi6yrn1r6fl5dlbdd1m92dn5zj5gmzfwf4w9ar3l")))- (package- (inherit base-rust)- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (delete 'configure-archiver)- (delete 'remove-ar)- (add-after 'unpack 'dont-build-native- (lambda _- ;; XXX: Revisit this when we use gcc 6.- (substitute* "src/binaryen/CMakeLists.txt"- (("ADD_COMPILE_FLAG\\(\\\"-march=native\\\"\\)") ""))- #t)))))))))--(define-public rust-1.24- (let ((base-rust- (rust-bootstrapped-package rust-1.23 "1.24.1"- "1vv10x2h9kq7fxh2v01damdq8pvlp5acyh1kzcda9sfjx12kv99y")))- (package- (inherit base-rust)- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (delete 'use-readelf-for-tests)- (replace 'patch-aarch64-test- (lambda* _- (substitute* "src/librustc_metadata/dynamic_lib.rs"- ;; This test is known to fail on aarch64 and powerpc64le:- ;; https://github.com/rust-lang/rust/issues/45410- (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))- #t)))))))))--;;; Rust 1.25 release support work with llvm 6--but build with llvm 6 is-;;; not determenistic due to <https://github.com/rust-lang/rust/issues/50556>.-;;; 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"- "0baxjr99311lvwdq0s38bipbnj72pn6fgbk6lcq7j555xq53mxpf")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (snippet '(begin- (delete-file-recursively "src/jemalloc")- (delete-file-recursively "src/llvm")- (delete-file-recursively "src/llvm-emscripten")- #t))- (patches (map search-patch- '("rust-1.25-accept-more-detailed-gdb-lines.patch")))))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'patch-cargo-tests 'patch-cargo-index-update- (lambda _- (substitute* "src/tools/cargo/tests/generate-lockfile.rs"- ;; This test wants to update the crate index.- (("fn no_index_update") "#[ignore]\nfn no_index_update"))- #t))- (replace 'patch-aarch64-test- (lambda _- (substitute* "src/librustc_metadata/dynamic_lib.rs"- ;; This test is known to fail on aarch64 and powerpc64le:- ;; https://github.com/rust-lang/rust/issues/45410- (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))- ;; This test fails on aarch64 with llvm@6.0:- ;; https://github.com/rust-lang/rust/issues/49807- ;; other possible solution:- ;; https://github.com/rust-lang/rust/pull/47688- (delete-file "src/test/debuginfo/by-value-self-argument-in-trait-impl.rs")- #t))- (delete 'ignore-glibc-2.27-incompatible-test))))))))--(define-public rust-1.26- (let ((base-rust- (rust-bootstrapped-package rust-1.25 "1.26.2"- "0047ais0fvmqvngqkdsxgrzhb0kljg8wy85b01kbbjc88hqcz7pv")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (patches (map search-patch- '("rust-coresimd-doctest.patch"- "rust-1.25-accept-more-detailed-gdb-lines.patch")))))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- ;; binaryen was replaced with LLD project from LLVM- (delete 'dont-build-native)- (replace 'check- (lambda* _- ;; Enable parallel execution.- (let ((parallel-job-spec- (string-append "-j" (number->string- (min 4- (parallel-job-count))))))- (invoke "./x.py" parallel-job-spec "test" "-vv")- (invoke "./x.py" parallel-job-spec "test"- "src/tools/cargo"))))- (replace 'remove-unsupported-tests- (lambda* _- ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH.- ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>- (delete-file-recursively "src/test/run-make-fulldeps/linker-output-non-utf8")- #t))- (replace 'patch-cargo-tests- (lambda* _- (substitute* "src/tools/cargo/tests/testsuite/build.rs"- (("/usr/bin/env") (which "env"))- ;; Guix llvm is compiled without asmjs-unknown-emscripten.- (("fn wasm32_final_outputs") "#[ignore]\nfn wasm32_final_outputs"))- (substitute* "src/tools/cargo/tests/testsuite/death.rs"- ;; This is stuck when built in container.- (("fn ctrl_c_kills_everyone") "#[ignore]\nfn ctrl_c_kills_everyone"))- ;; Prints test output in the wrong order when built on- ;; i686-linux.- (substitute* "src/tools/cargo/tests/testsuite/test.rs"- (("fn cargo_test_env") "#[ignore]\nfn cargo_test_env"))-- ;; Avoid dependency on "git".- (substitute* "src/tools/cargo/tests/testsuite/new.rs"- (("fn author_prefers_cargo") "#[ignore]\nfn author_prefers_cargo")- (("fn finds_author_git") "#[ignore]\nfn finds_author_git")- (("fn finds_local_author_git") "#[ignore]\nfn finds_local_author_git"))- #t))- (add-after 'patch-cargo-tests 'disable-cargo-test-for-nightly-channel- (lambda* _- ;; This test failed to work on "nightly" channel builds- ;; https://github.com/rust-lang/cargo/issues/5648- (substitute* "src/tools/cargo/tests/testsuite/resolve.rs"- (("fn test_resolving_minimum_version_with_transitive_deps")- "#[ignore]\nfn test_resolving_minimum_version_with_transitive_deps"))- #t))- (replace 'patch-cargo-index-update- (lambda* _- (substitute* "src/tools/cargo/tests/testsuite/generate_lockfile.rs"- ;; This test wants to update the crate index.- (("fn no_index_update") "#[ignore]\nfn no_index_update"))- #t)))))))))--(define-public rust-1.27- (let ((base-rust- (rust-bootstrapped-package rust-1.26 "1.27.2"- "0pg1s37bhx9zqbynxyydq5j6q7kij9vxkcv8maz0m25prm88r0cs")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (patches (map search-patch '("rust-coresimd-doctest.patch"- "rust-bootstrap-stage0-test.patch"- "rust-1.25-accept-more-detailed-gdb-lines.patch"- "rust-reproducible-builds.patch")))))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-before 'install 'mkdir-prefix-paths- (lambda* (#:key outputs #:allow-other-keys)- ;; As result of https://github.com/rust-lang/rust/issues/36989- ;; `prefix' directory should exist before `install' call- (mkdir-p (assoc-ref outputs "out"))- (mkdir-p (assoc-ref outputs "cargo"))- #t))- (add-after 'patch-cargo-tests 'disable-thinlto-test- (lambda* _- ;; thinlto required llvm 6.0 for work- (substitute* "src/tools/cargo/tests/testsuite/path.rs"- (("fn thin_lto_works") "#[ignore]\nfn thin_lto_works"))- #t)))))))))--(define-public rust-1.28- (let ((base-rust- (rust-bootstrapped-package rust-1.27 "1.28.0"- "11k4rn77bca2rikykkk9fmprrgjswd4x4kaq7fia08vgkir82nhx")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (patches (map search-patch '("rust-coresimd-doctest.patch"- "rust-bootstrap-stage0-test.patch"- "rust-1.25-accept-more-detailed-gdb-lines.patch"- "rust-reproducible-builds.patch")))))- (inputs- ;; Use LLVM 6.0- (alist-replace "llvm" (list llvm-6)- (package-inputs base-rust)))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'configure 'enable-codegen-tests- ;; Codegen tests should pass with llvm 6, so enable them.- (lambda* _- (substitute* "config.toml"- (("codegen-tests = false") ""))- #t))- (add-after 'patch-tests 'disable-amd64-avx-test- ;; That test would fail on x86_64 machines without avx.- (lambda* _- (substitute* "src/test/run-pass/issue-44056.rs"- (("only-x86_64") "ignore-test"))- #t))- ;; The thinlto test should pass with llvm 6.- (delete 'disable-thinlto-test))))))))--(define-public rust-1.29- (let ((base-rust- (rust-bootstrapped-package rust-1.28 "1.29.2"- "1jb787080z754caa2w3w1amsygs4qlzj9rs1vy64firfmabfg22h")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (patches (map search-patch '("rust-1.25-accept-more-detailed-gdb-lines.patch"- "rust-reproducible-builds.patch"))))))))--(define-public rust-1.30- (let ((base-rust- (rust-bootstrapped-package rust-1.29 "1.30.1"- "0aavdc1lqv0cjzbqwl5n59yd0bqdlhn0zas61ljf38yrvc18k8rn")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (snippet '(begin- (delete-file-recursively "src/jemalloc")- (delete-file-recursively "src/llvm")- (delete-file-recursively "src/llvm-emscripten")- (delete-file-recursively "src/tools/clang")- (delete-file-recursively "src/tools/lldb")- #t))))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'patch-cargo-tests 'patch-cargo-env-shebang- (lambda* (#:key inputs #:allow-other-keys)- (let ((coreutils (assoc-ref inputs "coreutils")))- (substitute* "src/tools/cargo/tests/testsuite/fix.rs"- ;; Cargo has a test which explicitly sets a- ;; RUSTC_WRAPPER environment variable which points- ;; to /usr/bin/env. Since it's not a shebang, it- ;; needs to be manually patched- (("\"/usr/bin/env\"")- (string-append "\"" coreutils "/bin/env\"")))- #t)))- (add-after 'patch-cargo-env-shebang 'ignore-cargo-package-tests- (lambda* _- (substitute* "src/tools/cargo/tests/testsuite/package.rs"- ;; These tests largely check that cargo outputs warning/error- ;; messages as expected. It seems that cargo outputs an- ;; absolute path to something in the store instead of the- ;; expected relative path (e.g. `[..]`) so we'll ignore- ;; these for now- (("fn include") "#[ignore]\nfn include")- (("fn exclude") "#[ignore]\nfn exclude"))- #t))- ;; The test has been moved elsewhere.- (replace 'disable-amd64-avx-test- (lambda _- (substitute* "src/test/ui/run-pass/issues/issue-44056.rs"- (("only-x86_64") "ignore-test"))- #t)))))))))- (define-public rust-1.31 (let ((base-rust (rust-bootstrapped-package rust-1.30 "1.31.1"@@ -925,10 +647,10 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\" ((" Command::new\\(\"echo\"\\)") (string-append "\nCommand::new(\"" coreutils "/bin/echo\")\n"))) #t)))- ;; The test has been moved elsewhere.- (replace 'disable-amd64-avx-test- (lambda _- (substitute* "src/test/ui/issues/issue-44056.rs"+ ;; The test has been moved elsewhere.+ (replace 'disable-amd64-avx-test+ (lambda _+ (substitute* "src/test/ui/issues/issue-44056.rs" (("only-x86_64") "ignore-test")) #t)) (add-after 'patch-tests 'patch-process-docs-rev-cmd
L
L
Ludovic Courtès wrote on 8 Nov 2019 23:47
Re: [bug#38110] [PATCH v2 1/2] gnu: mrustc: Update to 0.9.
(name . Danny Milosavljevic)(address . dannym@scratchpost.org)(address . 38110@debbugs.gnu.org)
87o8xmc7f7.fsf@gnu.org
Hi!
Danny Milosavljevic <dannym@scratchpost.org> skribis:
Toggle quote (6 lines)> * gnu/packages/patches/mrustc-0.8.0-fix-variable-length-integer-receiving.patch: Delete file.> * gnu/local.mk (dist_patch_DATA): Remove it.> * gnu/packages/rust.scm (mrustc): Update to 0.9.> [source](patches): Remove it.> [arguments]<#:phases>[build-minicargo]: Modify.
LGTM! But note that this cannot go to ‘master’ yet because IceCatdepends on it. So I think we should discuss on guix-devel when andwhere to land these patches; perhaps the next ‘staging’ branch?
Thanks,Ludo’.
L
L
Ludovic Courtès wrote on 8 Nov 2019 23:50
Re: [bug#38110] [PATCH v2 2/2] gnu: rust: Bootstrap rust@1.29.0 by mrustc@0.9.
(name . Danny Milosavljevic)(address . dannym@scratchpost.org)(address . 38110@debbugs.gnu.org)
87d0e2c7ad.fsf@gnu.org
Hi,
Danny Milosavljevic <dannym@scratchpost.org> skribis:
Toggle quote (17 lines)> * gnu/packages/patches/rustc-1.29.0-src.patch: New file.> * gnu/local.mk (dist_patch_DATA): Add it.> * gnu/packages/rust.scm (rust-1.19): Delete variable.> (rust-1.20): Delete variable.> (rust-1.21): Delete variable.> (rust-1.22): Delete variable.> (rust-1.23): Delete variable.> (rust-1.24): Delete variable.> (rust-1.25): Delete variable.> (rust-1.26): Delete variable.> (rust-1.27): Delete variable.> (rust-1.28): Delete variable.> (rust-1.29): Bootstrap from mrustc.> [source]: Add patch.> (rust-1.30)[inputs]: Remove llvm 3. Add llvm 6.> (mrustc): Update rustc-version to 1.29.0.
This is really, really cool! I stumbled uponhttps://lobste.rs/s/utgedg/mrustc_0_9_now_with_rust_1_29_0_supportrecently and felt a relief. :-)
I wonder if there’d be any value in keeping a couple of old versions ofRust. Is that something useful to Rust developers? If not, I’m happyto see them go!
Toggle quote (6 lines)> --- /dev/null> +++ b/gnu/packages/patches/rustc-1.29.0-src.patch> @@ -0,0 +1,86 @@> +From mrustc 0.9.> +# Add mrustc slice length intrinsics
Could you use a more meaningful name (why “-src”?) and add a link to theupstream commit or upstream issue discussing this change?
Apart from that it looks great!
Thanks,Ludo’.
D
D
Danny Milosavljevic wrote on 19 Jan 2020 23:19
Re: [PATCH v2 0/2] Bootstrap rust@1.29.0 directly from mrustc@0.9.
(address . 38110@debbugs.gnu.org)
20200119231917.1c34d2d4@scratchpost.org
This version has a problem.
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCAAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAl4k1eUACgkQ5xo1VCwwuqXjvwf/Y5xHSunHsqIZZ6kIisSSunyfz9rLDfvNRNVFRXNn93BGP5NPTXip9vbnpuX4+LLo7nZOJ+ugUUtcWHHksR4vk3RQnXn5kvrc3cULCBSowt77sDk5P/64ye9RmZo2IfhJ5FmKxT1UyNxtzax6VKm/P16Czn9H9TuhULv25gYljXNqxxb4tsAEbaqhlzynDJ7GYsTqih0xlyRcpkYRqbjk+EBM/Gftxi7K9Usp0yuuMiOG/GRDH/AAi4p30W2p05y58P7lx9I+98xlR5x2KTG2uUU0Bdn9XIidymtfR4tJLfDO/zyRMmqzT6eAdx/LHVNxWF49ws+/PCt2quDH9WXYZA===ZgLM-----END PGP SIGNATURE-----

D
D
Danny Milosavljevic wrote on 21 Jan 2020 01:15
Re: [bug#38110] [PATCH v2 0/2] Bootstrap rust@1.29.0 directly from mrustc@0.9.
(address . 38110@debbugs.gnu.org)
20200121011518.25c65947@scratchpost.org
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCAAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAl4mQpYACgkQ5xo1VCwwuqX8Bwf8C4QGlroCjwoXiGXXGV84oQUHKEVkuvQa8S3H87qgJi5tIfncVSRxQ2GrH5ntvbLcQZYkoEmQ1B2hCUyQEOxkayUUJozAQF1lRRu/A7QL8pJd4wW0jzXOrS2sx/MlJyFsf8vEMQ4PaNnTs4TZL+31fXMuYI+jpYsTeAllSCQlNO8Y+hKbBZVr8H63uSRiqlFwRG657mX9/A178GLwkpUjemtyNTzUULUM1CZAHOxtDbrW97Shte478XjK/rh+72VZfFBiOTclVuWGLl+5ruk8wziyPVSUVkuVAEYj/dApDU0oh+LkE6gl24nX+sB3YtGlqfiSluRqOGfl7oe+ZKS82Q===heau-----END PGP SIGNATURE-----

M
M
Marius Bakke wrote on 15 Mar 2020 15:20
Re: [bug#38110] [PATCH v2 2/2] gnu: rust: Bootstrap rust@1.29.0 by mrustc@0.9.
(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
87pnddlmxo.fsf@devup.no
Hello Danny,
Danny Milosavljevic <dannym@scratchpost.org> writes:
Toggle quote (17 lines)> * gnu/packages/patches/rustc-1.29.0-src.patch: New file.> * gnu/local.mk (dist_patch_DATA): Add it.> * gnu/packages/rust.scm (rust-1.19): Delete variable.> (rust-1.20): Delete variable.> (rust-1.21): Delete variable.> (rust-1.22): Delete variable.> (rust-1.23): Delete variable.> (rust-1.24): Delete variable.> (rust-1.25): Delete variable.> (rust-1.26): Delete variable.> (rust-1.27): Delete variable.> (rust-1.28): Delete variable.> (rust-1.29): Bootstrap from mrustc.> [source]: Add patch.> (rust-1.30)[inputs]: Remove llvm 3. Add llvm 6.> (mrustc): Update rustc-version to 1.29.0.
I know there was a problem with this patch, but can you rebase it on thecurrent 'core-updates' branch?
I'd rather try to fix this thanhttps://issues.guix.gnu.org/issue/39949, but the patch does not applyany longer.
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCgAdFiEEu7At3yzq9qgNHeZDoqBt8qM6VPoFAl5uOaMACgkQoqBt8qM6VPo4SQf/Um4aHWMlw5lJhvcCqJvcubyg4G1tDtTmiaZQG0yikEN0qjjUv4jblz3kyYoajlWXuU2hOUzMTGbeI3H6hrmsWHH0fwkCfJrw5H2kJT8d2AA9TwyeCffUn7wfkmRw9+excmto4dCTA5x8tKewmCPbPWrlScnATNzlbAfE3bftm3LPIYrNgnlrepkkFJ0GT/2HxYz0iaPFIjbGzXlZJg61+wOqIgRgqQv1H2ll0KMaEK0N0Qtgp0KnOsfrzyqpKlCV4qx0otBc49umlbyOB6fnYe0IDpKsXuL9yeH7JwzKON9NUPIW/BusQ4xiPgXz6SxZcz/fZBLM/ZNWsaCbXY+0WQ===q9p6-----END PGP SIGNATURE-----
D
D
Danny Milosavljevic wrote on 15 Mar 2020 20:23
[PATCH core-updates v3] gnu: rust: Bootstrap rust@1.29.0 by mrustc@0.9.
(address . 38110@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20200315192311.6505-1-dannym@scratchpost.org
* gnu/packages/patches/rustc-1.29.0-src.patch: New file.* gnu/local.mk (dist_patch_DATA): Add it.* gnu/packages/rust.scm (rust-1.19): Delete variable.(rust-1.20): Delete variable.(rust-1.21): Delete variable.(rust-1.22): Delete variable.(rust-1.23): Delete variable.(rust-1.24): Delete variable.(rust-1.25): Delete variable.(rust-1.26): Delete variable.(rust-1.27): Delete variable.(rust-1.28): Delete variable.(rust-1.29): Bootstrap from mrustc.[source]: Add patch.(rust-1.30)[inputs]: Remove llvm 3. Add llvm 6.(mrustc): Update rustc-version to 1.29.0.--- gnu/local.mk | 1 + gnu/packages/patches/rustc-1.29.0-src.patch | 86 ++++ gnu/packages/rust.scm | 494 +++++--------------- 3 files changed, 192 insertions(+), 389 deletions(-) create mode 100644 gnu/packages/patches/rustc-1.29.0-src.patch
Toggle diff (750 lines)diff --git a/gnu/local.mk b/gnu/local.mkindex 21a149c469..e39974b0a0 100644--- a/gnu/local.mk+++ b/gnu/local.mk@@ -1392,6 +1392,7 @@ dist_patch_DATA = \ %D%/packages/patches/rust-1.19-mrustc.patch \ %D%/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch \ %D%/packages/patches/rust-bootstrap-stage0-test.patch \+ %D%/packages/patches/rustc-1.29.0-src.patch \ %D%/packages/patches/rust-coresimd-doctest.patch \ %D%/packages/patches/rust-reproducible-builds.patch \ %D%/packages/patches/rust-openssl-sys-no-vendor.patch \diff --git a/gnu/packages/patches/rustc-1.29.0-src.patch b/gnu/packages/patches/rustc-1.29.0-src.patchnew file mode 100644index 0000000000..feeb7e71cf--- /dev/null+++ b/gnu/packages/patches/rustc-1.29.0-src.patch@@ -0,0 +1,86 @@+From mrustc 0.9.+# Add mrustc slice length intrinsics+--- rustc-1.29.0-src/src/libcore/intrinsics.rs++++ rustc-1.29.0-src/src/libcore/intrinsics.rs+@@ -678,5 +678,9 @@+ pub fn min_align_of_val<T: ?Sized>(_: &T) -> usize;+ ++ /// Obtain the length of a slice pointer++ #[cfg(rust_compiler="mrustc")]++ pub fn mrustc_slice_len<T>(pointer: *const [T]) -> usize;+++ /// Gets a static string slice containing the name of a type.+ pub fn type_name<T: ?Sized>() -> &'static str;++--- rustc-1.29.0-src/src/libcore/slice/mod.rs++++ rustc-1.29.0-src/src/libcore/slice/mod.rs+@@ -413,5 +413,7 @@+ pub const fn len(&self) -> usize {+- unsafe {+- Repr { rust: self }.raw.len+- }++ #[cfg(not(rust_compiler="mrustc"))]++ const fn len_inner<T>(s: &[T]) -> usize { unsafe { Repr { rust: s }.raw.len } };++ #[cfg(rust_compiler="mrustc")]++ const fn len_inner<T>(s: &[T]) -> usize { unsafe { ::intrinsics::mrustc_slice_len(s) } }++ len_inner(self)+ }+# Static-link rustc_codegen_llvm because mrustc doesn't have dylib support+--- rustc-1.29.0-src/src/librustc_driver/Cargo.toml++++ rustc-1.29.0-src/src/librustc_driver/Cargo.toml+@@ -39,1 +39,2 @@+ syntax_pos = { path = "../libsyntax_pos" }++rustc_codegen_llvm = { path = "../librustc_codegen_llvm" }+--- rustc-1.29.0-src/src/librustc_driver/lib.rs++++ rustc-1.29.0-src/src/librustc_driver/lib.rs+@@ -63,2 +63,3 @@+ extern crate syntax_pos;++extern crate rustc_codegen_llvm;+ +@@ -296,3 +296,7 @@+ }+ ++ if backend_name == "llvm" {++ return rustc_codegen_llvm::__rustc_codegen_backend;++ }+++ let target = session::config::host_triple();+# No workspace support in minicargo, patch cargo's Cargo.toml+--- rustc-1.29.0-src/src/tools/cargo/Cargo.toml++++ rustc-1.29.0-src/src/tools/cargo/Cargo.toml+@@ -60,5 +60,5 @@+ # A noop dependency that changes in the Rust repository, it's a bit of a hack.+ # See the `src/tools/rustc-workspace-hack/README.md` file in `rust-lang/rust`+ # for more information.+-rustc-workspace-hack = "1.0.0"++rustc-workspace-hack = { path = "../rustc-workspace-hack" }+ +# mrustc can't represent a 24 byte version of this enum (no way of storing the+# tag in padding)+--- rustc-1.29.0-src/src/librustc/ty/context.rs++++ rustc-1.29.0-src/src/librustc/ty/context.rs+@@ -805,5 +805,5 @@+ // Ensure our type representation does not grow+- #[cfg(target_pointer_width = "64")]+- assert!(mem::size_of::<ty::TypeVariants>() <= 24);+- #[cfg(target_pointer_width = "64")]+- assert!(mem::size_of::<ty::TyS>() <= 32);++ //#[cfg(target_pointer_width = "64")]++ //assert!(mem::size_of::<ty::TypeVariants>() <= 24);++ //#[cfg(target_pointer_width = "64")]++ //assert!(mem::size_of::<ty::TyS>() <= 32);++--- rustc-1.29.0-src/src/stdsimd/stdsimd/arch/detect/os/x86.rs++++ rustc-1.29.0-src/src/stdsimd/stdsimd/arch/detect/os/x86.rs+@@ -14,5 +14,11 @@+ /// Performs run-time feature detection.+ #[inline]++#[cfg(not(rust_compiler="mrustc"))]+ pub fn check_for(x: Feature) -> bool {+ cache::test(x as u32, detect_features)+ }++#[inline]++#[cfg(rust_compiler="mrustc")]++pub fn check_for(x: Feature) -> bool {++ false++}diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scmindex 76afdefabe..f949d0e254 100644--- a/gnu/packages/rust.scm+++ b/gnu/packages/rust.scm@@ -88,7 +88,7 @@ (package-native-inputs base-rust)))))) (define-public mrustc- (let ((rustc-version "1.19.0"))+ (let ((rustc-version "1.29.0")) (package (name "mrustc") (version "0.9")@@ -109,7 +109,7 @@ `(("bison" ,bison) ("flex" ,flex) ;; Required for the libstd sources.- ("rustc" ,(package-source rust-1.19))))+ ("rustc" ,(package-source rust-1.29)))) (arguments `(#:test-target "test" #:make-flags@@ -189,19 +189,21 @@ safety and thread safety guarantees.") ;; Dual licensed. (license (list license:asl2.0 license:expat))))) -(define rust-1.19+(define rust-1.29 (package (name "rust")- (version "1.19.0")+ (version "1.29.0") (source (origin (method url-fetch)- (uri (rust-uri "1.19.0"))- (sha256 (base32 "0l8c14qsf42rmkqy92ahij4vf356dbyspxcips1aswpvad81y8qm"))+ (uri (rust-uri "1.29.0"))+ (sha256 (base32 "1sb15znckj8pc8q3g7cq03pijnida6cg64yqmgiayxkzskzk9sx4")) (modules '((guix build utils))) (snippet '(begin (delete-file-recursively "src/llvm") #t))- (patches (map search-patch '("rust-1.19-mrustc.patch")))))- (outputs '("out" "cargo"))+ (patches (map search-patch '("rust-1.25-accept-more-detailed-gdb-lines.patch"+ "rust-reproducible-builds.patch"+ "rustc-1.29.0-src.patch")))))+ (outputs '("out" "cargo" "doc")) (properties '((timeout . 72000) ;20 hours (max-silent-time . 18000))) ;5 hours (for armel) (arguments@@ -212,6 +214,7 @@ safety and thread safety guarantees.") (add-after 'unpack 'set-env (lambda* (#:key inputs #:allow-other-keys) ;; Disable test for cross compilation support.+(write "X") (setenv "CFG_DISABLE_CROSS_TESTS" "1") (setenv "SHELL" (which "sh")) (setenv "CONFIG_SHELL" (which "sh"))@@ -219,24 +222,6 @@ safety and thread safety guarantees.") ;; guix llvm-3.9.1 package installs only shared libraries (setenv "LLVM_LINK_SHARED" "1") #t))- (add-after 'unpack 'patch-cargo-tomls- (lambda* (#:key inputs outputs #:allow-other-keys)- (substitute* "src/librustc_errors/Cargo.toml"- (("[[]dependencies[]]") "-[dependencies]-term = \"0.4.4\"-"))- (substitute* "src/librustc/Cargo.toml"- (("[[]dependencies[]]") "-[dependencies]-getopts = { path = \"../libgetopts\" }-"))- (substitute* "src/librustdoc/Cargo.toml"- (("[[]dependencies[]]") "-[dependencies]-test = { path = \"../libtest\" }-"))- #t)) (add-after 'unpack 'patch-tests (lambda* (#:key inputs #:allow-other-keys) (let ((bash (assoc-ref inputs "bash")))@@ -255,27 +240,29 @@ test = { path = \"../libtest\" } #[ignore] fn test_process_mask")) #t)))+ (add-after 'patch-tests 'patch-cargo-index-update+ (lambda* _+ (substitute* "src/tools/cargo/tests/testsuite/generate_lockfile.rs"+ ;; This test wants to update the crate index.+ (("fn no_index_update") "#[ignore]\nfn no_index_update"))+ #t)) (add-after 'patch-tests 'patch-aarch64-test (lambda* _- (substitute* "src/librustc_back/dynamic_lib.rs"+ (substitute* "src/librustc_metadata/dynamic_lib.rs" ;; This test is known to fail on aarch64 and powerpc64le: ;; https://github.com/rust-lang/rust/issues/45410 (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))- #t))- (add-after 'patch-tests 'use-readelf-for-tests- (lambda* _- ;; nm doesn't recognize the file format because of the- ;; nonstandard sections used by the Rust compiler, but readelf- ;; ignores them.- (substitute* "src/test/run-make/atomic-lock-free/Makefile"- (("\tnm ")- "\treadelf -c "))+ ;; This test fails on aarch64 with llvm@6.0:+ ;; https://github.com/rust-lang/rust/issues/49807+ ;; other possible solution:+ ;; https://github.com/rust-lang/rust/pull/47688+ (delete-file "src/test/debuginfo/by-value-self-argument-in-trait-impl.rs") #t)) (add-after 'patch-tests 'remove-unsupported-tests (lambda* _ ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH. ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>- (delete-file-recursively "src/test/run-make/linker-output-non-utf8")+ (delete-file-recursively "src/test/run-make-fulldeps/linker-output-non-utf8") #t)) (add-after 'patch-source-shebangs 'patch-cargo-checksums (lambda* _@@ -287,7 +274,10 @@ test = { path = \"../libtest\" } #t)) ;; This phase is overridden by newer versions. (replace 'configure- (const #t))+ (lambda* (#:key inputs outputs #:allow-other-keys)+ (setenv "CXX" "g++")+ (setenv "HOST_CXX" "g++")+ #t)) ;; This phase is overridden by newer versions. (replace 'build (lambda* (#:key inputs outputs #:allow-other-keys)@@ -297,10 +287,15 @@ test = { path = \"../libtest\" } (setenv "CFG_RELEASE" "") (setenv "CFG_RELEASE_CHANNEL" "stable") (setenv "CFG_LIBDIR_RELATIVE" "lib")- (setenv "CFG_VERSION" "1.19.0-stable-mrustc")+ (setenv "CFG_VERSION" "1.29.0-stable-mrustc") (setenv "MRUSTC_TARGET_VER" ,(version-major+minor version)) ; bad: (setenv "CFG_PREFIX" "mrustc") ; FIXME output path.- (mkdir-p "output")+ ;; Crate::load_extern_crate ignores the search path, so make+ ;; the situation easier for it.+ (copy-recursively (string-append rustc-bootstrap "/lib/mrust")+ "output")+ ;(mkdir-p "output")+ ;; mrustc 0.9 doesn't check the search paths for crates anymore. (copy-recursively (string-append rustc-bootstrap "/lib/mrust") "output")@@ -318,7 +313,7 @@ test = { path = \"../libtest\" } (invoke (string-append rustc-bootstrap "/tools/bin/minicargo") "src/tools/cargo" "--vendor-dir" "src/vendor" "--output-dir" "output/cargo-build"- "-L" "output/"+ ;"-L" "output/" "-L" (string-append rustc-bootstrap "/lib/mrust") "-j" "1") ;; Now use the newly-built rustc to build the libraries.@@ -403,7 +398,7 @@ test = { path = \"../libtest\" } ("which" ,which))) (inputs `(("jemalloc" ,jemalloc-4.5.0)- ("llvm" ,llvm-3.9.1)+ ("llvm" ,llvm-6) ("openssl" ,openssl-1.0) ("libssh2" ,libssh2) ; For "cargo" ("libcurl" ,curl))) ; For "cargo"@@ -429,10 +424,10 @@ safety and thread safety guarantees.") ;; Dual licensed. (license (list license:asl2.0 license:expat)))) -(define-public rust-1.20+(define-public rust-1.30 (let ((base-rust- (rust-bootstrapped-package rust-1.19 "1.20.0"- "0542y4rnzlsrricai130mqyxl8r6rd991frb4qsnwb27yigqg91a")))+ (rust-bootstrapped-package rust-1.29 "1.30.1"+ "0aavdc1lqv0cjzbqwl5n59yd0bqdlhn0zas61ljf38yrvc18k8rn"))) (package (inherit base-rust) (source@@ -441,20 +436,45 @@ safety and thread safety guarantees.") (snippet '(begin (delete-file-recursively "src/jemalloc") (delete-file-recursively "src/llvm")+ (delete-file-recursively "src/llvm-emscripten")+ (delete-file-recursively "src/tools/clang")+ (delete-file-recursively "src/tools/lldb") #t)) (patches '()))) (outputs '("out" "doc" "cargo"))- ;; Since rust-1.19 is local, it's quite probable that Hydra- ;; will build rust-1.19 only as a dependency of rust-1.20.+ ;; Since rust-2.19 is local, it's quite probable that Hydra+ ;; will build rust-1.29 only as a dependency of rust-1.20. ;; But then Hydra will use the wrong properties, the ones here,- ;; for rust-1.19. Therefore, we copied the properties of- ;; rust-1.19 here.+ ;; for rust-1.29. Therefore, we copied the properties of+ ;; rust-1.29 here. (properties '((timeout . 72000) ;20 hours (max-silent-time . 18000))) ;5 hours (for armel)+ (inputs+ ;; Use LLVM 6.0+ (alist-replace "llvm" (list llvm-6)+ (package-inputs base-rust))) (arguments- (substitute-keyword-arguments (package-arguments rust-1.19)+ (substitute-keyword-arguments (package-arguments rust-1.29) ((#:phases phases) `(modify-phases ,phases+ (add-after 'unpack 'remove-flaky-test+ (lambda _+ ;; See <https://github.com/rust-lang/rust/issues/43402>.+ (when (file-exists? "src/test/run-make/issue-26092")+ (delete-file-recursively "src/test/run-make/issue-26092"))+ #t))+ (add-after 'configure 'enable-codegen-tests+ ;; Codegen tests should pass with llvm 6, so enable them.+ (lambda* _+ (substitute* "config.toml"+ (("codegen-tests = false") ""))+ #t))+ ;; The test has been moved elsewhere.+ (add-after 'patch-tests 'disable-amd64-avx-test+ (lambda _+ (substitute* "src/test/ui/issues/issue-44056.rs"+ (("only-x86_64") "ignore-test"))+ #t)) (add-after 'patch-tests 'patch-cargo-tests (lambda _ (substitute* "src/tools/cargo/tests/build.rs"@@ -476,12 +496,29 @@ safety and thread safety guarantees.") (("fn finds_author_git") "#[ignore]\nfn finds_author_git") (("fn finds_local_author_git") "#[ignore]\nfn finds_local_author_git")) #t))- (add-after 'patch-cargo-tests 'ignore-glibc-2.27-incompatible-test- ;; https://github.com/rust-lang/rust/issues/47863- (lambda _- (substitute* "src/test/run-pass/out-of-stack.rs"- (("// ignore-android") "// ignore-test\n// ignore-android"))- #t))+ (add-after 'patch-cargo-tests 'patch-cargo-env-shebang+ (lambda* (#:key inputs #:allow-other-keys)+ (let ((coreutils (assoc-ref inputs "coreutils")))+ (substitute* "src/tools/cargo/tests/testsuite/fix.rs"+ ;; Cargo has a test which explicitly sets a+ ;; RUSTC_WRAPPER environment variable which points+ ;; to /usr/bin/env. Since it's not a shebang, it+ ;; needs to be manually patched+ (("\"/usr/bin/env\"")+ (string-append "\"" coreutils "/bin/env\"")))+ #t)))+ (add-after 'patch-cargo-env-shebang 'ignore-cargo-package-tests+ (lambda* _+ (substitute* "src/tools/cargo/tests/testsuite/package.rs"+ ;; These tests largely check that cargo outputs warning/error+ ;; messages as expected. It seems that cargo outputs an+ ;; absolute path to something in the store instead of the+ ;; expected relative path (e.g. `[..]`) so we'll ignore+ ;; these for now+ (("fn include") "#[ignore]\nfn include")+ (("fn exclude") "#[ignore]\nfn exclude"))+ #t))+ (replace 'configure (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out"))@@ -533,16 +570,6 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\" "/tmp/cc") (setenv "PATH" (string-append "/tmp:" (getenv "PATH"))) #t))- (add-after 'provide-cc 'configure-archiver- (lambda* (#:key inputs #:allow-other-keys)- (substitute* "src/build_helper/lib.rs"- ;; Make sure "ar" is always used as the archiver.- (("\"musl\"") "\"\"")- ;; Then substitute "ar" by our name.- (("\"ar\"") (string-append "\""- (assoc-ref inputs "binutils")- "/bin/ar\"")))- #t)) (delete 'patch-cargo-tomls) (add-before 'build 'reset-timestamps-after-changes (lambda* _@@ -559,11 +586,14 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\" (invoke "./x.py" "build" "src/tools/cargo"))) (replace 'check (lambda* _- ;; Disable parallel execution to prevent EAGAIN errors when- ;; running tests.- (invoke "./x.py" "-j1" "test" "-vv")- (invoke "./x.py" "-j1" "test" "src/tools/cargo")- #t))+ ;; Enable parallel execution.+ (let ((parallel-job-spec+ (string-append "-j" (number->string+ (min 4+ (parallel-job-count))))))+ (invoke "./x.py" parallel-job-spec "test" "-vv")+ (invoke "./x.py" parallel-job-spec "test"+ "src/tools/cargo")))) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (invoke "./x.py" "install")@@ -601,320 +631,6 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\" `("LIBRARY_PATH" ":" suffix (,(string-append libc "/lib")))) #t)))))))))) -(define-public rust-1.21- (let ((base-rust (rust-bootstrapped-package rust-1.20 "1.21.0"- "1yj8lnxybjrybp00fqhxw8fpr641dh8wcn9mk44xjnsb4i1c21qp")))- (package- (inherit base-rust)- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'configure 'remove-ar- (lambda* (#:key inputs #:allow-other-keys)- ;; Remove because toml complains about "unknown field".- (substitute* "config.toml"- (("^ar =.*") "\n"))- #t)))))))))--(define-public rust-1.22- (let ((base-rust (rust-bootstrapped-package rust-1.21 "1.22.1"- "1lrzzp0nh7s61wgfs2h6ilaqi6iq89f1pd1yaf65l87bssyl4ylb")))- (package- (inherit base-rust)- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'unpack 'remove-flaky-test- (lambda _- ;; See <https://github.com/rust-lang/rust/issues/43402>.- (when (file-exists? "src/test/run-make/issue-26092")- (delete-file-recursively "src/test/run-make/issue-26092"))- #t)))))))))--(define-public rust-1.23- (let ((base-rust (rust-bootstrapped-package rust-1.22 "1.23.0"- "14fb8vhjzsxlbi6yrn1r6fl5dlbdd1m92dn5zj5gmzfwf4w9ar3l")))- (package- (inherit base-rust)- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (delete 'configure-archiver)- (delete 'remove-ar)- (add-after 'unpack 'dont-build-native- (lambda _- ;; XXX: Revisit this when we use gcc 6.- (substitute* "src/binaryen/CMakeLists.txt"- (("ADD_COMPILE_FLAG\\(\\\"-march=native\\\"\\)") ""))- #t)))))))))--(define-public rust-1.24- (let ((base-rust- (rust-bootstrapped-package rust-1.23 "1.24.1"- "1vv10x2h9kq7fxh2v01damdq8pvlp5acyh1kzcda9sfjx12kv99y")))- (package- (inherit base-rust)- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (delete 'use-readelf-for-tests)- (replace 'patch-aarch64-test- (lambda* _- (substitute* "src/librustc_metadata/dynamic_lib.rs"- ;; This test is known to fail on aarch64 and powerpc64le:- ;; https://github.com/rust-lang/rust/issues/45410- (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))- #t)))))))))--;;; Rust 1.25 release support work with llvm 6--but build with llvm 6 is-;;; not determenistic due to <https://github.com/rust-lang/rust/issues/50556>.-;;; 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"- "0baxjr99311lvwdq0s38bipbnj72pn6fgbk6lcq7j555xq53mxpf")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (snippet '(begin- (delete-file-recursively "src/jemalloc")- (delete-file-recursively "src/llvm")- (delete-file-recursively "src/llvm-emscripten")- #t))- (patches (map search-patch- '("rust-1.25-accept-more-detailed-gdb-lines.patch")))))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'patch-cargo-tests 'patch-cargo-index-update- (lambda _- (substitute* "src/tools/cargo/tests/generate-lockfile.rs"- ;; This test wants to update the crate index.- (("fn no_index_update") "#[ignore]\nfn no_index_update"))- #t))- (replace 'patch-aarch64-test- (lambda _- (substitute* "src/librustc_metadata/dynamic_lib.rs"- ;; This test is known to fail on aarch64 and powerpc64le:- ;; https://github.com/rust-lang/rust/issues/45410- (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))- ;; This test fails on aarch64 with llvm@6.0:- ;; https://github.com/rust-lang/rust/issues/49807- ;; other possible solution:- ;; https://github.com/rust-lang/rust/pull/47688- (delete-file "src/test/debuginfo/by-value-self-argument-in-trait-impl.rs")- #t))- (delete 'ignore-glibc-2.27-incompatible-test))))))))--(define-public rust-1.26- (let ((base-rust- (rust-bootstrapped-package rust-1.25 "1.26.2"- "0047ais0fvmqvngqkdsxgrzhb0kljg8wy85b01kbbjc88hqcz7pv")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (patches (map search-patch- '("rust-coresimd-doctest.patch"- "rust-1.25-accept-more-detailed-gdb-lines.patch")))))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- ;; binaryen was replaced with LLD project from LLVM- (delete 'dont-build-native)- (replace 'check- (lambda* _- ;; Enable parallel execution.- (let ((parallel-job-spec- (string-append "-j" (number->string- (min 4- (parallel-job-count))))))- (invoke "./x.py" parallel-job-spec "test" "-vv")- (invoke "./x.py" parallel-job-spec "test"- "src/tools/cargo"))))- (replace 'remove-unsupported-tests- (lambda* _- ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH.- ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>- (delete-file-recursively "src/test/run-make-fulldeps/linker-output-non-utf8")- #t))- (replace 'patch-cargo-tests- (lambda* _- (substitute* "src/tools/cargo/tests/testsuite/build.rs"- (("/usr/bin/env") (which "env"))- ;; Guix llvm is compiled without asmjs-unknown-emscripten.- (("fn wasm32_final_outputs") "#[ignore]\nfn wasm32_final_outputs"))- (substitute* "src/tools/cargo/tests/testsuite/death.rs"- ;; This is stuck when built in container.- (("fn ctrl_c_kills_everyone") "#[ignore]\nfn ctrl_c_kills_everyone"))- ;; Prints test output in the wrong order when built on- ;; i686-linux.- (substitute* "src/tools/cargo/tests/testsuite/test.rs"- (("fn cargo_test_env") "#[ignore]\nfn cargo_test_env"))-- ;; Avoid dependency on "git".- (substitute* "src/tools/cargo/tests/testsuite/new.rs"- (("fn author_prefers_cargo") "#[ignore]\nfn author_prefers_cargo")- (("fn finds_author_git") "#[ignore]\nfn finds_author_git")- (("fn finds_local_author_git") "#[ignore]\nfn finds_local_author_git"))- #t))- (add-after 'patch-cargo-tests 'disable-cargo-test-for-nightly-channel- (lambda* _- ;; This test failed to work on "nightly" channel builds- ;; https://github.com/rust-lang/cargo/issues/5648- (substitute* "src/tools/cargo/tests/testsuite/resolve.rs"- (("fn test_resolving_minimum_version_with_transitive_deps")- "#[ignore]\nfn test_resolving_minimum_version_with_transitive_deps"))- #t))- (replace 'patch-cargo-index-update- (lambda* _- (substitute* "src/tools/cargo/tests/testsuite/generate_lockfile.rs"- ;; This test wants to update the crate index.- (("fn no_index_update") "#[ignore]\nfn no_index_update"))- #t)))))))))--(define-public rust-1.27- (let ((base-rust- (rust-bootstrapped-package rust-1.26 "1.27.2"- "0pg1s37bhx9zqbynxyydq5j6q7kij9vxkcv8maz0m25prm88r0cs")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (patches (map search-patch '("rust-coresimd-doctest.patch"- "rust-bootstrap-stage0-test.patch"- "rust-1.25-accept-more-detailed-gdb-lines.patch"- "rust-reproducible-builds.patch")))))- (native-inputs- ;; FIXME: Rust 1.27 and some later versions require GDB 8.2 specifically.- ;; See <https://bugs.gnu.org/37810>.- (alist-replace "gdb" (list gdb-8.2)- (package-native-inputs base-rust)))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-before 'install 'mkdir-prefix-paths- (lambda* (#:key outputs #:allow-other-keys)- ;; As result of https://github.com/rust-lang/rust/issues/36989- ;; `prefix' directory should exist before `install' call- (mkdir-p (assoc-ref outputs "out"))- (mkdir-p (assoc-ref outputs "cargo"))- #t))- (add-after 'patch-cargo-tests 'disable-thinlto-test- (lambda* _- ;; thinlto required llvm 6.0 for work- (substitute* "src/tools/cargo/tests/testsuite/path.rs"- (("fn thin_lto_works") "#[ignore]\nfn thin_lto_works"))- #t)))))))))--(define-public rust-1.28- (let ((base-rust- (rust-bootstrapped-package rust-1.27 "1.28.0"- "11k4rn77bca2rikykkk9fmprrgjswd4x4kaq7fia08vgkir82nhx")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (patches (map search-patch '("rust-coresimd-doctest.patch"- "rust-bootstrap-stage0-test.patch"- "rust-1.25-accept-more-detailed-gdb-lines.patch"- "rust-reproducible-builds.patch")))))- (inputs- ;; Use LLVM 6.0- (alist-replace "llvm" (list llvm-6)- (package-inputs base-rust)))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'configure 'enable-codegen-tests- ;; Codegen tests should pass with llvm 6, so enable them.- (lambda* _- (substitute* "config.toml"- (("codegen-tests = false") ""))- #t))- (add-after 'patch-tests 'disable-amd64-avx-test- ;; That test would fail on x86_64 machines without avx.- (lambda* _- (substitute* "src/test/run-pass/issue-44056.rs"- (("only-x86_64") "ignore-test"))- #t))- ;; The thinlto test should pass with llvm 6.- (delete 'disable-thinlto-test))))))))--(define-public rust-1.29- (let ((base-rust- (rust-bootstrapped-package rust-1.28 "1.29.2"- "1jb787080z754caa2w3w1amsygs4qlzj9rs1vy64firfmabfg22h")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (patches (map search-patch '("rust-1.25-accept-more-detailed-gdb-lines.patch"- "rust-reproducible-builds.patch"))))))))--(define-public rust-1.30- (let ((base-rust- (rust-bootstrapped-package rust-1.29 "1.30.1"- "0aavdc1lqv0cjzbqwl5n59yd0bqdlhn0zas61ljf38yrvc18k8rn")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (snippet '(begin- (delete-file-recursively "src/jemalloc")- (delete-file-recursively "src/llvm")- (delete-file-recursively "src/llvm-emscripten")- (delete-file-recursively "src/tools/clang")- (delete-file-recursively "src/tools/lldb")- #t))))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'patch-cargo-tests 'patch-cargo-env-shebang- (lambda* (#:key inputs #:allow-other-keys)- (let ((coreutils (assoc-ref inputs "coreutils")))- (substitute* "src/tools/cargo/tests/testsuite/fix.rs"- ;; Cargo has a test which explicitly sets a- ;; RUSTC_WRAPPER environment variable which points- ;; to /usr/bin/env. Since it's not a shebang, it- ;; needs to be manually patched- (("\"/usr/bin/env\"")- (string-append "\"" coreutils "/bin/env\"")))- #t)))- (add-after 'patch-cargo-env-shebang 'ignore-cargo-package-tests- (lambda* _- (substitute* "src/tools/cargo/tests/testsuite/package.rs"- ;; These tests largely check that cargo outputs warning/error- ;; messages as expected. It seems that cargo outputs an- ;; absolute path to something in the store instead of the- ;; expected relative path (e.g. `[..]`) so we'll ignore- ;; these for now- (("fn include") "#[ignore]\nfn include")- (("fn exclude") "#[ignore]\nfn exclude"))- #t))- ;; The test has been moved elsewhere.- (replace 'disable-amd64-avx-test- (lambda _- (substitute* "src/test/ui/run-pass/issues/issue-44056.rs"- (("only-x86_64") "ignore-test"))- #t)))))))))- (define-public rust-1.31 (let ((base-rust (rust-bootstrapped-package rust-1.30 "1.31.1"@@ -940,10 +656,10 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\" ((" Command::new\\(\"echo\"\\)") (string-append "\nCommand::new(\"" coreutils "/bin/echo\")\n"))) #t)))- ;; The test has been moved elsewhere.- (replace 'disable-amd64-avx-test- (lambda _- (substitute* "src/test/ui/issues/issue-44056.rs"+ ;; The test has been moved elsewhere.+ (replace 'disable-amd64-avx-test+ (lambda _+ (substitute* "src/test/ui/issues/issue-44056.rs" (("only-x86_64") "ignore-test")) #t)) (add-after 'patch-tests 'patch-process-docs-rev-cmd
D
D
Danny Milosavljevic wrote on 15 Mar 2020 20:23
Re: [bug#38110] [PATCH v2 2/2] gnu: rust: Bootstrap rust@1.29.0 by mrustc@0.9.
(name . Marius Bakke)(address . mbakke@fastmail.com)(address . 38110@debbugs.gnu.org)
20200315202321.194826f7@scratchpost.org
Hi Marius,
I've attached the new v3 for core-updates to this bug report now.
Meanwhile, the bug in mrustc https://github.com/thepowersgang/mrustc/issues/140apparently has not been fixed yet. It probably manifests itself because of:
Toggle quote (4 lines)> It seems newer toolchains no longer resolve symbols when the library precedes> the referencing object file.> This has always been the case for static libraries, as far as I'm aware, but> now seems to also be the case for shared libs.
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCAAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAl5ugKkACgkQ5xo1VCwwuqVbXQgAnkhwmERYLYvS8jmV8jOLqHo3GuS4uHcGveGo8A15dAhv/KDduggedJvyVTzGIDBisCaIWC5sJ0Bh18rxpp4YDXmmGx48X7Ww7RYjVBzbxj30SC20lyAT5CawZAWTDe9LhtWmLe0Y/4TAU0ycaPWkgaIn8U/UeSjfsSEaUGPqvwOuR2RbxqiJ60veAC2B98d7AyJkNYtBZYsWOs+si0YGY/79CTh5TvRsMVN1HJZYmFI3oylKxnzwj4RGpV9lpyXNqvV0LRQFtIz46UqT2xsF9ZYiozne5kcypsCoIMGsWAUkZVPuMjMpBo01BATaj5PqGmk3oKR6U6PdplSQVNvVRA===NlzX-----END PGP SIGNATURE-----

J
J
Jakub Kądziołka wrote on 20 Mar 2020 00:58
Re: [PATCH core-updates v3] gnu: rust: Bootstrap rust@1.29.0 by mrustc@0.9.
(name . Danny Milosavljevic)(address . dannym@scratchpost.org)(address . 38110@debbugs.gnu.org)
20200319235840.ganzrh2t4z55iiyc@gravity
On Sun, Mar 15, 2020 at 08:23:11PM +0100, Danny Milosavljevic wrote:
Toggle quote (1 lines)> + ;; Since rust-2.19 is local, it's quite probable that Hydra
^^^^Typo? I think this should be rust-1.29.
Kind regards,Jakub Kądziołka
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEE5Xa/ss9usT31cTO54xWnWEYTFWQFAl50BzAACgkQ4xWnWEYTFWRCXw/+LERjCeF1PUa4ctRaQkAgGTe9YJAvQ6ABn1se8jLlPaPJOuEd4uayYaZkh9cs8dwBAOuJLzDWuKgNwi0Uz5nV6pDDYZYi16QoKT7w4uMzcIS2OvbgA+t+PWbQ9Apbh5ZoFL/8XQ6Zm9Rn/yeqT3JLLiEuitedvJPOCPI8+ZG0cA/uzs9HjXTVTTfLBQxS0xwiVDC2VacbMaUgbO/QUTBOK8vXsVSmeRTJ2yVTYaI8JI2X9OwewksDhJq5CKyxqwN2Hn8BuvYcA2agkSF9008XDEQLz/UixBEHGKs00J0+rjE4Mb0dbWJpFFm1tlPqI0K9/jYM1rVeZdxuEg/BCGH/U8d8oNSC2Z3a2x7Wz/I26ESRrpZfAfPe5mSqq0qu7aqtC/JUJ2+MiyvSxvrjx6ipX6L80U3db0sYh9i0Z5PMNZivEYO9QXfRvL88esJUHJpYoLWmGQl89KlB3p9GSPJTuqnxQn51jwOU/V6IcUpCVzqq8EHFanFLGCqlKnrLKwX+RdT9vpmmgZ4SREFLEOMwe3PEvAdx96IBjN1ZieSVbe39bLsuGDzx0lgSUiQVMVmAg9y8M6nFibtTxaJR3yC3Ug4WYoallnYdQ2+rUJQhpBuEm4VlPB26f3RW8sqLf5YB7N0RfP3jaxkmsVEX+GO50Hsicm9/CgyghlGKU9/qbmE==7zHJ-----END PGP SIGNATURE-----

M
M
Marius Bakke wrote on 20 Mar 2020 17:11
Re: [bug#38110] [PATCH core-updates v3] gnu: rust: Bootstrap rust@1.29.0 by mrustc@0.9.
(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
877dzf9fas.fsf@devup.no
Danny Milosavljevic <dannym@scratchpost.org> writes:
Toggle quote (17 lines)> * gnu/packages/patches/rustc-1.29.0-src.patch: New file.> * gnu/local.mk (dist_patch_DATA): Add it.> * gnu/packages/rust.scm (rust-1.19): Delete variable.> (rust-1.20): Delete variable.> (rust-1.21): Delete variable.> (rust-1.22): Delete variable.> (rust-1.23): Delete variable.> (rust-1.24): Delete variable.> (rust-1.25): Delete variable.> (rust-1.26): Delete variable.> (rust-1.27): Delete variable.> (rust-1.28): Delete variable.> (rust-1.29): Bootstrap from mrustc.> [source]: Add patch.> (rust-1.30)[inputs]: Remove llvm 3. Add llvm 6.> (mrustc): Update rustc-version to 1.29.0.
Thanks a lot for this work Danny!
I was able to get one step further by hacking the mrustc compiler toforce "group linking" with --start-group and --end-group, based on asuggestion in #mrustc. It makes the compiler about 10x slower, butI suppose that's okay for a one-time job.
Now the build fails when trying to use the built rustc binary, and I'mstruggling to figure out how to proceed. I think we are pretty close!
I've attached my changes as a diff here. Some of the changes are purelycosmetic, feel free to pick-and-choose what you want/need.
Without further ado...
2 files changed, 26 insertions(+), 5 deletions(-)gnu/packages/patches/mrustc-group-link.patch | 22 ++++++++++++++++++++++gnu/packages/rust.scm | 9 ++++-----
new file gnu/packages/patches/mrustc-group-link.patch@@ -0,0 +1,22 @@+Surround the libraries with --start-group and --end-group to work+around https://github.com/thepowersgang/mrustc/issues/138.++diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp+--- a/src/trans/codegen_c.cpp++++ b/src/trans/codegen_c.cpp+@@ -960,6 +960,7 @@ namespace {+ {+ args.push_back("-L"); args.push_back(path);+ }++ args.push_back("-Wl,--start-group");+ for(const auto& lib : m_crate.m_ext_libs) {+ ASSERT_BUG(Span(), lib.name != "", "");+ args.push_back("-l"); args.push_back(lib.name.c_str());+@@ -975,6 +976,7 @@ namespace {+ {+ args.push_back("-l"); args.push_back(path.c_str());+ }++ args.push_back("-Wl,--end-group");+ for( const auto& a : Target_GetCurSpec().m_backend_c.m_linker_opts )+ {+ args.push_back( a.c_str() );modified gnu/packages/rust.scm@@ -98,6 +98,7 @@ (url "https://github.com/thepowersgang/mrustc.git") (commit (string-append "v" version)))) (file-name (git-file-name name version))+ (patches (search-patches "mrustc-group-link.patch")) (sha256 (base32 "194ny7vsks5ygiw7d8yxjmp1qwigd71ilchis6xjl6bb2sj97rd2"))))@@ -128,10 +129,8 @@ (add-after 'patch-date 'unpack-target-compiler (lambda* (#:key inputs outputs #:allow-other-keys) (invoke "tar" "xf" (assoc-ref inputs "rustc"))- (chdir ,(string-append "rustc-" rustc-version "-src"))- (invoke "patch" "-p0" ,(string-append "../rustc-" rustc-version+ (invoke "patch" "-p1" ,(string-append "rustc-" rustc-version "-src.patch"))- (chdir "..") (setenv "RUSTC_VERSION" ,rustc-version) (setenv "MRUSTC_TARGET_VER" ,(version-major+minor rustc-version))@@ -274,7 +273,7 @@ safety and thread safety guarantees.") #t)) ;; This phase is overridden by newer versions. (replace 'configure- (lambda* (#:key inputs outputs #:allow-other-keys)+ (lambda _ (setenv "CXX" "g++") (setenv "HOST_CXX" "g++") #t))@@ -326,7 +325,7 @@ safety and thread safety guarantees.") (write name) (newline) (apply invoke- "output/rustc-build/rustc"+ "output/rustc-build/rustc_binary" "-C" (string-append "linker=" (getenv "CC")) ;; Required for libterm.
[back]
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCgAdFiEEu7At3yzq9qgNHeZDoqBt8qM6VPoFAl5060sACgkQoqBt8qM6VPoKSgf/cr9A0OUZowldxQYe1x8ZtadA5iQ50s2ziR3KFQ9u+mAEQTj/YuwDZoX5NA5Qz/jX+pTj9aNppt63Xx7jA2fGWS8pWAcRISnPcnayIxvv/Txu9TKccim98RB/HB90XnUZPOoF2dPXpCgMgc+BW+UZIHMTVvFHt/pYlztaJ4jWci2HEymGxlYXTAnkU2DKzieulevLtG7R9JIfrSNyuB5Q/SPHSksfhJesGuNXMZ1KvIeU4Mb9O3MuD2T4ONt+alvwqXPewrzItt5sFFJuY91em3LSdA7//MDze61MWDAuAvltNuhZ8IvO3jBm/iPCuShWTRdInkuArseQzeVoatMNJw===TM9d-----END PGP SIGNATURE-----
M
M
Marius Bakke wrote on 20 Mar 2020 17:18
(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
874kuj9ezw.fsf@devup.no
I forgot to mention another change ...
Danny Milosavljevic <dannym@scratchpost.org> writes:
Toggle quote (5 lines)> + ;; Crate::load_extern_crate ignores the search path, so make> + ;; the situation easier for it.> + (copy-recursively (string-append rustc-bootstrap "/lib/mrust")> + "output")
This hunk is exactly identical to the next expression some lines below,I removed it from the original patch to avoid a build failure.
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCgAdFiEEu7At3yzq9qgNHeZDoqBt8qM6VPoFAl507NMACgkQoqBt8qM6VPoF9ggAl8DaOiEYm7UFoXMSJFeOPBaOtGco5QQ0z0rXxHD0meWItRKm2OL9lRFKVcCMown4/0bzocdzZAN+EMUUj3IjSAiuQgvJke+7TdbqV3eVEI5pKKx0FyUtDEm2GlEUtJMZ362F/VzCLS4imtzyV5/e705JJRagZan9bbSfe9hukWmmzeB2VYcBw9Zby9oRkkaBMlFIrSSW+bOXCviMw4jfgoCCGjyK3DHaDIXC/5tIDBARNPQzDakOcdXJYPjoY7Byoo7p44534z4xDgra7hy8KHMd4q+HEzpCKxPBI54iPjaZHD1v4AjWnn+8ZN1O3zG5hNycGNJfaqoIz2eWfVLQqQ===s7se-----END PGP SIGNATURE-----
D
D
Danny Milosavljevic wrote on 23 Mar 2020 22:24
(name . Marius Bakke)(address . mbakke@fastmail.com)(address . 38110@debbugs.gnu.org)
20200323222403.36a6ce1f@scratchpost.org
Hi Marius,
it's good to hear that we have some further progress.
I've tried it myself but I can't build it on my laptop with 8 GiB of RAM, noteven after adding 4 GiB of swap (on an SSD... urgh).
So if the "group linking" caused this massive increase of memory consumption,that's probably not good.
Isn't it enough to automatically prepend "-lgit2" when "-lssh2" appearsor something?
See https://github.com/thepowersgang/mrustc/issues/140
I have an account on bayfront and it doesn't work there either (copied theentire working directory over from my laptop):
Building rust, I get a texinfo build failure:[...]+ exec ./ginfo --init-file ./t/Infokey-config -f file-menuinfo: "./t/Infokey-config", line 2: unknown action `xxx-not-recognized'info: "./t/Infokey-config", line 3: cannot bind key sequence to menu-digit+ kill -s WINCH 16225[...]+ rm -f t/resize-in-completions.sh.out+ rm -f t/resize-in-completions.sh.pipein t/resize-in-completions.sh.pipeout+ exit 1FAIL t/resize-in-completions.sh (exit status: 1)command "make" "check" "-j" "6" failed with status 2
(it does the same even after guix gc, so it's reproducible)
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCAAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAl55KPMACgkQ5xo1VCwwuqVAJAf+MEZg7pqSSwETzBIbWGULvCxMkYyZz6BQEpR2yXLc3AQPwGlaBTrAa9LY8nBuyYWcOefphnN3wkcc4FlzFgRtCj6JUebLohFIzKu7XXsxECsSBzO4La0vujpSB3DefBN9bCskowJexScKfOKkJqS53QVitF8gJKvLpTmpi2xqTjJyo/ohKXX0dnGHh1/0XsY8p0+VqNtxR9bcjpr81KqRtmoeLzYMCCO5cS0Nqke0Vgpcccgn6YMMp1SC/IHXsFwEdnlYTAIyktHLOFC286JeyLCYUvMe44GhM6KrA/PhKocFwIL7Kkheng8p7cPZ4ueQYEqqK6q1h5YF5J2514wKZQ===fO1w-----END PGP SIGNATURE-----

M
M
Marius Bakke wrote on 23 Mar 2020 23:16
(name . Danny Milosavljevic)(address . dannym@scratchpost.org)(address . 38110@debbugs.gnu.org)
87o8sm3efs.fsf@devup.no
Danny Milosavljevic <dannym@scratchpost.org> writes:
Toggle quote (13 lines)> Hi Marius,>> it's good to hear that we have some further progress.>> I've tried it myself but I can't build it on my laptop with 8 GiB of RAM, not> even after adding 4 GiB of swap (on an SSD... urgh).>> So if the "group linking" caused this massive increase of memory consumption,> that's probably not good.>> Isn't it enough to automatically prepend "-lgit2" when "-lssh2" appears> or something?
That would be a much better hack yes. :-)
Toggle quote (20 lines)> See https://github.com/thepowersgang/mrustc/issues/140>> I have an account on bayfront and it doesn't work there either (copied the> entire working directory over from my laptop):>> Building rust, I get a texinfo build failure:> [...]> + exec ./ginfo --init-file ./t/Infokey-config -f file-menu> info: "./t/Infokey-config", line 2: unknown action `xxx-not-recognized'> info: "./t/Infokey-config", line 3: cannot bind key sequence to menu-digit> + kill -s WINCH 16225> [...]> + rm -f t/resize-in-completions.sh.out> + rm -f t/resize-in-completions.sh.pipein t/resize-in-completions.sh.pipeout> + exit 1> FAIL t/resize-in-completions.sh (exit status: 1)> command "make" "check" "-j" "6" failed with status 2>> (it does the same even after guix gc, so it's reproducible)
How are you building Rust? I've only used the Guix package definitionand did not get as far as actually running the test suite. Do you havean updated build script?
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCgAdFiEEu7At3yzq9qgNHeZDoqBt8qM6VPoFAl55NSgACgkQoqBt8qM6VPrA2gf+PvnPgsjBR5clQx8qn7BoNngpURvJ6Yy4zI7msU0iNC7b9M4skS+h2UBiOwkHCtYRGAwYbjqTpsjIUzJnxED3Ux879IGugHMRZPLNnQG03ITlsIP81X1vHeimy7GbMUXS1PmUShV4avzOrw7w6VfZQ8zn+9rYa7PzC60EQbe+rLQwBtFrDu2LGZ5R3Bqtp6aDGULeejVoEQGmAyUncZmDVA5V+yMSZOkWp5RLzCct1nYi+7bSEInnwejKwjvoQZPpj/MIEV2ia3jUaFcCQFk+fbN3Sr16N9ptjZI9LtfCq+agEJcbMAIkylvZPGcj7gJQKW5IK4cK7kDWZdOJPMorsw===LL0S-----END PGP SIGNATURE-----
D
D
Danny Milosavljevic wrote on 24 Mar 2020 12:57
(name . Marius Bakke)(address . mbakke@fastmail.com)(address . 38110@debbugs.gnu.org)
20200324125716.756eb1f2@scratchpost.org
Hi Marius,
On Mon, 23 Mar 2020 23:16:07 +0100Marius Bakke <mbakke@fastmail.com> wrote:
Toggle quote (6 lines)> > Building rust, I get a texinfo build failure:
> How are you building Rust? I've only used the Guix package definition> and did not get as far as actually running the test suite. Do you have> an updated build script?
It's failing in texinfo, not in rust.
Also, on my laptop, it's not failing in texinfo. So I guess it hassomething to do with bayfront or the machines it offloads to.
Attached gnu/packages/rust.scm , but it's the same we already have.What I mean is that I cannot see any way for me to test it myself right now.
What error message do you get when trying to use the rust compiler?
;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016 David Craven <david@craven.ch> ;;; Copyright © 2016 Eric Le Bihan <eric.le.bihan.dev@free.fr> ;;; Copyright © 2016 ng0 <ng0@n0.is> ;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com> ;;; Copyright © 2017, 2018 Nikolai Merinov <nikolai.merinov@member.fsf.org> ;;; Copyright © 2017, 2019 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2018 Danny Milosavljevic <dannym+a@scratchpost.org> ;;; Copyright © 2019 Ivan Petkov <ivanppetkov@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; ;;; GNU Guix is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; GNU Guix is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (gnu packages rust) #:use-module (gnu packages base) #:use-module (gnu packages bison) #:use-module (gnu packages bootstrap) #:use-module (gnu packages cmake) #:use-module (gnu packages compression) #:use-module (gnu packages curl) #:use-module (gnu packages elf) #:use-module (gnu packages flex) #:use-module (gnu packages gcc) #:use-module (gnu packages gdb) #:use-module (gnu packages jemalloc) #:use-module (gnu packages linux) #:use-module (gnu packages llvm) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) #:use-module (gnu packages ssh) #:use-module (gnu packages tls) #:use-module (gnu packages) #:use-module (guix build-system cargo) #:use-module (guix build-system gnu) #:use-module (guix build-system trivial) #:use-module (guix download) #:use-module (guix git-download) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module ((guix build utils) #:select (alist-replace)) #:use-module (guix utils) #:use-module (ice-9 match) #:use-module (srfi srfi-26)) (define %cargo-reference-hash "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855") (define* (nix-system->gnu-triplet-for-rust #:optional (system (%current-system))) (match system ("x86_64-linux" "x86_64-unknown-linux-gnu") ("i686-linux" "i686-unknown-linux-gnu") ("armhf-linux" "armv7-unknown-linux-gnueabihf") ("aarch64-linux" "aarch64-unknown-linux-gnu") ("mips64el-linux" "mips64el-unknown-linux-gnuabi64") (_ (nix-system->gnu-triplet system)))) (define* (rust-uri version #:key (dist "static")) (string-append "https://" dist ".rust-lang.org/dist/" "rustc-" version "-src.tar.gz")) (define* (rust-bootstrapped-package base-rust version checksum) "Bootstrap rust VERSION with source checksum CHECKSUM using BASE-RUST." (package (inherit base-rust) (version version) (source (origin (inherit (package-source base-rust)) (uri (rust-uri version)) (sha256 (base32 checksum)))) (native-inputs (alist-replace "cargo-bootstrap" (list base-rust "cargo") (alist-replace "rustc-bootstrap" (list base-rust) (package-native-inputs base-rust)))))) (define-public mrustc (let ((rustc-version "1.29.0")) (package (name "mrustc") (version "0.9") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/thepowersgang/mrustc.git") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (patches (search-patches "mrustc-group-link.patch")) (sha256 (base32 "194ny7vsks5ygiw7d8yxjmp1qwigd71ilchis6xjl6bb2sj97rd2")))) (outputs '("out" "cargo")) (build-system gnu-build-system) (inputs `(("zlib" ,zlib))) (native-inputs `(("bison" ,bison) ("flex" ,flex) ;; Required for the libstd sources. ("rustc" ,(package-source rust-1.29)))) (arguments `(#:test-target "test" #:make-flags (list ,(string-append "RUSTC_TARGET=" (or (%current-target-system) (nix-system->gnu-triplet-for-rust)))) #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-date (lambda _ (substitute* "Makefile" (("shell date") "shell date -d @1")) (substitute* "run_rustc/Makefile" (("[$]Vtime ") "$V ")) #t)) (add-after 'patch-date 'unpack-target-compiler (lambda* (#:key inputs outputs #:allow-other-keys) (invoke "tar" "xf" (assoc-ref inputs "rustc")) (invoke "patch" "-p1" ,(string-append "rustc-" rustc-version "-src.patch")) (setenv "RUSTC_VERSION" ,rustc-version) (setenv "MRUSTC_TARGET_VER" ,(version-major+minor rustc-version)) (setenv "OUTDIR_SUF" "") #t)) (replace 'configure (lambda _ (setenv "CC" "gcc") (setenv "CXX" "g++") #t)) (add-after 'build 'build-minicargo (lambda* (#:key make-flags #:allow-other-keys) ;; TODO: minicargo.mk: RUSTC_VERSION=$(RUSTC_VERSION) RUSTC_CHANNEL=$(RUSTC_SRC_TY) OUTDIR_SUF=$(OUTDIR_SUF) (apply invoke "make" "-f" "minicargo.mk" "LIBS" make-flags) (apply invoke "make" "-C" "tools/minicargo" make-flags))) ;(add-after 'check 'check-locally ; (lambda* (#:key make-flags #:allow-other-keys) ; ;; The enum test wouldn't work otherwise. ; ;; See <https://github.com/thepowersgang/mrustc/issues/137>. ; (setenv "MRUSTC_TARGET_VER" ,(version-major+minor rustc-version)) ; (apply invoke "make" "local_tests" make-flags))) (replace 'install (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (bin (string-append out "/bin")) (tools-bin (string-append out "/tools/bin")) (cargo-out (assoc-ref outputs "cargo")) (cargo-bin (string-append cargo-out "/bin")) (lib (string-append out "/lib")) (lib/rust (string-append lib "/mrust")) (gcc (assoc-ref inputs "gcc")) (run_rustc (string-append out "/share/mrustc/run_rustc"))) ;; These files are not reproducible. (for-each delete-file (find-files "output" "\\.txt$")) ;(delete-file-recursively "output/local_tests") (mkdir-p (dirname lib/rust)) (copy-recursively "output" lib/rust) (mkdir-p bin) (mkdir-p tools-bin) (install-file "bin/mrustc" bin) ;; minicargo uses relative paths to resolve mrustc. (install-file "tools/bin/minicargo" tools-bin) (install-file "tools/bin/minicargo" cargo-bin) (mkdir-p run_rustc) (copy-file "run_rustc/Makefile" (string-append run_rustc "/Makefile")) #t)))))) (synopsis "Compiler for the Rust programming language") (description "Rust is a systems programming language that provides memory safety and thread safety guarantees.") (home-page "https://github.com/thepowersgang/mrustc") ;; Dual licensed. (license (list license:asl2.0 license:expat))))) ;; TODO: Delete src/llvm-emscripten (define rust-1.29 (package (name "rust") (version "1.29.0") (source (origin (method url-fetch) (uri (rust-uri "1.29.0")) (sha256 (base32 "1sb15znckj8pc8q3g7cq03pijnida6cg64yqmgiayxkzskzk9sx4")) (modules '((guix build utils))) (snippet '(begin (delete-file-recursively "src/llvm") #t)) (patches (map search-patch '("rust-1.25-accept-more-detailed-gdb-lines.patch" "rust-reproducible-builds.patch" "rustc-1.29.0-src.patch"))))) (outputs '("out" "cargo" "doc")) (properties '((timeout . 72000) ;20 hours (max-silent-time . 18000))) ;5 hours (for armel) (arguments `(#:imported-modules ,%cargo-utils-modules ;for `generate-all-checksums' #:modules ((guix build utils) (ice-9 match) (guix build gnu-build-system)) #:phases (modify-phases %standard-phases (add-after 'unpack 'set-env (lambda* (#:key inputs #:allow-other-keys) ;; Disable test for cross compilation support. (write "X") (setenv "CFG_DISABLE_CROSS_TESTS" "1") (setenv "SHELL" (which "sh")) (setenv "CONFIG_SHELL" (which "sh")) (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc")) ;; guix llvm-3.9.1 package installs only shared libraries (setenv "LLVM_LINK_SHARED" "1") #t)) (add-after 'unpack 'patch-tests (lambda* (#:key inputs #:allow-other-keys) (let ((bash (assoc-ref inputs "bash"))) (substitute* "src/libstd/process.rs" ;; The newline is intentional. ;; There's a line length "tidy" check in Rust which would ;; fail otherwise. (("\"/bin/sh\"") (string-append "\n\"" bash "/bin/sh\""))) (substitute* "src/libstd/net/tcp.rs" ;; There is no network in build environment (("fn connect_timeout_unroutable") "#[ignore]\nfn connect_timeout_unroutable")) ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00222.html> (substitute* "src/libstd/sys/unix/process/process_common.rs" (("fn test_process_mask") "#[allow(unused_attributes)] #[ignore] fn test_process_mask")) #t))) (add-after 'patch-tests 'patch-cargo-index-update (lambda* _ (substitute* "src/tools/cargo/tests/testsuite/generate_lockfile.rs" ;; This test wants to update the crate index. (("fn no_index_update") "#[ignore]\nfn no_index_update")) #t)) (add-after 'patch-tests 'patch-aarch64-test (lambda* _ (substitute* "src/librustc_metadata/dynamic_lib.rs" ;; This test is known to fail on aarch64 and powerpc64le: ;; https://github.com/rust-lang/rust/issues/45410 (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine")) ;; This test fails on aarch64 with llvm@6.0: ;; https://github.com/rust-lang/rust/issues/49807 ;; other possible solution: ;; https://github.com/rust-lang/rust/pull/47688 (delete-file "src/test/debuginfo/by-value-self-argument-in-trait-impl.rs") #t)) (add-after 'patch-tests 'remove-unsupported-tests (lambda* _ ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH. ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html> (delete-file-recursively "src/test/run-make-fulldeps/linker-output-non-utf8") #t)) (add-after 'patch-source-shebangs 'patch-cargo-checksums (lambda* _ (use-modules (guix build cargo-utils)) (substitute* "src/Cargo.lock" (("(\"checksum .* = )\".*\"" all name) (string-append name "\"" ,%cargo-reference-hash "\""))) (generate-all-checksums "src/vendor") #t)) ;; This phase is overridden by newer versions. (replace 'configure (lambda* (#:key inputs outputs #:allow-other-keys) (setenv "CXX" "g++") (setenv "HOST_CXX" "g++") #t)) ;; This phase is overridden by newer versions. (replace 'build (lambda* (#:key inputs outputs #:allow-other-keys) (let ((rustc-bootstrap (assoc-ref inputs "rustc-bootstrap"))) (setenv "CFG_COMPILER_HOST_TRIPLE" ,(nix-system->gnu-triplet (%current-system))) (setenv "CFG_RELEASE" "") (setenv "CFG_RELEASE_CHANNEL" "stable") (setenv "CFG_LIBDIR_RELATIVE" "lib") (setenv "CFG_VERSION" "1.29.0-stable-mrustc") (setenv "MRUSTC_TARGET_VER" ,(version-major+minor version)) ; bad: (setenv "CFG_PREFIX" "mrustc") ; FIXME output path. ;; Crate::load_extern_crate ignores the search path, so make ;; the situation easier for it. ;; Also, mrustc 0.9 doesn't check the search paths for crates ;; anymore. (copy-recursively (string-append rustc-bootstrap "/lib/mrust") "output") (invoke (string-append rustc-bootstrap "/tools/bin/minicargo") "src/rustc" "--vendor-dir" "src/vendor" "--output-dir" "output/rustc-build" "-L" (string-append rustc-bootstrap "/lib/mrust") "-j" "1") (setenv "CFG_COMPILER_HOST_TRIPLE" #f) (setenv "CFG_RELEASE" #f) (setenv "CFG_RELEASE_CHANNEL" #f) (setenv "CFG_VERSION" #f) (setenv "CFG_PREFIX" #f) (setenv "CFG_LIBDIR_RELATIVE" #f) (invoke (string-append rustc-bootstrap "/tools/bin/minicargo") "src/tools/cargo" "--vendor-dir" "src/vendor" "--output-dir" "output/cargo-build" ;"-L" "output/" "-L" (string-append rustc-bootstrap "/lib/mrust") "-j" "1") ;; Now use the newly-built rustc to build the libraries. ;; One day that could be replaced by: ;; (invoke "output/cargo-build/cargo" "build" ;; "--manifest-path" "src/bootstrap/Cargo.toml" ;; "--verbose") ; "--locked" "--frozen" ;; but right now, Cargo has problems with libstd's circular ;; dependencies. (mkdir-p "output/target-libs") (for-each (match-lambda ((name . flags) (write name) (newline) (apply invoke "output/rustc-build/rustc" "-C" (string-append "linker=" (getenv "CC")) ;; Required for libterm. "-Z" "force-unstable-if-unmarked" "-L" "output/target-libs" (string-append "src/" name "/lib.rs") "-o" (string-append "output/target-libs/" (car (string-split name #\/)) ".rlib") flags))) '(("libcore") ("libstd_unicode") ("liballoc") ("libcollections") ("librand") ("liblibc/src" "--cfg" "stdbuild") ("libunwind" "-l" "gcc_s") ("libcompiler_builtins") ("liballoc_system") ("libpanic_unwind") ;; Uses "cc" to link. ("libstd" "-l" "dl" "-l" "rt" "-l" "pthread") ("libarena") ;; Test dependencies: ("libgetopts") ("libterm") ("libtest"))) #t))) ;; This phase is overridden by newer versions. (replace 'check (const #t)) ;; This phase is overridden by newer versions. (replace 'install (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (target-system ,(or (%current-target-system) (nix-system->gnu-triplet (%current-system)))) (out-libs (string-append out "/lib/rustlib/" target-system "/lib"))) ;(setenv "CFG_PREFIX" out) (mkdir-p out-libs) (copy-recursively "output/target-libs" out-libs) (install-file "output/rustc-build/rustc" (string-append out "/bin")) (install-file "output/rustc-build/rustdoc" (string-append out "/bin")) (install-file "output/cargo-build/cargo" (string-append (assoc-ref outputs "cargo") "/bin"))) #t))))) (build-system gnu-build-system) (native-inputs `(("bison" ,bison) ; For the tests ("cmake" ,cmake-minimal) ("flex" ,flex) ; For the tests ("gdb" ,gdb) ; For the tests ("procps" ,procps) ; For the tests ("python-2" ,python-2) ("rustc-bootstrap" ,mrustc) ("cargo-bootstrap" ,mrustc "cargo") ("pkg-config" ,pkg-config) ; For "cargo" ("which" ,which))) (inputs `(("jemalloc" ,jemalloc-4.5.0) ("llvm" ,llvm-6) ("openssl" ,openssl-1.0) ("libssh2" ,libssh2) ; For "cargo" ("libcurl" ,curl))) ; For "cargo" ;; rustc invokes gcc, so we need to set its search paths accordingly. ;; Note: duplicate its value here to cope with circular dependencies among ;; modules (see <https://bugs.gnu.org/31392>). (native-search-paths (list (search-path-specification (variable "C_INCLUDE_PATH") (files '("include"))) (search-path-specification (variable "CPLUS_INCLUDE_PATH") (files '("include/c++" "include"))) (search-path-specification (variable "LIBRARY_PATH") (files '("lib" "lib64"))))) (synopsis "Compiler for the Rust progamming language") (description "Rust is a systems programming language that provides memory safety and thread safety guarantees.") (home-page "https://www.rust-lang.org") ;; Dual licensed. (license (list license:asl2.0 license:expat)))) (define-public rust-1.30 (let ((base-rust (rust-bootstrapped-package rust-1.29 "1.30.1" "0aavdc1lqv0cjzbqwl5n59yd0bqdlhn0zas61ljf38yrvc18k8rn"))) (package (inherit base-rust) (source (origin (inherit (package-source base-rust)) (snippet '(begin (delete-file-recursively "src/jemalloc") (delete-file-recursively "src/llvm") (delete-file-recursively "src/llvm-emscripten") (delete-file-recursively "src/tools/clang") (delete-file-recursively "src/tools/lldb") #t)) (patches '()))) (outputs '("out" "doc" "cargo")) ;; Since rust-1.29 is local, it's quite probable that Hydra ;; will build rust-1.29 only as a dependency of rust-1.30. ;; But then Hydra will use the wrong properties, the ones here, ;; for rust-1.29. Therefore, we copied the properties of ;; rust-1.29 here. (properties '((timeout . 72000) ;20 hours (max-silent-time . 18000))) ;5 hours (for armel) (inputs ;; Use LLVM 6.0 (alist-replace "llvm" (list llvm-6) (package-inputs base-rust))) (arguments (substitute-keyword-arguments (package-arguments rust-1.29) ((#:phases phases) `(modify-phases ,phases (add-after 'unpack 'remove-flaky-test (lambda _ ;; See <https://github.com/rust-lang/rust/issues/43402>. (when (file-exists? "src/test/run-make/issue-26092") (delete-file-recursively "src/test/run-make/issue-26092")) #t)) (add-after 'configure 'enable-codegen-tests ;; Codegen tests should pass with llvm 6, so enable them. (lambda* _ (substitute* "config.toml" (("codegen-tests = false") "")) #t)) ;; The test has been moved elsewhere. (add-after 'patch-tests 'disable-amd64-avx-test (lambda _ (substitute* "src/test/ui/issues/issue-44056.rs" (("only-x86_64") "ignore-test")) #t)) (add-after 'patch-tests 'patch-cargo-tests (lambda _ (substitute* "src/tools/cargo/tests/build.rs" (("/usr/bin/env") (which "env")) ;; Guix llvm is compiled without asmjs-unknown-emscripten. (("fn wasm32_final_outputs") "#[ignore]\nfn wasm32_final_outputs")) (substitute* "src/tools/cargo/tests/death.rs" ;; This is stuck when built in container. (("fn ctrl_c_kills_everyone") "#[ignore]\nfn ctrl_c_kills_everyone")) ;; Prints test output in the wrong order when built on ;; i686-linux. (substitute* "src/tools/cargo/tests/test.rs" (("fn cargo_test_env") "#[ignore]\nfn cargo_test_env")) ;; These tests pull in a dependency on "git", which changes ;; too frequently take part in the Rust toolchain. (substitute* "src/tools/cargo/tests/new.rs" (("fn author_prefers_cargo") "#[ignore]\nfn author_prefers_cargo") (("fn finds_author_git") "#[ignore]\nfn finds_author_git") (("fn finds_local_author_git") "#[ignore]\nfn finds_local_author_git")) #t)) (add-after 'patch-cargo-tests 'patch-cargo-env-shebang (lambda* (#:key inputs #:allow-other-keys) (let ((coreutils (assoc-ref inputs "coreutils"))) (substitute* "src/tools/cargo/tests/testsuite/fix.rs" ;; Cargo has a test which explicitly sets a ;; RUSTC_WRAPPER environment variable which points ;; to /usr/bin/env. Since it's not a shebang, it ;; needs to be manually patched (("\"/usr/bin/env\"") (string-append "\"" coreutils "/bin/env\""))) #t))) (add-after 'patch-cargo-env-shebang 'ignore-cargo-package-tests (lambda* _ (substitute* "src/tools/cargo/tests/testsuite/package.rs" ;; These tests largely check that cargo outputs warning/error ;; messages as expected. It seems that cargo outputs an ;; absolute path to something in the store instead of the ;; expected relative path (e.g. `[..]`) so we'll ignore ;; these for now (("fn include") "#[ignore]\nfn include") (("fn exclude") "#[ignore]\nfn exclude")) #t)) (replace 'configure (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (doc (assoc-ref outputs "doc")) (gcc (assoc-ref inputs "gcc")) (gdb (assoc-ref inputs "gdb")) (binutils (assoc-ref inputs "binutils")) (python (assoc-ref inputs "python-2")) (rustc (assoc-ref inputs "rustc-bootstrap")) (cargo (assoc-ref inputs "cargo-bootstrap")) (llvm (assoc-ref inputs "llvm")) (jemalloc (assoc-ref inputs "jemalloc"))) (call-with-output-file "config.toml" (lambda (port) (display (string-append " [llvm] [build] cargo = \"" cargo "/bin/cargo" "\" rustc = \"" rustc "/bin/rustc" "\" docs = true python = \"" python "/bin/python2" "\" gdb = \"" gdb "/bin/gdb" "\" vendor = true submodules = false [install] prefix = \"" out "\" docdir = \"" doc "/share/doc/rust" "\" sysconfdir = \"etc\" [rust] default-linker = \"" gcc "/bin/gcc" "\" channel = \"stable\" rpath = true " ;; There are 2 failed codegen tests: ;; codegen/mainsubprogram.rs and codegen/mainsubprogramstart.rs ;; These tests require a patched LLVM "codegen-tests = false [target." ,(nix-system->gnu-triplet-for-rust) "] llvm-config = \"" llvm "/bin/llvm-config" "\" cc = \"" gcc "/bin/gcc" "\" cxx = \"" gcc "/bin/g++" "\" ar = \"" binutils "/bin/ar" "\" jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\" [dist] ") port))) #t))) (add-after 'configure 'provide-cc (lambda* (#:key inputs #:allow-other-keys) (symlink (string-append (assoc-ref inputs "gcc") "/bin/gcc") "/tmp/cc") (setenv "PATH" (string-append "/tmp:" (getenv "PATH"))) #t)) (delete 'patch-cargo-tomls) (add-before 'build 'reset-timestamps-after-changes (lambda* _ (for-each (lambda (filename) ;; Rust 1.20.0 treats timestamp 0 as "file doesn't exist". ;; Therefore, use timestamp 1. (utime filename 1 1 1 1)) (find-files "." #:directories? #t)) #t)) (replace 'build (lambda* _ (invoke "./x.py" "build") (invoke "./x.py" "build" "src/tools/cargo"))) (replace 'check (lambda* _ ;; Enable parallel execution. (let ((parallel-job-spec (string-append "-j" (number->string (min 4 (parallel-job-count)))))) (invoke "./x.py" parallel-job-spec "test" "-vv") (invoke "./x.py" parallel-job-spec "test" "src/tools/cargo")))) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (invoke "./x.py" "install") (substitute* "config.toml" ;; replace prefix to specific output (("prefix = \"[^\"]*\"") (string-append "prefix = \"" (assoc-ref outputs "cargo") "\""))) (invoke "./x.py" "install" "cargo"))) (add-after 'install 'delete-install-logs (lambda* (#:key outputs #:allow-other-keys) (define (delete-manifest-file out-path file) (delete-file (string-append out-path "/lib/rustlib/" file))) (let ((out (assoc-ref outputs "out")) (cargo-out (assoc-ref outputs "cargo"))) (for-each (lambda (file) (delete-manifest-file out file)) '("install.log" "manifest-rust-docs" "manifest-rust-std-x86_64-unknown-linux-gnu" "manifest-rustc")) (for-each (lambda (file) (delete-manifest-file cargo-out file)) '("install.log" "manifest-cargo")) #t))) (add-after 'install 'wrap-rustc (lambda* (#:key inputs outputs #:allow-other-keys) (let ((out (assoc-ref outputs "out")) (libc (assoc-ref inputs "libc")) (ld-wrapper (assoc-ref inputs "ld-wrapper"))) ;; Let gcc find ld and libc startup files. (wrap-program (string-append out "/bin/rustc") `("PATH" ":" prefix (,(string-append ld-wrapper "/bin"))) `("LIBRARY_PATH" ":" suffix (,(string-append libc "/lib")))) #t)))))))))) (define-public rust-1.31 (let ((base-rust (rust-bootstrapped-package rust-1.30 "1.31.1" "0sk84ff0cklybcp0jbbxcw7lk7mrm6kb6km5nzd6m64dy0igrlli"))) (package (inherit base-rust) (arguments (substitute-keyword-arguments (package-arguments base-rust) ((#:phases phases) `(modify-phases ,phases (add-after 'patch-tests 'patch-command-exec-tests (lambda* (#:key inputs #:allow-other-keys) (let ((coreutils (assoc-ref inputs "coreutils"))) (substitute* "src/test/run-pass/command-exec.rs" ;; This test suite includes some tests that the stdlib's ;; `Command` execution properly handles situations where ;; the environment or PATH variable are empty, but this ;; fails since we don't have `echo` available in the usual ;; Linux directories. ;; NB: the leading space is so we don't fail a tidy check ;; for trailing whitespace, and the newlines are to ensure ;; we don't exceed the 100 chars tidy check as well ((" Command::new\\(\"echo\"\\)") (string-append "\nCommand::new(\"" coreutils "/bin/echo\")\n"))) #t))) ;; The test has been moved elsewhere. (replace 'disable-amd64-avx-test (lambda _ (substitute* "src/test/ui/issues/issue-44056.rs" (("only-x86_64") "ignore-test")) #t)) (add-after 'patch-tests 'patch-process-docs-rev-cmd (lambda* _ ;; Disable some doc tests which depend on the "rev" command ;; https://github.com/rust-lang/rust/pull/58746 (substitute* "src/libstd/process.rs" (("```rust") "```rust,no_run")) #t))))))))) (define-public rust-1.32 (let ((base-rust (rust-bootstrapped-package rust-1.31 "1.32.0" "0ji2l9xv53y27xy72qagggvq47gayr5lcv2jwvmfirx029vlqnac"))) (package (inherit base-rust) (source (origin (inherit (package-source base-rust)) (snippet '(begin (delete-file-recursively "src/llvm") (delete-file-recursively "src/llvm-emscripten") (delete-file-recursively "src/tools/clang") (delete-file-recursively "src/tools/lldb") (delete-file-recursively "vendor/jemalloc-sys/jemalloc") #t)) (patches (map search-patch '("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")))) (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* _ (use-modules (guix build cargo-utils)) (substitute* "Cargo.lock" (("(\"checksum .* = )\".*\"" all name) (string-append name "\"" ,%cargo-reference-hash "\""))) (generate-all-checksums "vendor") #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)) ;; Remove no longer relevant steps (delete 'remove-flaky-test) (delete 'patch-aarch64-test)))))))) (define-public rust-1.33 (let ((base-rust (rust-bootstrapped-package rust-1.32 "1.33.0" "152x91mg7bz4ygligwjb05fgm1blwy2i70s2j03zc9jiwvbsh0as"))) (package (inherit base-rust) (source (origin (inherit (package-source base-rust)) (patches '()) (patch-flags '("-p1")))) (inputs ;; Upgrade to jemalloc@5.1.0 (alist-replace "jemalloc" (list jemalloc) (package-inputs base-rust))) (arguments (substitute-keyword-arguments (package-arguments base-rust) ((#:phases phases) `(modify-phases ,phases (delete 'ignore-cargo-package-tests) (add-after 'configure 'configure-test-threads ;; Several rustc and cargo tests will fail if run on one core ;; https://github.com/rust-lang/rust/issues/59122 ;; https://github.com/rust-lang/cargo/issues/6746 ;; https://github.com/rust-lang/rust/issues/58907 (lambda* (#:key inputs #:allow-other-keys) (setenv "RUST_TEST_THREADS" "2") #t))))))))) (define-public rust-1.34 (let ((base-rust (rust-bootstrapped-package rust-1.33 "1.34.1" "19s09k7y5j6g3y4d2rk6kg9pvq6ml94c49w6b72dmq8p9lk8bixh"))) (package (inherit base-rust) (source (origin (inherit (package-source base-rust)) (snippet '(begin (delete-file-recursively "src/llvm-emscripten") (delete-file-recursively "src/llvm-project") (delete-file-recursively "vendor/jemalloc-sys/jemalloc") #t))))))) (define-public rust-1.35 (let ((base-rust (rust-bootstrapped-package rust-1.34 "1.35.0" "0bbizy6b7002v1rdhrxrf5gijclbyizdhkglhp81ib3bf5x66kas"))) (package (inherit base-rust) (inputs (alist-replace "llvm" (list llvm-8) (package-inputs base-rust))) (arguments (substitute-keyword-arguments (package-arguments base-rust) ((#:phases phases) `(modify-phases ,phases ;; The tidy test includes a pass which ensures large binaries ;; don't accidentally get checked into the rust git repo. ;; Unfortunately the test assumes that git is always available, ;; so we'll comment out the invocation of this pass. (add-after 'configure 'disable-tidy-bins-check (lambda* _ (substitute* "src/tools/tidy/src/main.rs" (("bins::check") "//bins::check")) #t))))))))) (define-public rust-1.36 (let ((base-rust (rust-bootstrapped-package rust-1.35 "1.36.0" "06xv2p6zq03lidr0yaf029ii8wnjjqa894nkmrm6s0rx47by9i04"))) (package (inherit base-rust) (arguments (substitute-keyword-arguments (package-arguments base-rust) ((#:phases phases) `(modify-phases ,phases (delete 'patch-process-docs-rev-cmd)))))))) (define-public rust (let ((base-rust (rust-bootstrapped-package rust-1.36 "1.37.0" "1hrqprybhkhs6d9b5pjskfnc5z9v2l2gync7nb39qjb5s0h703hj"))) (package (inherit base-rust) (arguments (substitute-keyword-arguments (package-arguments base-rust) ((#:phases phases) `(modify-phases ,phases (add-before 'configure 'configure-cargo-home (lambda _ (let ((cargo-home (string-append (getcwd) "/.cargo"))) (mkdir-p cargo-home) (setenv "CARGO_HOME" cargo-home) #t))))))))))
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCAAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAl559ZwACgkQ5xo1VCwwuqVlEgf/VRRzFVB4oOLE9uTGzGXA2oDvJQ9DqTLuAdGL1U6tz6FLPHJ/vWAdQJFzmcplecOE+b64oMkW0TPi9bFJChR6V37eQhC7HTTNBI7ka2U+JoR5iDxpuqUf6o/uZLWXsEouDwDEjiwwH46YACh6VskBL2vfAuu/1y4nVVT5N6NxeyqnBkv6Ir2usHlJMwS0l0YzsNSF6Kb1riAnvuk/QKiZjJqvBP2uEhP+8B6YYrqFBtmJH8RA2anvXq1TQWpHKtH0VwGNjCRguu91EBGFgi2g3HRpdCgYGXjmKmwTEn3A6G0V+CaMHsmnpD4h/PBAj28L18RBw3SKVBBwr3/prbCyxg===mquH-----END PGP SIGNATURE-----

M
M
Marius Bakke wrote on 24 Mar 2020 15:45
(name . Danny Milosavljevic)(address . dannym@scratchpost.org)(address . 38110@debbugs.gnu.org)
87o8sl24mr.fsf@devup.no
Danny Milosavljevic <dannym@scratchpost.org> writes:
Toggle quote (13 lines)> Hi Marius,>> On Mon, 23 Mar 2020 23:16:07 +0100> Marius Bakke <mbakke@fastmail.com> wrote:>>> > Building rust, I get a texinfo build failure:>>> How are you building Rust? I've only used the Guix package definition>> and did not get as far as actually running the test suite. Do you have>> an updated build script?>> It's failing in texinfo, not in rust.
Oh right, sorry for the confusion.
Toggle quote (3 lines)> Also, on my laptop, it's not failing in texinfo. So I guess it has> something to do with bayfront or the machines it offloads to.
I haven't seen this in the countless times I've built core-updates overthe last few months, nor on Berlin. I suspect it has to do withparallelism; can you see if #:parallel-tests? #f makes a difference?
You should be able to grab a Texinfo substitute from ci.guix.gnu.orgthough.
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCgAdFiEEu7At3yzq9qgNHeZDoqBt8qM6VPoFAl56HQwACgkQoqBt8qM6VPoSrQgAsftWhVugmFh2f3cOjQ8EhnnwuIpV4aCKEyj66Q8DvvePoClZMYCp/r3EXb6cBLxnaSltd6CMrAOuB3/vEI/ojnyBm2Xc65t2Lf72iXuh1508I7x8IEnBD+wUb9EQlAPYEOZ4r08mHYgctBEdcEFZJPFwufI4mCMwhYXtcpwbEztkbty6d6i/Ui8xF6IW7BrwaTwzth3MjogaUf0Sg9D+EBv+gbXOd2nWAHYzMwISD5R8Koe77pt/v48F5E4zrR02vh/KETPOU2elKSgvcFwo+DDgKX4jga9mUNf6HHR4dkNJA5unZ5EwuUQsWJrIAZOZHuWPfDC747SI8wfM2irjSA===Dd/C-----END PGP SIGNATURE-----
M
M
Maxim Cournoyer wrote on 10 Dec 2020 22:55
(name . Marius Bakke)(address . mbakke@fastmail.com)
87pn3h5nrs.fsf@gmail.com
Hello Marius,
Marius Bakke <mbakke@fastmail.com> writes:
Toggle quote (27 lines)> Danny Milosavljevic <dannym@scratchpost.org> writes:>>> Hi Marius,>>>> On Mon, 23 Mar 2020 23:16:07 +0100>> Marius Bakke <mbakke@fastmail.com> wrote:>>>>> > Building rust, I get a texinfo build failure:>>>>> How are you building Rust? I've only used the Guix package definition>>> and did not get as far as actually running the test suite. Do you have>>> an updated build script?>>>> It's failing in texinfo, not in rust.>> Oh right, sorry for the confusion.>>> Also, on my laptop, it's not failing in texinfo. So I guess it has>> something to do with bayfront or the machines it offloads to.>> I haven't seen this in the countless times I've built core-updates over> the last few months, nor on Berlin. I suspect it has to do with> parallelism; can you see if #:parallel-tests? #f makes a difference?>> You should be able to grab a Texinfo substitute from ci.guix.gnu.org> though.
I don't recall how close or how far it was from actually building, butattached is a modified version of Danny's patch I was working on, thatapplies to current core-updates:
From 745ed53938b6e19268e0fc2cb07b7bc2131c151e Mon Sep 17 00:00:00 2001From: Danny Milosavljevic <dannym@scratchpost.org>Date: Tue, 18 Aug 2020 14:59:03 -0400Subject: [PATCH] gnu: rust: Bootstrap rust@1.29.0 by mrustc@0.9.
* gnu/packages/patches/mrustc-group-link.patch: New file.* gnu/packages/patches/rustc-1.29.0-src.patch: New file.* gnu/local.mk (dist_patch_DATA): Register new files.* gnu/packages/rust.scm (mrustc): Update rustc-version to 1.29.0 and applypatch.(rust-1.19): Delete variable.(rust-1.20, rust-1.21 rust-1.22, rust-1.23, rust-1.24): Likewise.(rust-1.25, rust-1.26, rust-1.27, rust-1.28): Delete variable.(rust-1.29): Bootstrap from mrustc and apply patch.(rust-1.30)[inputs]: Remove llvm 3. Add llvm 6.--- gnu/local.mk | 2 + gnu/packages/patches/mrustc-group-link.patch | 22 + gnu/packages/patches/rustc-1.29.0-src.patch | 86 +++ gnu/packages/rust.scm | 582 +++++-------------- 4 files changed, 242 insertions(+), 450 deletions(-) create mode 100644 gnu/packages/patches/mrustc-group-link.patch create mode 100644 gnu/packages/patches/rustc-1.29.0-src.patch
Toggle diff (935 lines)diff --git a/gnu/local.mk b/gnu/local.mkindex 9979e9172e..1d6d801e8d 100644--- a/gnu/local.mk+++ b/gnu/local.mk@@ -1361,6 +1361,7 @@ dist_patch_DATA = \ %D%/packages/patches/mozjs38-tracelogger.patch \ %D%/packages/patches/mozjs38-version-detection.patch \ %D%/packages/patches/mrrescue-support-love-11.patch \+ %D%/packages/patches/mrustc-group-link.patch \ %D%/packages/patches/mtools-mformat-uninitialized.patch \ %D%/packages/patches/mumps-build-parallelism.patch \ %D%/packages/patches/mumps-shared-libseq.patch \@@ -1588,6 +1589,7 @@ dist_patch_DATA = \ %D%/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch \ %D%/packages/patches/rust-1.45-linker-locale.patch \ %D%/packages/patches/rust-bootstrap-stage0-test.patch \+ %D%/packages/patches/rustc-1.29.0-src.patch \ %D%/packages/patches/rust-coresimd-doctest.patch \ %D%/packages/patches/rust-nettle-disable-vendor.patch \ %D%/packages/patches/rust-nettle-sys-disable-vendor.patch \diff --git a/gnu/packages/patches/mrustc-group-link.patch b/gnu/packages/patches/mrustc-group-link.patchnew file mode 100644index 0000000000..fec0dfbe69--- /dev/null+++ b/gnu/packages/patches/mrustc-group-link.patch@@ -0,0 +1,22 @@+Surround the libraries with --start-group and --end-group to work+around <https://github.com/thepowersgang/mrustc/issues/138>.++diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp+--- a/src/trans/codegen_c.cpp++++ b/src/trans/codegen_c.cpp+@@ -960,6 +960,7 @@ namespace {+ {+ args.push_back("-L"); args.push_back(path);+ }++ args.push_back("-Wl,--start-group");+ for(const auto& lib : m_crate.m_ext_libs) {+ ASSERT_BUG(Span(), lib.name != "", "");+ args.push_back("-l"); args.push_back(lib.name.c_str());+@@ -975,6 +976,7 @@ namespace {+ {+ args.push_back("-l"); args.push_back(path.c_str());+ }++ args.push_back("-Wl,--end-group");+ for( const auto& a : Target_GetCurSpec().m_backend_c.m_linker_opts )+ {+ args.push_back( a.c_str() );diff --git a/gnu/packages/patches/rustc-1.29.0-src.patch b/gnu/packages/patches/rustc-1.29.0-src.patchnew file mode 100644index 0000000000..0af626b615--- /dev/null+++ b/gnu/packages/patches/rustc-1.29.0-src.patch@@ -0,0 +1,86 @@+From mrustc 0.9.+# Add mrustc slice length intrinsics+--- rustc-1.29.0-src/src/libcore/intrinsics.rs++++ rustc-1.29.0-src/src/libcore/intrinsics.rs+@@ -678,5 +678,9 @@+ pub fn min_align_of_val<T: ?Sized>(_: &T) -> usize;+++ /// Obtain the length of a slice pointer++ #[cfg(rust_compiler="mrustc")]++ pub fn mrustc_slice_len<T>(pointer: *const [T]) -> usize;+++ /// Gets a static string slice containing the name of a type.+ pub fn type_name<T: ?Sized>() -> &'static str;++--- rustc-1.29.0-src/src/libcore/slice/mod.rs++++ rustc-1.29.0-src/src/libcore/slice/mod.rs+@@ -413,5 +413,7 @@+ pub const fn len(&self) -> usize {+- unsafe {+- Repr { rust: self }.raw.len+- }++ #[cfg(not(rust_compiler="mrustc"))]++ const fn len_inner<T>(s: &[T]) -> usize { unsafe { Repr { rust: s }.raw.len } };++ #[cfg(rust_compiler="mrustc")]++ const fn len_inner<T>(s: &[T]) -> usize { unsafe { ::intrinsics::mrustc_slice_len(s) } }++ len_inner(self)+ }+# Static-link rustc_codegen_llvm because mrustc doesn't have dylib support+--- rustc-1.29.0-src/src/librustc_driver/Cargo.toml++++ rustc-1.29.0-src/src/librustc_driver/Cargo.toml+@@ -39,1 +39,2 @@+ syntax_pos = { path = "../libsyntax_pos" }++rustc_codegen_llvm = { path = "../librustc_codegen_llvm" }+--- rustc-1.29.0-src/src/librustc_driver/lib.rs++++ rustc-1.29.0-src/src/librustc_driver/lib.rs+@@ -63,2 +63,3 @@+ extern crate syntax_pos;++extern crate rustc_codegen_llvm;++@@ -296,3 +296,7 @@+ }+++ if backend_name == "llvm" {++ return rustc_codegen_llvm::__rustc_codegen_backend;++ }+++ let target = session::config::host_triple();+# No workspace support in minicargo, patch cargo's Cargo.toml+--- rustc-1.29.0-src/src/tools/cargo/Cargo.toml++++ rustc-1.29.0-src/src/tools/cargo/Cargo.toml+@@ -60,5 +60,5 @@+ # A noop dependency that changes in the Rust repository, it's a bit of a hack.+ # See the `src/tools/rustc-workspace-hack/README.md` file in `rust-lang/rust`+ # for more information.+-rustc-workspace-hack = "1.0.0"++rustc-workspace-hack = { path = "../rustc-workspace-hack" }++# mrustc can't represent a 24 byte version of this enum (no way of storing the+# tag in padding)+--- rustc-1.29.0-src/src/librustc/ty/context.rs++++ rustc-1.29.0-src/src/librustc/ty/context.rs+@@ -805,5 +805,5 @@+ // Ensure our type representation does not grow+- #[cfg(target_pointer_width = "64")]+- assert!(mem::size_of::<ty::TypeVariants>() <= 24);+- #[cfg(target_pointer_width = "64")]+- assert!(mem::size_of::<ty::TyS>() <= 32);++ //#[cfg(target_pointer_width = "64")]++ //assert!(mem::size_of::<ty::TypeVariants>() <= 24);++ //#[cfg(target_pointer_width = "64")]++ //assert!(mem::size_of::<ty::TyS>() <= 32);++--- rustc-1.29.0-src/src/stdsimd/stdsimd/arch/detect/os/x86.rs++++ rustc-1.29.0-src/src/stdsimd/stdsimd/arch/detect/os/x86.rs+@@ -14,5 +14,11 @@+ /// Performs run-time feature detection.+ #[inline]++#[cfg(not(rust_compiler="mrustc"))]+ pub fn check_for(x: Feature) -> bool {+ cache::test(x as u32, detect_features)+ }++#[inline]++#[cfg(rust_compiler="mrustc")]++pub fn check_for(x: Feature) -> bool {++ false++}diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scmindex 35a96b5754..dd6db6da97 100644--- a/gnu/packages/rust.scm+++ b/gnu/packages/rust.scm@@ -116,7 +116,7 @@ (package-native-inputs base-rust)))))) (define-public mrustc- (let ((rustc-version "1.19.0"))+ (let ((rustc-version "1.29.0")) (package (name "mrustc") (version "0.9")@@ -126,6 +126,7 @@ (url "https://github.com/thepowersgang/mrustc") (commit (string-append "v" version)))) (file-name (git-file-name name version))+ (patches (search-patches "mrustc-group-link.patch")) (sha256 (base32 "194ny7vsks5ygiw7d8yxjmp1qwigd71ilchis6xjl6bb2sj97rd2"))))@@ -137,7 +138,7 @@ `(("bison" ,bison) ("flex" ,flex) ;; Required for the libstd sources.- ("rustc" ,(package-source rust-1.19))))+ ("rustc" ,(package-source rust-1.29)))) (arguments `(#:test-target "test" #:make-flags@@ -156,21 +157,17 @@ (add-after 'patch-date 'unpack-target-compiler (lambda* (#:key inputs outputs #:allow-other-keys) (invoke "tar" "xf" (assoc-ref inputs "rustc"))- (chdir ,(string-append "rustc-" rustc-version "-src"))- (invoke "patch" "-p0" ,(string-append "../rustc-" rustc-version+ (invoke "patch" "-p1" ,(string-append "rustc-" rustc-version "-src.patch"))- (chdir "..") (setenv "RUSTC_VERSION" ,rustc-version) (setenv "MRUSTC_TARGET_VER" ,(version-major+minor rustc-version)) (setenv "OUTDIR_SUF" "") #t)) (replace 'configure- (lambda* (#:key inputs #:allow-other-keys)- (setenv "CC" (string-append (assoc-ref inputs "gcc")- "/bin/gcc"))- (setenv "CXX" (string-append (assoc-ref inputs "gcc")- "/bin/g++"))+ (lambda _+ (setenv "CC" "gcc")+ (setenv "CXX" "g++") #t)) (add-after 'build 'build-minicargo (lambda* (#:key make-flags #:allow-other-keys)@@ -217,21 +214,24 @@ safety and thread safety guarantees.") ;; Dual licensed. (license (list license:asl2.0 license:expat))))) -(define rust-1.19+(define rust-1.29 (package (name "rust")- (version "1.19.0")+ (version "1.29.0") (source (origin (method url-fetch)- (uri (rust-uri "1.19.0"))- (sha256 (base32 "0l8c14qsf42rmkqy92ahij4vf356dbyspxcips1aswpvad81y8qm"))+ (uri (rust-uri "1.29.0"))+ (sha256 (base32 "1sb15znckj8pc8q3g7cq03pijnida6cg64yqmgiayxkzskzk9sx4")) (modules '((guix build utils))) (snippet '(begin (delete-file-recursively "src/llvm") #t))- (patches (search-patches "rust-1.19-mrustc.patch"))))- (outputs '("out" "cargo"))+ (patches (map search-patch '("rust-1.25-accept-more-detailed-gdb-lines.patch"+ "rust-reproducible-builds.patch"+ "rustc-1.29.0-src.patch")))))+ (outputs '("out" "cargo" "doc")) (properties '((timeout . 72000) ;20 hours (max-silent-time . 18000))) ;5 hours (for armel)+ (build-system gnu-build-system) (arguments `(#:imported-modules ,%cargo-utils-modules ;for `generate-all-checksums' #:modules ((guix build utils) (ice-9 match) (guix build gnu-build-system))@@ -244,27 +244,9 @@ safety and thread safety guarantees.") (setenv "SHELL" (which "sh")) (setenv "CONFIG_SHELL" (which "sh")) (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))- ;; guix llvm-3.9.1 package installs only shared libraries+ ;; The Guix LLVM package installs only shared libraries. (setenv "LLVM_LINK_SHARED" "1") #t))- (add-after 'unpack 'patch-cargo-tomls- (lambda* (#:key inputs outputs #:allow-other-keys)- (substitute* "src/librustc_errors/Cargo.toml"- (("[[]dependencies[]]") "-[dependencies]-term = \"0.4.4\"-"))- (substitute* "src/librustc/Cargo.toml"- (("[[]dependencies[]]") "-[dependencies]-getopts = { path = \"../libgetopts\" }-"))- (substitute* "src/librustdoc/Cargo.toml"- (("[[]dependencies[]]") "-[dependencies]-test = { path = \"../libtest\" }-"))- #t)) (add-after 'unpack 'patch-tests (lambda* (#:key inputs #:allow-other-keys) (let ((bash (assoc-ref inputs "bash")))@@ -283,27 +265,29 @@ test = { path = \"../libtest\" } #[ignore] fn test_process_mask")) #t)))+ (add-after 'patch-tests 'patch-cargo-index-update+ (lambda* _+ (substitute* "src/tools/cargo/tests/testsuite/generate_lockfile.rs"+ ;; This test wants to update the crate index.+ (("fn no_index_update") "#[ignore]\nfn no_index_update"))+ #t)) (add-after 'patch-tests 'patch-aarch64-test (lambda* _- (substitute* "src/librustc_back/dynamic_lib.rs"+ (substitute* "src/librustc_metadata/dynamic_lib.rs" ;; This test is known to fail on aarch64 and powerpc64le: ;; https://github.com/rust-lang/rust/issues/45410 (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))- #t))- (add-after 'patch-tests 'use-readelf-for-tests- (lambda* _- ;; nm doesn't recognize the file format because of the- ;; nonstandard sections used by the Rust compiler, but readelf- ;; ignores them.- (substitute* "src/test/run-make/atomic-lock-free/Makefile"- (("\tnm ")- "\treadelf -c "))+ ;; This test fails on aarch64 with llvm@6.0:+ ;; https://github.com/rust-lang/rust/issues/49807+ ;; other possible solution:+ ;; https://github.com/rust-lang/rust/pull/47688+ (delete-file "src/test/debuginfo/by-value-self-argument-in-trait-impl.rs") #t)) (add-after 'patch-tests 'remove-unsupported-tests (lambda* _ ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH. ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>- (delete-file-recursively "src/test/run-make/linker-output-non-utf8")+ (delete-file-recursively "src/test/run-make-fulldeps/linker-output-non-utf8") #t)) (add-after 'patch-source-shebangs 'patch-cargo-checksums (lambda* _@@ -315,28 +299,36 @@ test = { path = \"../libtest\" } #t)) ;; This phase is overridden by newer versions. (replace 'configure- (const #t))+ (lambda _+ (setenv "CXX" "g++")+ (setenv "HOST_CXX" "g++")+ #t)) ;; This phase is overridden by newer versions. (replace 'build- (lambda* (#:key inputs outputs #:allow-other-keys)- (let ((rustc-bootstrap (assoc-ref inputs "rustc-bootstrap")))+ (lambda* (#:key inputs outputs parallel-build? #:allow-other-keys)+ (let ((rustc-bootstrap (assoc-ref inputs "rustc-bootstrap"))+ (job-count (if parallel-build?+ (number->string (parallel-job-count))+ "1"))) (setenv "CFG_COMPILER_HOST_TRIPLE" ,(nix-system->gnu-triplet (%current-system))) (setenv "CFG_RELEASE" "") (setenv "CFG_RELEASE_CHANNEL" "stable") (setenv "CFG_LIBDIR_RELATIVE" "lib")- (setenv "CFG_VERSION" "1.19.0-stable-mrustc")+ (setenv "CFG_VERSION" "1.29.0-stable-mrustc") (setenv "MRUSTC_TARGET_VER" ,(version-major+minor version)) ; bad: (setenv "CFG_PREFIX" "mrustc") ; FIXME output path.- (mkdir-p "output")- ;; mrustc 0.9 doesn't check the search paths for crates anymore.+ ;; Crate::load_extern_crate ignores the search path, so make+ ;; the situation easier for it.+ ;; Also, mrustc 0.9 doesn't check the search paths for crates+ ;; anymore. (copy-recursively (string-append rustc-bootstrap "/lib/mrust") "output") (invoke (string-append rustc-bootstrap "/tools/bin/minicargo") "src/rustc" "--vendor-dir" "src/vendor" "--output-dir" "output/rustc-build" "-L" (string-append rustc-bootstrap "/lib/mrust")- "-j" "1")+ "-j" job-count) (setenv "CFG_COMPILER_HOST_TRIPLE" #f) (setenv "CFG_RELEASE" #f) (setenv "CFG_RELEASE_CHANNEL" #f)@@ -346,9 +338,8 @@ test = { path = \"../libtest\" } (invoke (string-append rustc-bootstrap "/tools/bin/minicargo") "src/tools/cargo" "--vendor-dir" "src/vendor" "--output-dir" "output/cargo-build"- "-L" "output/" "-L" (string-append rustc-bootstrap "/lib/mrust")- "-j" "1")+ "-j" job-count) ;; Now use the newly-built rustc to build the libraries. ;; One day that could be replaced by: ;; (invoke "output/cargo-build/cargo" "build"@@ -362,7 +353,7 @@ test = { path = \"../libtest\" } (write name) (newline) (apply invoke- "output/rustc-build/rustc"+ "output/rustc-build/rustc_binary" "-C" (string-append "linker=" (getenv "CC")) ;; Required for libterm.@@ -387,9 +378,7 @@ test = { path = \"../libtest\" } ;; Uses "cc" to link. ("libstd" "-l" "dl" "-l" "rt" "-l" "pthread") ("libarena")- ;; Test dependencies:- ("libgetopts") ("libterm") ("libtest")))@@ -417,7 +406,6 @@ test = { path = \"../libtest\" } (string-append (assoc-ref outputs "cargo") "/bin"))) #t)))))- (build-system gnu-build-system) (native-inputs `(("bison" ,bison) ; For the tests ("cmake" ,cmake-minimal)@@ -433,36 +421,22 @@ test = { path = \"../libtest\" } ("which" ,which))) (inputs `(("jemalloc" ,jemalloc-4.5.0)- ("llvm" ,llvm-3.9.1)+ ("llvm" ,llvm-6) ("openssl" ,openssl-1.0) ("libssh2" ,libssh2) ; For "cargo" ("libcurl" ,curl))) ; For "cargo"-- ;; rustc invokes gcc, so we need to set its search paths accordingly.- ;; Note: duplicate its value here to cope with circular dependencies among- ;; modules (see <https://bugs.gnu.org/31392>).- (native-search-paths- (list (search-path-specification- (variable "C_INCLUDE_PATH")- (files '("include")))- (search-path-specification- (variable "CPLUS_INCLUDE_PATH")- (files '("include/c++" "include")))- (search-path-specification- (variable "LIBRARY_PATH")- (files '("lib" "lib64")))))-- (synopsis "Compiler for the Rust programming language")+ (native-search-paths (package-native-search-paths gcc))+ (synopsis "Compiler for the Rust progamming language") (description "Rust is a systems programming language that provides memory safety and thread safety guarantees.") (home-page "https://www.rust-lang.org") ;; Dual licensed. (license (list license:asl2.0 license:expat)))) -(define-public rust-1.20+(define-public rust-1.30 (let ((base-rust- (rust-bootstrapped-package rust-1.19 "1.20.0"- "0542y4rnzlsrricai130mqyxl8r6rd991frb4qsnwb27yigqg91a")))+ (rust-bootstrapped-package rust-1.29 "1.30.1"+ "0aavdc1lqv0cjzbqwl5n59yd0bqdlhn0zas61ljf38yrvc18k8rn"))) (package (inherit base-rust) (source@@ -471,24 +445,45 @@ safety and thread safety guarantees.") (snippet '(begin (delete-file-recursively "src/jemalloc") (delete-file-recursively "src/llvm")+ (delete-file-recursively "src/llvm-emscripten")+ (delete-file-recursively "src/tools/clang")+ (delete-file-recursively "src/tools/lldb") #t)) (patches '())))- (native-inputs- `(;; The tests fail with newer versions of GNU Make.- ("make" ,gnu-make-4.2)- ,@(package-native-inputs base-rust))) (outputs '("out" "doc" "cargo"))- ;; Since rust-1.19 is local, it's quite probable that Hydra- ;; will build rust-1.19 only as a dependency of rust-1.20.+ ;; Since rust-1.29 is local, it's quite probable that Hydra+ ;; will build rust-1.29 only as a dependency of rust-1.30. ;; But then Hydra will use the wrong properties, the ones here,- ;; for rust-1.19. Therefore, we copied the properties of- ;; rust-1.19 here.+ ;; for rust-1.29. Therefore, we copied the properties of+ ;; rust-1.29 here. (properties '((timeout . 72000) ;20 hours (max-silent-time . 18000))) ;5 hours (for armel)+ (inputs+ ;; Use LLVM 6.0+ (alist-replace "llvm" (list llvm-6)+ (package-inputs base-rust))) (arguments- (substitute-keyword-arguments (package-arguments rust-1.19)+ (substitute-keyword-arguments (package-arguments rust-1.29) ((#:phases phases) `(modify-phases ,phases+ (add-after 'unpack 'remove-flaky-test+ (lambda _+ ;; See <https://github.com/rust-lang/rust/issues/43402>.+ (when (file-exists? "src/test/run-make/issue-26092")+ (delete-file-recursively "src/test/run-make/issue-26092"))+ #t))+ (add-after 'configure 'enable-codegen-tests+ ;; Codegen tests should pass with llvm 6, so enable them.+ (lambda* _+ (substitute* "config.toml"+ (("codegen-tests = false") ""))+ #t))+ ;; The test has been moved elsewhere.+ (add-after 'patch-tests 'disable-amd64-avx-test+ (lambda _+ (substitute* "src/test/ui/issues/issue-44056.rs"+ (("only-x86_64") "ignore-test"))+ #t)) (add-after 'patch-tests 'patch-cargo-tests (lambda _ (substitute* "src/tools/cargo/tests/build.rs"@@ -510,12 +505,29 @@ safety and thread safety guarantees.") (("fn finds_author_git") "#[ignore]\nfn finds_author_git") (("fn finds_local_author_git") "#[ignore]\nfn finds_local_author_git")) #t))- (add-after 'patch-cargo-tests 'ignore-glibc-2.27-incompatible-test- ;; https://github.com/rust-lang/rust/issues/47863- (lambda _- (substitute* "src/test/run-pass/out-of-stack.rs"- (("// ignore-android") "// ignore-test\n// ignore-android"))- #t))+ (add-after 'patch-cargo-tests 'patch-cargo-env-shebang+ (lambda* (#:key inputs #:allow-other-keys)+ (let ((coreutils (assoc-ref inputs "coreutils")))+ (substitute* "src/tools/cargo/tests/testsuite/fix.rs"+ ;; Cargo has a test which explicitly sets a+ ;; RUSTC_WRAPPER environment variable which points+ ;; to /usr/bin/env. Since it's not a shebang, it+ ;; needs to be manually patched+ (("\"/usr/bin/env\"")+ (string-append "\"" coreutils "/bin/env\"")))+ #t)))+ (add-after 'patch-cargo-env-shebang 'ignore-cargo-package-tests+ (lambda* _+ (substitute* "src/tools/cargo/tests/testsuite/package.rs"+ ;; These tests largely check that cargo outputs warning/error+ ;; messages as expected. It seems that cargo outputs an+ ;; absolute path to something in the store instead of the+ ;; expected relative path (e.g. `[..]`) so we'll ignore+ ;; these for now+ (("fn include") "#[ignore]\nfn include")+ (("fn exclude") "#[ignore]\nfn exclude"))+ #t))+ (replace 'configure (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out"))@@ -567,16 +579,6 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\" "/tmp/cc") (setenv "PATH" (string-append "/tmp:" (getenv "PATH"))) #t))- (add-after 'provide-cc 'configure-archiver- (lambda* (#:key inputs #:allow-other-keys)- (substitute* "src/build_helper/lib.rs"- ;; Make sure "ar" is always used as the archiver.- (("\"musl\"") "\"\"")- ;; Then substitute "ar" by our name.- (("\"ar\"") (string-append "\""- (assoc-ref inputs "binutils")- "/bin/ar\"")))- #t)) (delete 'patch-cargo-tomls) (add-before 'build 'reset-timestamps-after-changes (lambda* _@@ -593,11 +595,14 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\" (invoke "./x.py" "build" "src/tools/cargo"))) (replace 'check (lambda* _- ;; Disable parallel execution to prevent EAGAIN errors when- ;; running tests.- (invoke "./x.py" "-j1" "test" "-vv")- (invoke "./x.py" "-j1" "test" "src/tools/cargo")- #t))+ ;; Enable parallel execution.+ (let ((parallel-job-spec+ (string-append "-j" (number->string+ (min 4+ (parallel-job-count))))))+ (invoke "./x.py" parallel-job-spec "test" "-vv")+ (invoke "./x.py" parallel-job-spec "test"+ "src/tools/cargo")))) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (invoke "./x.py" "install")@@ -636,341 +641,6 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\" `("LIBRARY_PATH" ":" suffix (,(string-append libc "/lib")))) #t)))))))))) -(define-public rust-1.21- (let ((base-rust (rust-bootstrapped-package rust-1.20 "1.21.0"- "1yj8lnxybjrybp00fqhxw8fpr641dh8wcn9mk44xjnsb4i1c21qp")))- (package- (inherit base-rust)- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'configure 'remove-ar- (lambda* (#:key inputs #:allow-other-keys)- ;; Remove because toml complains about "unknown field".- (substitute* "config.toml"- (("^ar =.*") "\n"))- #t)))))))))--(define-public rust-1.22- (let ((base-rust (rust-bootstrapped-package rust-1.21 "1.22.1"- "1lrzzp0nh7s61wgfs2h6ilaqi6iq89f1pd1yaf65l87bssyl4ylb")))- (package- (inherit base-rust)- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'unpack 'remove-flaky-test- (lambda _- ;; See <https://github.com/rust-lang/rust/issues/43402>.- (when (file-exists? "src/test/run-make/issue-26092")- (delete-file-recursively "src/test/run-make/issue-26092"))- #t)))))))))--(define-public rust-1.23- (let ((base-rust (rust-bootstrapped-package rust-1.22 "1.23.0"- "14fb8vhjzsxlbi6yrn1r6fl5dlbdd1m92dn5zj5gmzfwf4w9ar3l")))- (package- (inherit base-rust)- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (delete 'configure-archiver)- (delete 'remove-ar)- (add-after 'unpack 'dont-build-native- (lambda _- ;; XXX: Revisit this when we use gcc 6.- (substitute* "src/binaryen/CMakeLists.txt"- (("ADD_COMPILE_FLAG\\(\\\"-march=native\\\"\\)") ""))- #t)))))))))--(define-public rust-1.24- (let ((base-rust- (rust-bootstrapped-package rust-1.23 "1.24.1"- "1vv10x2h9kq7fxh2v01damdq8pvlp5acyh1kzcda9sfjx12kv99y")))- (package- (inherit base-rust)- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (delete 'use-readelf-for-tests)- (replace 'patch-aarch64-test- (lambda* _- (substitute* "src/librustc_metadata/dynamic_lib.rs"- ;; This test is known to fail on aarch64 and powerpc64le:- ;; https://github.com/rust-lang/rust/issues/45410- (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))- #t)))))))))--;;; Rust 1.25 release support work with llvm 6--but build with llvm 6 is-;;; not determenistic due to <https://github.com/rust-lang/rust/issues/50556>.-;;; 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"- "0baxjr99311lvwdq0s38bipbnj72pn6fgbk6lcq7j555xq53mxpf")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (snippet '(begin- (delete-file-recursively "src/jemalloc")- (delete-file-recursively "src/llvm")- (delete-file-recursively "src/llvm-emscripten")- #t))- (patches (search-patches- "rust-1.25-accept-more-detailed-gdb-lines.patch"))))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'patch-cargo-tests 'patch-cargo-index-update- (lambda _- (substitute* "src/tools/cargo/tests/generate-lockfile.rs"- ;; This test wants to update the crate index.- (("fn no_index_update") "#[ignore]\nfn no_index_update"))- #t))- (replace 'patch-aarch64-test- (lambda _- (substitute* "src/librustc_metadata/dynamic_lib.rs"- ;; This test is known to fail on aarch64 and powerpc64le:- ;; https://github.com/rust-lang/rust/issues/45410- (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))- ;; This test fails on aarch64 with llvm@6.0:- ;; https://github.com/rust-lang/rust/issues/49807- ;; other possible solution:- ;; https://github.com/rust-lang/rust/pull/47688- (delete-file "src/test/debuginfo/by-value-self-argument-in-trait-impl.rs")- #t))- (delete 'ignore-glibc-2.27-incompatible-test))))))))--(define-public rust-1.26- (let ((base-rust- (rust-bootstrapped-package rust-1.25 "1.26.2"- "0047ais0fvmqvngqkdsxgrzhb0kljg8wy85b01kbbjc88hqcz7pv")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (patches (search-patches- "rust-coresimd-doctest.patch"- "rust-1.25-accept-more-detailed-gdb-lines.patch"))))- (inputs- (alist-replace "openssl" (list openssl)- (package-inputs base-rust)))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- ;; binaryen was replaced with LLD project from LLVM- (delete 'dont-build-native)- (replace 'check- (lambda* _- ;; Enable parallel execution.- (let ((parallel-job-spec- (string-append "-j" (number->string- (min 4- (parallel-job-count))))))- (invoke "./x.py" parallel-job-spec "test" "-vv")- (invoke "./x.py" parallel-job-spec "test"- "src/tools/cargo"))))- (replace 'remove-unsupported-tests- (lambda* _- ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH.- ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>- (delete-file-recursively "src/test/run-make-fulldeps/linker-output-non-utf8")- #t))- (replace 'patch-cargo-tests- (lambda* _- (substitute* "src/tools/cargo/tests/testsuite/build.rs"- (("/usr/bin/env") (which "env"))- ;; Guix llvm is compiled without asmjs-unknown-emscripten.- (("fn wasm32_final_outputs") "#[ignore]\nfn wasm32_final_outputs"))- (substitute* "src/tools/cargo/tests/testsuite/death.rs"- ;; This is stuck when built in container.- (("fn ctrl_c_kills_everyone") "#[ignore]\nfn ctrl_c_kills_everyone"))- ;; Prints test output in the wrong order when built on- ;; i686-linux.- (substitute* "src/tools/cargo/tests/testsuite/test.rs"- (("fn cargo_test_env") "#[ignore]\nfn cargo_test_env"))-- ;; Avoid dependency on "git".- (substitute* "src/tools/cargo/tests/testsuite/new.rs"- (("fn author_prefers_cargo") "#[ignore]\nfn author_prefers_cargo")- (("fn finds_author_git") "#[ignore]\nfn finds_author_git")- (("fn finds_local_author_git") "#[ignore]\nfn finds_local_author_git"))- #t))- (add-after 'patch-cargo-tests 'disable-cargo-test-for-nightly-channel- (lambda* _- ;; This test failed to work on "nightly" channel builds- ;; https://github.com/rust-lang/cargo/issues/5648- (substitute* "src/tools/cargo/tests/testsuite/resolve.rs"- (("fn test_resolving_minimum_version_with_transitive_deps")- "#[ignore]\nfn test_resolving_minimum_version_with_transitive_deps"))- #t))- (replace 'patch-cargo-index-update- (lambda* _- (substitute* "src/tools/cargo/tests/testsuite/generate_lockfile.rs"- ;; This test wants to update the crate index.- (("fn no_index_update") "#[ignore]\nfn no_index_update"))- #t)))))))))--(define-public rust-1.27- (let ((base-rust- (rust-bootstrapped-package rust-1.26 "1.27.2"- "0pg1s37bhx9zqbynxyydq5j6q7kij9vxkcv8maz0m25prm88r0cs")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (patches (search-patches "rust-coresimd-doctest.patch"- "rust-bootstrap-stage0-test.patch"- "rust-1.25-accept-more-detailed-gdb-lines.patch"- "rust-reproducible-builds.patch"))))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-before 'install 'mkdir-prefix-paths- (lambda* (#:key outputs #:allow-other-keys)- ;; As result of https://github.com/rust-lang/rust/issues/36989- ;; `prefix' directory should exist before `install' call- (mkdir-p (assoc-ref outputs "out"))- (mkdir-p (assoc-ref outputs "cargo"))- #t))- (add-after 'patch-cargo-tests 'disable-thinlto-test- (lambda* _- ;; thinlto required llvm 6.0 for work- (substitute* "src/tools/cargo/tests/testsuite/path.rs"- (("fn thin_lto_works") "#[ignore]\nfn thin_lto_works"))- #t)))))))))--(define-public rust-1.28- (let ((base-rust- (rust-bootstrapped-package rust-1.27 "1.28.0"- "11k4rn77bca2rikykkk9fmprrgjswd4x4kaq7fia08vgkir82nhx")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (patches (search-patches "rust-coresimd-doctest.patch"- "rust-bootstrap-stage0-test.patch"- "rust-1.25-accept-more-detailed-gdb-lines.patch"- "rust-reproducible-builds.patch"))))- (inputs- ;; Use LLVM 6.0- (alist-replace "llvm" (list llvm-6)- (package-inputs base-rust)))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'configure 'enable-codegen-tests- ;; Codegen tests should pass with llvm 6, so enable them.- (lambda* _- (substitute* "config.toml"- (("codegen-tests = false") ""))- #t))- (add-after 'patch-tests 'disable-amd64-avx-test- ;; That test would fail on x86_64 machines without avx.- (lambda* _- (substitute* "src/test/run-pass/issue-44056.rs"- (("only-x86_64") "ignore-test"))- #t))- ;; This is no longer needed as of 1.28- (delete 'disable-cargo-test-for-nightly-channel)- ;; The thinlto test should pass with llvm 6.- (delete 'disable-thinlto-test))))))))--(define-public rust-1.29- (let ((base-rust- (rust-bootstrapped-package rust-1.28 "1.29.2"- "1jb787080z754caa2w3w1amsygs4qlzj9rs1vy64firfmabfg22h")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (patches (search-patches "rust-1.25-accept-more-detailed-gdb-lines.patch"- "rust-reproducible-builds.patch")))))))--(define-public rust-1.30- (let ((base-rust- (rust-bootstrapped-package rust-1.29 "1.30.1"- "0aavdc1lqv0cjzbqwl5n59yd0bqdlhn0zas61ljf38yrvc18k8rn")))- (package- (inherit base-rust)- (source- (origin- (inherit (package-source base-rust))- (snippet '(begin- (delete-file-recursively "src/jemalloc")- (delete-file-recursively "src/llvm")- (delete-file-recursively "src/llvm-emscripten")- (delete-file-recursively "src/tools/clang")- (delete-file-recursively "src/tools/lldb")- #t))))- (arguments- (substitute-keyword-arguments (package-arguments base-rust)- ((#:phases phases)- `(modify-phases ,phases- (add-after 'patch-cargo-tests 'patch-cargo-env-shebang- (lambda* (#:key inputs #:allow-other-keys)- (let ((coreutils (assoc-ref inputs "coreutils")))- (substitute* "src/tools/cargo/tests/testsuite/fix.rs"- ;; Cargo has a test which explicitly sets a- ;; RUSTC_WRAPPER environment variable which points- ;; to /usr/bin/env. Since it's not a shebang, it- ;; needs to be manually patched- (("\"/usr/bin/env\"")- (string-append "\"" coreutils "/bin/env\"")))- #t)))- (add-after 'patch-cargo-env-shebang 'ignore-cargo-package-tests- (lambda* _- (substitute* "src/tools/cargo/tests/testsuite/package.rs"- ;; These tests largely check that cargo outputs warning/error- ;; messages as expected. It seems that cargo outputs an- ;; absolute path to something in the store instead of the- ;; expected relative path (e.g. `[..]`) so we'll ignore- ;; these for now- (("fn include") "#[ignore]\nfn include")- (("fn exclude") "#[ignore]\nfn exclude"))- #t))- ;; The test has been moved elsewhere.- (replace 'disable-amd64-avx-test- (lambda _- (substitute* "src/test/ui/run-pass/issues/issue-44056.rs"- (("only-x86_64") "ignore-test"))- #t)))))))))--(define (patch-command-exec-tests-phase test-path)- "The command-exec.rs test moves around between releases. We need to apply-a Guix-specific patch to it for each release. This function generates the phase-that applies said patch, parametrized by the test-path. This is done this way-because the phase is more complex than the equivalents for other tests that-move around."- `(lambda* (#:key inputs #:allow-other-keys)- (let ((coreutils (assoc-ref inputs "coreutils")))- (substitute* ,test-path- ;; This test suite includes some tests that the stdlib's- ;; `Command` execution properly handles situations where- ;; the environment or PATH variable are empty, but this- ;; fails since we don't have `echo` available in the usual- ;; Linux directories.- ;; NB: the leading space is so we don't fail a tidy check- ;; for trailing whitespace, and the newlines are to ensure- ;; we don't exceed the 100 chars tidy check as well- ((" Command::new\\(\"echo\"\\)")- (string-append "\nCommand::new(\"" coreutils "/bin/echo\")\n")))- #t)))- (define-public rust-1.31 (let ((base-rust (rust-bootstrapped-package rust-1.30 "1.31.1"@@ -982,14 +652,26 @@ move around." ((#:phases phases) `(modify-phases ,phases (add-after 'patch-tests 'patch-command-exec-tests- ,(patch-command-exec-tests-phase- "src/test/run-pass/command-exec.rs"))- ;; The test has been moved elsewhere.+ (lambda* (#:key inputs #:allow-other-keys)+ (let ((coreutils (assoc-ref inputs "coreutils")))+ (substitute* "src/test/run-pass/command-exec.rs"+ ;; This test suite includes some tests that the stdlib's+ ;; `Command` execution properly handles situations where+ ;; the environment or PATH variable are empty, but this+ ;; fails since we don't have `echo` available in the usual+ ;; Linux directories.+ ;; NB: the leading space is so we don't fail a tidy check+ ;; for trailing whitespace, and the newlines are to ensure+ ;; we don't exceed the 100 chars tidy check as well+ ((" Command::new\\(\"echo\"\\)")+ (string-append "\nCommand::new(\"" coreutils "/bin/echo\")\n")))+ #t)))+ ;; The test has been moved elsewhere. (replace 'disable-amd64-avx-test (lambda _ (substitute* "src/test/ui/issues/issue-44056.rs"- (("only-x86_64") "ignore-test"))- #t))+ (("only-x86_64") "ignore-test"))+ #t)) (add-after 'patch-tests 'patch-process-docs-rev-cmd (lambda* _ ;; Disable some doc tests which depend on the "rev" command@@ -1131,7 +813,7 @@ move around." `(modify-phases ,phases (delete 'patch-process-docs-rev-cmd)))))))) -(define-public rust-1.37+(define-public rust (let ((base-rust (rust-bootstrapped-package rust-1.36 "1.37.0" "1hrqprybhkhs6d9b5pjskfnc5z9v2l2gync7nb39qjb5s0h703hj")))-- 2.29.2
Perhaps it can be useful.
Maxim
M
M
Maxim Cournoyer wrote on 5 Feb 15:58 +0100
Re: bug#38110: [PATCH 0/2] Bootstrap rust@1.29.0 directly from mrustc@0.9.
(name . Marius Bakke)(address . mbakke@fastmail.com)
87czxeo92y.fsf_-_@gmail.com
Hello,
Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:
Toggle quote (41 lines)> Hello Marius,>> Marius Bakke <mbakke@fastmail.com> writes:>>> Danny Milosavljevic <dannym@scratchpost.org> writes:>>>>> Hi Marius,>>>>>> On Mon, 23 Mar 2020 23:16:07 +0100>>> Marius Bakke <mbakke@fastmail.com> wrote:>>>>>>> > Building rust, I get a texinfo build failure:>>>>>>> How are you building Rust? I've only used the Guix package definition>>>> and did not get as far as actually running the test suite. Do you have>>>> an updated build script?>>>>>> It's failing in texinfo, not in rust.>>>> Oh right, sorry for the confusion.>>>>> Also, on my laptop, it's not failing in texinfo. So I guess it has>>> something to do with bayfront or the machines it offloads to.>>>> I haven't seen this in the countless times I've built core-updates over>> the last few months, nor on Berlin. I suspect it has to do with>> parallelism; can you see if #:parallel-tests? #f makes a difference?>>>> You should be able to grab a Texinfo substitute from ci.guix.gnu.org>> though.>> I don't recall how close or how far it was from actually building, but> attached is a modified version of Danny's patch I was working on, that> applies to current core-updates:>>>> Perhaps it can be useful.>> Maxim
I ended up pushing a heavily modified version of the original patch fromDanny, as commit df93fc21a4 on core-updates.
Closing.
Thank you!
Maxim
Closed
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send email to 38110@debbugs.gnu.org