@@ -44,18 +44,29 @@ impl Builder {
44
44
///
45
45
/// If the quiet argument is set to true, all output to stdout is suppressed.
46
46
pub fn build_kernel (
47
- & self ,
47
+ & mut self ,
48
48
args : & [ String ] ,
49
49
quiet : bool ,
50
50
) -> Result < Vec < PathBuf > , BuildKernelError > {
51
51
if !quiet {
52
52
println ! ( "Building kernel" ) ;
53
53
}
54
54
55
+ let build_arg = if self
56
+ . project_metadata ( )
57
+ . ok ( )
58
+ . and_then ( |m| m. packages . iter ( ) . find ( |p| p. name == "rlibc" ) )
59
+ . is_some ( )
60
+ {
61
+ "build"
62
+ } else {
63
+ "xbuild"
64
+ } ;
65
+
55
66
// try to run cargo xbuild
56
67
let cargo = std:: env:: var ( "CARGO" ) . unwrap_or_else ( |_| "cargo" . to_owned ( ) ) ;
57
68
let mut cmd = process:: Command :: new ( & cargo) ;
58
- cmd. arg ( "xbuild" ) ;
69
+ cmd. arg ( build_arg ) ;
59
70
cmd. args ( args) ;
60
71
if !quiet {
61
72
cmd. stdout ( process:: Stdio :: inherit ( ) ) ;
@@ -66,14 +77,16 @@ impl Builder {
66
77
error : err,
67
78
} ) ?;
68
79
if !output. status . success ( ) {
69
- // try executing `cargo xbuild --help` to check whether cargo-xbuild is installed
70
- let mut help_command = process:: Command :: new ( "cargo" ) ;
71
- help_command. arg ( "xbuild" ) . arg ( "--help" ) ;
72
- help_command. stdout ( process:: Stdio :: null ( ) ) ;
73
- help_command. stderr ( process:: Stdio :: null ( ) ) ;
74
- if let Ok ( help_exit_status) = help_command. status ( ) {
75
- if !help_exit_status. success ( ) {
76
- return Err ( BuildKernelError :: XbuildNotFound ) ;
80
+ if build_arg == "xbuild" {
81
+ // try executing `cargo xbuild --help` to check whether cargo-xbuild is installed
82
+ let mut help_command = process:: Command :: new ( "cargo" ) ;
83
+ help_command. arg ( "xbuild" ) . arg ( "--help" ) ;
84
+ help_command. stdout ( process:: Stdio :: null ( ) ) ;
85
+ help_command. stderr ( process:: Stdio :: null ( ) ) ;
86
+ if let Ok ( help_exit_status) = help_command. status ( ) {
87
+ if !help_exit_status. success ( ) {
88
+ return Err ( BuildKernelError :: XbuildNotFound ) ;
89
+ }
77
90
}
78
91
}
79
92
return Err ( BuildKernelError :: XbuildFailed {
@@ -83,7 +96,7 @@ impl Builder {
83
96
84
97
// Retrieve binary paths
85
98
let mut cmd = process:: Command :: new ( cargo) ;
86
- cmd. arg ( "xbuild" ) ;
99
+ cmd. arg ( build_arg ) ;
87
100
cmd. args ( args) ;
88
101
cmd. arg ( "--message-format" ) . arg ( "json" ) ;
89
102
let output = cmd. output ( ) . map_err ( |err| BuildKernelError :: Io {
0 commit comments