80 lines
2.7 KiB
Rust
80 lines
2.7 KiB
Rust
extern crate walkdir;
|
|
|
|
use {
|
|
std::{env, path::Path, process::Command},
|
|
walkdir::WalkDir,
|
|
};
|
|
|
|
fn rerun_if_changed(directory: &Path) {
|
|
let src = directory.join("src");
|
|
let files_in_src: Vec<_> = WalkDir::new(src)
|
|
.into_iter()
|
|
.map(|entry| entry.unwrap())
|
|
.filter(|entry| {
|
|
if !entry.file_type().is_file() {
|
|
return false;
|
|
}
|
|
true
|
|
})
|
|
.map(|f| f.path().to_str().unwrap().to_owned())
|
|
.collect();
|
|
|
|
for file in files_in_src {
|
|
if !Path::new(&file).is_file() {
|
|
panic!("{} is not a file", file);
|
|
}
|
|
println!("cargo:rerun-if-changed={}", file);
|
|
}
|
|
let toml = directory.join("Cargo.toml").to_str().unwrap().to_owned();
|
|
println!("cargo:rerun-if-changed={}", toml);
|
|
}
|
|
|
|
fn build_bpf(program_directory: &Path) {
|
|
let toml_file = program_directory.join("Cargo.toml");
|
|
let toml_file = format!("{}", toml_file.display());
|
|
let args = vec!["build-bpf", "--manifest-path", &toml_file];
|
|
let output = Command::new("cargo")
|
|
.args(&args)
|
|
.output()
|
|
.expect("Error running cargo build-bpf");
|
|
if let Ok(output_str) = std::str::from_utf8(&output.stdout) {
|
|
let subs = output_str.split('\n');
|
|
for sub in subs {
|
|
println!("cargo:warning=(not a warning) {}", sub);
|
|
}
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let is_debug = env::var("DEBUG").map(|v| v == "true").unwrap_or(false);
|
|
let build_dependent_programs = env::var("BUILD_DEPENDENT_PROGRAMS")
|
|
.map(|v| v != "false" && v != "0")
|
|
.unwrap_or(false);
|
|
if is_debug && build_dependent_programs {
|
|
let cwd = env::current_dir().expect("Unable to get current working directory");
|
|
let spl_token_2022_dir = cwd
|
|
.parent()
|
|
.expect("Unable to get parent directory of current working dir")
|
|
.join("program-2022");
|
|
rerun_if_changed(&spl_token_2022_dir);
|
|
let spl_token_dir = cwd
|
|
.parent()
|
|
.expect("Unable to get parent directory of current working dir")
|
|
.join("program");
|
|
rerun_if_changed(&spl_token_dir);
|
|
let spl_associated_token_account_dir = cwd
|
|
.parent()
|
|
.expect("Unable to get parent directory of current working dir")
|
|
.parent()
|
|
.expect("Unable to get parent directory of current working dir")
|
|
.join("associated-token-account")
|
|
.join("program");
|
|
rerun_if_changed(&spl_associated_token_account_dir);
|
|
|
|
build_bpf(&spl_token_dir);
|
|
build_bpf(&spl_token_2022_dir);
|
|
build_bpf(&spl_associated_token_account_dir);
|
|
}
|
|
println!("cargo:rerun-if-changed=build.rs");
|
|
}
|