cargo-pgo 0.3.0

Cargo subcommand for optimizing Rust binaries with PGO and BOLT.
Documentation
use crate::resolve_binary;
use std::path::{Path, PathBuf};

#[derive(Debug)]
pub struct BoltEnv {
    pub bolt: PathBuf,
    pub merge_fdata: PathBuf,
}

pub(crate) fn find_llvm_bolt() -> anyhow::Result<PathBuf> {
    resolve_binary(Path::new("llvm-bolt"))
        .map_err(|error| anyhow::anyhow!("Cannot find llvm-bolt: {:?}", error))
}

pub(crate) fn find_merge_fdata() -> anyhow::Result<PathBuf> {
    resolve_binary(Path::new("merge-fdata"))
        .map_err(|error| anyhow::anyhow!("Cannot find merge-fdata: {:?}", error))
}

pub fn find_bolt_env() -> anyhow::Result<BoltEnv> {
    let bolt = find_llvm_bolt()?;
    let merge_fdata = find_merge_fdata()?;

    Ok(BoltEnv { bolt, merge_fdata })
}