Skip to content

Commit

Permalink
incr.comp.: Add -Cincremental in addition to -Zincremental
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelwoerister committed Dec 18, 2017
1 parent 5a0dc2d commit 796264b
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 5 deletions.
26 changes: 23 additions & 3 deletions src/librustc/session/config.rs
Expand Up @@ -1013,6 +1013,8 @@ options! {CodegenOptions, CodegenSetter, basic_codegen_options,
"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,
Expand Down Expand Up @@ -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");
}

Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -2581,6 +2598,9 @@ mod tests {
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();
Expand Down
2 changes: 1 addition & 1 deletion src/librustc_trans/base.rs
Expand Up @@ -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())
Expand Down
2 changes: 1 addition & 1 deletion src/tools/compiletest/src/runtest.rs
Expand Up @@ -1506,7 +1506,7 @@ impl<'test> TestCx<'test> {

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"]);
Expand Down

0 comments on commit 796264b

Please sign in to comment.