use initial rustc's std on stage 0
On stage 0, rather than compiling std utilize the one from the stage0 sysroot as stage 0 should represent the snapshot version not the compiled one. Signed-off-by: onur-ozkan <work@onurozkan.dev>
This commit is contained in:
parent
aa5832b142
commit
5dc0d89abc
1 changed files with 26 additions and 31 deletions
|
|
@ -149,12 +149,17 @@ impl Step for Std {
|
|||
let target = self.target;
|
||||
let compiler = self.compiler;
|
||||
|
||||
// We already have std ready to be used for stage 0.
|
||||
if compiler.stage == 0 {
|
||||
builder.ensure(StdLink::from_std(self, compiler));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// When using `download-rustc`, we already have artifacts for the host available. Don't
|
||||
// recompile them.
|
||||
if builder.download_rustc() && builder.config.is_host_target(target)
|
||||
// NOTE: the beta compiler may generate different artifacts than the downloaded compiler, so
|
||||
// its artifacts can't be reused.
|
||||
&& compiler.stage != 0
|
||||
if builder.download_rustc()
|
||||
&& builder.config.is_host_target(target)
|
||||
&& !self.force_recompile
|
||||
{
|
||||
let sysroot = builder.ensure(Sysroot { compiler, force_recompile: false });
|
||||
|
|
@ -753,23 +758,16 @@ impl Step for StdLink {
|
|||
(libdir, hostdir)
|
||||
};
|
||||
|
||||
add_to_sysroot(
|
||||
builder,
|
||||
&libdir,
|
||||
&hostdir,
|
||||
&build_stamp::libstd_stamp(builder, compiler, target),
|
||||
);
|
||||
let is_downloaded_beta_stage0 = builder
|
||||
.build
|
||||
.config
|
||||
.initial_rustc
|
||||
.starts_with(builder.out.join(compiler.host).join("stage0/bin"));
|
||||
|
||||
// Special case for stage0, to make `rustup toolchain link` and `x dist --stage 0`
|
||||
// work for stage0-sysroot. We only do this if the stage0 compiler comes from beta,
|
||||
// and is not set to a custom path.
|
||||
if compiler.stage == 0
|
||||
&& builder
|
||||
.build
|
||||
.config
|
||||
.initial_rustc
|
||||
.starts_with(builder.out.join(compiler.host).join("stage0/bin"))
|
||||
{
|
||||
if compiler.stage == 0 && is_downloaded_beta_stage0 {
|
||||
// Copy bin files from stage0/bin to stage0-sysroot/bin
|
||||
let sysroot = builder.out.join(compiler.host).join("stage0-sysroot");
|
||||
|
||||
|
|
@ -779,21 +777,8 @@ impl Step for StdLink {
|
|||
t!(fs::create_dir_all(&sysroot_bin_dir));
|
||||
builder.cp_link_r(&stage0_bin_dir, &sysroot_bin_dir);
|
||||
|
||||
// Copy all files from stage0/lib to stage0-sysroot/lib
|
||||
let stage0_lib_dir = builder.out.join(host).join("stage0/lib");
|
||||
if let Ok(files) = fs::read_dir(stage0_lib_dir) {
|
||||
for file in files {
|
||||
let file = t!(file);
|
||||
let path = file.path();
|
||||
if path.is_file() {
|
||||
builder.copy_link(
|
||||
&path,
|
||||
&sysroot.join("lib").join(path.file_name().unwrap()),
|
||||
FileType::Regular,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
builder.cp_link_r(&stage0_lib_dir, &sysroot.join("lib"));
|
||||
|
||||
// Copy codegen-backends from stage0
|
||||
let sysroot_codegen_backends = builder.sysroot_codegen_backends(compiler);
|
||||
|
|
@ -807,6 +792,16 @@ impl Step for StdLink {
|
|||
if stage0_codegen_backends.exists() {
|
||||
builder.cp_link_r(&stage0_codegen_backends, &sysroot_codegen_backends);
|
||||
}
|
||||
} else if compiler.stage == 0 {
|
||||
let sysroot = builder.out.join(compiler.host.triple).join("stage0-sysroot");
|
||||
builder.cp_link_r(&builder.initial_sysroot.join("lib"), &sysroot.join("lib"));
|
||||
} else {
|
||||
add_to_sysroot(
|
||||
builder,
|
||||
&libdir,
|
||||
&hostdir,
|
||||
&build_stamp::libstd_stamp(builder, compiler, target),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue