use std::io::prelude::*;
use std::io::BufReader;
use std::path::{Path, PathBuf};
-use std::process::{exit, Command, Stdio};
+use std::process::{Command, Stdio};
use std::str;
use serde::Deserialize;
|| builder.config.keep_stage_std.contains(&compiler.stage)
{
builder.info("Warning: Using a potentially old libstd. This may not behave well.");
- builder.ensure(StdLink { compiler, target_compiler: compiler, target });
+ builder.ensure(StdLink::from_std(self, compiler));
return;
}
copy_third_party_objects(builder, &compiler, target);
copy_self_contained_objects(builder, &compiler, target);
- builder.ensure(StdLink {
- compiler: compiler_to_use,
- target_compiler: compiler,
- target,
- });
+ builder.ensure(StdLink::from_std(self, compiler_to_use));
return;
}
false,
);
- builder.ensure(StdLink {
- compiler: builder.compiler(compiler.stage, builder.config.build),
- target_compiler: compiler,
- target,
- });
+ builder.ensure(StdLink::from_std(
+ self,
+ builder.compiler(compiler.stage, builder.config.build),
+ ));
}
}
pub compiler: Compiler,
pub target_compiler: Compiler,
pub target: TargetSelection,
+ /// Not actually used; only present to make sure the cache invalidation is correct.
+ crates: Interned<Vec<String>>,
+}
+
+impl StdLink {
+ fn from_std(std: Std, host_compiler: Compiler) -> Self {
+ Self {
+ compiler: host_compiler,
+ target_compiler: std.compiler,
+ target: std.target,
+ crates: std.crates,
+ }
+ }
}
impl Step for StdLink {
if builder.config.keep_stage.contains(&compiler.stage) {
builder.info("Warning: Using a potentially old librustc. This may not behave well.");
builder.info("Warning: Use `--keep-stage-std` if you want to rebuild the compiler when it changes");
- builder.ensure(RustcLink { compiler, target_compiler: compiler, target });
+ builder.ensure(RustcLink::from_rustc(self, compiler));
return;
}
builder.ensure(Rustc::new(compiler_to_use, target));
builder
.info(&format!("Uplifting stage1 rustc ({} -> {})", builder.config.build, target));
- builder.ensure(RustcLink {
- compiler: compiler_to_use,
- target_compiler: compiler,
- target,
- });
+ builder.ensure(RustcLink::from_rustc(self, compiler_to_use));
return;
}
false,
);
- builder.ensure(RustcLink {
- compiler: builder.compiler(compiler.stage, builder.config.build),
- target_compiler: compiler,
- target,
- });
+ builder.ensure(RustcLink::from_rustc(
+ self,
+ builder.compiler(compiler.stage, builder.config.build),
+ ));
}
}
pub compiler: Compiler,
pub target_compiler: Compiler,
pub target: TargetSelection,
+ /// Not actually used; only present to make sure the cache invalidation is correct.
+ crates: Interned<Vec<String>>,
+}
+
+impl RustcLink {
+ fn from_rustc(rustc: Rustc, host_compiler: Compiler) -> Self {
+ Self {
+ compiler: host_compiler,
+ target_compiler: rustc.compiler,
+ target: rustc.target,
+ crates: rustc.crates,
+ }
+ }
}
impl Step for RustcLink {
});
if !ok {
- exit(1);
+ crate::detail_exit(1);
}
// Ok now we need to actually find all the files listed in `toplevel`. We've