Auto merge of #77756 - alarsyo:setup-llvm-detect, r=jyn514
Detect configuration for LLVM during setup This is a first draft to address #77579, setting `download-ci-llvm` to true on Linux, but I could also implement the `if-available` setting mentioned in the issue. On other platforms I was thinking about using [the which crate](https://crates.io/crates/which), if adding a dependency on it is considered okay of course, to detect the presence of `llvm-config` in the path, and use it if found. Still a work in progress of course.
This commit is contained in:
commit
19e1aac6ea
@ -447,7 +447,8 @@ class RustBuild(object):
|
|||||||
|
|
||||||
def downloading_llvm(self):
|
def downloading_llvm(self):
|
||||||
opt = self.get_toml('download-ci-llvm', 'llvm')
|
opt = self.get_toml('download-ci-llvm', 'llvm')
|
||||||
return opt == "true"
|
return opt == "true" \
|
||||||
|
or (opt == "if-available" and self.build == "x86_64-unknown-linux-gnu")
|
||||||
|
|
||||||
def _download_stage0_helper(self, filename, pattern, tarball_suffix, date=None):
|
def _download_stage0_helper(self, filename, pattern, tarball_suffix, date=None):
|
||||||
if date is None:
|
if date is None:
|
||||||
@ -892,7 +893,7 @@ class RustBuild(object):
|
|||||||
submodules_names = []
|
submodules_names = []
|
||||||
for module in submodules:
|
for module in submodules:
|
||||||
if module.endswith("llvm-project"):
|
if module.endswith("llvm-project"):
|
||||||
if self.get_toml('llvm-config') or self.get_toml('download-ci-llvm') == 'true':
|
if self.get_toml('llvm-config') or self.downloading_llvm():
|
||||||
if self.get_toml('lld') != 'true':
|
if self.get_toml('lld') != 'true':
|
||||||
continue
|
continue
|
||||||
check = self.check_submodule(module, slow_submodules)
|
check = self.check_submodule(module, slow_submodules)
|
||||||
@ -1003,6 +1004,16 @@ def bootstrap(help_triggered):
|
|||||||
with open(toml_path) as config:
|
with open(toml_path) as config:
|
||||||
build.config_toml = config.read()
|
build.config_toml = config.read()
|
||||||
|
|
||||||
|
profile = build.get_toml('profile')
|
||||||
|
if profile is not None:
|
||||||
|
include_file = 'config.{}.toml'.format(profile)
|
||||||
|
include_dir = os.path.join(build.rust_root, 'src', 'bootstrap', 'defaults')
|
||||||
|
include_path = os.path.join(include_dir, include_file)
|
||||||
|
# HACK: This works because `build.get_toml()` returns the first match it finds for a
|
||||||
|
# specific key, so appending our defaults at the end allows the user to override them
|
||||||
|
with open(include_path) as included_toml:
|
||||||
|
build.config_toml += os.linesep + included_toml.read()
|
||||||
|
|
||||||
config_verbose = build.get_toml('verbose', 'build')
|
config_verbose = build.get_toml('verbose', 'build')
|
||||||
if config_verbose is not None:
|
if config_verbose is not None:
|
||||||
build.verbose = max(build.verbose, int(config_verbose))
|
build.verbose = max(build.verbose, int(config_verbose))
|
||||||
|
@ -391,7 +391,7 @@ struct Llvm {
|
|||||||
use_libcxx: Option<bool>,
|
use_libcxx: Option<bool>,
|
||||||
use_linker: Option<String>,
|
use_linker: Option<String>,
|
||||||
allow_old_toolchain: Option<bool>,
|
allow_old_toolchain: Option<bool>,
|
||||||
download_ci_llvm: Option<bool>,
|
download_ci_llvm: Option<StringOrBool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Default, Clone, Merge)]
|
#[derive(Deserialize, Default, Clone, Merge)]
|
||||||
@ -735,7 +735,14 @@ impl Config {
|
|||||||
set(&mut config.llvm_use_libcxx, llvm.use_libcxx);
|
set(&mut config.llvm_use_libcxx, llvm.use_libcxx);
|
||||||
config.llvm_use_linker = llvm.use_linker.clone();
|
config.llvm_use_linker = llvm.use_linker.clone();
|
||||||
config.llvm_allow_old_toolchain = llvm.allow_old_toolchain;
|
config.llvm_allow_old_toolchain = llvm.allow_old_toolchain;
|
||||||
config.llvm_from_ci = llvm.download_ci_llvm.unwrap_or(false);
|
config.llvm_from_ci = match llvm.download_ci_llvm {
|
||||||
|
Some(StringOrBool::String(s)) => {
|
||||||
|
assert!(s == "if-available", "unknown option `{}` for download-ci-llvm", s);
|
||||||
|
config.build.triple == "x86_64-unknown-linux-gnu"
|
||||||
|
}
|
||||||
|
Some(StringOrBool::Bool(b)) => b,
|
||||||
|
None => false,
|
||||||
|
};
|
||||||
|
|
||||||
if config.llvm_from_ci {
|
if config.llvm_from_ci {
|
||||||
// None of the LLVM options, except assertions, are supported
|
// None of the LLVM options, except assertions, are supported
|
||||||
|
@ -6,3 +6,8 @@
|
|||||||
debug-logging = true
|
debug-logging = true
|
||||||
# This greatly increases the speed of rebuilds, especially when there are only minor changes. However, it makes the initial build slightly slower.
|
# This greatly increases the speed of rebuilds, especially when there are only minor changes. However, it makes the initial build slightly slower.
|
||||||
incremental = true
|
incremental = true
|
||||||
|
|
||||||
|
[llvm]
|
||||||
|
# Will download LLVM from CI if available on your platform (Linux only for now)
|
||||||
|
# https://github.com/rust-lang/rust/issues/77084 tracks support for more platforms
|
||||||
|
download-ci-llvm = "if-available"
|
||||||
|
@ -8,3 +8,8 @@ bench-stage = 0
|
|||||||
[rust]
|
[rust]
|
||||||
# This greatly increases the speed of rebuilds, especially when there are only minor changes. However, it makes the initial build slightly slower.
|
# This greatly increases the speed of rebuilds, especially when there are only minor changes. However, it makes the initial build slightly slower.
|
||||||
incremental = true
|
incremental = true
|
||||||
|
|
||||||
|
[llvm]
|
||||||
|
# Will download LLVM from CI if available on your platform (Linux only for now)
|
||||||
|
# https://github.com/rust-lang/rust/issues/77084 tracks support for more platforms
|
||||||
|
download-ci-llvm = "if-available"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user