diff options
author | stefson <herrtimson@yahoo.de> | 2019-10-22 22:00:53 +0200 |
---|---|---|
committer | stefson <herrtimson@yahoo.de> | 2019-10-22 22:00:53 +0200 |
commit | dc95772d5a3d925d33d5758073495294cabb6685 (patch) | |
tree | 890dcb6eb3dba37ef8d7ad9525a3a1181f238a14 | |
parent | dev-lang/rust: add beta channel ebuild (diff) | |
download | rust-dc95772d5a3d925d33d5758073495294cabb6685.tar.gz rust-dc95772d5a3d925d33d5758073495294cabb6685.tar.bz2 rust-dc95772d5a3d925d33d5758073495294cabb6685.zip |
dev-lang/rust: add pr65474 to beta branch
-rw-r--r-- | dev-lang/rust/files/pr65474.patch (renamed from dev-lang/rust/files/pr64823.patch) | 644 | ||||
-rw-r--r-- | dev-lang/rust/rust-999.ebuild | 2 |
2 files changed, 341 insertions, 305 deletions
diff --git a/dev-lang/rust/files/pr64823.patch b/dev-lang/rust/files/pr65474.patch index d0a9fe6..34cbb4d 100644 --- a/dev-lang/rust/files/pr64823.patch +++ b/dev-lang/rust/files/pr65474.patch @@ -1,180 +1,36 @@ -From faee5fd388a564febc56aa642241f221c0ac1cd1 Mon Sep 17 00:00:00 2001 +From 3a05616cb6b6df75fc54094de7f3d4b161ed8521 Mon Sep 17 00:00:00 2001 From: Josh Stone <jistone@redhat.com> Date: Thu, 26 Sep 2019 14:44:08 -0700 -Subject: [PATCH 1/6] [WIP] minimize the rust-std component +Subject: [PATCH 1/3] minimize the rust-std component ---- - src/bootstrap/builder.rs | 1 + - src/bootstrap/dist.rs | 79 +++++++++++++++++++++++++++++++++++++++- - 2 files changed, 78 insertions(+), 2 deletions(-) - -diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs -index 5d586f0c461d..afdcabc08302 100644 ---- a/src/bootstrap/builder.rs -+++ b/src/bootstrap/builder.rs -@@ -443,6 +443,7 @@ impl<'a> Builder<'a> { - dist::Rustc, - dist::DebuggerScripts, - dist::Std, -+ dist::StdZ, - dist::Analysis, - dist::Src, - dist::PlainSourceTarball, -diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs -index d9dff77a30e6..ceb7acb83e74 100644 ---- a/src/bootstrap/dist.rs -+++ b/src/bootstrap/dist.rs -@@ -675,6 +675,81 @@ impl Step for Std { - return distdir(builder).join(format!("{}-{}.tar.gz", name, target)); - } - -+ builder.ensure(compile::Std { compiler, target }); -+ -+ let image = tmpdir(builder).join(format!("{}-{}-image", name, target)); -+ let _ = fs::remove_dir_all(&image); -+ -+ -+ let dst = image.join("lib/rustlib").join(target).join("lib"); -+ t!(fs::create_dir_all(&dst)); -+ -+ let stamp = dbg!(compile::libstd_stamp(builder, compiler, target)); -+ for (path, host) in builder.read_stamp_file(&stamp) { -+ if !host { -+ builder.copy(&path, &dst.join(path.file_name().unwrap())); -+ } -+ } -+ -+ let mut cmd = rust_installer(builder); -+ cmd.arg("generate") -+ .arg("--product-name=Rust") -+ .arg("--rel-manifest-dir=rustlib") -+ .arg("--success-message=std-is-standing-at-the-ready.") -+ .arg("--image-dir").arg(&image) -+ .arg("--work-dir").arg(&tmpdir(builder)) -+ .arg("--output-dir").arg(&distdir(builder)) -+ .arg(format!("--package-name={}-{}", name, target)) -+ .arg(format!("--component-name=rust-std-{}", target)) -+ .arg("--legacy-manifest-dirs=rustlib,cargo"); -+ -+ builder.info(&format!("Dist std stage{} ({} -> {})", -+ compiler.stage, &compiler.host, target)); -+ let _time = timeit(builder); -+ builder.run(&mut cmd); -+ builder.remove_dir(&image); -+ distdir(builder).join(format!("{}-{}.tar.gz", name, target)) -+ } -+} -+ -+#[derive(Debug, PartialOrd, Ord, Copy, Clone, Hash, PartialEq, Eq)] -+pub struct StdZ { -+ pub compiler: Compiler, -+ pub target: Interned<String>, -+} -+ -+impl Step for StdZ { -+ type Output = PathBuf; -+ const DEFAULT: bool = true; -+ -+ fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> { -+ run.path("src/libstdZ") -+ } -+ -+ fn make_run(run: RunConfig<'_>) { -+ run.builder.ensure(StdZ { -+ compiler: run.builder.compiler_for( -+ run.builder.top_stage, -+ run.builder.config.build, -+ run.target, -+ ), -+ target: run.target, -+ }); -+ } -+ -+ fn run(self, builder: &Builder<'_>) -> PathBuf { -+ let compiler = self.compiler; -+ let target = self.target; -+ -+ let name = pkgname(builder, "rust-stdZ"); -+ -+ // The only true set of target libraries came from the build triple, so -+ // let's reduce redundant work by only producing archives from that host. -+ if compiler.host != builder.config.build { -+ builder.info("\tskipping, not a build host"); -+ return distdir(builder).join(format!("{}-{}.tar.gz", name, target)); -+ } -+ - // We want to package up as many target libraries as possible - // for the `rust-std` package, so if this is a host target we - // depend on librustc and otherwise we just depend on libtest. -@@ -710,12 +785,12 @@ impl Step for Std { - cmd.arg("generate") - .arg("--product-name=Rust") - .arg("--rel-manifest-dir=rustlib") -- .arg("--success-message=std-is-standing-at-the-ready.") -+ .arg("--success-message=stdZ-is-standing-at-the-ready.") - .arg("--image-dir").arg(&image) - .arg("--work-dir").arg(&tmpdir(builder)) - .arg("--output-dir").arg(&distdir(builder)) - .arg(format!("--package-name={}-{}", name, target)) -- .arg(format!("--component-name=rust-std-{}", target)) -+ .arg(format!("--component-name=rust-stdZ-{}", target)) - .arg("--legacy-manifest-dirs=rustlib,cargo"); - - builder.info(&format!("Dist std stage{} ({} -> {})", - -From dc8ee51c5418ce37b63f1c9bdee98745f5dfe627 Mon Sep 17 00:00:00 2001 -From: Josh Stone <jistone@redhat.com> -Date: Fri, 27 Sep 2019 12:31:00 -0700 -Subject: [PATCH 2/6] Use builder.compiler_for() to find the libstd stamp - ---- - src/bootstrap/dist.rs | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs -index ceb7acb83e74..e1e47d5370a0 100644 ---- a/src/bootstrap/dist.rs -+++ b/src/bootstrap/dist.rs -@@ -680,11 +680,11 @@ impl Step for Std { - let image = tmpdir(builder).join(format!("{}-{}-image", name, target)); - let _ = fs::remove_dir_all(&image); - -- - let dst = image.join("lib/rustlib").join(target).join("lib"); - t!(fs::create_dir_all(&dst)); - -- let stamp = dbg!(compile::libstd_stamp(builder, compiler, target)); -+ let compiler_to_use = builder.compiler_for(compiler.stage, compiler.host, target); -+ let stamp = dbg!(compile::libstd_stamp(builder, compiler_to_use, target)); - for (path, host) in builder.read_stamp_file(&stamp) { - if !host { - builder.copy(&path, &dst.join(path.file_name().unwrap())); - -From 9175f279b583fa71d8b4f6078af319e9a2155b75 Mon Sep 17 00:00:00 2001 -From: Josh Stone <jistone@redhat.com> -Date: Thu, 3 Oct 2019 10:57:19 -0700 -Subject: [PATCH 3/6] add dist::RustcDev for unstable compiler libraries +This splits out a rustc-dev component with the compiler crates, and +keeps the status quo of default installed files on nightly. The default +changing to not install compiler libraries by default is left for a +future pull request. +However, on stable and beta, this does remove the compiler libraries +from the set of libraries installed by default, as they are never needed +there (per our stability story, they "cannot" be used). --- - src/bootstrap/builder.rs | 2 +- - src/bootstrap/dist.rs | 102 +++++++++++++++++---------------------- - 2 files changed, 46 insertions(+), 58 deletions(-) + src/bootstrap/builder.rs | 1 + + src/bootstrap/dist.rs | 129 ++++++++++++++++++++------- + src/tools/build-manifest/src/main.rs | 15 ++++ + 3 files changed, 112 insertions(+), 33 deletions(-) diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs -index afdcabc08302..bfba39961a22 100644 +index 0caf2d9b6db5..7e3ae7f2cc90 100644 --- a/src/bootstrap/builder.rs +++ b/src/bootstrap/builder.rs -@@ -443,7 +443,7 @@ impl<'a> Builder<'a> { +@@ -443,6 +443,7 @@ impl<'a> Builder<'a> { dist::Rustc, dist::DebuggerScripts, dist::Std, -- dist::StdZ, + dist::RustcDev, dist::Analysis, dist::Src, dist::PlainSourceTarball, diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs -index e1e47d5370a0..e5a43dcb29f6 100644 +index d9dff77a30e6..e5a43dcb29f6 100644 --- a/src/bootstrap/dist.rs +++ b/src/bootstrap/dist.rs @@ -637,6 +637,28 @@ impl Step for DebuggerScripts { @@ -206,7 +62,7 @@ index e1e47d5370a0..e5a43dcb29f6 100644 #[derive(Debug, PartialOrd, Ord, Copy, Clone, Hash, PartialEq, Eq)] pub struct Std { pub compiler: Compiler, -@@ -667,12 +689,9 @@ impl Step for Std { +@@ -667,44 +689,19 @@ impl Step for Std { let target = self.target; let name = pkgname(builder, "rust-std"); @@ -221,76 +77,6 @@ index e1e47d5370a0..e5a43dcb29f6 100644 + return archive; } - builder.ensure(compile::Std { compiler, target }); -@@ -680,16 +699,9 @@ impl Step for Std { - let image = tmpdir(builder).join(format!("{}-{}-image", name, target)); - let _ = fs::remove_dir_all(&image); - -- let dst = image.join("lib/rustlib").join(target).join("lib"); -- t!(fs::create_dir_all(&dst)); -- - let compiler_to_use = builder.compiler_for(compiler.stage, compiler.host, target); -- let stamp = dbg!(compile::libstd_stamp(builder, compiler_to_use, target)); -- for (path, host) in builder.read_stamp_file(&stamp) { -- if !host { -- builder.copy(&path, &dst.join(path.file_name().unwrap())); -- } -- } -+ let stamp = compile::libstd_stamp(builder, compiler_to_use, target); -+ copy_target_libs(builder, &target, &image, &stamp); - - let mut cmd = rust_installer(builder); - cmd.arg("generate") -@@ -708,26 +720,27 @@ impl Step for Std { - let _time = timeit(builder); - builder.run(&mut cmd); - builder.remove_dir(&image); -- distdir(builder).join(format!("{}-{}.tar.gz", name, target)) -+ archive - } - } - - #[derive(Debug, PartialOrd, Ord, Copy, Clone, Hash, PartialEq, Eq)] --pub struct StdZ { -+pub struct RustcDev { - pub compiler: Compiler, - pub target: Interned<String>, - } - --impl Step for StdZ { -+impl Step for RustcDev { - type Output = PathBuf; - const DEFAULT: bool = true; -+ const ONLY_HOSTS: bool = true; - - fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> { -- run.path("src/libstdZ") -+ run.path("rustc-dev") - } - - fn make_run(run: RunConfig<'_>) { -- run.builder.ensure(StdZ { -+ run.builder.ensure(RustcDev { - compiler: run.builder.compiler_for( - run.builder.top_stage, - run.builder.config.build, -@@ -741,64 +754,39 @@ impl Step for StdZ { - let compiler = self.compiler; - let target = self.target; - -- let name = pkgname(builder, "rust-stdZ"); -- -- // The only true set of target libraries came from the build triple, so -- // let's reduce redundant work by only producing archives from that host. -- if compiler.host != builder.config.build { -- builder.info("\tskipping, not a build host"); -- return distdir(builder).join(format!("{}-{}.tar.gz", name, target)); -+ let name = pkgname(builder, "rustc-dev"); -+ let archive = distdir(builder).join(format!("{}-{}.tar.gz", name, target)); -+ if skip_host_target_lib(builder, compiler) { -+ return archive; - } - - // We want to package up as many target libraries as possible - // for the `rust-std` package, so if this is a host target we - // depend on librustc and otherwise we just depend on libtest. @@ -299,7 +85,7 @@ index e1e47d5370a0..e5a43dcb29f6 100644 - } else { - builder.ensure(compile::Std { compiler, target }); - } -+ builder.ensure(compile::Rustc { compiler, target }); ++ builder.ensure(compile::Std { compiler, target }); let image = tmpdir(builder).join(format!("{}-{}-image", name, target)); let _ = fs::remove_dir_all(&image); @@ -323,46 +109,88 @@ index e1e47d5370a0..e5a43dcb29f6 100644 - true - }); + let compiler_to_use = builder.compiler_for(compiler.stage, compiler.host, target); -+ let stamp = compile::librustc_stamp(builder, compiler_to_use, target); ++ let stamp = compile::libstd_stamp(builder, compiler_to_use, target); + copy_target_libs(builder, &target, &image, &stamp); let mut cmd = rust_installer(builder); cmd.arg("generate") - .arg("--product-name=Rust") - .arg("--rel-manifest-dir=rustlib") -- .arg("--success-message=stdZ-is-standing-at-the-ready.") -+ .arg("--success-message=Rust-is-ready-to-develop.") - .arg("--image-dir").arg(&image) - .arg("--work-dir").arg(&tmpdir(builder)) - .arg("--output-dir").arg(&distdir(builder)) - .arg(format!("--package-name={}-{}", name, target)) -- .arg(format!("--component-name=rust-stdZ-{}", target)) -+ .arg(format!("--component-name=rustc-dev-{}", target)) - .arg("--legacy-manifest-dirs=rustlib,cargo"); - -- builder.info(&format!("Dist std stage{} ({} -> {})", -+ builder.info(&format!("Dist rustc-dev stage{} ({} -> {})", - compiler.stage, &compiler.host, target)); +@@ -723,7 +720,73 @@ impl Step for Std { let _time = timeit(builder); builder.run(&mut cmd); builder.remove_dir(&image); - distdir(builder).join(format!("{}-{}.tar.gz", name, target)) + archive ++ } ++} ++ ++#[derive(Debug, PartialOrd, Ord, Copy, Clone, Hash, PartialEq, Eq)] ++pub struct RustcDev { ++ pub compiler: Compiler, ++ pub target: Interned<String>, ++} ++ ++impl Step for RustcDev { ++ type Output = PathBuf; ++ const DEFAULT: bool = true; ++ const ONLY_HOSTS: bool = true; ++ ++ fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> { ++ run.path("rustc-dev") ++ } ++ ++ fn make_run(run: RunConfig<'_>) { ++ run.builder.ensure(RustcDev { ++ compiler: run.builder.compiler_for( ++ run.builder.top_stage, ++ run.builder.config.build, ++ run.target, ++ ), ++ target: run.target, ++ }); ++ } ++ ++ fn run(self, builder: &Builder<'_>) -> PathBuf { ++ let compiler = self.compiler; ++ let target = self.target; ++ ++ let name = pkgname(builder, "rustc-dev"); ++ let archive = distdir(builder).join(format!("{}-{}.tar.gz", name, target)); ++ if skip_host_target_lib(builder, compiler) { ++ return archive; ++ } ++ ++ builder.ensure(compile::Rustc { compiler, target }); ++ ++ let image = tmpdir(builder).join(format!("{}-{}-image", name, target)); ++ let _ = fs::remove_dir_all(&image); ++ ++ let compiler_to_use = builder.compiler_for(compiler.stage, compiler.host, target); ++ let stamp = compile::librustc_stamp(builder, compiler_to_use, target); ++ copy_target_libs(builder, &target, &image, &stamp); ++ ++ let mut cmd = rust_installer(builder); ++ cmd.arg("generate") ++ .arg("--product-name=Rust") ++ .arg("--rel-manifest-dir=rustlib") ++ .arg("--success-message=Rust-is-ready-to-develop.") ++ .arg("--image-dir").arg(&image) ++ .arg("--work-dir").arg(&tmpdir(builder)) ++ .arg("--output-dir").arg(&distdir(builder)) ++ .arg(format!("--package-name={}-{}", name, target)) ++ .arg(format!("--component-name=rustc-dev-{}", target)) ++ .arg("--legacy-manifest-dirs=rustlib,cargo"); ++ ++ builder.info(&format!("Dist rustc-dev stage{} ({} -> {})", ++ compiler.stage, &compiler.host, target)); ++ let _time = timeit(builder); ++ builder.run(&mut cmd); ++ builder.remove_dir(&image); ++ archive } } - -From bd4e9d5fe146d5475dc35f5f61d5186b15692fdc Mon Sep 17 00:00:00 2001 -From: Josh Stone <jistone@redhat.com> -Date: Thu, 3 Oct 2019 11:40:39 -0700 -Subject: [PATCH 4/6] add rustc-dev to tools/build-manifest - ---- - src/tools/build-manifest/src/main.rs | 7 +++++++ - 1 file changed, 7 insertions(+) - diff --git a/src/tools/build-manifest/src/main.rs b/src/tools/build-manifest/src/main.rs -index f41e7dd17ede..d5933789a649 100644 +index f41e7dd17ede..97e758f9b823 100644 --- a/src/tools/build-manifest/src/main.rs +++ b/src/tools/build-manifest/src/main.rs @@ -399,6 +399,7 @@ impl Builder { @@ -373,49 +201,7 @@ index f41e7dd17ede..d5933789a649 100644 package("cargo", HOSTS); package("rust-mingw", MINGW); package("rust-std", TARGETS); -@@ -473,6 +474,7 @@ impl Builder { - // and so is rust-mingw if it's available for the target. - components.extend(vec![ - host_component("rustc"), -+ host_component("rustc-dev"), - host_component("rust-std"), - host_component("cargo"), - host_component("rust-docs"), -@@ -498,6 +500,11 @@ impl Builder { - .filter(|&&target| target != host) - .map(|target| Component::from_str("rust-std", target)) - ); -+ extensions.extend( -+ HOSTS.iter() -+ .filter(|&&target| target != host) -+ .map(|target| Component::from_str("rustc-dev", target)) -+ ); - extensions.push(Component::from_str("rust-src", "*")); - - // If the components/extensions don't actually exist for this - -From 2dcf2f0f7b965d5977dfbafec9128084bdd82a42 Mon Sep 17 00:00:00 2001 -From: Josh Stone <jistone@redhat.com> -Date: Mon, 7 Oct 2019 09:31:51 -0700 -Subject: [PATCH 5/6] Only install rustc-dev by default on nightly - ---- - src/tools/build-manifest/src/main.rs | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -diff --git a/src/tools/build-manifest/src/main.rs b/src/tools/build-manifest/src/main.rs -index d5933789a649..97e758f9b823 100644 ---- a/src/tools/build-manifest/src/main.rs -+++ b/src/tools/build-manifest/src/main.rs -@@ -474,7 +474,6 @@ impl Builder { - // and so is rust-mingw if it's available for the target. - components.extend(vec![ - host_component("rustc"), -- host_component("rustc-dev"), - host_component("rust-std"), - host_component("cargo"), - host_component("rust-docs"), -@@ -483,6 +482,15 @@ impl Builder { +@@ -481,6 +482,15 @@ impl Builder { components.push(host_component("rust-mingw")); } @@ -431,11 +217,23 @@ index d5933789a649..97e758f9b823 100644 // Tools are always present in the manifest, // but might be marked as unavailable if they weren't built. extensions.extend(vec![ +@@ -498,6 +508,11 @@ impl Builder { + .filter(|&&target| target != host) + .map(|target| Component::from_str("rust-std", target)) + ); ++ extensions.extend( ++ HOSTS.iter() ++ .filter(|&&target| target != host) ++ .map(|target| Component::from_str("rustc-dev", target)) ++ ); + extensions.push(Component::from_str("rust-src", "*")); + + // If the components/extensions don't actually exist for this -From d3052540993b6acf009d39949b79077a49544934 Mon Sep 17 00:00:00 2001 +From 4c906dc84ec78fad35405d5c0f2b2d58f9f26288 Mon Sep 17 00:00:00 2001 From: Josh Stone <jistone@redhat.com> Date: Mon, 7 Oct 2019 15:49:51 -0700 -Subject: [PATCH 6/6] Add rustc-dev to nightly default and complete profiles +Subject: [PATCH 2/3] Add rustc-dev to nightly default and complete profiles --- src/tools/build-manifest/src/main.rs | 15 +++++++++++++++ @@ -474,3 +272,241 @@ index 97e758f9b823..c0d2deab2f8b 100644 fn package(&mut self, pkgname: &str, dst: &mut BTreeMap<String, Package>, + +From 7ccf492ae616b4d06eab283ab604938fd234415a Mon Sep 17 00:00:00 2001 +From: Jethro Beekman <jethro@fortanix.com> +Date: Sat, 12 Oct 2019 16:01:59 +0200 +Subject: [PATCH 3/3] Package non-rust objects + +--- + src/bootstrap/check.rs | 4 +++ + src/bootstrap/compile.rs | 63 ++++++++++++++++++++++++++-------------- + src/bootstrap/lib.rs | 1 + + 3 files changed, 46 insertions(+), 22 deletions(-) + +diff --git a/src/bootstrap/check.rs b/src/bootstrap/check.rs +index cadb9a7e441f..df1c72575846 100644 +--- a/src/bootstrap/check.rs ++++ b/src/bootstrap/check.rs +@@ -55,6 +55,7 @@ impl Step for Std { + cargo, + args(builder.kind), + &libstd_stamp(builder, compiler, target), ++ vec![], + true); + + let libdir = builder.sysroot_libdir(compiler, target); +@@ -103,6 +104,7 @@ impl Step for Rustc { + cargo, + args(builder.kind), + &librustc_stamp(builder, compiler, target), ++ vec![], + true); + + let libdir = builder.sysroot_libdir(compiler, target); +@@ -155,6 +157,7 @@ impl Step for CodegenBackend { + cargo, + args(builder.kind), + &codegen_backend_stamp(builder, compiler, target, backend), ++ vec![], + true); + } + } +@@ -199,6 +202,7 @@ impl Step for Rustdoc { + cargo, + args(builder.kind), + &rustdoc_stamp(builder, compiler, target), ++ vec![], + true); + + let libdir = builder.sysroot_libdir(compiler, target); +diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs +index 6ea32edfb208..d48927f9bf78 100644 +--- a/src/bootstrap/compile.rs ++++ b/src/bootstrap/compile.rs +@@ -69,7 +69,7 @@ impl Step for Std { + return; + } + +- builder.ensure(StartupObjects { compiler, target }); ++ let mut target_deps = builder.ensure(StartupObjects { compiler, target }); + + let compiler_to_use = builder.compiler_for(compiler.stage, compiler.host, target); + if compiler_to_use != compiler { +@@ -91,7 +91,7 @@ impl Step for Std { + return; + } + +- copy_third_party_objects(builder, &compiler, target); ++ target_deps.extend(copy_third_party_objects(builder, &compiler, target).into_iter()); + + let mut cargo = builder.cargo(compiler, Mode::Std, target, "build"); + std_cargo(builder, &compiler, target, &mut cargo); +@@ -102,6 +102,7 @@ impl Step for Std { + cargo, + vec![], + &libstd_stamp(builder, compiler, target), ++ target_deps, + false); + + builder.ensure(StdLink { +@@ -113,9 +114,22 @@ impl Step for Std { + } + + /// Copies third pary objects needed by various targets. +-fn copy_third_party_objects(builder: &Builder<'_>, compiler: &Compiler, target: Interned<String>) { ++fn copy_third_party_objects(builder: &Builder<'_>, compiler: &Compiler, target: Interned<String>) ++ -> Vec<PathBuf> ++{ + let libdir = builder.sysroot_libdir(*compiler, target); + ++ let mut target_deps = vec![]; ++ ++ let mut copy_and_stamp = |sourcedir: &Path, name: &str| { ++ let target = libdir.join(name); ++ builder.copy( ++ &sourcedir.join(name), ++ &target, ++ ); ++ target_deps.push(target); ++ }; ++ + // Copies the crt(1,i,n).o startup objects + // + // Since musl supports fully static linking, we can cross link for it even +@@ -123,19 +137,13 @@ fn copy_third_party_objects(builder: &Builder<'_>, compiler: &Compiler, target: + // files. As those shipped with glibc won't work, copy the ones provided by + // musl so we have them on linux-gnu hosts. + if target.contains("musl") { ++ let srcdir = builder.musl_root(target).unwrap().join("lib"); + for &obj in &["crt1.o", "crti.o", "crtn.o"] { +- builder.copy( +- &builder.musl_root(target).unwrap().join("lib").join(obj), +- &libdir.join(obj), +- ); ++ copy_and_stamp(&srcdir, obj); + } + } else if target.ends_with("-wasi") { +- for &obj in &["crt1.o"] { +- builder.copy( +- &builder.wasi_root(target).unwrap().join("lib/wasm32-wasi").join(obj), +- &libdir.join(obj), +- ); +- } ++ let srcdir = builder.wasi_root(target).unwrap().join("lib/wasm32-wasi"); ++ copy_and_stamp(&srcdir, "crt1.o"); + } + + // Copies libunwind.a compiled to be linked wit x86_64-fortanix-unknown-sgx. +@@ -145,11 +153,11 @@ fn copy_third_party_objects(builder: &Builder<'_>, compiler: &Compiler, target: + // which is provided by std for this target. + if target == "x86_64-fortanix-unknown-sgx" { + let src_path_env = "X86_FORTANIX_SGX_LIBS"; +- let obj = "libunwind.a"; + let src = env::var(src_path_env).expect(&format!("{} not found in env", src_path_env)); +- let src = Path::new(&src).join(obj); +- builder.copy(&src, &libdir.join(obj)); ++ copy_and_stamp(Path::new(&src), "libunwind.a"); + } ++ ++ target_deps + } + + /// Configure cargo to compile the standard library, adding appropriate env vars +@@ -307,7 +315,7 @@ pub struct StartupObjects { + } + + impl Step for StartupObjects { +- type Output = (); ++ type Output = Vec<PathBuf>; + + fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> { + run.path("src/rtstartup") +@@ -326,13 +334,15 @@ impl Step for StartupObjects { + /// They don't require any library support as they're just plain old object + /// files, so we just use the nightly snapshot compiler to always build them (as + /// no other compilers are guaranteed to be available). +- fn run(self, builder: &Builder<'_>) { ++ fn run(self, builder: &Builder<'_>) -> Vec<PathBuf> { + let for_compiler = self.compiler; + let target = self.target; + if !target.contains("windows-gnu") { +- return ++ return vec![] + } + ++ let mut target_deps = vec![]; ++ + let src_dir = &builder.src.join("src/rtstartup"); + let dst_dir = &builder.native_dir(target).join("rtstartup"); + let sysroot_dir = &builder.sysroot_libdir(for_compiler, target); +@@ -351,7 +361,9 @@ impl Step for StartupObjects { + .arg(src_file)); + } + +- builder.copy(dst_file, &sysroot_dir.join(file.to_string() + ".o")); ++ let target = sysroot_dir.join(file.to_string() + ".o"); ++ builder.copy(dst_file, &target); ++ target_deps.push(target); + } + + for obj in ["crt2.o", "dllcrt2.o"].iter() { +@@ -359,8 +371,12 @@ impl Step for StartupObjects { + builder.cc(target), + target, + obj); +- builder.copy(&src, &sysroot_dir.join(obj)); ++ let target = sysroot_dir.join(obj); ++ builder.copy(&src, &target); ++ target_deps.push(target); + } ++ ++ target_deps + } + } + +@@ -438,6 +454,7 @@ impl Step for Rustc { + cargo, + vec![], + &librustc_stamp(builder, compiler, target), ++ vec![], + false); + + builder.ensure(RustcLink { +@@ -586,7 +603,7 @@ impl Step for CodegenBackend { + + let tmp_stamp = out_dir.join(".tmp.stamp"); + +- let files = run_cargo(builder, cargo, vec![], &tmp_stamp, false); ++ let files = run_cargo(builder, cargo, vec![], &tmp_stamp, vec![], false); + if builder.config.dry_run { + return; + } +@@ -954,6 +971,7 @@ pub fn run_cargo(builder: &Builder<'_>, + cargo: Cargo, + tail_args: Vec<String>, + stamp: &Path, ++ additional_target_deps: Vec<PathBuf>, + is_check: bool) + -> Vec<PathBuf> + { +@@ -1070,6 +1088,7 @@ pub fn run_cargo(builder: &Builder<'_>, + deps.push((path_to_add.into(), false)); + } + ++ deps.extend(additional_target_deps.into_iter().map(|d| (d, false))); + deps.sort(); + let mut new_contents = Vec::new(); + for (dep, proc_macro) in deps.iter() { +diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs +index 9203a558f646..ad0bdd0f425f 100644 +--- a/src/bootstrap/lib.rs ++++ b/src/bootstrap/lib.rs +@@ -1144,6 +1144,7 @@ impl Build { + pub fn copy(&self, src: &Path, dst: &Path) { + if self.config.dry_run { return; } + self.verbose_than(1, &format!("Copy {:?} to {:?}", src, dst)); ++ if src == dst { return; } + let _ = fs::remove_file(&dst); + let metadata = t!(src.symlink_metadata()); + if metadata.file_type().is_symlink() { diff --git a/dev-lang/rust/rust-999.ebuild b/dev-lang/rust/rust-999.ebuild index f175e98..b8a91e1 100644 --- a/dev-lang/rust/rust-999.ebuild +++ b/dev-lang/rust/rust-999.ebuild @@ -84,7 +84,7 @@ REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} ) " PATCHES=( - "${FILESDIR}"/pr64823.patch + "${FILESDIR}"/pr65474.patch ) S="${WORKDIR}/${MY_P}-src" |