Parser for CARGO_ENCODED_RUSTFLAGS
APACHE-2.0 License
CARGO_ENCODED_RUSTFLAGS
is one of the environment variables provided by Cargo
to build scripts. It synthesizes several sources of flags affecting
Cargo's rustc invocations that build scripts might care about:
target.<triple>.rustflags
andtarget.<cfg>.rustflags
and build.rustflags
, including from theIf a build script needs to make some rustc invocations, or needs to characterize aspects of the upcoming rustc invocation, it likely needs these flags.
[build-dependencies]
rustflags = "0.1"
This build script uses the cmake
crate to compile some C code, and must
configure it with a particular C preprocessor #define if the Rust build is being
performed with sanitizers.
// build.rs
use rustflags::Flag;
use std::env;
use std::path::PathBuf;
fn main() {
let manifest_dir = PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap());
let lib_source_dir = manifest_dir.join("lib");
assert!(lib_source_dir.join("CMakeLists.txt").exists());
let mut builder = cmake::Config::new(lib_source_dir);
// Look for -Zsanitizer=address
for flag in rustflags::from_env() {
if matches!(flag, Flag::Z(z) if z == "sanitizer=address") {
builder.define("ENABLE_SANITIZERS", "ON");
builder.define("SANITIZERS", "address");
break;
}
}
builder.build();
}