diff options
| author | Jonathan Creekmore <jonathan@thecreekmores.org> | 2016-07-26 17:44:27 -0700 |
|---|---|---|
| committer | Doug Goldstein <cardoe@cardoe.com> | 2016-07-27 10:29:43 -0700 |
| commit | 54c61ff959de5f79afe59ba5051b087aed220408 (patch) | |
| tree | 1cdf4f1ad14e158da0f5324701ac92a3a7def000 /src | |
| parent | bd194a77d57c5487baf1f9bb169e44dd844235e6 (diff) | |
librustc_back: filter targets for only valid ones
Since we can know which targets are instantiable on a particular host, it does not make sense to list invalid targets in the target print code. Filter the list of targets to only include the targets that can be instantiated.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_back/target/mod.rs | 10 | ||||
| -rw-r--r-- | src/librustc_driver/lib.rs | 2 |
2 files changed, 10 insertions, 2 deletions
diff --git a/src/librustc_back/target/mod.rs b/src/librustc_back/target/mod.rs index 84cb6c9ba7d..f5314809228 100644 --- a/src/librustc_back/target/mod.rs +++ b/src/librustc_back/target/mod.rs @@ -71,7 +71,7 @@ macro_rules! supported_targets { $(mod $module;)* /// List of supported targets - pub const TARGETS: &'static [&'static str] = &[$($triple),*]; + const TARGETS: &'static [&'static str] = &[$($triple),*]; fn load_specific(target: &str) -> TargetResult { match target { @@ -91,6 +91,14 @@ macro_rules! supported_targets { } } + pub fn get_targets() -> Box<Iterator<Item=String>> { + Box::new(TARGETS.iter().filter_map(|t| -> Option<String> { + load_specific(t) + .map(|t| t.llvm_target) + .ok() + })) + } + #[cfg(test)] mod test_json_encode_decode { use serialize::json::ToJson; diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs index 0a8df923b84..eff920608dc 100644 --- a/src/librustc_driver/lib.rs +++ b/src/librustc_driver/lib.rs @@ -609,7 +609,7 @@ impl RustcDefaultCalls { for req in &sess.opts.prints { match *req { PrintRequest::TargetList => { - let mut targets = rustc_back::target::TARGETS.to_vec(); + let mut targets = rustc_back::target::get_targets().collect::<Vec<String>>(); targets.sort(); println!("{}", targets.join("\n")); }, |
