@@ -20,10 +20,15 @@ impl BuildConfig {
2020 /// Derives the bootloader build config from the project's metadata.
2121 pub fn from_metadata (
2222 project_metadata : & Metadata ,
23- kernel_bin_name : & str ,
23+ kernel_manifest_path : & Path ,
2424 kernel_bin_path : & Path ,
2525 ) -> 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+
2732 let bootloader_pkg = bootloader_package ( project_metadata, kernel_pkg) ?;
2833 let bootloader_root = bootloader_pkg. manifest_path . parent ( ) . ok_or_else ( || {
2934 BootloaderError :: BootloaderInvalid ( "bootloader manifest has no target directory" . into ( ) )
@@ -110,44 +115,6 @@ impl BuildConfig {
110115 }
111116}
112117
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-
151118/// Returns the package metadata for the bootloader crate
152119fn bootloader_package < ' a > (
153120 project_metadata : & ' a Metadata ,
0 commit comments