167 lines
6.6 KiB
Python
167 lines
6.6 KiB
Python
"""
|
|
THIS IS THE EXTERNAL-ONLY VERSION OF THIS FILE. G3 HAS ITS OWN.
|
|
|
|
This file contains flags for the C++ compiler, referred to by Bazel as copts.
|
|
|
|
The copts in a cc_library to not flow to the children (dependencies) nor the parents
|
|
(dependents), so we cannot define them alongside the defines in //bazel/BUILD.bazel.
|
|
|
|
We cannot (easily) define them in the C++ toolchain configuration
|
|
(e.g. //toolchain/linux_amd64_toolchain_config.bzl), because that does not support listening
|
|
to arbitrary Bazel flags (e.g. those defined in //bazel/common_config_settings). If we wanted
|
|
to implement these flags in the toolchain, we would need to group them into features [1],
|
|
but we don't control the features implemented by the G3 toolchain. Because we want to
|
|
automatically roll into G3 with minimal changes, the copts cannot go in the toolchain,
|
|
|
|
Thus, they go here, so we can use select statements to conditionally control them and
|
|
override what they do (if necessary) in G3.
|
|
|
|
They are divided into several lists/selects and were initially created to be identical to the
|
|
GN ones [2][3].
|
|
|
|
The flags here are *not* used when compiling our third_party libraries (although the flags will
|
|
impact the included public headers of those third_party libraries). If we need a flag to impact
|
|
both Skia and a third party dep, it should probably go in the toolchain_config. If that is not
|
|
possible (e.g. the setting depends on a custom flag), we can define a subworkspace and have both
|
|
Skia and the third party dep depend on that.
|
|
|
|
[1] https://bazel.build/docs/cc-toolchain-config-reference#features
|
|
[2] https://github.com/google/skia/blob/2b07cdb07e88f2870260eabac708f31bc7977d08/gn/BUILDCONFIG.gn#L177-L181
|
|
[3] https://github.com/google/skia/blob/2b07cdb07e88f2870260eabac708f31bc7977d08/gn/skia/BUILD.gn#L593-L630
|
|
"""
|
|
|
|
CORE_COPTS = [
|
|
"-fstrict-aliasing",
|
|
"-fPIC",
|
|
"-fvisibility=hidden",
|
|
"-fno-rtti", # Reduces code size
|
|
] + select({
|
|
# SkRawCodec catches any exceptions thrown by dng_sdk, insulating the rest of Skia.
|
|
"//src/codec:raw_decode_codec": [],
|
|
"//conditions:default": ["-fno-exceptions"],
|
|
})
|
|
|
|
OPT_LEVEL = select({
|
|
"//bazel/common_config_settings:debug_build": [
|
|
"--optimize=0",
|
|
"--debug",
|
|
],
|
|
"//bazel/common_config_settings:release_build": [
|
|
"--optimize=3",
|
|
# Strip dead code (in conjunction with linkopts)
|
|
"-fdata-sections",
|
|
"-ffunction-sections",
|
|
],
|
|
"//bazel/common_config_settings:fast_build": [
|
|
"--optimize=0",
|
|
"-gline-tables-only",
|
|
],
|
|
})
|
|
|
|
WARNINGS = [
|
|
"-fcolor-diagnostics",
|
|
"-Wall",
|
|
"-Werror",
|
|
"-Weverything",
|
|
"-Wextra",
|
|
"-Wpointer-arith",
|
|
"-Wsign-compare",
|
|
"-Wvla",
|
|
#### Warnings we are unlikely to fix ####
|
|
"-Wno-c++98-compat",
|
|
"-Wno-c++98-compat-pedantic",
|
|
"-Wno-covered-switch-default",
|
|
"-Wno-declaration-after-statement",
|
|
"-Wno-deprecated",
|
|
"-Wno-missing-noreturn",
|
|
"-Wno-newline-eof",
|
|
"-Wno-old-style-cast",
|
|
"-Wno-padded",
|
|
"-Wno-psabi", # noisy
|
|
"-Wno-shadow-field-in-constructor",
|
|
"-Wno-shadow-uncaptured-local",
|
|
"-Wno-undefined-func-template",
|
|
"-Wno-unused-parameter", # It is common to have unused parameters in src/
|
|
"-Wno-zero-as-null-pointer-constant", # VK_NULL_HANDLE is defined as 0
|
|
#### Warnings we would like to fix ####
|
|
"-Wno-abstract-vbase-init",
|
|
"-Wno-cast-align",
|
|
"-Wno-cast-qual",
|
|
"-Wno-class-varargs",
|
|
"-Wno-conversion", # -Wsign-conversion re-enabled for header sources
|
|
"-Wno-disabled-macro-expansion",
|
|
"-Wno-documentation",
|
|
"-Wno-documentation-unknown-command",
|
|
"-Wno-double-promotion",
|
|
"-Wno-exit-time-destructors", # TODO: OK outside libskia
|
|
"-Wno-float-equal",
|
|
"-Wno-global-constructors", # TODO: OK outside libskia
|
|
"-Wno-missing-prototypes",
|
|
"-Wno-missing-variable-declarations",
|
|
"-Wno-pedantic",
|
|
"-Wno-reserved-id-macro",
|
|
"-Wno-reserved-identifier",
|
|
"-Wno-shift-sign-overflow",
|
|
"-Wno-signed-enum-bitfield",
|
|
"-Wno-switch-enum",
|
|
"-Wno-thread-safety-negative",
|
|
"-Wno-undef",
|
|
"-Wno-unreachable-code-break",
|
|
"-Wno-unreachable-code-return",
|
|
"-Wno-unused-macros",
|
|
"-Wno-unused-member-function",
|
|
"-Wno-weak-template-vtables", # This was deprecated in Clang 14 and removed in Clang 15.
|
|
"-Wno-weak-vtables",
|
|
# https://quuxplusone.github.io/blog/2020/08/26/wrange-loop-analysis/
|
|
# https://bugzilla.mozilla.org/show_bug.cgi?id=1683213
|
|
# https://reviews.llvm.org/D73007
|
|
# May be re-enabled once clang > 12 or XCode > 12 are required.
|
|
# When this line is removed the -Wrange-loop-construct line below can also be removed.
|
|
"-Wno-range-loop-analysis",
|
|
# Wno-range-loop-analysis turns off the whole group, but this warning was later split into
|
|
# range-loop-construct and range-loop-bind-reference. We want the former but not the latter.
|
|
# Created from
|
|
# https://github.com/llvm/llvm-project/blob/bd08f413c089da5a56438cc8902f60df91a08a66/clang/include/clang/Basic/DiagnosticGroups.td
|
|
"-Wrange-loop-construct",
|
|
# Wno-deprecated turns off the whole group, but also has its own warnings like
|
|
# out-of-line definition of constexpr static data member is redundant in C++17 and is deprecated [-Werror,-Wdeprecated]
|
|
# but we would like others. Created from
|
|
# https://github.com/llvm/llvm-project/blob/bd08f413c089da5a56438cc8902f60df91a08a66/clang/include/clang/Basic/DiagnosticGroups.td
|
|
"-Wdeprecated-anon-enum-enum-conversion",
|
|
"-Wdeprecated-array-compare",
|
|
"-Wdeprecated-attributes",
|
|
"-Wdeprecated-comma-subscript",
|
|
"-Wdeprecated-copy",
|
|
"-Wdeprecated-copy-dtor",
|
|
"-Wdeprecated-dynamic-exception-spec",
|
|
"-Wdeprecated-enum-compare",
|
|
"-Wdeprecated-enum-compare-conditional",
|
|
"-Wdeprecated-enum-enum-conversion",
|
|
"-Wdeprecated-enum-float-conversion",
|
|
"-Wdeprecated-increment-bool",
|
|
"-Wdeprecated-register",
|
|
"-Wdeprecated-this-capture",
|
|
"-Wdeprecated-volatile",
|
|
"-Wdeprecated-writable-strings",
|
|
"-Wc++98-compat-extra-semi",
|
|
# A catch-all for when the version of clang we are using does not have the prior options
|
|
"-Wno-unknown-warning-option",
|
|
] + select({
|
|
"//bazel/common_config_settings:compile_generated_cpp_files_for_headers_true": [
|
|
# These warnings show up when we compile generated .cpp files when enforcing IWYU
|
|
"-Wno-unused-function",
|
|
"-Wno-unused-template",
|
|
"-Wno-unused-const-variable",
|
|
],
|
|
"//conditions:default": [],
|
|
})
|
|
|
|
DEFAULT_COPTS = CORE_COPTS + OPT_LEVEL + WARNINGS
|
|
|
|
OBJC_COPTS = [
|
|
"-Wno-direct-ivar-access",
|
|
"-Wno-objc-interface-ivars",
|
|
]
|
|
|
|
DEFAULT_OBJC_COPTS = DEFAULT_COPTS + OBJC_COPTS
|