You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
aya/aya-tool/src/bin/aya-tool.rs

56 lines
1.3 KiB
Rust

use aya_tool::generate::{generate, InputFile};
use std::{path::PathBuf, process::exit};
use clap::Parser;
#[derive(Parser)]
pub struct Options {
#[clap(subcommand)]
command: Command,
}
#[derive(Parser)]
enum Command {
/// Generate Rust bindings to Kernel types using bpftool
#[clap(name = "generate", action)]
Generate {
#[clap(long, default_value = "/sys/kernel/btf/vmlinux", action)]
btf: PathBuf,
#[clap(long, conflicts_with = "btf", action)]
header: Option<PathBuf>,
#[clap(action)]
names: Vec<String>,
#[clap(last = true, action)]
bindgen_args: Vec<String>,
},
}
fn main() {
if let Err(e) = try_main() {
eprintln!("{:#}", e);
exit(1);
}
}
fn try_main() -> Result<(), anyhow::Error> {
let opts = Options::parse();
match opts.command {
Command::Generate {
btf,
header,
names,
bindgen_args,
} => {
let bindings: String = if let Some(header) = header {
generate(InputFile::Header(header), &names, &bindgen_args)?
} else {
generate(InputFile::Btf(btf), &names, &bindgen_args)?
};
println!("{}", bindings);
}
};
Ok(())
}