From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53852) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fae8r-0003ZJ-8x for guix-patches@gnu.org; Wed, 04 Jul 2018 05:32:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fae8n-0002Mg-Vg for guix-patches@gnu.org; Wed, 04 Jul 2018 05:32:05 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:37954) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fae8n-0002MI-PE for guix-patches@gnu.org; Wed, 04 Jul 2018 05:32:01 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1fae8n-0002PH-Jf for guix-patches@gnu.org; Wed, 04 Jul 2018 05:32:01 -0400 Subject: [bug#31955] [PATCH] gnu: rust: support build with glibc-2.27, update to 1.26.2 Resent-Message-ID: Date: Wed, 4 Jul 2018 09:31:37 +0000 From: Nils Gillmann Message-ID: <20180704093137.js36pzgp7w3foe5p@abyayala> References: <87in68i6b2.fsf@member.fsf.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <87in68i6b2.fsf@member.fsf.org> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: Nikolai Merinov Cc: 31955@debbugs.gnu.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))) > > > -(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. > - ;; > - (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. > + ;; > + (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")) > - ;; > - (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. > - ;; > - (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. > + ;; > + (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.