Enable conditional compilation checking on the Rust codebase
This commit is contained in:
parent
a93c7abc69
commit
976fdb18c9
@ -26,6 +26,7 @@
|
||||
use crate::test;
|
||||
use crate::tool::{self, SourceType};
|
||||
use crate::util::{self, add_dylib_path, add_link_lib_path, exe, libdir};
|
||||
use crate::EXTRA_CHECK_CFGS;
|
||||
use crate::{Build, CLang, DocTests, GitRepo, Mode};
|
||||
|
||||
pub use crate::Compiler;
|
||||
@ -1095,6 +1096,33 @@ pub fn cargo(
|
||||
rustflags.arg("-Zunstable-options");
|
||||
}
|
||||
|
||||
// #[cfg(not(bootstrap)]
|
||||
if stage != 0 {
|
||||
// Enable cfg checking of cargo features
|
||||
// FIXME: De-comment this when cargo beta get support for it
|
||||
// cargo.arg("-Zcheck-cfg-features");
|
||||
|
||||
// Enable cfg checking of rustc well-known names
|
||||
rustflags.arg("-Zunstable-options").arg("--check-cfg=names()");
|
||||
|
||||
// Add extra cfg not defined in rustc
|
||||
for (restricted_mode, name, values) in EXTRA_CHECK_CFGS {
|
||||
if *restricted_mode == None || *restricted_mode == Some(mode) {
|
||||
// Creating a string of the values by concatenating each value:
|
||||
// ',"tvos","watchos"' or '' (nothing) when there are no values
|
||||
let values = match values {
|
||||
Some(values) => values
|
||||
.iter()
|
||||
.map(|val| [",", "\"", val, "\""])
|
||||
.flatten()
|
||||
.collect::<String>(),
|
||||
None => String::new(),
|
||||
};
|
||||
rustflags.arg(&format!("--check-cfg=values({name}{values})"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: It might be better to use the same value for both `RUSTFLAGS` and `RUSTDOCFLAGS`,
|
||||
// but this breaks CI. At the very least, stage0 `rustdoc` needs `--cfg bootstrap`. See
|
||||
// #71458.
|
||||
|
@ -186,6 +186,34 @@ pub unsafe fn setup(_build: &mut crate::Build) {}
|
||||
|
||||
pub const VERSION: usize = 2;
|
||||
|
||||
/// Extra --check-cfg to add when building
|
||||
/// (Mode restriction, config name, config values (if any))
|
||||
const EXTRA_CHECK_CFGS: &[(Option<Mode>, &'static str, Option<&[&'static str]>)] = &[
|
||||
(None, "bootstrap", None),
|
||||
(Some(Mode::Rustc), "parallel_compiler", None),
|
||||
(Some(Mode::ToolRustc), "parallel_compiler", None),
|
||||
(Some(Mode::Std), "miri", None),
|
||||
(Some(Mode::Std), "stdarch_intel_sde", None),
|
||||
(Some(Mode::Std), "no_fp_fmt_parse", None),
|
||||
(Some(Mode::Std), "no_global_oom_handling", None),
|
||||
(Some(Mode::Std), "freebsd12", None),
|
||||
(Some(Mode::Std), "backtrace_in_libstd", None),
|
||||
// FIXME: Used by rustfmt is their test but is invalid (neither cargo nor bootstrap ever set
|
||||
// this config) should probably by removed or use a allow attribute.
|
||||
(Some(Mode::ToolRustc), "release", None),
|
||||
// FIXME: Used by stdarch in their test, should use a allow attribute instead.
|
||||
(Some(Mode::Std), "dont_compile_me", None),
|
||||
// FIXME: Used by serde_json, but we should not be triggering on external dependencies.
|
||||
(Some(Mode::Rustc), "no_btreemap_remove_entry", None),
|
||||
(Some(Mode::ToolRustc), "no_btreemap_remove_entry", None),
|
||||
// FIXME: Used by crossbeam-utils, but we should not be triggering on external dependencies.
|
||||
(Some(Mode::Rustc), "crossbeam_loom", None),
|
||||
(Some(Mode::ToolRustc), "crossbeam_loom", None),
|
||||
// FIXME: Used by proc-macro2, but we should not be triggering on external dependencies.
|
||||
(Some(Mode::Rustc), "span_locations", None),
|
||||
(Some(Mode::ToolRustc), "span_locations", None),
|
||||
];
|
||||
|
||||
/// A structure representing a Rust compiler.
|
||||
///
|
||||
/// Each compiler has a `stage` that it is associated with and a `host` that
|
||||
|
Loading…
Reference in New Issue
Block a user