@@ -35,7 +35,7 @@ fn main() {
35
35
use Commands :: * ;
36
36
match Cli :: parse ( ) . command {
37
37
Make ( args) => {
38
- args. make ( package ( args. kernel . as_ref ( ) ) ) ;
38
+ args. make ( package ( args. kernel . as_ref ( ) ) , true ) ;
39
39
}
40
40
Asm ( args) => args. dump ( ) ,
41
41
Qemu ( args) => args. run ( ) ,
@@ -56,7 +56,7 @@ struct BuildArgs {
56
56
}
57
57
58
58
impl BuildArgs {
59
- fn make ( & self , package : & str ) -> PathBuf {
59
+ fn make ( & self , package : & str , binary : bool ) -> PathBuf {
60
60
let target = "riscv64imac-unknown-none-elf" ;
61
61
Cargo :: build ( )
62
62
. package ( package)
@@ -68,11 +68,23 @@ impl BuildArgs {
68
68
} )
69
69
. target ( target)
70
70
. invoke ( ) ;
71
- PROJECT
71
+ let elf = PROJECT
72
72
. join ( "target" )
73
73
. join ( target)
74
74
. join ( if self . debug { "debug" } else { "release" } )
75
- . join ( package)
75
+ . join ( package) ;
76
+ if binary {
77
+ let bin = elf. with_extension ( "bin" ) ;
78
+ BinUtil :: objcopy ( )
79
+ . arg ( elf)
80
+ . arg ( "--strip-all" )
81
+ . args ( [ "-O" , "binary" ] )
82
+ . arg ( & bin)
83
+ . invoke ( ) ;
84
+ bin
85
+ } else {
86
+ elf
87
+ }
76
88
}
77
89
}
78
90
@@ -92,7 +104,7 @@ impl AsmArgs {
92
104
///
93
105
/// 如果设置了 `kernel` 但不是 'test' 或 'test-kernel',将 `kernel` 指定的二进制文件反汇编,并保存到指定位置。
94
106
fn dump ( self ) {
95
- let elf = self . build . make ( package ( self . build . kernel . as_ref ( ) ) ) ;
107
+ let elf = self . build . make ( package ( self . build . kernel . as_ref ( ) ) , false ) ;
96
108
let out = PROJECT . join ( self . output . unwrap_or ( format ! (
97
109
"{}.asm" ,
98
110
elf. file_stem( ) . unwrap( ) . to_string_lossy( )
@@ -121,14 +133,14 @@ impl QemuArgs {
121
133
fn run ( mut self ) {
122
134
let sbi = self . sbi . take ( ) . unwrap_or_else ( || "rust" . into ( ) ) ;
123
135
let sbi = match sbi. to_lowercase ( ) . as_str ( ) {
124
- "rust" | "rustsbi" => objcopy ( self . build . make ( "rustsbi-qemu" ) , true ) ,
136
+ "rust" | "rustsbi" => self . build . make ( "rustsbi-qemu" , true ) ,
125
137
"open" | "opensbi" => PathBuf :: from ( "default" ) ,
126
138
_ => panic ! ( ) ,
127
139
} ;
128
140
let kernel = self . build . kernel . take ( ) . unwrap_or_else ( || "test" . into ( ) ) ;
129
141
let kernel = match kernel. to_lowercase ( ) . as_str ( ) {
130
- "test" | "test-kernel" => objcopy ( self . build . make ( "test-kernel" ) , true ) ,
131
- "bench" | "bench-kernel" => objcopy ( self . build . make ( "bench-kernel" ) , true ) ,
142
+ "test" | "test-kernel" => self . build . make ( "test-kernel" , true ) ,
143
+ "bench" | "bench-kernel" => self . build . make ( "bench-kernel" , true ) ,
132
144
_ => panic ! ( ) ,
133
145
} ;
134
146
let status = Qemu :: system ( "riscv64" )
@@ -170,20 +182,6 @@ fn package<T: AsRef<str>>(name: Option<T>) -> &'static str {
170
182
}
171
183
}
172
184
173
- fn objcopy ( elf : impl AsRef < Path > , binary : bool ) -> PathBuf {
174
- let elf = elf. as_ref ( ) ;
175
- let bin = elf. with_extension ( "bin" ) ;
176
- BinUtil :: objcopy ( )
177
- . arg ( elf)
178
- . arg ( "--strip-all" )
179
- . conditional ( binary, |binutil| {
180
- binutil. args ( [ "-O" , "binary" ] ) ;
181
- } )
182
- . arg ( & bin)
183
- . invoke ( ) ;
184
- bin
185
- }
186
-
187
185
#[ test]
188
186
fn test ( ) {
189
187
QemuArgs :: default ( ) . run ( ) ;
0 commit comments