Add warnings as errors cc feature
This PR adds a `feature` to cc toolchains to treat warnings as errors. The `feature` is disabled by default.
Closes #11550
Closes #13927.
PiperOrigin-RevId: 423364251
diff --git a/tools/cpp/unix_cc_configure.bzl b/tools/cpp/unix_cc_configure.bzl
index 27e4653..419c892 100644
--- a/tools/cpp/unix_cc_configure.bzl
+++ b/tools/cpp/unix_cc_configure.bzl
@@ -532,7 +532,7 @@
# We need to undef it as some distributions now have it enabled by default.
"-U_FORTIFY_SOURCE",
"-fstack-protector",
- # All warnings are enabled. Maybe enable -Werror as well?
+ # All warnings are enabled.
"-Wall",
# Enable a few more warnings that aren't part of -Wall.
] + ((
diff --git a/tools/cpp/unix_cc_toolchain_config.bzl b/tools/cpp/unix_cc_toolchain_config.bzl
index 0dab9b2..39ecc52 100644
--- a/tools/cpp/unix_cc_toolchain_config.bzl
+++ b/tools/cpp/unix_cc_toolchain_config.bzl
@@ -1182,6 +1182,20 @@
],
)
+ treat_warnings_as_errors_feature = feature(
+ name = "treat_warnings_as_errors",
+ flag_sets = [
+ flag_set(
+ actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],
+ flag_groups = [flag_group(flags = ["-Werror"])],
+ ),
+ flag_set(
+ actions = all_link_actions,
+ flag_groups = [flag_group(flags = ["-Wl,-fatal-warnings"])],
+ ),
+ ],
+ )
+
is_linux = ctx.attr.target_libc != "macosx"
# TODO(#8303): Mac crosstool should also declare every feature.
@@ -1234,6 +1248,7 @@
user_compile_flags_feature,
sysroot_feature,
unfiltered_compile_flags_feature,
+ treat_warnings_as_errors_feature,
] + layering_check_features(ctx.attr.compiler)
else:
# macOS artifact name patterns differ from the defaults only for dynamic
@@ -1263,6 +1278,7 @@
user_compile_flags_feature,
sysroot_feature,
unfiltered_compile_flags_feature,
+ treat_warnings_as_errors_feature,
] + layering_check_features(ctx.attr.compiler)
return cc_common.create_cc_toolchain_config_info(
diff --git a/tools/cpp/windows_cc_toolchain_config.bzl b/tools/cpp/windows_cc_toolchain_config.bzl
index f43f8ba..0804eeb 100644
--- a/tools/cpp/windows_cc_toolchain_config.bzl
+++ b/tools/cpp/windows_cc_toolchain_config.bzl
@@ -786,7 +786,7 @@
name = "treat_warnings_as_errors",
flag_sets = [
flag_set(
- actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],
+ actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile] + all_link_actions,
flag_groups = [flag_group(flags = ["/WX"])],
),
],
@@ -1271,6 +1271,20 @@
provides = ["profile"],
)
+ treat_warnings_as_errors_feature = feature(
+ name = "treat_warnings_as_errors",
+ flag_sets = [
+ flag_set(
+ actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],
+ flag_groups = [flag_group(flags = ["-Werror"])],
+ ),
+ flag_set(
+ actions = all_link_actions,
+ flag_groups = [flag_group(flags = ["-Wl,-fatal-warnings"])],
+ ),
+ ],
+ )
+
user_compile_flags_feature = feature(
name = "user_compile_flags",
enabled = True,
@@ -1311,6 +1325,7 @@
dbg_feature,
opt_feature,
user_compile_flags_feature,
+ treat_warnings_as_errors_feature,
sysroot_feature,
]