xtask_lib/tasks/
run_emulator.rs1use anyhow::Result;
8use clap::Args;
9
10use super::setup_native;
11use super::util::{cmd, mupdf_wrapper, workspace};
12
13#[derive(Debug, Args)]
15pub struct RunEmulatorArgs {
16 #[arg(long)]
18 pub features: Option<String>,
19
20 #[arg(trailing_var_arg = true, allow_hyphen_values = true)]
22 pub extra: Vec<String>,
23}
24
25pub fn run(args: RunEmulatorArgs) -> Result<()> {
32 let root = workspace::root()?;
33
34 setup_native::ensure_mupdf_sources(&root, false)?;
35 mupdf_wrapper::build_native_if_needed(&root)?;
36
37 let mut cargo_args = vec!["run", "-p", "emulator"];
38
39 if let Some(features) = args.features.as_deref() {
40 cargo_args.push("--features");
41 cargo_args.push(features);
42 }
43
44 let extra_refs: Vec<&str> = args.extra.iter().map(String::as_str).collect();
45 cargo_args.extend_from_slice(&extra_refs);
46
47 cmd::run("cargo", &cargo_args, &root, &[])
48}