From 4bbedd7dd21f3bb01ec144035918fb29942b9b7d Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Sat, 18 Aug 2018 20:16:04 +0200 Subject: [PATCH] fully implement lld-flavor --- src/librustc_target/spec/mod.rs | 39 +++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/librustc_target/spec/mod.rs b/src/librustc_target/spec/mod.rs index 98b20f00265..a6c0fdccd33 100644 --- a/src/librustc_target/spec/mod.rs +++ b/src/librustc_target/spec/mod.rs @@ -94,6 +94,29 @@ pub enum LldFlavor { Link, } +impl LldFlavor { + fn from_str(s: &str) -> Option { + Some(match s { + "darwin" => LldFlavor::Ld64, + "gnu" => LldFlavor::Ld, + "link" => LldFlavor::Link, + "wasm" => LldFlavor::Wasm, + _ => return None, + }) + } +} + +impl ToJson for LldFlavor { + fn to_json(&self) -> Json { + match *self { + LldFlavor::Ld64 => "darwin", + LldFlavor::Ld => "gnu", + LldFlavor::Link => "link", + LldFlavor::Wasm => "wasm", + }.to_json() + } +} + impl ToJson for LinkerFlavor { fn to_json(&self) -> Json { self.desc().to_json() @@ -860,6 +883,20 @@ macro_rules! key { .map(|s| s.to_string() ); } } ); + ($key_name:ident, LldFlavor) => ( { + let name = (stringify!($key_name)).replace("_", "-"); + obj.find(&name[..]).and_then(|o| o.as_string().and_then(|s| { + if let Some(flavor) = LldFlavor::from_str(&s) { + base.options.$key_name = flavor; + } else { + return Some(Err(format!( + "'{}' is not a valid value for lld-flavor. \ + Use 'darwin', 'gnu', 'link' or 'wasm.", + s))) + } + Some(Ok(())) + })).unwrap_or(Ok(())) + } ); ($key_name:ident, LinkerFlavor) => ( { let name = (stringify!($key_name)).replace("_", "-"); obj.find(&name[..]).and_then(|o| o.as_string().map(|s| { @@ -915,6 +952,7 @@ macro_rules! key { key!(is_builtin, bool); key!(linker, optional); + try!(key!(lld_flavor, LldFlavor)); key!(pre_link_args, link_args); key!(pre_link_args_crt, link_args); key!(pre_link_objects_exe, list); @@ -1124,6 +1162,7 @@ macro_rules! target_option_val { target_option_val!(is_builtin); target_option_val!(linker); + target_option_val!(lld_flavor); target_option_val!(link_args - pre_link_args); target_option_val!(link_args - pre_link_args_crt); target_option_val!(pre_link_objects_exe); -- 2.44.0