compiletest: conditionally build and provide minicore
as extern prelude when requested via //@ add-core-stubs
directive
`//@ add-core-stubs` will imply `-Cpanic=abort`.
This commit is contained in:
parent
95d01fcee9
commit
a737f75a04
@ -1150,14 +1150,20 @@ fn build_all_auxiliary(&self, of: &TestPaths, aux_dir: &Path, rustc: &mut Comman
|
||||
}
|
||||
}
|
||||
|
||||
/// `root_testpaths` refers to the path of the original test.
|
||||
/// the auxiliary and the test with an aux-build have the same `root_testpaths`.
|
||||
/// `root_testpaths` refers to the path of the original test. the auxiliary and the test with an
|
||||
/// aux-build have the same `root_testpaths`.
|
||||
fn compose_and_run_compiler(
|
||||
&self,
|
||||
mut rustc: Command,
|
||||
input: Option<String>,
|
||||
root_testpaths: &TestPaths,
|
||||
) -> ProcRes {
|
||||
if self.props.add_core_stubs {
|
||||
let minicore_path = self.build_minicore();
|
||||
rustc.arg("--extern");
|
||||
rustc.arg(&format!("minicore={}", minicore_path.to_str().unwrap()));
|
||||
}
|
||||
|
||||
let aux_dir = self.aux_output_dir();
|
||||
self.build_all_auxiliary(root_testpaths, &aux_dir, &mut rustc);
|
||||
|
||||
@ -1171,6 +1177,37 @@ fn compose_and_run_compiler(
|
||||
)
|
||||
}
|
||||
|
||||
/// Builds `minicore`. Returns the path to the minicore rlib within the base test output
|
||||
/// directory.
|
||||
fn build_minicore(&self) -> PathBuf {
|
||||
let output_file_path = self.output_base_dir().join("libminicore.rlib");
|
||||
let mut rustc = self.make_compile_args(
|
||||
&self.config.minicore_path,
|
||||
TargetLocation::ThisFile(output_file_path.clone()),
|
||||
Emit::None,
|
||||
AllowUnused::Yes,
|
||||
LinkToAux::No,
|
||||
vec![],
|
||||
);
|
||||
|
||||
rustc.args(&["--crate-type", "rlib"]);
|
||||
rustc.arg("-Cpanic=abort");
|
||||
|
||||
let res =
|
||||
self.compose_and_run(rustc, self.config.compile_lib_path.to_str().unwrap(), None, None);
|
||||
if !res.status.success() {
|
||||
self.fatal_proc_rec(
|
||||
&format!(
|
||||
"auxiliary build of {:?} failed to compile: ",
|
||||
self.config.minicore_path.display()
|
||||
),
|
||||
&res,
|
||||
);
|
||||
}
|
||||
|
||||
output_file_path
|
||||
}
|
||||
|
||||
/// Builds an aux dependency.
|
||||
fn build_auxiliary(
|
||||
&self,
|
||||
@ -1662,6 +1699,15 @@ fn make_compile_args(
|
||||
|
||||
rustc.args(&self.props.compile_flags);
|
||||
|
||||
// FIXME(jieyouxu): we should report a fatal error or warning if user wrote `-Cpanic=` with
|
||||
// something that's not `abort`, however, by moving this last we should override previous
|
||||
// `-Cpanic=`s
|
||||
//
|
||||
// `minicore` requires `#![no_std]` and `#![no_core]`, which means no unwinding panics.
|
||||
if self.props.add_core_stubs {
|
||||
rustc.arg("-Cpanic=abort");
|
||||
}
|
||||
|
||||
rustc
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user