1*a86fe353SMasahiro Yamada# ========================================================================== 2*a86fe353SMasahiro Yamada# 3*a86fe353SMasahiro Yamada# make W=... settings 4*a86fe353SMasahiro Yamada# 5*a86fe353SMasahiro Yamada# W=1 - warnings that may be relevant and does not occur too often 6*a86fe353SMasahiro Yamada# W=2 - warnings that occur quite often but may still be relevant 7*a86fe353SMasahiro Yamada# W=3 - the more obscure warnings, can most likely be ignored 8*a86fe353SMasahiro Yamada# 9*a86fe353SMasahiro Yamada# $(call cc-option, -W...) handles gcc -W.. options which 10*a86fe353SMasahiro Yamada# are not supported by all versions of the compiler 11*a86fe353SMasahiro Yamada# ========================================================================== 12*a86fe353SMasahiro Yamada 13*a86fe353SMasahiro Yamadaifeq ("$(origin W)", "command line") 14*a86fe353SMasahiro Yamada export KBUILD_ENABLE_EXTRA_GCC_CHECKS := $(W) 15*a86fe353SMasahiro Yamadaendif 16*a86fe353SMasahiro Yamada 17*a86fe353SMasahiro Yamadaifdef KBUILD_ENABLE_EXTRA_GCC_CHECKS 18*a86fe353SMasahiro Yamadawarning- := $(empty) 19*a86fe353SMasahiro Yamada 20*a86fe353SMasahiro Yamadawarning-1 := -Wextra -Wunused -Wno-unused-parameter 21*a86fe353SMasahiro Yamadawarning-1 += -Wmissing-declarations 22*a86fe353SMasahiro Yamadawarning-1 += -Wmissing-format-attribute 23*a86fe353SMasahiro Yamadawarning-1 += $(call cc-option, -Wmissing-prototypes) 24*a86fe353SMasahiro Yamadawarning-1 += -Wold-style-definition 25*a86fe353SMasahiro Yamadawarning-1 += $(call cc-option, -Wmissing-include-dirs) 26*a86fe353SMasahiro Yamadawarning-1 += $(call cc-option, -Wunused-but-set-variable) 27*a86fe353SMasahiro Yamadawarning-1 += $(call cc-disable-warning, missing-field-initializers) 28*a86fe353SMasahiro Yamada 29*a86fe353SMasahiro Yamada# Clang 30*a86fe353SMasahiro Yamadawarning-1 += $(call cc-disable-warning, initializer-overrides) 31*a86fe353SMasahiro Yamadawarning-1 += $(call cc-disable-warning, unused-value) 32*a86fe353SMasahiro Yamadawarning-1 += $(call cc-disable-warning, format) 33*a86fe353SMasahiro Yamadawarning-1 += $(call cc-disable-warning, unknown-warning-option) 34*a86fe353SMasahiro Yamadawarning-1 += $(call cc-disable-warning, sign-compare) 35*a86fe353SMasahiro Yamadawarning-1 += $(call cc-disable-warning, format-zero-length) 36*a86fe353SMasahiro Yamadawarning-1 += $(call cc-disable-warning, uninitialized) 37*a86fe353SMasahiro Yamadawarning-1 += $(call cc-option, -fcatch-undefined-behavior) 38*a86fe353SMasahiro Yamada 39*a86fe353SMasahiro Yamadawarning-2 := -Waggregate-return 40*a86fe353SMasahiro Yamadawarning-2 += -Wcast-align 41*a86fe353SMasahiro Yamadawarning-2 += -Wdisabled-optimization 42*a86fe353SMasahiro Yamadawarning-2 += -Wnested-externs 43*a86fe353SMasahiro Yamadawarning-2 += -Wshadow 44*a86fe353SMasahiro Yamadawarning-2 += $(call cc-option, -Wlogical-op) 45*a86fe353SMasahiro Yamadawarning-2 += $(call cc-option, -Wmissing-field-initializers) 46*a86fe353SMasahiro Yamada 47*a86fe353SMasahiro Yamadawarning-3 := -Wbad-function-cast 48*a86fe353SMasahiro Yamadawarning-3 += -Wcast-qual 49*a86fe353SMasahiro Yamadawarning-3 += -Wconversion 50*a86fe353SMasahiro Yamadawarning-3 += -Wpacked 51*a86fe353SMasahiro Yamadawarning-3 += -Wpadded 52*a86fe353SMasahiro Yamadawarning-3 += -Wpointer-arith 53*a86fe353SMasahiro Yamadawarning-3 += -Wredundant-decls 54*a86fe353SMasahiro Yamadawarning-3 += -Wswitch-default 55*a86fe353SMasahiro Yamadawarning-3 += $(call cc-option, -Wpacked-bitfield-compat) 56*a86fe353SMasahiro Yamadawarning-3 += $(call cc-option, -Wvla) 57*a86fe353SMasahiro Yamada 58*a86fe353SMasahiro Yamadawarning := $(warning-$(findstring 1, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS))) 59*a86fe353SMasahiro Yamadawarning += $(warning-$(findstring 2, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS))) 60*a86fe353SMasahiro Yamadawarning += $(warning-$(findstring 3, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS))) 61*a86fe353SMasahiro Yamada 62*a86fe353SMasahiro Yamadaifeq ("$(strip $(warning))","") 63*a86fe353SMasahiro Yamada $(error W=$(KBUILD_ENABLE_EXTRA_GCC_CHECKS) is unknown) 64*a86fe353SMasahiro Yamadaendif 65*a86fe353SMasahiro Yamada 66*a86fe353SMasahiro YamadaKBUILD_CFLAGS += $(warning) 67*a86fe353SMasahiro Yamadaendif 68