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.
This commit is contained in:
Joshua Nelson 2020-05-07 16:51:03 -04:00
parent a08c47310c
commit df36ec0b7e
3 changed files with 15 additions and 2 deletions

View file

@ -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']