Merge changes I9b557dff,I5ab5b0fd,I6702ff08 into main

* changes:
  Detect proc macros from metadata.
  Convert force-rlib.
  Sort features.
This commit is contained in:
Andrew Walbran
2023-10-06 14:11:02 +00:00
committed by Gerrit Code Review
3 changed files with 18 additions and 2 deletions

View File

@@ -326,6 +326,7 @@ impl Crate {
}
out.cfgs.sort();
out.cfgs.dedup();
out.features.sort();
if out.name.is_empty() {
bail!("missing --crate-name");

View File

@@ -118,7 +118,7 @@ fn parse_cargo_metadata(
Some(Extern {
name: dependency_name.to_owned(),
lib_name: dependency_name.to_owned(),
extern_type: ExternType::Rust,
extern_type: extern_type(&metadata.packages, &dependency.name),
})
} else {
None
@@ -162,7 +162,7 @@ fn parse_cargo_metadata(
Some(Extern {
name: dependency_name.to_owned(),
lib_name: dependency_name.to_owned(),
extern_type: ExternType::Rust,
extern_type: extern_type(&metadata.packages, &dependency.name),
})
} else {
None
@@ -188,6 +188,18 @@ fn parse_cargo_metadata(
Ok(crates)
}
/// Checks whether the given package is a proc macro.
fn extern_type(packages: &[PackageMetadata], package_name: &str) -> ExternType {
let Some(package) = packages.iter().find(|package| package.name == package_name) else {
return ExternType::Rust;
};
if package.targets.iter().any(|target| target.kind.contains(&TargetKind::ProcMacro)) {
ExternType::ProcMacro
} else {
ExternType::Rust
}
}
/// Given a package ID like
/// `"either 1.8.1 (path+file:///usr/local/google/home/qwandor/aosp/external/rust/crates/either)"`,
/// returns the path to the package, e.g.

View File

@@ -39,6 +39,8 @@ pub struct Config {
#[serde(default)]
features: String,
#[serde(default)]
force_rlib: bool,
#[serde(default)]
host_first_multilib: bool,
min_sdk_version: Option<String>,
#[serde(default)]
@@ -89,6 +91,7 @@ impl Config {
.collect();
let package_config = PackageConfig {
device_supported: self.device,
force_rlib: self.force_rlib,
host_supported: !self.no_host,
host_first_multilib: self.host_first_multilib,
dep_blocklist,