Browse Source

git add .cargo and xtask

Alessandro Decina 3 years ago
parent
commit
6d14a16
4 changed files with 103 additions and 0 deletions
  1. 2 0
      aya-log/.cargo/config.toml
  2. 10 0
      aya-log/xtask/Cargo.toml
  3. 62 0
      aya-log/xtask/src/build_ebpf.rs
  4. 29 0
      aya-log/xtask/src/main.rs

+ 2 - 0
aya-log/.cargo/config.toml

@@ -0,0 +1,2 @@
+[alias]
+xtask = "run --package xtask --"

+ 10 - 0
aya-log/xtask/Cargo.toml

@@ -0,0 +1,10 @@
+[package]
+name = "xtask"
+version = "0.1.0"
+edition = "2018"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+structopt = {version = "0.3", default-features = false }
+anyhow = "1"

+ 62 - 0
aya-log/xtask/src/build_ebpf.rs

@@ -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(())
+}

+ 29 - 0
aya-log/xtask/src/main.rs

@@ -0,0 +1,29 @@
+mod build_ebpf;
+
+use std::process::exit;
+
+use structopt::StructOpt;
+#[derive(StructOpt)]
+pub struct Options {
+    #[structopt(subcommand)]
+    command: Command,
+}
+
+#[derive(StructOpt)]
+enum Command {
+    BuildEbpf(build_ebpf::Options),
+}
+
+fn main() {
+    let opts = Options::from_args();
+
+    use Command::*;
+    let ret = match opts.command {
+        BuildEbpf(opts) => build_ebpf::build(opts),
+    };
+
+    if let Err(e) = ret {
+        eprintln!("{:#}", e);
+        exit(1);
+    }
+}