.. | .. |
---|
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 |
---|