about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2020-05-09 06:26:57 +0000
committerbors <bors@rust-lang.org>2020-05-09 06:26:57 +0000
commit34d6b446e56d90ae34048a2e31eb1e39dbda2a1b (patch)
treee5c8caa73d3ae30bce7221c558626fad3fe57b4d /src
parent945d110e059ed9d77d04e03829e41c641625e478 (diff)
parentdf36ec0b7e4b44a9f94d019a1cec43dd1f813e3c (diff)
downloadrust-34d6b446e56d90ae34048a2e31eb1e39dbda2a1b.tar.gz
rust-34d6b446e56d90ae34048a2e31eb1e39dbda2a1b.zip
Auto merge of #71994 - jyn514:path-independent, r=Mark-Simulacrum
x.py: allow configuring the build directory

This allows configuring the directory for build artifacts, instead of having it always be `./build`. This means you can set it to a constant location, letting you reuse the same cache while working in several different directories.

The configuration lives in `config.toml` under `build.build-dir`. By default, it keeps the existing default of `./build`, but it can be configured to any relative or absolute path. Additionally, it allows making outputs relative to the root of the git repository using `$ROOT`.

r? @Mark-Simulacrum
Diffstat (limited to 'src')
-rw-r--r--src/bootstrap/bootstrap.py11
-rw-r--r--src/bootstrap/config.rs2
2 files changed, 11 insertions, 2 deletions
diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py
index 9e56dd3770d..9a91f37c5de 100644
--- a/src/bootstrap/bootstrap.py
+++ b/src/bootstrap/bootstrap.py
@@ -332,7 +332,7 @@ class RustBuild(object):
         self.rustc_channel = ''
         self.rustfmt_channel = ''
         self.build = ''
-        self.build_dir = os.path.join(os.getcwd(), "build")
+        self.build_dir = ''
         self.clean = False
         self.config_toml = ''
         self.rust_root = ''
@@ -891,7 +891,11 @@ def bootstrap(help_triggered):
     build.clean = args.clean
 
     try:
-        with open(args.config or 'config.toml') as config:
+        toml_path = args.config or 'config.toml'
+        if not os.path.exists(toml_path):
+            toml_path = os.path.join(build.rust_root, toml_path)
+
+        with open(toml_path) as config:
             build.config_toml = config.read()
     except (OSError, IOError):
         pass
@@ -906,6 +910,9 @@ def bootstrap(help_triggered):
 
     build.check_vendored_status()
 
+    build_dir = build.get_toml('build-dir', 'build') or 'build'
+    build.build_dir = os.path.abspath(build_dir.replace("$ROOT", build.rust_root))
+
     data = stage0_data(build.rust_root)
     build.date = data['date']
     build.rustc_channel = data['rustc']
diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
index 133709421a5..390630ee51b 100644
--- a/src/bootstrap/config.rs
+++ b/src/bootstrap/config.rs
@@ -212,6 +212,8 @@ struct Build {
     host: Vec<String>,
     #[serde(default)]
     target: Vec<String>,
+    // This is ignored, the rust code always gets the build directory from the `BUILD_DIR` env variable
+    build_dir: Option<String>,
     cargo: Option<String>,
     rustc: Option<String>,
     rustfmt: Option<String>, /* allow bootstrap.py to use rustfmt key */