From: Nils Gillmann <ng0@n0.is>
To: Nikolai Merinov <nikolai.merinov@member.fsf.org>
Cc: 31955@debbugs.gnu.org
Subject: [bug#31955] [PATCH] gnu: rust: support build with glibc-2.27, update to 1.26.2
Date: Wed, 4 Jul 2018 09:31:37 +0000 [thread overview]
Message-ID: <20180704093137.js36pzgp7w3foe5p@abyayala> (raw)
In-Reply-To: <87in68i6b2.fsf@member.fsf.org>
Hi Nikolai, comments inlined below.
Nikolai Merinov transcribed 13K bytes:
> * gnu/packages/rust.scm (rust-source, rust-bootstrapped-package): Allow to
> specify list of patches to rust sources. Update all rust new releases to use
> `rust-bootstrapped-package' as base package.
> (rust-1.19): Split `patch-test' code to several phases to make it easier to
> change code in next releases.
> (rust-1.23): Disable "run-pass/out-of-stack.rs" test due to rust issue #47863.
> (rust-1.24): Instead of rewriting `patch-test' phase fix only required places.
> (rust-1.25): Switch to LLVM 6.0 that was supported starting from rust 1.25
> release. Enable "run-pass/out-of-stack.rs" back in release that can work with
> glibc-2.27. Enable rust codegen tests back.
> (rust): new package for 1.26.2 rust release with many changes in paths to old
> tests.
> * gnu/packages/patches/rust-coresimd-doctest.patch: use "avx" processor
> feature for _mm256 operations.
> ---
> .../patches/rust-coresimd-doctest.patch | 19 ++
> gnu/packages/rust.scm | 168 ++++++++++++------
> 2 files changed, 128 insertions(+), 59 deletions(-)
> create mode 100644 gnu/packages/patches/rust-coresimd-doctest.patch
I think i nthe file below you should mention the source and/or its
intention. commitid and URL if you did not write it youself. Better
even would be a short comment.
> diff --git a/gnu/packages/patches/rust-coresimd-doctest.patch b/gnu/packages/patches/rust-coresimd-doctest.patch
> new file mode 100644
> index 000000000..a3ea2e94e
> --- /dev/null
> +++ b/gnu/packages/patches/rust-coresimd-doctest.patch
> @@ -0,0 +1,19 @@
> +Use correct feature for __m256
> +--- rustc-1.26.2-src-orig/src/stdsimd/coresimd/x86/mod.rs 1970-01-01 05:00:00.000000000 +0500
> ++++ rustc-1.26.2-src/src/stdsimd/coresimd/x86/mod.rs 2018-06-22 00:01:55.142026720 +0500
> +@@ -293,13 +293,13 @@
> + /// use std::arch::x86_64::*;
> + ///
> + /// # fn main() {
> +- /// # #[target_feature(enable = "sse")]
> ++ /// # #[target_feature(enable = "avx")]
> + /// # unsafe fn foo() {
> + /// let eight_zeros = _mm256_setzero_ps();
> + /// let eight_ones = _mm256_set1_ps(1.0);
> + /// let eight_floats = _mm256_set_ps(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0);
> + /// # }
> +- /// # if is_x86_feature_detected!("sse") { unsafe { foo() } }
> ++ /// # if is_x86_feature_detected!("avx") { unsafe { foo() } }
> + /// # }
> + /// ```
> + pub struct __m256(f32, f32, f32, f32, f32, f32, f32, f32);
> diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
> index 7fcc795b6..fcd79e37b 100644
> --- a/gnu/packages/rust.scm
> +++ b/gnu/packages/rust.scm
> @@ -157,14 +157,15 @@ in turn be used to build the final Rust.")
> (license license:asl2.0)))
>
> \f
> -(define (rust-source version hash)
> +(define* (rust-source version hash #:key (patches '()))
> (origin
> (method url-fetch)
> (uri (string-append "https://static.rust-lang.org/dist/"
> "rustc-" version "-src.tar.gz"))
> (sha256 (base32 hash))
> (modules '((guix build utils)))
> - (snippet '(begin (delete-file-recursively "src/llvm") #t))))
> + (snippet '(begin (delete-file-recursively "src/llvm") #t))
> + (patches (map search-patch patches))))
>
> (define-public rust-1.19
> (package
> @@ -203,20 +204,29 @@ in turn be used to build the final Rust.")
> (("fn test_process_mask") "#[allow(unused_attributes)]
> #[ignore]
> fn test_process_mask"))
> - ;; 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")
> - (substitute* "src/librustc_back/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"))
> - ;; 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 "))
> #t)))
> + (add-after 'patch-tests 'patch-aarch64-test
> + (lambda* _
> + (substitute* "src/librustc_back/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 "))
> + #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")
> + #t))
> (add-after 'patch-source-shebangs 'patch-cargo-checksums
> (lambda* _
> (substitute* "src/Cargo.lock"
> @@ -279,13 +289,14 @@ safety and thread safety guarantees.")
> ;; Dual licensed.
> (license (list license:asl2.0 license:expat))))
>
> -(define (rust-bootstrapped-package base-rust version checksum)
> - "Bootstrap rust VERSION with source checksum CHECKSUM using BASE-RUST."
> +(define* (rust-bootstrapped-package base-rust version checksum
> + #:key (patches '()))
> + "Bootstrap rust VERSION with source checksum CHECKSUM patched with PATCHES using BASE-RUST."
> (package
> (inherit base-rust)
> (version version)
> (source
> - (rust-source version checksum))
> + (rust-source version checksum #:patches patches))
> (native-inputs
> (alist-replace "cargo-bootstrap" (list base-rust "cargo")
> (alist-replace "rustc-bootstrap" (list base-rust)
> @@ -410,7 +421,12 @@ safety and thread safety guarantees.")
> (substitute* "src/tools/cargo/tests/test.rs"
> (("fn cargo_test_env") "#[ignore]\nfn cargo_test_env"))
> #t))
> - (add-after 'patch-cargo-tests 'fix-mtime-bug
> + (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"))))
> + (add-after 'ignore-glibc-2.27-incompatible-test 'fix-mtime-bug
> (lambda* _
> (substitute* "src/build_helper/lib.rs"
> ;; Bug in Rust code.
> @@ -452,10 +468,10 @@ localstatedir = \"var/lib\"
> default-linker = \"" gcc "/bin/gcc" "\"
> channel = \"stable\"
> rpath = true
> -# There is 2 failed codegen tests:
> -# codegen/mainsubprogram.rs and codegen/mainsubprogramstart.rs
> -# This tests required patched LLVM
> -codegen-tests = false
While you are at fixing this section: use "There are..." instead of
"There is...", and "This tests requires a patched LLVM".
> +" ;; There is 2 failed codegen tests:
> + ;; codegen/mainsubprogram.rs and codegen/mainsubprogramstart.rs
> + ;; This tests required patched LLVM
> +"codegen-tests = false
> [target." ,(nix-system->gnu-triplet-for-rust) "]
> llvm-config = \"" llvm "/bin/llvm-config" "\"
> cc = \"" gcc "/bin/gcc" "\"
> @@ -513,45 +529,26 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
> (substitute-keyword-arguments (package-arguments base-rust)
> ((#:phases phases)
> `(modify-phases ,phases
> - (replace '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"))
> - ;; 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")
> - (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)))
> + (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))
> (delete 'fix-mtime-bug))))))))
>
> -(define-public rust
> - (let ((base-rust rust-1.24))
> +(define-public rust-1.25
> + (let ((base-rust
> + (rust-bootstrapped-package rust-1.24 "1.25.0"
> + "0baxjr99311lvwdq0s38bipbnj72pn6fgbk6lcq7j555xq53mxpf")))
> (package
> (inherit base-rust)
> - (version "1.25.0")
> - (source
> - (rust-source version
> - "0baxjr99311lvwdq0s38bipbnj72pn6fgbk6lcq7j555xq53mxpf"))
> - (native-inputs
> - (alist-replace "cargo-bootstrap" (list base-rust "cargo")
> - (alist-replace "rustc-bootstrap" (list base-rust)
> - (package-native-inputs base-rust))))
> + (inputs
> + ;; Use LLVM 6.0
> + (alist-replace "llvm" (list llvm)
> + (package-inputs base-rust)))
> (arguments
> (substitute-keyword-arguments (package-arguments base-rust)
> ((#:phases phases)
> @@ -560,4 +557,57 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
> (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")))))))))))
> + (("fn no_index_update") "#[ignore]\nfn no_index_update"))))
> + (add-after 'configure 'enable-codegen-tests
> + (lambda* _
> + (substitute* "config.toml"
> + (("codegen-tests = false") ""))))
> + (delete 'ignore-glibc-2.27-incompatible-test))))))))
> +
> +(define-public rust
> + (let ((base-rust
> + (rust-bootstrapped-package rust-1.25 "1.26.2"
> + "0047ais0fvmqvngqkdsxgrzhb0kljg8wy85b01kbbjc88hqcz7pv"
> + #:patches '("rust-coresimd-doctest.patch"))))
> + (package
> + (inherit 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 '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"))
> + #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)))))))))
> --
> 2.17.0
Rest looks okay for me, did not test-compile it.
next prev parent reply other threads:[~2018-07-04 9:32 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-18 21:34 [bug#31955] [PATCH] gnu: rust: support build with glibc-2.27, update to 1.26.2 Nikolai Merinov
2018-06-27 10:06 ` Jelle Licht
2018-07-02 15:28 ` Ludovic Courtès
2018-07-04 9:31 ` Nils Gillmann [this message]
2018-07-04 9:47 ` Clément Lassieur
2018-07-04 12:39 ` Nikolai Merinov
2018-07-04 15:45 ` Danny Milosavljevic
2018-07-04 22:07 ` Nikolai Merinov
2018-07-07 7:09 ` Danny Milosavljevic
2018-07-07 14:53 ` Ludovic Courtès
2018-07-09 14:23 ` Danny Milosavljevic
2018-07-07 20:13 ` Nikolai Merinov
2018-07-10 15:54 ` Jonathan Brielmaier
2018-07-11 6:06 ` Nils Gillmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180704093137.js36pzgp7w3foe5p@abyayala \
--to=ng0@n0.is \
--cc=31955@debbugs.gnu.org \
--cc=nikolai.merinov@member.fsf.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.