hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
kernel/scripts/Makefile.extrawarn
....@@ -1,78 +1,97 @@
11 # SPDX-License-Identifier: GPL-2.0
22 # ==========================================================================
3
-#
43 # make W=... settings
54 #
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.
127 # ==========================================================================
138
149 KBUILD_CFLAGS += $(call cc-disable-warning, packed-not-aligned)
1510
11
+# backward compatibility
12
+KBUILD_EXTRA_WARN ?= $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)
13
+
1614 ifeq ("$(origin W)", "command line")
17
- export KBUILD_ENABLE_EXTRA_GCC_CHECKS := $(W)
15
+ KBUILD_EXTRA_WARN := $(W)
1816 endif
1917
20
-ifdef KBUILD_ENABLE_EXTRA_GCC_CHECKS
21
-warning- := $(empty)
18
+export KBUILD_EXTRA_WARN
2219
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)),)
3424
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
4539
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
5641
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)
6642 else
6743
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
7552 KBUILD_CFLAGS += $(call cc-disable-warning, pointer-to-enum-cast)
53
+KBUILD_CFLAGS += -Wno-tautological-constant-out-of-range-compare
7654 KBUILD_CFLAGS += $(call cc-disable-warning, unaligned-access)
55
+KBUILD_CFLAGS += $(call cc-disable-warning, cast-function-type-strict)
7756 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
+
7897 endif