提交 796264b6 编写于 作者: M Michael Woerister

incr.comp.: Add -Cincremental in addition to -Zincremental

上级 5a0dc2d0
......@@ -1013,6 +1013,8 @@ fn parse_optimization_fuel(slot: &mut Option<(String, u64)>, v: Option<&str>) ->
"set the threshold for inlining a function (default: 225)"),
panic: Option<PanicStrategy> = (None, parse_panic_strategy,
[TRACKED], "panic strategy to compile crate with"),
incremental: Option<String> = (None, parse_opt_string, [UNTRACKED],
"enable incremental compilation"),
}
options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
......@@ -1663,7 +1665,24 @@ pub fn build_session_options_and_crate_config(matches: &getopts::Matches)
early_error(error_format, "Value for codegen units must be a positive nonzero integer");
}
if cg.lto && debugging_opts.incremental.is_some() {
let incremental = match (&debugging_opts.incremental, &cg.incremental) {
(&Some(ref path1), &Some(ref path2)) => {
if path1 != path2 {
early_error(error_format,
&format!("conflicting paths for `-Z incremental` and \
`-C incremental` specified: {} versus {}",
path1,
path2));
} else {
Some(path1)
}
}
(&Some(ref path), &None) => Some(path),
(&None, &Some(ref path)) => Some(path),
(&None, &None) => None,
}.map(|m| PathBuf::from(m));
if cg.lto && incremental.is_some() {
early_error(error_format, "can't perform LTO when compiling incrementally");
}
......@@ -1837,8 +1856,6 @@ pub fn build_session_options_and_crate_config(matches: &getopts::Matches)
let crate_name = matches.opt_str("crate-name");
let incremental = debugging_opts.incremental.as_ref().map(|m| PathBuf::from(m));
(Options {
crate_types,
optimize: opt_level,
......@@ -2581,6 +2598,9 @@ fn test_codegen_options_tracking_hash() {
opts.cg.save_temps = true;
assert_eq!(reference.dep_tracking_hash(), opts.dep_tracking_hash());
opts.cg.incremental = Some(String::from("abc"));
assert_eq!(reference.dep_tracking_hash(), opts.dep_tracking_hash());
// Make sure changing a [TRACKED] option changes the hash
opts = reference.clone();
......
......@@ -1025,7 +1025,7 @@ fn collect_and_partition_translation_items<'a, 'tcx>(
assert_symbols_are_distinct(tcx, items.iter());
let strategy = if tcx.sess.opts.debugging_opts.incremental.is_some() {
let strategy = if tcx.sess.opts.incremental.is_some() {
PartitioningStrategy::PerModule
} else {
PartitioningStrategy::FixedUnitCount(tcx.sess.codegen_units())
......
......@@ -1506,7 +1506,7 @@ fn make_compile_args(&self, input_file: &Path, output_file: TargetLocation) -> C
if let Some(ref incremental_dir) = self.props.incremental_dir {
rustc.args(&[
"-Z",
"-C",
&format!("incremental={}", incremental_dir.display()),
]);
rustc.args(&["-Z", "incremental-verify-ich"]);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册