jtracing 0.1.7

Tracing utilites.
#[allow(unused)]
use {
    jlogger::{jdebug, jerror, jinfo, jwarn, JloggerBuilder},
    std::{
        env,
        fs::{canonicalize, create_dir_all, remove_file},
        os::unix::fs::symlink,
        path::Path,
    },
};

extern crate libbpf_cargo;
use libbpf_cargo::SkeletonBuilder;

fn main() {
    JloggerBuilder::new()
        .max_level(log::LevelFilter::Debug)
        .log_file("/tmp/jtracing.log")
        .log_console(false)
        .log_time(false)
        .build();

    let applications = vec!["execsnoop_pb", "execsnoop_rb", "funccount", "eglswapbuffers"];
    let out_dir = env::var("OUT_DIR").unwrap();

    jinfo!("{}", out_dir);

    for &app in applications.iter() {
        let app_bpf_dir = format!("{}/bpf", app);
        let app_bpf_output_dir = format!("{}/{}/bpf/", out_dir, app);
        let skle_c = format!("{}/{}.bpf.c", app_bpf_dir, app);
        let mut vmlinux_inc = String::from("vmlinux/x86/");
        let skle_path = format!("{}/{}.skel.rs", app_bpf_output_dir, app);

        jinfo!("app_bpf_dir: {}", app_bpf_dir);
        jinfo!("app_bpf_output_dir: {}", app_bpf_output_dir);
        jinfo!("skle_c: {}", skle_c);
        jinfo!("skle_path: {}", skle_path);

        create_dir_all(&app_bpf_output_dir).unwrap();
        let skel = Path::new(&skle_path);
        let target = env::var("TARGET").unwrap();
        let mut clang_args = String::from("-g -O2");
        if target == "aarch64-unknown-linux-gnu" {
            vmlinux_inc = vmlinux_inc.replace("x86", "arm64");
            if let Ok(arm64_lib) = canonicalize("arm64") {
                let cargo_search_path = format!(
                    "cargo:rustc-link-search={}",
                    arm64_lib.as_path().to_str().unwrap()
                );
                println!("{}", cargo_search_path);
            }
            clang_args.push_str(" -D__TARGET_ARCH_arm64")
        } else if target == "x86_64-unknown-linux-gnu" {
            clang_args.push_str(" -D__TARGET_ARCH_x86")
        }

        let abs_path_vmlinux_inc = canonicalize(vmlinux_inc).unwrap();
        clang_args.push_str(&format!(
            " -I{}",
            abs_path_vmlinux_inc.as_path().to_str().unwrap()
        ));

        jinfo!("clang_args: {}", clang_args);

        SkeletonBuilder::new()
            .source(&skle_c)
            .debug(true)
            .clang_args(&clang_args)
            .build_and_generate(&skel)
            .expect("bpf compilation failed");
        println!("cargo:rerun-if-changed={}", &skle_c);
        println!("cargo:rerun-if-changed={}/{}.rs", app, app);

        let skle_path_dst = format!("{}/{}.skel.rs", app_bpf_dir, app);
        let _ = remove_file(&skle_path_dst);
        symlink(canonicalize(skle_path).unwrap(), skle_path_dst).unwrap();
    }
}