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