@@ -20,10 +20,15 @@ impl BuildConfig {
20
20
/// Derives the bootloader build config from the project's metadata.
21
21
pub fn from_metadata (
22
22
project_metadata : & Metadata ,
23
- kernel_bin_name : & str ,
23
+ kernel_manifest_path : & Path ,
24
24
kernel_bin_path : & Path ,
25
25
) -> Result < Self , BootloaderError > {
26
- let kernel_pkg = kernel_package ( project_metadata, kernel_bin_name) ?;
26
+ let kernel_pkg = project_metadata
27
+ . packages
28
+ . iter ( )
29
+ . find ( |p| p. manifest_path == kernel_manifest_path)
30
+ . unwrap ( ) ;
31
+
27
32
let bootloader_pkg = bootloader_package ( project_metadata, kernel_pkg) ?;
28
33
let bootloader_root = bootloader_pkg. manifest_path . parent ( ) . ok_or_else ( || {
29
34
BootloaderError :: BootloaderInvalid ( "bootloader manifest has no target directory" . into ( ) )
@@ -110,44 +115,6 @@ impl BuildConfig {
110
115
}
111
116
}
112
117
113
- /// Returns the package metadata for the kernel crate
114
- fn kernel_package < ' a > (
115
- project_metadata : & ' a Metadata ,
116
- kernel_bin_name : & str ,
117
- ) -> Result < & ' a Package , BootloaderError > {
118
- // look for exact match with binary name first
119
- let contains_bin = |p : & & Package | {
120
- p. targets
121
- . iter ( )
122
- . any ( |t| t. name == kernel_bin_name && t. kind . iter ( ) . any ( |k| k == "bin" ) )
123
- } ;
124
- let package = project_metadata. packages . iter ( ) . find ( contains_bin) ;
125
-
126
- // then look for exact match with integration test binary
127
- let contains_test_bin = |p : & & Package | {
128
- p. targets
129
- . iter ( )
130
- . any ( |t| t. name == kernel_bin_name && t. kind . iter ( ) . any ( |k| k == "test" ) )
131
- } ;
132
- let package = package. or_else ( || project_metadata. packages . iter ( ) . find ( contains_test_bin) ) ;
133
-
134
- // then look for match with appended hash (e.g. for library tests)
135
- let contains_test = |p : & & Package | {
136
- let package_name = match kernel_bin_name. rsplitn ( 2 , '-' ) . nth ( 1 ) {
137
- Some ( name) => name,
138
- None => return false ,
139
- } ;
140
- p. targets
141
- . iter ( )
142
- . any ( |t| t. name . replace ( "-" , "_" ) == package_name)
143
- } ;
144
- let package = package. or_else ( || project_metadata. packages . iter ( ) . find ( contains_test) ) ;
145
-
146
- package. ok_or_else ( || BootloaderError :: KernelBinPackageNotFound {
147
- bin_name : kernel_bin_name. to_owned ( ) ,
148
- } )
149
- }
150
-
151
118
/// Returns the package metadata for the bootloader crate
152
119
fn bootloader_package < ' a > (
153
120
project_metadata : & ' a Metadata ,
0 commit comments