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