use clap::Parser; #[derive(clap::Parser, Debug)] #[clap(version = clap::crate_version!(), author = clap::crate_authors!("\n"))] /// Hello Remember this is a feature enum Command { Run { #[clap(long, short)] debug: bool, #[clap(long, short, arg_enum)] machine: Option, }, Doc { #[clap(long, short, arg_enum)] machine: Option, }, } #[derive(clap::ArgEnum, Debug, Clone)] enum MachineType { X86, RISCV, ARM, } fn main() -> anyhow::Result<()> { let args = Command::parse(); match args { Command::Run { debug, machine } => { let _dir = xshell::pushd("./ableos"); let _debug_log: &[&str] = match debug { true => &["-D", "debug.log"], false => &[], }; match machine.unwrap_or(MachineType::X86) { MachineType::X86 => { xshell::cmd!("cargo run --release").run()?; } MachineType::ARM => { xshell::cmd!("cargo build --release --target=json_targets/aarch64-ableos.json") .run()?; #[rustfmt::skip] xshell::cmd!( "qemu-system-aarch64 -machine virt -m 1024M -cpu cortex-a53 -kernel target/aarch64-ableos/release/ableos -device virtio-keyboard " ).run()?; } MachineType::RISCV => { xshell::cmd!("cargo build --release --target=riscv64gc-unknown-none-elf") .run()?; #[rustfmt::skip] xshell::cmd!( "qemu-system-riscv64 -machine virt -cpu rv64 -smp 8 -m 128M -bios src/arch/riscv/firmwear/opensbi-riscv64-generic-fw_jump.bin -kernel target/riscv64gc-unknown-none-elf/release/ableos" ).run()?; } } } Command::Doc { machine } => { let _dir = xshell::pushd("./ableos"); match machine.unwrap_or(MachineType::X86) { MachineType::X86 => { xshell::cmd!("cargo doc --open").run()?; } MachineType::ARM => { xshell::cmd!("cargo doc --open --target=json_targets/aarch64-ableos.json") .run()?; } MachineType::RISCV => { xshell::cmd!("cargo doc --open --target=riscv64gc-unknown-none-elf").run()?; } } } } Ok(()) }