CLI argument to start the server at startup

This commit is contained in:
Simon Gellis 2025-01-01 13:13:01 -05:00
parent b94ae4d586
commit 2c5084d317
3 changed files with 24 additions and 5 deletions

View File

@ -41,10 +41,15 @@ pub struct Application {
persistence: Persistence, persistence: Persistence,
viewports: HashMap<ViewportId, Viewport>, viewports: HashMap<ViewportId, Viewport>,
focused: Option<ViewportId>, focused: Option<ViewportId>,
init_debug_port: Option<u16>,
} }
impl Application { impl Application {
pub fn new(client: EmulatorClient, proxy: EventLoopProxy<UserEvent>) -> Self { pub fn new(
client: EmulatorClient,
proxy: EventLoopProxy<UserEvent>,
debug_port: Option<u16>,
) -> Self {
let icon = load_icon().ok().map(Arc::new); let icon = load_icon().ok().map(Arc::new);
let persistence = Persistence::new(); let persistence = Persistence::new();
let mappings = MappingProvider::new(persistence.clone()); let mappings = MappingProvider::new(persistence.clone());
@ -63,6 +68,7 @@ impl Application {
persistence, persistence,
viewports: HashMap::new(), viewports: HashMap::new(),
focused: None, focused: None,
init_debug_port: debug_port,
} }
} }
@ -86,9 +92,12 @@ impl ApplicationHandler<UserEvent> for Application {
self.persistence.clone(), self.persistence.clone(),
SimId::Player1, SimId::Player1,
); );
let wrapper = Viewport::new(event_loop, self.icon.clone(), Box::new(app)); self.open(event_loop, Box::new(app));
self.focused = Some(wrapper.id()); if let Some(port) = self.init_debug_port {
self.viewports.insert(wrapper.id(), wrapper); let mut server = GdbServerWindow::new(SimId::Player1, self.client.clone());
server.start(port);
self.open(event_loop, Box::new(server));
}
} }
fn window_event( fn window_event(

View File

@ -22,7 +22,11 @@ mod window;
#[derive(Parser)] #[derive(Parser)]
struct Args { struct Args {
/// The path to a virtual boy ROM to run.
rom: Option<PathBuf>, rom: Option<PathBuf>,
/// Start a GDB/LLDB debug server on this port.
#[arg(short, long)]
debug_port: Option<u16>,
} }
fn set_panic_handler() { fn set_panic_handler() {
@ -101,6 +105,6 @@ fn main() -> Result<()> {
let event_loop = EventLoop::with_user_event().build().unwrap(); let event_loop = EventLoop::with_user_event().build().unwrap();
event_loop.set_control_flow(ControlFlow::Poll); event_loop.set_control_flow(ControlFlow::Poll);
let proxy = event_loop.create_proxy(); let proxy = event_loop.create_proxy();
event_loop.run_app(&mut Application::new(client, proxy))?; event_loop.run_app(&mut Application::new(client, proxy, args.debug_port))?;
Ok(()) Ok(())
} }

View File

@ -21,6 +21,12 @@ impl GdbServerWindow {
server: GdbServer::new(sim_id, client), server: GdbServer::new(sim_id, client),
} }
} }
pub fn start(&mut self, port: u16) {
self.server.stop();
self.port_str = port.to_string();
self.server.start(port);
}
} }
impl AppWindow for GdbServerWindow { impl AppWindow for GdbServerWindow {