diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py index 8000e60f64d..6ead79ef040 100644 --- a/src/bootstrap/bootstrap.py +++ b/src/bootstrap/bootstrap.py @@ -866,6 +866,7 @@ def bootstrap(help_triggered): parser = argparse.ArgumentParser(description='Build rust') parser.add_argument('--config') + parser.add_argument('--build-dir') parser.add_argument('--build') parser.add_argument('--color', choices=['always', 'never', 'auto']) parser.add_argument('--clean', action='store_true') @@ -915,7 +916,7 @@ def bootstrap(help_triggered): build.check_vendored_status() - build_dir = build.get_toml('build-dir', 'build') or 'build' + build_dir = args.build_dir or build.get_toml('build-dir', 'build') or 'build' build.build_dir = os.path.abspath(build_dir) with open(os.path.join(build.rust_root, "src", "stage0.json")) as f: diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs index 14607741932..2fc18c9e79e 100644 --- a/src/bootstrap/config.rs +++ b/src/bootstrap/config.rs @@ -857,7 +857,7 @@ pub fn parse(args: &[String]) -> Config { let build = toml.build.unwrap_or_default(); set(&mut config.initial_rustc, build.rustc.map(PathBuf::from)); - set(&mut config.out, build.build_dir.map(PathBuf::from)); + set(&mut config.out, flags.build_dir.or_else(|| build.build_dir.map(PathBuf::from))); // NOTE: Bootstrap spawns various commands with different working directories. // To avoid writing to random places on the file system, `config.out` needs to be an absolute path. if !config.out.is_absolute() { diff --git a/src/bootstrap/flags.rs b/src/bootstrap/flags.rs index 9d4bb978bdc..7ebae55efc1 100644 --- a/src/bootstrap/flags.rs +++ b/src/bootstrap/flags.rs @@ -51,6 +51,7 @@ pub struct Flags { pub host: Option>, pub target: Option>, pub config: Option, + pub build_dir: Option, pub jobs: Option, pub cmd: Subcommand, pub incremental: bool, @@ -174,6 +175,12 @@ pub fn parse(args: &[String]) -> Flags { opts.optflagmulti("v", "verbose", "use verbose output (-vv for very verbose)"); opts.optflag("i", "incremental", "use incremental compilation"); opts.optopt("", "config", "TOML configuration file for build", "FILE"); + opts.optopt( + "", + "build-dir", + "Build directory, overrides `build.build-dir` in `config.toml`", + "DIR", + ); opts.optopt("", "build", "build target of the stage0 compiler", "BUILD"); opts.optmulti("", "host", "host targets to build", "HOST"); opts.optmulti("", "target", "target targets to build", "TARGET"); @@ -649,6 +656,7 @@ pub fn parse(args: &[String]) -> Flags { None }, config: matches.opt_str("config").map(PathBuf::from), + build_dir: matches.opt_str("build-dir").map(PathBuf::from), jobs: matches.opt_str("jobs").map(|j| j.parse().expect("`jobs` should be a number")), cmd, incremental: matches.opt_present("incremental"),