@@ -9,15 +9,18 @@ pub enum Target {
9
9
X86_64Fc ,
10
10
X86_64Uefi ,
11
11
Aarch64 ,
12
+ Aarch64Be ,
12
13
Riscv64 ,
13
14
}
14
15
15
16
impl Target {
16
17
pub fn install ( & self ) -> xshell:: Result < ( ) > {
17
18
let sh = Shell :: new ( ) ?;
18
19
19
- let triple = self . triple ( ) ;
20
- cmd ! ( sh, "rustup target add {triple}" ) . run ( ) ?;
20
+ if self . tier ( ) <= 2 {
21
+ let triple = self . triple ( ) ;
22
+ cmd ! ( sh, "rustup target add {triple}" ) . run ( ) ?;
23
+ }
21
24
22
25
if self == & Self :: X86_64 {
23
26
cmd ! ( sh, "rustup component add llvm-tools-preview" ) . run ( ) ?;
@@ -32,6 +35,7 @@ impl Target {
32
35
Self :: X86_64Fc => "x86_64" ,
33
36
Self :: X86_64Uefi => "x86_64" ,
34
37
Self :: Aarch64 => "aarch64" ,
38
+ Self :: Aarch64Be => "aarch64_be" ,
35
39
Self :: Riscv64 => "riscv64" ,
36
40
}
37
41
}
@@ -42,16 +46,28 @@ impl Target {
42
46
Self :: X86_64Fc => "x86_64-unknown-none" ,
43
47
Self :: X86_64Uefi => "x86_64-unknown-uefi" ,
44
48
Self :: Aarch64 => "aarch64-unknown-none-softfloat" ,
49
+ Self :: Aarch64Be => "aarch64_be-unknown-none-softfloat" ,
45
50
Self :: Riscv64 => "riscv64imac-unknown-none-elf" ,
46
51
}
47
52
}
48
53
54
+ pub fn tier ( & self ) -> u8 {
55
+ match self {
56
+ Self :: Aarch64Be => 3 ,
57
+ _ => 2 ,
58
+ }
59
+ }
60
+
49
61
pub fn cargo_args ( & self ) -> & ' static [ & ' static str ] {
50
62
match self {
51
63
Self :: X86_64 => & [ "--target=x86_64-unknown-none" ] ,
52
64
Self :: X86_64Fc => & [ "--target=x86_64-unknown-none" ] ,
53
65
Self :: X86_64Uefi => & [ "--target=x86_64-unknown-uefi" ] ,
54
66
Self :: Aarch64 => & [ "--target=aarch64-unknown-none-softfloat" ] ,
67
+ Self :: Aarch64Be => & [
68
+ "--target=aarch64_be-unknown-none-softfloat" ,
69
+ "-Zbuild-std=core,alloc,panic_abort" ,
70
+ ] ,
55
71
Self :: Riscv64 => & [ "--target=riscv64imac-unknown-none-elf" ] ,
56
72
}
57
73
}
@@ -67,7 +83,7 @@ impl Target {
67
83
"-Crelocation-model=static" ,
68
84
] ,
69
85
Self :: X86_64Uefi => & [ ] ,
70
- Self :: Aarch64 => & [ "-Clink-arg=-Tsrc/arch/aarch64/link.ld" ] ,
86
+ Self :: Aarch64 | Self :: Aarch64Be => & [ "-Clink-arg=-Tsrc/arch/aarch64/link.ld" ] ,
71
87
Self :: Riscv64 => & [ "-Clink-arg=-Tsrc/arch/riscv64/link.ld" ] ,
72
88
}
73
89
}
@@ -92,9 +108,18 @@ impl Target {
92
108
Self :: X86_64Fc => "hermit-loader-x86_64-fc" ,
93
109
Self :: X86_64Uefi => "hermit-loader-x86_64.efi" ,
94
110
Self :: Aarch64 => "hermit-loader-aarch64" ,
111
+ Self :: Aarch64Be => "hermit-loader-aarch64_be" ,
95
112
Self :: Riscv64 => "hermit-loader-riscv64" ,
96
113
}
97
114
}
115
+
116
+ pub fn qemu ( & self ) -> & ' static str {
117
+ match self {
118
+ Self :: X86_64 | Self :: X86_64Fc | Self :: X86_64Uefi => "x86_64" ,
119
+ Self :: Aarch64 | Self :: Aarch64Be => "aarch64" ,
120
+ Self :: Riscv64 => "riscv64" ,
121
+ }
122
+ }
98
123
}
99
124
100
125
impl FromStr for Target {
@@ -106,6 +131,7 @@ impl FromStr for Target {
106
131
"x86_64-fc" => Ok ( Self :: X86_64Fc ) ,
107
132
"x86_64-uefi" => Ok ( Self :: X86_64Uefi ) ,
108
133
"aarch64" => Ok ( Self :: Aarch64 ) ,
134
+ "aarch64_be" => Ok ( Self :: Aarch64Be ) ,
109
135
"riscv64" => Ok ( Self :: Riscv64 ) ,
110
136
s => Err ( anyhow ! ( "Unsupported target: {s}" ) ) ,
111
137
}
0 commit comments