diff options
| author | Urgau <urgau@numericable.fr> | 2025-02-15 11:53:08 +0100 |
|---|---|---|
| committer | Urgau <urgau@numericable.fr> | 2025-02-15 18:49:26 +0100 |
| commit | 6ec3cf9abc15368df705b65e20e7e753d565fe71 (patch) | |
| tree | 9d3f20a2897de6ed0d8b9044e7d85ab20f1f68d7 | |
| parent | 3f33b30e19b7597a3acbca19e46d9e308865a0fe (diff) | |
| download | rust-6ec3cf9abc15368df705b65e20e7e753d565fe71.tar.gz rust-6ec3cf9abc15368df705b65e20e7e753d565fe71.zip | |
Load all builtin targets at once instead of one by one
This should give us some performance improvements as we won't need to do the lookup for the _currently_ 287 targets we have.
| -rw-r--r-- | compiler/rustc_session/src/config/cfg.rs | 8 | ||||
| -rw-r--r-- | compiler/rustc_target/src/spec/mod.rs | 13 |
2 files changed, 15 insertions, 6 deletions
diff --git a/compiler/rustc_session/src/config/cfg.rs b/compiler/rustc_session/src/config/cfg.rs index d586f913335..1078757d09e 100644 --- a/compiler/rustc_session/src/config/cfg.rs +++ b/compiler/rustc_session/src/config/cfg.rs @@ -29,7 +29,7 @@ use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexSet}; use rustc_lint_defs::BuiltinLintDiag; use rustc_lint_defs::builtin::EXPLICIT_BUILTIN_CFGS_IN_FLAGS; use rustc_span::{Symbol, sym}; -use rustc_target::spec::{PanicStrategy, RelocModel, SanitizerSet, TARGETS, Target, TargetTuple}; +use rustc_target::spec::{PanicStrategy, RelocModel, SanitizerSet, Target}; use crate::Session; use crate::config::{CrateType, FmtDebug}; @@ -426,11 +426,7 @@ impl CheckCfg { panic!("unable to get all the check-cfg values buckets"); }; - for target in TARGETS - .iter() - .map(|target| Target::expect_builtin(&TargetTuple::from_tuple(target))) - .chain(iter::once(current_target.clone())) - { + for target in Target::builtins().chain(iter::once(current_target.clone())) { values_target_abi.insert(Symbol::intern(&target.options.abi)); values_target_arch.insert(Symbol::intern(&target.arch)); values_target_endian.insert(Symbol::intern(target.options.endian.as_str())); diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs index 72600225e7a..2acc4ded5d8 100644 --- a/compiler/rustc_target/src/spec/mod.rs +++ b/compiler/rustc_target/src/spec/mod.rs @@ -1662,6 +1662,14 @@ macro_rules! supported_targets { Some(t) } + fn load_all_builtins() -> impl Iterator<Item = Target> { + [ + $( targets::$module::target, )+ + ] + .into_iter() + .map(|f| f()) + } + #[cfg(test)] mod tests { // Cannot put this into a separate file without duplication, make an exception. @@ -3360,6 +3368,11 @@ impl Target { } } + /// Load all built-in targets + pub fn builtins() -> impl Iterator<Item = Target> { + load_all_builtins() + } + /// Search for a JSON file specifying the given target tuple. /// /// If none is found in `$RUST_TARGET_PATH`, look for a file called `target.json` inside the |
