use llvm_profparser::*;
use std::path::PathBuf;
use structopt::StructOpt;
#[derive(Clone, Debug, Eq, PartialEq, StructOpt)]
pub struct Opts {
#[structopt(subcommand)]
cmd: Command,
}
#[derive(Clone, Debug, Eq, PartialEq, StructOpt)]
pub enum Command {
Show {
#[structopt(flatten)]
show: ShowCommand,
},
}
#[derive(Clone, Debug, Eq, PartialEq, StructOpt)]
pub struct ShowCommand {
#[structopt(long = "instr-profile")]
instr_profile: Vec<PathBuf>,
#[structopt(long = "object")]
objects: Vec<PathBuf>,
}
impl ShowCommand {
fn run(&self) -> Result<(), Box<dyn std::error::Error>> {
let instr_prof = if self.instr_profile.len() == 1 {
parse(&self.instr_profile[0])?
} else if self.instr_profile.len() > 1 {
merge_profiles(&self.instr_profile)?
} else {
panic!("Must provide an instrumentation profile");
};
let mapping = CoverageMapping::new(&self.objects, &instr_prof);
todo!();
}
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let opts = Opts::from_args();
match opts.cmd {
Command::Show { show } => show.run(),
}
}