Files
cariflex/tools/EVerest-main/lib/everest/framework/everestrs/everestrs/build.rs
Eric F d398a6ced2 Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1)
- OpenOCPP extracted (firmware OCPP 1.6J/2.0.1)
- ShapeShifter library installed (pip install -e)
- ShapeShifter specification extracted
- EVerest extracted

TODO updated with progress
2026-06-08 00:38:27 -04:00

82 lines
2.6 KiB
Rust

use std::{
env,
fs::File,
io::{self, BufRead, BufReader},
path::Path,
};
/// Takes a path to a library like `libframework.so` and returns the name for the linker, aka
/// `framework`
fn libname_from_path(p: &Path) -> String {
let base = p
.file_stem()
.and_then(|os_str| os_str.to_str())
.expect("'p' must be valid UTF-8 and have an extension.")
.strip_prefix("lib")
.expect("'p' should start with `lib`");
// foo.so.1.2.3 -> foo
base.split('.').next().unwrap_or(base).to_string()
}
fn print_link_options(p: &Path) {
println!(
"cargo:rustc-link-search=native={}",
p.parent().unwrap().to_string_lossy()
);
println!("cargo:rustc-link-lib={}", libname_from_path(p));
}
/// Registers the libraries specified in the `EVEREST_RS_LINK_DEPENDENCIES` environment variable.
/// Expected to be a path to a text file that contains one object file path per line.
fn register_everest_link_deps(link_deps_path: &str) -> io::Result<()> {
let link_deps = File::open(link_deps_path).map_err(|e| {
io::Error::new(
e.kind(),
format!("Could not open EVEREST_RS_LINK_DEPENDENCIES file '{link_deps_path}': {e}"),
)
})?;
let mut found_any = false;
for line in BufReader::new(link_deps).lines() {
let line = line?;
let path = Path::new(&line);
if !path.is_file() {
return Err(io::Error::new(io::ErrorKind::NotFound, format!(
"Cannot find library path '{line}' specified in EVEREST_RS_LINK_DEPENDENCIES ({link_deps_path}).",
)));
}
print_link_options(path);
found_any = true;
}
if found_any {
Ok(())
} else {
Err(io::Error::new(
io::ErrorKind::NotFound,
format!("No library paths found in EVEREST_RS_LINK_DEPENDENCIES ({link_deps_path})."),
))
}
}
fn main() {
// See https://doc.rust-lang.org/cargo/reference/features.html#build-scripts
// for details.
if env::var("CARGO_FEATURE_BUILD_BAZEL").is_ok() {
println!("Skipping due to bazel");
return;
}
let Ok(link_deps_path) = env::var("EVEREST_RS_LINK_DEPENDENCIES") else {
panic!("EVEREST_RS_LINK_DEPENDENCIES environment variable is not set. This variable should point to the build/everestrs-link-dependencies.txt file generated by CMake.");
};
register_everest_link_deps(&link_deps_path)
.expect("Failed to register libraries specified in EVEREST_RS_LINK_DEPENDENCIES");
println!("cargo:rustc-link-lib=boost_log");
println!("cargo:rustc-link-lib=boost_log_setup");
}