diff options
Diffstat (limited to 'absl/copts/copts.py')
-rw-r--r-- | absl/copts/copts.py | 218 |
1 files changed, 122 insertions, 96 deletions
diff --git a/absl/copts/copts.py b/absl/copts/copts.py index 732af9ea..b7f68c7d 100644 --- a/absl/copts/copts.py +++ b/absl/copts/copts.py @@ -11,12 +11,76 @@ The generated copts are consumed by configure_copts.bzl and AbseilConfigureCopts.cmake. """ -# /Wall with msvc includes unhelpful warnings such as C4711, C4710, ... -MSVC_BIG_WARNING_FLAGS = [ - "/W3", +ABSL_GCC_FLAGS = [ + "-Wall", + "-Wextra", + "-Wcast-qual", + "-Wconversion-null", + "-Wformat-security", + "-Wmissing-declarations", + "-Woverlength-strings", + "-Wpointer-arith", + "-Wundef", + "-Wunused-local-typedefs", + "-Wunused-result", + "-Wvarargs", + "-Wvla", # variable-length array + "-Wwrite-strings", + # Don't define min and max macros (Build on Windows using gcc) + "-DNOMINMAX", +] + +ABSL_GCC_TEST_ADDITIONAL_FLAGS = [ + "-Wno-deprecated-declarations", + "-Wno-missing-declarations", + "-Wno-sign-compare", + "-Wno-unused-function", + "-Wno-unused-parameter", + "-Wno-unused-private-field", ] -LLVM_TEST_DISABLE_WARNINGS_FLAGS = [ +ABSL_LLVM_FLAGS = [ + "-Wall", + "-Wextra", + "-Wcast-qual", + "-Wconversion", + "-Wfloat-overflow-conversion", + "-Wfloat-zero-conversion", + "-Wfor-loop-analysis", + "-Wformat-security", + "-Wgnu-redeclared-enum", + "-Winfinite-recursion", + "-Winvalid-constexpr", + "-Wliteral-conversion", + "-Wmissing-declarations", + "-Woverlength-strings", + "-Wpointer-arith", + "-Wself-assign", + "-Wshadow-all", + "-Wstring-conversion", + "-Wtautological-overlap-compare", + "-Wtautological-unsigned-zero-compare", + "-Wundef", + "-Wuninitialized", + "-Wunreachable-code", + "-Wunused-comparison", + "-Wunused-local-typedefs", + "-Wunused-result", + "-Wvla", + "-Wwrite-strings", + # Warnings that are enabled by group warning flags like -Wall that we + # explicitly disable. + "-Wno-float-conversion", + "-Wno-implicit-float-conversion", + "-Wno-implicit-int-float-conversion", + # Disable warnings on unknown warning flags (when warning flags are + # unknown on older compiler versions) + "-Wno-unknown-warning-option", + # Don't define min and max macros (Build on Windows using clang) + "-DNOMINMAX", +] + +ABSL_LLVM_TEST_ADDITIONAL_FLAGS = [ "-Wno-deprecated-declarations", "-Wno-implicit-int-conversion", "-Wno-missing-prototypes", @@ -36,6 +100,28 @@ LLVM_TEST_DISABLE_WARNINGS_FLAGS = [ "-Wno-gnu-zero-variadic-macro-arguments", ] +# /Wall with msvc includes unhelpful warnings such as C4711, C4710, ... +MSVC_BIG_WARNING_FLAGS = [ + "/W3", +] + +MSVC_WARNING_FLAGS = [ + # Increase the number of sections available in object files + "/bigobj", + "/wd4005", # macro-redefinition + "/wd4068", # unknown pragma + # qualifier applied to function type has no meaning; ignored + "/wd4180", + # conversion from 'type1' to 'type2', possible loss of data + "/wd4244", + # conversion from 'size_t' to 'type', possible loss of data + "/wd4267", + # The decorated name was longer than the compiler limit + "/wd4503", + # forcing value to bool 'true' or 'false' (performance warning) + "/wd4800", +] + MSVC_DEFINES = [ "/DNOMINMAX", # Don't define min and max macros (windows.h) # Don't bloat namespace with incompatible winsock versions. @@ -47,103 +133,43 @@ MSVC_DEFINES = [ "/D_ENABLE_EXTENDED_ALIGNED_STORAGE", ] + +def GccStyleFilterAndCombine(default_flags, test_flags): + """Merges default_flags and test_flags for GCC and LLVM. + + Args: + default_flags: A list of default compiler flags + test_flags: A list of flags that are only used in tests + + Returns: + A combined list of default_flags and test_flags, but with all flags of the + form '-Wwarning' removed if test_flags contains a flag of the form + '-Wno-warning' + """ + remove = set(["-W" + f[5:] for f in test_flags if f[:5] == "-Wno-"]) + return [f for f in default_flags if f not in remove] + test_flags + COPT_VARS = { - "ABSL_GCC_FLAGS": [ - "-Wall", - "-Wextra", - "-Wcast-qual", - "-Wconversion-null", - "-Wformat-security", - "-Wmissing-declarations", - "-Woverlength-strings", - "-Wpointer-arith", - "-Wundef", - "-Wunused-local-typedefs", - "-Wunused-result", - "-Wvarargs", - "-Wvla", # variable-length array - "-Wwrite-strings", - # Don't define min and max macros (Build on Windows using gcc) - "-DNOMINMAX", - ], - "ABSL_GCC_TEST_FLAGS": [ - "-Wno-deprecated-declarations", - "-Wno-missing-declarations", - "-Wno-sign-compare", - "-Wno-unused-function", - "-Wno-unused-parameter", - "-Wno-unused-private-field", - ], - "ABSL_LLVM_FLAGS": [ - "-Wall", - "-Wextra", - "-Wcast-qual", - "-Wconversion", - "-Wfloat-overflow-conversion", - "-Wfloat-zero-conversion", - "-Wfor-loop-analysis", - "-Wformat-security", - "-Wgnu-redeclared-enum", - "-Winfinite-recursion", - "-Winvalid-constexpr", - "-Wliteral-conversion", - "-Wmissing-declarations", - "-Woverlength-strings", - "-Wpointer-arith", - "-Wself-assign", - "-Wshadow-all", - "-Wstring-conversion", - "-Wtautological-overlap-compare", - "-Wtautological-unsigned-zero-compare", - "-Wundef", - "-Wuninitialized", - "-Wunreachable-code", - "-Wunused-comparison", - "-Wunused-local-typedefs", - "-Wunused-result", - "-Wvla", - "-Wwrite-strings", - # Warnings that are enabled by group warning flags like -Wall that we - # explicitly disable. - "-Wno-float-conversion", - "-Wno-implicit-float-conversion", - "-Wno-implicit-int-float-conversion", - # Disable warnings on unknown warning flags (when warning flags are - # unknown on older compiler versions) - "-Wno-unknown-warning-option", - # Don't define min and max macros (Build on Windows using clang) - "-DNOMINMAX", - ], - "ABSL_LLVM_TEST_FLAGS": - LLVM_TEST_DISABLE_WARNINGS_FLAGS, + "ABSL_GCC_FLAGS": ABSL_GCC_FLAGS, + "ABSL_GCC_TEST_FLAGS": GccStyleFilterAndCombine( + ABSL_GCC_FLAGS, ABSL_GCC_TEST_ADDITIONAL_FLAGS), + "ABSL_LLVM_FLAGS": ABSL_LLVM_FLAGS, + "ABSL_LLVM_TEST_FLAGS": GccStyleFilterAndCombine( + ABSL_LLVM_FLAGS, ABSL_LLVM_TEST_ADDITIONAL_FLAGS), "ABSL_CLANG_CL_FLAGS": - (MSVC_BIG_WARNING_FLAGS + MSVC_DEFINES), + MSVC_BIG_WARNING_FLAGS + MSVC_DEFINES, "ABSL_CLANG_CL_TEST_FLAGS": - LLVM_TEST_DISABLE_WARNINGS_FLAGS, + MSVC_BIG_WARNING_FLAGS + MSVC_DEFINES + ABSL_LLVM_TEST_ADDITIONAL_FLAGS, "ABSL_MSVC_FLAGS": - MSVC_BIG_WARNING_FLAGS + MSVC_DEFINES + [ - # Increase the number of sections available in object files - "/bigobj", - "/wd4005", # macro-redefinition - "/wd4068", # unknown pragma - # qualifier applied to function type has no meaning; ignored - "/wd4180", - # conversion from 'type1' to 'type2', possible loss of data - "/wd4244", - # conversion from 'size_t' to 'type', possible loss of data - "/wd4267", - # The decorated name was longer than the compiler limit - "/wd4503", - # forcing value to bool 'true' or 'false' (performance warning) - "/wd4800", + MSVC_BIG_WARNING_FLAGS + MSVC_WARNING_FLAGS + MSVC_DEFINES, + "ABSL_MSVC_TEST_FLAGS": + MSVC_BIG_WARNING_FLAGS + MSVC_WARNING_FLAGS + MSVC_DEFINES + [ + "/wd4018", # signed/unsigned mismatch + "/wd4101", # unreferenced local variable + "/wd4503", # decorated name length exceeded, name was truncated + "/wd4996", # use of deprecated symbol + "/DNOMINMAX", # disable the min() and max() macros from <windows.h> ], - "ABSL_MSVC_TEST_FLAGS": [ - "/wd4018", # signed/unsigned mismatch - "/wd4101", # unreferenced local variable - "/wd4503", # decorated name length exceeded, name was truncated - "/wd4996", # use of deprecated symbol - "/DNOMINMAX", # disable the min() and max() macros from <windows.h> - ], "ABSL_MSVC_LINKOPTS": [ # Object file doesn't export any previously undefined symbols "-ignore:4221", |