From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44255) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fah5m-0004d4-MV for guix-patches@gnu.org; Wed, 04 Jul 2018 08:41:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fah5i-0005Hp-QM for guix-patches@gnu.org; Wed, 04 Jul 2018 08:41:06 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:38093) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fah5i-0005Hg-Ek for guix-patches@gnu.org; Wed, 04 Jul 2018 08:41:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1fah5i-0004Oy-58 for guix-patches@gnu.org; Wed, 04 Jul 2018 08:41:02 -0400 Subject: [bug#31955] [PATCH] gnu: rust: support build with glibc-2.27, update to 1.26.2 Resent-Message-ID: From: Nikolai Merinov References: <87in68i6b2.fsf@member.fsf.org> <20180704093137.js36pzgp7w3foe5p@abyayala> <87fu0z72nl.fsf@lassieur.org> Date: Wed, 04 Jul 2018 17:39:53 +0500 In-Reply-To: <87fu0z72nl.fsf@lassieur.org> ("=?UTF-8?Q?Cl=C3=A9ment?= Lassieur"'s message of "Wed, 04 Jul 2018 11:47:58 +0200") Message-ID: <87fu0z899i.fsf@member.fsf.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" 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: =?UTF-8?Q?Cl=C3=A9ment?= Lassieur Cc: 31955@debbugs.gnu.org, Nils Gillmann --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Cl=C3=A9ment Lassieur writes: > Nils Gillmann writes: > >>> @@ -452,10 +468,10 @@ localstatedir =3D \"var/lib\" >>> default-linker =3D \"" gcc "/bin/gcc" "\" >>> channel =3D \"stable\" >>> rpath =3D true >>> -# There is 2 failed codegen tests: >>> -# codegen/mainsubprogram.rs and codegen/mainsubprogramstart.rs >>> -# This tests required patched LLVM >>> -codegen-tests =3D false >> >> While you are at fixing this section: use "There are..." instead of >> "There is...", and "This tests requires a patched LLVM". > > These tests require [...] > > :-) Fixed both mentioned places. Also I already prepared package for rust 1.27.0. I added both patches to attachements. Please write to me if it will be better to send patch with 1.27.0 release in separate mail thread. Regards, Nikolai --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-gnu-rust-support-build-with-glibc-2.27-update-to-1.2.patch Content-Description: Rust 1.26.2 >From d6c38c46f3ac7a0327cb109ee05364811a8c8109 Mon Sep 17 00:00:00 2001 From: Nikolai Merinov Date: Tue, 19 Jun 2018 02:34:31 +0500 Subject: [PATCH 1/2] gnu: rust: support build with glibc-2.27, update to 1.26.2 To: guix-patches@gnu.org * 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 | 21 +++ gnu/packages/rust.scm | 168 ++++++++++++------ 2 files changed, 130 insertions(+), 59 deletions(-) create mode 100644 gnu/packages/patches/rust-coresimd-doctest.patch diff --git a/gnu/packages/patches/rust-coresimd-doctest.patch b/gnu/packages/patches/rust-coresimd-doctest.patch new file mode 100644 index 000000000..bfa0ab224 --- /dev/null +++ b/gnu/packages/patches/rust-coresimd-doctest.patch @@ -0,0 +1,21 @@ +Doctest coresimd::x86::__m256 failed on processors withouth "avx" feature. +Backported patch with changes from https://github.com/rust-lang-nursery/stdsimd/issues/481 + +--- 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..6d3554a3a 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 +" ;; 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" "\" @@ -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.1 --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0002-gnu-rust-update-to-1.27.0.patch Content-Description: Rust 1.27.0 >From 5592572eef7a5c753b25f97a962d4b0dc3a6422e Mon Sep 17 00:00:00 2001 From: Nikolai Merinov Date: Sat, 30 Jun 2018 14:34:49 +0500 Subject: [PATCH 2/2] gnu: rust: update to 1.27.0 To: guix-patches@gnu.org * gnu/packages/rust.scm (rust-1.26): Rename package to `rust-1.26' (rust): Add new package for `1.27.0` release * gnu/packages/patches/rust-bootstrap-stage0-test.patch: support tests with local stage0 compiler --- .../patches/rust-bootstrap-stage0-test.patch | 55 +++++++++++++++++++ gnu/packages/rust.scm | 22 +++++++- 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/rust-bootstrap-stage0-test.patch diff --git a/gnu/packages/patches/rust-bootstrap-stage0-test.patch b/gnu/packages/patches/rust-bootstrap-stage0-test.patch new file mode 100644 index 000000000..e8484903e --- /dev/null +++ b/gnu/packages/patches/rust-bootstrap-stage0-test.patch @@ -0,0 +1,55 @@ +Bootstrap tests failed with local stage0 cargo and rustc +Backported changes from https://github.com/rust-lang/rust/pull/51977 + +From 0834d9d771e912f51deca6c25699e44734624546 Mon Sep 17 00:00:00 2001 +From: Nikolai Merinov +Date: Mon, 2 Jul 2018 01:45:35 +0500 +Subject: [PATCH] bootstrap: tests should use rustc from config.toml + +Tests should always use "rustc" and "cargo" from config.toml instead +of assuming that stage0 binaries was downloaded to build directory. +--- + src/bootstrap/bootstrap.py | 2 ++ + src/bootstrap/config.rs | 6 ++---- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py +index 487440becf..1701f7b83a 100644 +--- a/src/bootstrap/bootstrap.py ++++ b/src/bootstrap/bootstrap.py +@@ -788,6 +788,8 @@ def bootstrap(help_triggered): + env["BOOTSTRAP_PARENT_ID"] = str(os.getpid()) + env["BOOTSTRAP_PYTHON"] = sys.executable + env["BUILD_DIR"] = build.build_dir ++ env["CARGO"] = build.cargo() ++ env["RUSTC"] = build.rustc() + run(args, env=env, verbose=build.verbose) + + +diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs +index 6dd6291be2..d1a0deb583 100644 +--- a/src/bootstrap/config.rs ++++ b/src/bootstrap/config.rs +@@ -23,7 +23,6 @@ use std::cmp; + + use num_cpus; + use toml; +-use util::exe; + use cache::{INTERNER, Interned}; + use flags::Flags; + pub use flags::Subcommand; +@@ -362,9 +361,8 @@ impl Config { + config.src = Config::path_from_python("SRC"); + config.out = Config::path_from_python("BUILD_DIR"); + +- let stage0_root = config.out.join(&config.build).join("stage0/bin"); +- config.initial_rustc = stage0_root.join(exe("rustc", &config.build)); +- config.initial_cargo = stage0_root.join(exe("cargo", &config.build)); ++ config.initial_rustc = Config::path_from_python("RUSTC"); ++ config.initial_cargo = Config::path_from_python("CARGO"); + + config + } +-- +2.17.1 + diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm index 6d3554a3a..49a21d959 100644 --- a/gnu/packages/rust.scm +++ b/gnu/packages/rust.scm @@ -564,7 +564,7 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\" (("codegen-tests = false") "")))) (delete 'ignore-glibc-2.27-incompatible-test)))))))) -(define-public rust +(define-public rust-1.26 (let ((base-rust (rust-bootstrapped-package rust-1.25 "1.26.2" "0047ais0fvmqvngqkdsxgrzhb0kljg8wy85b01kbbjc88hqcz7pv" @@ -611,3 +611,23 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\" ;; This test wants to update the crate index. (("fn no_index_update") "#[ignore]\nfn no_index_update")) #t))))))))) + +(define-public rust + (let ((base-rust + (rust-bootstrapped-package rust-1.26 "1.27.0" + "089d7rhw55zpvnw71dj8vil6qrylvl4xjr4m8bywjj83d4zq1f9c" + #:patches '("rust-coresimd-doctest.patch" + "rust-bootstrap-stage0-test.patch")))) + (package + (inherit 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))))))))) -- 2.17.1 --=-=-=--