feat: support features selection in xtask

This commit is contained in:
Paul Pan 2024-04-12 22:40:10 +08:00
parent 1a924738f0
commit 1d672b4ff8
2 changed files with 16 additions and 10 deletions

View File

@ -6,7 +6,7 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[features]
default = ["riscv.board.virt"]
default = ["riscv.board.virt", "riscv.riscv64"]
legacy = ["utils/legacy", "vspace/legacy"]
@ -20,8 +20,8 @@ riscv = []
"riscv.riscv64" = ["riscv", "riscv.pagetable.sv39"]
"riscv.riscv32" = ["riscv", "riscv.pagetable.sv32", "legacy"]
"riscv.board.default" = ["riscv.riscv64"]
"riscv.board.virt" = ["riscv.riscv64"]
"riscv.board.default" = []
"riscv.board.virt" = []
[dependencies]
allocator = { path = "../lib/allocator" }

View File

@ -88,22 +88,28 @@ pub struct Artifact {
impl Artifact {
pub fn cargo_args(&self) -> Result<Vec<String>> {
let mut args: Vec<String> = Vec::new();
let mut features: Vec<String> = Vec::new();
// profile
if let Some(Profile::Release) = self.profile {
args.push("--release".to_string());
}
// board
if let Some(board) = self.board {
args.push("--no-default-features".to_string());
args.push("--features".to_string());
args.push(board.cargo_args(&self.arch)?);
}
// arch
args.extend(self.arch.cargo_args().iter().map(|s| s.to_string()));
// board
if let Some(board) = self.board {
features.push(board.cargo_args(&self.arch)?);
}
// features
features.extend(self.features.iter().map(|s| s.to_string()));
if !features.is_empty() {
args.push("--no-default-features".to_string());
args.push(format!("--features={}", features.join(",")));
}
Ok(args)
}