|
@@ -0,0 +1,62 @@
|
|
|
+use std::path::PathBuf;
|
|
|
+use std::process::Command;
|
|
|
+
|
|
|
+use structopt::StructOpt;
|
|
|
+
|
|
|
+#[derive(Debug, Copy, Clone)]
|
|
|
+pub enum Architecture {
|
|
|
+ BpfEl,
|
|
|
+ BpfEb,
|
|
|
+}
|
|
|
+
|
|
|
+impl std::str::FromStr for Architecture {
|
|
|
+ type Err = String;
|
|
|
+
|
|
|
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
|
|
|
+ Ok(match s {
|
|
|
+ "bpfel-unknown-none" => Architecture::BpfEl,
|
|
|
+ "bpfeb-unknown-none" => Architecture::BpfEb,
|
|
|
+ _ => return Err("invalid target".to_owned()),
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+impl std::fmt::Display for Architecture {
|
|
|
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
|
+ f.write_str(match self {
|
|
|
+ Architecture::BpfEl => "bpfel-unknown-none",
|
|
|
+ Architecture::BpfEb => "bpfeb-unknown-none",
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+#[derive(StructOpt)]
|
|
|
+pub struct Options {
|
|
|
+ #[structopt(default_value = "bpfel-unknown-none", long)]
|
|
|
+ target: Architecture,
|
|
|
+ #[structopt(long)]
|
|
|
+ release: bool,
|
|
|
+}
|
|
|
+
|
|
|
+pub fn build(opts: Options) -> Result<(), anyhow::Error> {
|
|
|
+ let dir = PathBuf::from("aya-log-ebpf");
|
|
|
+ let target = format!("--target={}", opts.target);
|
|
|
+ let mut args = vec![
|
|
|
+ "+nightly",
|
|
|
+ "build",
|
|
|
+ "--verbose",
|
|
|
+ target.as_str(),
|
|
|
+ "-Z",
|
|
|
+ "build-std=core",
|
|
|
+ ];
|
|
|
+ if opts.release {
|
|
|
+ args.push("--release")
|
|
|
+ }
|
|
|
+ let status = Command::new("cargo")
|
|
|
+ .current_dir(&dir)
|
|
|
+ .args(&args)
|
|
|
+ .status()
|
|
|
+ .expect("failed to build bpf examples");
|
|
|
+ assert!(status.success());
|
|
|
+ Ok(())
|
|
|
+}
|