use anyhow::Result;
use clap::Parser;
use std::{collections::HashSet, path::PathBuf};
fn main() -> Result<()> {
let options = Args::parse();
let mode = if options.trace_disassemble {
"trace"
} else {
"coverage"
};
eprintln!(
"{} v{} ({})",
env!("CARGO_PKG_NAME"),
env!("CARGO_PKG_VERSION"),
mode
);
let sbf_trace_dir = options.sbf_trace_dir;
let src_paths: HashSet<_> = options.src_path.into_iter().collect();
let sbf_paths = options.sbf_path;
sbpf_coverage::run(
sbf_trace_dir,
src_paths,
sbf_paths,
options.debug,
options.trace_disassemble,
options.no_color,
)?;
Ok(())
}
#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
struct Args {
#[arg(short, long)]
debug: bool,
#[arg(long, action = clap::ArgAction::Append, required = true)]
src_path: Vec<PathBuf>,
#[arg(long, action = clap::ArgAction::Append, required = true)]
sbf_path: Vec<PathBuf>,
#[arg(long, required = true)]
sbf_trace_dir: PathBuf,
#[arg(long)]
trace_disassemble: bool,
#[arg(long, default_value_t = false)]
no_color: bool,
}