@@ -65,34 +65,24 @@ pub fn source_name(input: &input) -> @str {
65
65
66
66
pub fn default_configuration(sess: Session, argv0: @str, input: &input) ->
67
67
ast::crate_cfg {
68
- let libc = match sess.targ_cfg.os {
69
- session::os_win32 => @" msvcrt. dll",
70
- session :: os_macos => @"libc. dylib",
71
- session :: os_linux => @"libc. so . 6 ",
72
- session :: os_android => @"libc. so",
73
- session :: os_freebsd => @"libc. so . 7 "
74
- // _ { "libc.so" }
68
+ let (libc, tos) = match sess.targ_cfg.os {
69
+ session::os_win32 => (@" msvcrt. dll", @"win32") ,
70
+ session :: os_macos => ( @"libc. dylib ", @"macos") ,
71
+ session:: os_linux => ( @"libc. so . 6 ", @"linux") ,
72
+ session:: os_android => ( @"libc. so ", @"android") ,
73
+ session:: os_freebsd => ( @"libc. so . 7 ", @"freebsd")
75
74
} ;
76
- let tos = match sess. targ_cfg . os {
77
- session:: os_win32 => @"win32",
78
- session:: os_macos => @"macos",
79
- session:: os_linux => @"linux",
80
- session:: os_android => @"android",
81
- session:: os_freebsd => @"freebsd"
82
- // _ { "libc.so" }
83
- } ;
84
-
85
- let mk = attr:: mk_name_value_item_str;
86
75
87
76
// ARM is bi-endian, however using NDK seems to default
88
77
// to little-endian unless a flag is provided.
89
78
let ( end, arch, wordsz) = match sess. targ_cfg . arch {
90
- abi:: X86 => ( @"little", @"x86", @"32 ") ,
91
- abi:: X86_64 => ( @"little", @"x86_64", @"64 ") ,
92
- abi:: Arm => ( @"little", @"arm", @"32 ") ,
93
- abi:: Mips => ( @"big", @"mips", @"32 ")
79
+ abi:: X86 => ( @"little", @"x86", @"32 ") ,
80
+ abi:: X86_64 => ( @"little", @"x86_64", @"64 ") ,
81
+ abi:: Arm => ( @"little", @"arm", @"32 ") ,
82
+ abi:: Mips => ( @"big", @"mips", @"32 ")
94
83
} ;
95
84
85
+ let mk = attr:: mk_name_value_item_str;
96
86
return ~[ // Target bindings.
97
87
attr:: mk_word_item ( os:: FAMILY . to_managed ( ) ) ,
98
88
mk ( @"target_os", tos) ,
@@ -463,36 +453,38 @@ pub fn pretty_print_input(sess: Session, cfg: ast::crate_cfg, input: &input,
463
453
}
464
454
465
455
pub fn get_os(triple: &str) -> Option<session::os> {
466
- if triple.contains(" win32") ||
467
- triple. contains ( "mingw32" ) {
468
- Some ( session:: os_win32)
469
- } else if triple. contains ( "darwin" ) {
470
- Some ( session:: os_macos)
471
- } else if triple. contains ( "android" ) {
472
- Some ( session:: os_android)
473
- } else if triple. contains ( "linux" ) {
474
- Some ( session:: os_linux)
475
- } else if triple. contains ( "freebsd" ) {
476
- Some ( session:: os_freebsd)
477
- } else { None }
456
+ for os_names.each |&(name, os)| {
457
+ if triple.contains(name) { return Some(os) }
458
+ }
459
+ None
478
460
}
461
+ static os_names : &'static [(&'static str, session::os)] = &'static [
462
+ (" mingw32", session:: os_win32) ,
463
+ ( "win32" , session:: os_win32) ,
464
+ ( "darwin" , session:: os_macos) ,
465
+ ( "android" , session:: os_android) ,
466
+ ( "linux" , session:: os_linux) ,
467
+ ( "freebsd" , session:: os_freebsd) ] ;
479
468
480
469
pub fn get_arch( triple: & str) -> Option < abi:: Architecture > {
481
- if triple. contains( "i386" ) ||
482
- triple. contains( "i486" ) ||
483
- triple. contains( "i586" ) ||
484
- triple. contains( "i686" ) ||
485
- triple. contains( "i786" ) {
486
- Some ( abi:: X86 )
487
- } else if triple. contains ( "x86_64" ) {
488
- Some ( abi:: X86_64 )
489
- } else if triple. contains ( "arm" ) ||
490
- triple. contains ( "xscale" ) {
491
- Some ( abi:: Arm )
492
- } else if triple. contains ( "mips" ) {
493
- Some ( abi:: Mips )
494
- } else { None }
470
+ for architecture_abis. each |& ( arch, abi) | {
471
+ if triple. contains( arch) { return Some ( abi) }
472
+ }
473
+ None
495
474
}
475
+ static architecture_abis : & ' static [ ( & ' static str, abi:: Architecture ) ] = & ' static [
476
+ ( "i386" , abi:: X86 ) ,
477
+ ( "i486" , abi:: X86 ) ,
478
+ ( "i586" , abi:: X86 ) ,
479
+ ( "i686" , abi:: X86 ) ,
480
+ ( "i786" , abi:: X86 ) ,
481
+
482
+ ( "x86_64" , abi:: X86_64 ) ,
483
+
484
+ ( "arm" , abi:: Arm ) ,
485
+ ( "xscale" , abi:: Arm ) ,
486
+
487
+ ( "mips" , abi:: Mips ) ] ;
496
488
497
489
pub fn build_target_config( sopts: @session:: options,
498
490
demitter: diagnostic:: Emitter )
0 commit comments