@@ -9,6 +9,7 @@ lazy_static! {
9
9
/// This toolchain is used during internal tests, and must be different than TEST_TOOLCHAIN
10
10
pub ( crate ) static ref MAIN_TOOLCHAIN : Toolchain = Toolchain {
11
11
source: RustwideToolchain :: dist( "stable" ) ,
12
+ target: None ,
12
13
rustflags: None ,
13
14
rustdocflags: None ,
14
15
cargoflags: None ,
@@ -19,6 +20,7 @@ lazy_static! {
19
20
/// This toolchain is used during internal tests, and must be different than MAIN_TOOLCHAIN
20
21
pub ( crate ) static ref TEST_TOOLCHAIN : Toolchain = Toolchain {
21
22
source: RustwideToolchain :: dist( "beta" ) ,
23
+ target: None ,
22
24
rustflags: None ,
23
25
rustdocflags: None ,
24
26
cargoflags: None ,
@@ -30,6 +32,7 @@ lazy_static! {
30
32
#[ derive( Serialize , Deserialize , PartialEq , Eq , Hash , Debug , Clone ) ]
31
33
pub struct Toolchain {
32
34
pub source : RustwideToolchain ,
35
+ pub target : Option < String > ,
33
36
pub rustflags : Option < String > ,
34
37
pub rustdocflags : Option < String > ,
35
38
pub cargoflags : Option < String > ,
@@ -67,6 +70,10 @@ impl fmt::Display for Toolchain {
67
70
panic ! ( "unsupported rustwide toolchain" ) ;
68
71
}
69
72
73
+ if let Some ( ref target) = self . target {
74
+ write ! ( f, "+target={}" , target) ?;
75
+ }
76
+
70
77
if let Some ( ref flag) = self . rustflags {
71
78
write ! ( f, "+rustflags={}" , flag) ?;
72
79
}
@@ -131,6 +138,7 @@ impl FromStr for Toolchain {
131
138
let mut rustdocflags = None ;
132
139
let mut cargoflags = None ;
133
140
let mut patches: Vec < CratePatch > = vec ! [ ] ;
141
+ let mut target = None ;
134
142
for part in parts {
135
143
if let Some ( equal_idx) = part. find ( '=' ) {
136
144
let ( flag, value_with_equal) = part. split_at ( equal_idx) ;
@@ -145,6 +153,7 @@ impl FromStr for Toolchain {
145
153
"rustdocflags" => rustdocflags = Some ( value) ,
146
154
"cargoflags" => cargoflags = Some ( value) ,
147
155
"patch" => patches. push ( value. parse ( ) ?) ,
156
+ "target" => target = Some ( value) ,
148
157
unknown => return Err ( ToolchainParseError :: InvalidFlag ( unknown. to_string ( ) ) ) ,
149
158
}
150
159
} else {
@@ -154,6 +163,7 @@ impl FromStr for Toolchain {
154
163
155
164
Ok ( Toolchain {
156
165
source,
166
+ target,
157
167
rustflags,
158
168
rustdocflags,
159
169
cargoflags,
@@ -208,6 +218,18 @@ mod tests {
208
218
// Test parsing without flags
209
219
test_from_str!( $str => Toolchain {
210
220
source: $source,
221
+ target: None ,
222
+ rustflags: None ,
223
+ rustdocflags: None ,
224
+ cargoflags: None ,
225
+ ci_try: $ci_try,
226
+ patches: Vec :: new( ) ,
227
+ } ) ;
228
+
229
+ // Test parsing with target
230
+ test_from_str!( concat!( $str, "+target=x86_64-unknown-linux-gnu" ) => Toolchain {
231
+ source: $source,
232
+ target: Some ( "x86_64-unknown-linux-gnu" . to_string( ) ) ,
211
233
rustflags: None ,
212
234
rustdocflags: None ,
213
235
cargoflags: None ,
@@ -218,6 +240,7 @@ mod tests {
218
240
// Test parsing with rustflags
219
241
test_from_str!( concat!( $str, "+rustflags=foo bar" ) => Toolchain {
220
242
source: $source,
243
+ target: None ,
221
244
rustflags: Some ( "foo bar" . to_string( ) ) ,
222
245
rustdocflags: None ,
223
246
cargoflags: None ,
@@ -228,6 +251,7 @@ mod tests {
228
251
// Test parsing with rustdocflags
229
252
test_from_str!( concat!( $str, "+rustdocflags=-Zunstable-options -wjson" ) => Toolchain {
230
253
source: $source,
254
+ target: None ,
231
255
rustflags: None ,
232
256
rustdocflags: Some ( "-Zunstable-options -wjson" . to_string( ) ) ,
233
257
cargoflags: None ,
@@ -238,6 +262,7 @@ mod tests {
238
262
// Test parsing with cargoflags
239
263
test_from_str!( concat!( $str, "+cargoflags=foo bar" ) => Toolchain {
240
264
source: $source,
265
+ target: None ,
241
266
rustflags: None ,
242
267
rustdocflags: None ,
243
268
cargoflags: Some ( "foo bar" . to_string( ) ) ,
@@ -248,6 +273,7 @@ mod tests {
248
273
// Test parsing with patches
249
274
test_from_str!( concat!( $str, "+patch=example=https://git.example.com/some/repo=master" ) => Toolchain {
250
275
source: $source,
276
+ target: None ,
251
277
rustflags: None ,
252
278
rustdocflags: None ,
253
279
cargoflags: None ,
@@ -262,6 +288,7 @@ mod tests {
262
288
// Test parsing with patches & rustflags
263
289
test_from_str!( concat!( $str, "+rustflags=foo bar+patch=example=https://git.example.com/some/repo=master" ) => Toolchain {
264
290
source: $source,
291
+ target: None ,
265
292
rustflags: Some ( "foo bar" . to_string( ) ) ,
266
293
rustdocflags: None ,
267
294
cargoflags: None ,
@@ -319,6 +346,7 @@ mod tests {
319
346
assert ! ( Toolchain :: from_str( "stable+rustdocflags" ) . is_err( ) ) ;
320
347
assert ! ( Toolchain :: from_str( "stable+rustdocflags=" ) . is_err( ) ) ;
321
348
assert ! ( Toolchain :: from_str( "stable+donotusethisflag=ever" ) . is_err( ) ) ;
322
- assert ! ( Toolchain :: from_str( "stable+patch=" ) . is_err( ) )
349
+ assert ! ( Toolchain :: from_str( "stable+patch=" ) . is_err( ) ) ;
350
+ assert ! ( Toolchain :: from_str( "try#1234+target=" ) . is_err( ) ) ;
323
351
}
324
352
}
0 commit comments