1
- use crate :: { args:: TesterArgs , builder:: Builder , config, ErrorString } ;
1
+ use crate :: { cargo_config , args:: TesterArgs , builder:: Builder , config, ErrorString } ;
2
2
use std:: {
3
3
fs,
4
4
io:: { self , Write } ,
@@ -72,14 +72,8 @@ pub(crate) fn tester(args: TesterArgs) -> Result<(), ErrorString> {
72
72
let kernel_target_dir = Path :: new ( "target" )
73
73
. canonicalize ( )
74
74
. expect ( "failed to canonicalize target dir" ) ; // TODO
75
- let kernel_target_json = Path :: new ( "x86_64-blog_os.json" )
76
- . canonicalize ( )
77
- . expect ( "failed to canonicalize target.json" ) ; // TODO
78
- let kernel_target_json_triple = kernel_target_json
79
- . file_stem ( )
80
- . expect ( "kernel target json has no valid file stem" ) ;
81
75
82
- let out_dir = kernel_target_dir. join ( "integration-tests" ) . join ( & test_name) ;
76
+ let out_dir = kernel_target_dir. join ( "bootimage" ) . join ( " integration-tests") . join ( & test_name) ;
83
77
fs:: create_dir_all ( & out_dir) . expect ( "failed to create out dir" ) ;
84
78
85
79
let manifest_path = out_dir. join ( "Cargo.toml" ) ;
@@ -110,7 +104,9 @@ path = "{test_path}"
110
104
cmd. arg ( "--manifest-path" ) . arg ( & manifest_path) ;
111
105
cmd. arg ( "--target-dir" ) . arg ( & kernel_target_dir) ;
112
106
cmd. env ( "SYSROOT_DIR" , & kernel_target_dir. join ( "sysroot" ) ) ; // for cargo-xbuild
113
- cmd. arg ( "--target" ) . arg ( & kernel_target_json) ; // TODO remove when default targets are canonicalized properly
107
+ if let Some ( target) = args. target . as_ref ( ) . or ( config. default_target . as_ref ( ) ) {
108
+ cmd. arg ( "--target" ) . arg ( target) ;
109
+ }
114
110
let output = cmd. output ( ) . expect ( "failed to run cargo xbuild" ) ;
115
111
if !output. status . success ( ) {
116
112
io:: stderr ( )
@@ -119,10 +115,25 @@ path = "{test_path}"
119
115
process:: exit ( 1 ) ;
120
116
}
121
117
122
- let executable = kernel_target_dir
123
- . join ( & kernel_target_json_triple)
124
- . join ( "debug" )
125
- . join ( & test_name) ;
118
+ let kernel_target_triple = {
119
+ match args. target . or ( config. default_target ) {
120
+ None => cargo_config:: default_target_triple ( kernel_root_path, true ) ?,
121
+ Some ( ref target) if target. ends_with ( ".json" ) => {
122
+ Some ( Path :: new ( target) . file_stem ( ) . expect ( "kernel target json has no valid file stem" ) . to_str ( ) . expect ( "invalid unicode" ) . to_owned ( ) )
123
+ }
124
+ Some ( triple) => Some ( triple) ,
125
+ }
126
+ } ;
127
+
128
+ let executable = {
129
+ let mut path = kernel_target_dir. clone ( ) ;
130
+ if let Some ( triple) = kernel_target_triple {
131
+ path. push ( triple) ;
132
+ }
133
+ path. push ( "debug" ) ;
134
+ path. push ( & test_name) ;
135
+ path
136
+ } ;
126
137
let bootimage_bin_path = out_dir. join ( format ! ( "bootimage-{}.bin" , test_name) ) ;
127
138
128
139
builder. create_bootimage ( & executable, & bootimage_bin_path, true ) ?;
0 commit comments