Crates.io | rustflags |
lib.rs | rustflags |
version | 0.1.6 |
source | src |
created_at | 2022-01-03 08:26:22.739628 |
updated_at | 2024-04-17 17:07:13.101368 |
description | Parser for CARGO_ENCODED_RUSTFLAGS |
homepage | |
repository | https://github.com/dtolnay/rustflags |
max_upload_size | |
id | 506962 |
size | 69,402 |
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
and
target.<cfg>.rustflags
and build.rustflags
, including from the
project-specific Cargo config file and the Cargo config in the user's
CARGO_HOME.If 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();
}