| .. | .. |
|---|
| 1 | 1 | # SPDX-License-Identifier: GPL-2.0 |
|---|
| 2 | 2 | # ========================================================================== |
|---|
| 3 | | -# |
|---|
| 4 | 3 | # make W=... settings |
|---|
| 5 | 4 | # |
|---|
| 6 | | -# W=1 - warnings that may be relevant and does not occur too often |
|---|
| 7 | | -# W=2 - warnings that occur quite often but may still be relevant |
|---|
| 8 | | -# W=3 - the more obscure warnings, can most likely be ignored |
|---|
| 9 | | -# |
|---|
| 10 | | -# $(call cc-option, -W...) handles gcc -W.. options which |
|---|
| 11 | | -# are not supported by all versions of the compiler |
|---|
| 5 | +# There are three warning groups enabled by W=1, W=2, W=3. |
|---|
| 6 | +# They are independent, and can be combined like W=12 or W=123. |
|---|
| 12 | 7 | # ========================================================================== |
|---|
| 13 | 8 | |
|---|
| 14 | 9 | KBUILD_CFLAGS += $(call cc-disable-warning, packed-not-aligned) |
|---|
| 15 | 10 | |
|---|
| 11 | +# backward compatibility |
|---|
| 12 | +KBUILD_EXTRA_WARN ?= $(KBUILD_ENABLE_EXTRA_GCC_CHECKS) |
|---|
| 13 | + |
|---|
| 16 | 14 | ifeq ("$(origin W)", "command line") |
|---|
| 17 | | - export KBUILD_ENABLE_EXTRA_GCC_CHECKS := $(W) |
|---|
| 15 | + KBUILD_EXTRA_WARN := $(W) |
|---|
| 18 | 16 | endif |
|---|
| 19 | 17 | |
|---|
| 20 | | -ifdef KBUILD_ENABLE_EXTRA_GCC_CHECKS |
|---|
| 21 | | -warning- := $(empty) |
|---|
| 18 | +export KBUILD_EXTRA_WARN |
|---|
| 22 | 19 | |
|---|
| 23 | | -warning-1 := -Wextra -Wunused -Wno-unused-parameter |
|---|
| 24 | | -warning-1 += -Wmissing-declarations |
|---|
| 25 | | -warning-1 += -Wmissing-format-attribute |
|---|
| 26 | | -warning-1 += $(call cc-option, -Wmissing-prototypes) |
|---|
| 27 | | -warning-1 += -Wold-style-definition |
|---|
| 28 | | -warning-1 += $(call cc-option, -Wmissing-include-dirs) |
|---|
| 29 | | -warning-1 += $(call cc-option, -Wunused-but-set-variable) |
|---|
| 30 | | -warning-1 += $(call cc-option, -Wunused-const-variable) |
|---|
| 31 | | -warning-1 += $(call cc-option, -Wpacked-not-aligned) |
|---|
| 32 | | -warning-1 += $(call cc-disable-warning, missing-field-initializers) |
|---|
| 33 | | -warning-1 += $(call cc-disable-warning, sign-compare) |
|---|
| 20 | +# |
|---|
| 21 | +# W=1 - warnings which may be relevant and do not occur too often |
|---|
| 22 | +# |
|---|
| 23 | +ifneq ($(findstring 1, $(KBUILD_EXTRA_WARN)),) |
|---|
| 34 | 24 | |
|---|
| 35 | | -warning-2 := -Waggregate-return |
|---|
| 36 | | -warning-2 += -Wcast-align |
|---|
| 37 | | -warning-2 += -Wdisabled-optimization |
|---|
| 38 | | -warning-2 += -Wnested-externs |
|---|
| 39 | | -warning-2 += -Wshadow |
|---|
| 40 | | -warning-2 += $(call cc-option, -Wlogical-op) |
|---|
| 41 | | -warning-2 += $(call cc-option, -Wmissing-field-initializers) |
|---|
| 42 | | -warning-2 += $(call cc-option, -Wsign-compare) |
|---|
| 43 | | -warning-2 += $(call cc-option, -Wmaybe-uninitialized) |
|---|
| 44 | | -warning-2 += $(call cc-option, -Wunused-macros) |
|---|
| 25 | +KBUILD_CFLAGS += -Wextra -Wunused -Wno-unused-parameter |
|---|
| 26 | +KBUILD_CFLAGS += -Wmissing-declarations |
|---|
| 27 | +KBUILD_CFLAGS += -Wmissing-format-attribute |
|---|
| 28 | +KBUILD_CFLAGS += -Wmissing-prototypes |
|---|
| 29 | +KBUILD_CFLAGS += -Wold-style-definition |
|---|
| 30 | +KBUILD_CFLAGS += -Wmissing-include-dirs |
|---|
| 31 | +KBUILD_CFLAGS += $(call cc-option, -Wunused-but-set-variable) |
|---|
| 32 | +KBUILD_CFLAGS += $(call cc-option, -Wunused-const-variable) |
|---|
| 33 | +KBUILD_CFLAGS += $(call cc-option, -Wpacked-not-aligned) |
|---|
| 34 | +KBUILD_CFLAGS += $(call cc-option, -Wstringop-truncation) |
|---|
| 35 | +# The following turn off the warnings enabled by -Wextra |
|---|
| 36 | +KBUILD_CFLAGS += -Wno-missing-field-initializers |
|---|
| 37 | +KBUILD_CFLAGS += -Wno-sign-compare |
|---|
| 38 | +KBUILD_CFLAGS += -Wno-type-limits |
|---|
| 45 | 39 | |
|---|
| 46 | | -warning-3 := -Wbad-function-cast |
|---|
| 47 | | -warning-3 += -Wcast-qual |
|---|
| 48 | | -warning-3 += -Wconversion |
|---|
| 49 | | -warning-3 += -Wpacked |
|---|
| 50 | | -warning-3 += -Wpadded |
|---|
| 51 | | -warning-3 += -Wpointer-arith |
|---|
| 52 | | -warning-3 += -Wredundant-decls |
|---|
| 53 | | -warning-3 += -Wswitch-default |
|---|
| 54 | | -warning-3 += $(call cc-option, -Wpacked-bitfield-compat) |
|---|
| 55 | | -warning-3 += $(call cc-option, -Wvla) |
|---|
| 40 | +KBUILD_CPPFLAGS += -DKBUILD_EXTRA_WARN1 |
|---|
| 56 | 41 | |
|---|
| 57 | | -warning := $(warning-$(findstring 1, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS))) |
|---|
| 58 | | -warning += $(warning-$(findstring 2, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS))) |
|---|
| 59 | | -warning += $(warning-$(findstring 3, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS))) |
|---|
| 60 | | - |
|---|
| 61 | | -ifeq ("$(strip $(warning))","") |
|---|
| 62 | | - $(error W=$(KBUILD_ENABLE_EXTRA_GCC_CHECKS) is unknown) |
|---|
| 63 | | -endif |
|---|
| 64 | | - |
|---|
| 65 | | -KBUILD_CFLAGS += $(warning) |
|---|
| 66 | 42 | else |
|---|
| 67 | 43 | |
|---|
| 68 | | -ifeq ($(cc-name),clang) |
|---|
| 69 | | -KBUILD_CFLAGS += $(call cc-disable-warning, initializer-overrides) |
|---|
| 70 | | -KBUILD_CFLAGS += $(call cc-disable-warning, unused-value) |
|---|
| 71 | | -KBUILD_CFLAGS += $(call cc-disable-warning, format) |
|---|
| 72 | | -KBUILD_CFLAGS += $(call cc-disable-warning, sign-compare) |
|---|
| 73 | | -KBUILD_CFLAGS += $(call cc-disable-warning, format-zero-length) |
|---|
| 74 | | -KBUILD_CFLAGS += $(call cc-disable-warning, uninitialized) |
|---|
| 44 | +# Some diagnostics enabled by default are noisy. |
|---|
| 45 | +# Suppress them by using -Wno... except for W=1. |
|---|
| 46 | + |
|---|
| 47 | +ifdef CONFIG_CC_IS_CLANG |
|---|
| 48 | +KBUILD_CFLAGS += -Wno-initializer-overrides |
|---|
| 49 | +KBUILD_CFLAGS += -Wno-format |
|---|
| 50 | +KBUILD_CFLAGS += -Wno-sign-compare |
|---|
| 51 | +KBUILD_CFLAGS += -Wno-format-zero-length |
|---|
| 75 | 52 | KBUILD_CFLAGS += $(call cc-disable-warning, pointer-to-enum-cast) |
|---|
| 53 | +KBUILD_CFLAGS += -Wno-tautological-constant-out-of-range-compare |
|---|
| 76 | 54 | KBUILD_CFLAGS += $(call cc-disable-warning, unaligned-access) |
|---|
| 55 | +KBUILD_CFLAGS += $(call cc-disable-warning, cast-function-type-strict) |
|---|
| 77 | 56 | endif |
|---|
| 57 | + |
|---|
| 58 | +endif |
|---|
| 59 | + |
|---|
| 60 | +# |
|---|
| 61 | +# W=2 - warnings which occur quite often but may still be relevant |
|---|
| 62 | +# |
|---|
| 63 | +ifneq ($(findstring 2, $(KBUILD_EXTRA_WARN)),) |
|---|
| 64 | + |
|---|
| 65 | +KBUILD_CFLAGS += -Wdisabled-optimization |
|---|
| 66 | +KBUILD_CFLAGS += -Wnested-externs |
|---|
| 67 | +KBUILD_CFLAGS += -Wshadow |
|---|
| 68 | +KBUILD_CFLAGS += $(call cc-option, -Wlogical-op) |
|---|
| 69 | +KBUILD_CFLAGS += -Wmissing-field-initializers |
|---|
| 70 | +KBUILD_CFLAGS += -Wtype-limits |
|---|
| 71 | +KBUILD_CFLAGS += $(call cc-option, -Wmaybe-uninitialized) |
|---|
| 72 | +KBUILD_CFLAGS += $(call cc-option, -Wunused-macros) |
|---|
| 73 | + |
|---|
| 74 | +KBUILD_CPPFLAGS += -DKBUILD_EXTRA_WARN2 |
|---|
| 75 | + |
|---|
| 76 | +endif |
|---|
| 77 | + |
|---|
| 78 | +# |
|---|
| 79 | +# W=3 - more obscure warnings, can most likely be ignored |
|---|
| 80 | +# |
|---|
| 81 | +ifneq ($(findstring 3, $(KBUILD_EXTRA_WARN)),) |
|---|
| 82 | + |
|---|
| 83 | +KBUILD_CFLAGS += -Wbad-function-cast |
|---|
| 84 | +KBUILD_CFLAGS += -Wcast-align |
|---|
| 85 | +KBUILD_CFLAGS += -Wcast-qual |
|---|
| 86 | +KBUILD_CFLAGS += -Wconversion |
|---|
| 87 | +KBUILD_CFLAGS += -Wpacked |
|---|
| 88 | +KBUILD_CFLAGS += -Wpadded |
|---|
| 89 | +KBUILD_CFLAGS += -Wpointer-arith |
|---|
| 90 | +KBUILD_CFLAGS += -Wredundant-decls |
|---|
| 91 | +KBUILD_CFLAGS += -Wsign-compare |
|---|
| 92 | +KBUILD_CFLAGS += -Wswitch-default |
|---|
| 93 | +KBUILD_CFLAGS += $(call cc-option, -Wpacked-bitfield-compat) |
|---|
| 94 | + |
|---|
| 95 | +KBUILD_CPPFLAGS += -DKBUILD_EXTRA_WARN3 |
|---|
| 96 | + |
|---|
| 78 | 97 | endif |
|---|