@@ -77,7 +77,7 @@ pub(super) fn load_target_triple(config: &Config, triple: &str) -> CargoResult<T
77
77
// Links do not support environment variables.
78
78
let target_key = ConfigKey :: from_str ( & format ! ( "target.{}" , triple) ) ;
79
79
let links_overrides = match config. get_table ( & target_key) ? {
80
- Some ( links) => parse_links_overrides ( & target_key, links. val ) ?,
80
+ Some ( links) => parse_links_overrides ( & target_key, links. val , & config ) ?,
81
81
None => BTreeMap :: new ( ) ,
82
82
} ;
83
83
Ok ( TargetConfig {
@@ -91,7 +91,10 @@ pub(super) fn load_target_triple(config: &Config, triple: &str) -> CargoResult<T
91
91
fn parse_links_overrides (
92
92
target_key : & ConfigKey ,
93
93
links : HashMap < String , CV > ,
94
+ config : & Config ,
94
95
) -> CargoResult < BTreeMap < String , BuildOutput > > {
96
+ let extra_link_arg = config. cli_unstable ( ) . extra_link_arg ;
97
+
95
98
let mut links_overrides = BTreeMap :: new ( ) ;
96
99
for ( lib_name, value) in links {
97
100
// Skip these keys, it shares the namespace with `TargetConfig`.
@@ -135,14 +138,28 @@ fn parse_links_overrides(
135
138
output. linker_args . extend ( args) ;
136
139
}
137
140
"rustc-bin-link-arg" => {
138
- let args = value. list ( key) ?;
139
- let args = args. iter ( ) . map ( |v| ( Some ( LinkType :: Bin ) , v. 0 . clone ( ) ) ) ;
140
- output. linker_args . extend ( args) ;
141
+ if extra_link_arg {
142
+ let args = value. list ( key) ?;
143
+ let args = args. iter ( ) . map ( |v| ( Some ( LinkType :: Bin ) , v. 0 . clone ( ) ) ) ;
144
+ output. linker_args . extend ( args) ;
145
+ } else {
146
+ config. shell ( ) . warn ( format ! (
147
+ "target config `{}.{}` requires -Zextra-link-arg flag" ,
148
+ target_key, key
149
+ ) ) ?;
150
+ }
141
151
}
142
152
"rustc-link-arg" => {
143
- let args = value. list ( key) ?;
144
- let args = args. iter ( ) . map ( |v| ( None , v. 0 . clone ( ) ) ) ;
145
- output. linker_args . extend ( args) ;
153
+ if extra_link_arg {
154
+ let args = value. list ( key) ?;
155
+ let args = args. iter ( ) . map ( |v| ( None , v. 0 . clone ( ) ) ) ;
156
+ output. linker_args . extend ( args) ;
157
+ } else {
158
+ config. shell ( ) . warn ( format ! (
159
+ "target config `{}.{}` requires -Zextra-link-arg flag" ,
160
+ target_key, key
161
+ ) ) ?;
162
+ }
146
163
}
147
164
"rustc-cfg" => {
148
165
let list = value. list ( key) ?;
0 commit comments