about summary refs log tree commit diff
path: root/compiler/rustc_target/src
diff options
context:
space:
mode:
authorUrgau <urgau@numericable.fr>2025-02-15 11:53:08 +0100
committerUrgau <urgau@numericable.fr>2025-02-15 18:49:26 +0100
commit6ec3cf9abc15368df705b65e20e7e753d565fe71 (patch)
tree9d3f20a2897de6ed0d8b9044e7d85ab20f1f68d7 /compiler/rustc_target/src
parent3f33b30e19b7597a3acbca19e46d9e308865a0fe (diff)
downloadrust-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.
Diffstat (limited to 'compiler/rustc_target/src')
-rw-r--r--compiler/rustc_target/src/spec/mod.rs13
1 files changed, 13 insertions, 0 deletions
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