From 28df72417bd9fba6404c088057720aea86c4d440 Mon Sep 17 00:00:00 2001 From: bQUARKz Date: Fri, 23 Jan 2026 04:58:50 +0000 Subject: [PATCH] used cli for prometeu runtime --- Cargo.lock | 1 + crates/prometeu-runtime-desktop/Cargo.toml | 3 +- crates/prometeu-runtime-desktop/src/lib.rs | 87 +++++++++------------- 3 files changed, 40 insertions(+), 51 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d0e0f3be..3069dab9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1937,6 +1937,7 @@ dependencies = [ name = "prometeu-runtime-desktop" version = "0.1.0" dependencies = [ + "clap", "cpal", "pixels", "prometeu-core", diff --git a/crates/prometeu-runtime-desktop/Cargo.toml b/crates/prometeu-runtime-desktop/Cargo.toml index 39d806b6..a7e49701 100644 --- a/crates/prometeu-runtime-desktop/Cargo.toml +++ b/crates/prometeu-runtime-desktop/Cargo.toml @@ -19,4 +19,5 @@ winit = "0.30.12" pixels = "0.15.0" cpal = "0.15.3" ringbuf = "0.4.7" -serde_json = "1.0.149" \ No newline at end of file +serde_json = "1.0.149" +clap = { version = "4.5", features = ["derive"] } \ No newline at end of file diff --git a/crates/prometeu-runtime-desktop/src/lib.rs b/crates/prometeu-runtime-desktop/src/lib.rs index e8e58519..8922c35e 100644 --- a/crates/prometeu-runtime-desktop/src/lib.rs +++ b/crates/prometeu-runtime-desktop/src/lib.rs @@ -12,62 +12,49 @@ use runner::HostRunner; use cap::load_cap_config; use winit::event_loop::EventLoop; use prometeu_core::firmware::BootTarget; +use clap::Parser; + +#[derive(Parser, Debug)] +#[command(author, version, about, long_about = None)] +struct Cli { + /// Run a cartridge + #[arg(long, value_name = "PATH", conflicts_with = "debug")] + run: Option, + + /// Debug a cartridge + #[arg(long, value_name = "PATH", conflicts_with = "run")] + debug: Option, + + /// Port for the debugger + #[arg(long, default_value_t = 7777)] + port: u16, + + /// Root directory for the filesystem + #[arg(long, value_name = "PATH")] + fs_root: Option, + + /// Path to the capability configuration file + #[arg(long, value_name = "PATH")] + cap: Option, +} pub fn run() -> Result<(), Box> { - let args: Vec = std::env::args().collect(); - let mut fs_root = None; - let mut cap_config = None; - let mut cartridge_path = None; - let mut debug_mode = false; - let mut debug_port = 7777; + let cli = Cli::parse(); - let mut i = 1; // Skip the executable name - while i < args.len() { - match args[i].as_str() { - "--run" => { - if i + 1 < args.len() { - cartridge_path = Some(args[i + 1].clone()); - debug_mode = false; - i += 1; - } - } - "--debug" => { - if i + 1 < args.len() { - cartridge_path = Some(args[i + 1].clone()); - debug_mode = true; - i += 1; - } - } - "--port" => { - if i + 1 < args.len() { - if let Ok(port) = args[i + 1].parse::() { - debug_port = port; - } - i += 1; - } - } - "--fs-root" => { - if i + 1 < args.len() { - fs_root = Some(args[i + 1].clone()); - i += 1; - } - } - "--cap" => { - if i + 1 < args.len() { - cap_config = load_cap_config(&args[i + 1]); - i += 1; - } - } - _ => {} - } - i += 1; - } + let fs_root = cli.fs_root; + let cap_config = cli.cap.as_ref().and_then(|path| load_cap_config(path)); - let boot_target = if let Some(path) = cartridge_path { + let boot_target = if let Some(path) = cli.debug { BootTarget::Cartridge { path, - debug: debug_mode, - debug_port: if debug_mode { debug_port } else { 7777 }, + debug: true, + debug_port: cli.port, + } + } else if let Some(path) = cli.run { + BootTarget::Cartridge { + path, + debug: false, + debug_port: 7777, } } else { BootTarget::Hub