xref: /linux/scripts/Makefile.extrawarn (revision 80b6093b55e31c2c40ff082fb32523d4e852954f)
1b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0
2a86fe353SMasahiro Yamada# ==========================================================================
3a86fe353SMasahiro Yamada# make W=... settings
4a86fe353SMasahiro Yamada#
5c77d06e7SYann Droneaud# There are four warning groups enabled by W=1, W=2, W=3, and W=e
6c77d06e7SYann Droneaud# They are independent, and can be combined like W=12 or W=123e.
7a86fe353SMasahiro Yamada# ==========================================================================
8a86fe353SMasahiro Yamada
9321cb030SXiongfeng WangKBUILD_CFLAGS += $(call cc-disable-warning, packed-not-aligned)
10321cb030SXiongfeng Wang
11e27128dbSMasahiro Yamada# backward compatibility
12e27128dbSMasahiro YamadaKBUILD_EXTRA_WARN ?= $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)
13e27128dbSMasahiro Yamada
14a86fe353SMasahiro Yamadaifeq ("$(origin W)", "command line")
15e27128dbSMasahiro Yamada  KBUILD_EXTRA_WARN := $(W)
16a86fe353SMasahiro Yamadaendif
17a86fe353SMasahiro Yamada
18e27128dbSMasahiro Yamadaexport KBUILD_EXTRA_WARN
19e27128dbSMasahiro Yamada
2064a91907SMasahiro Yamada#
2164a91907SMasahiro Yamada# W=1 - warnings which may be relevant and do not occur too often
2264a91907SMasahiro Yamada#
23e27128dbSMasahiro Yamadaifneq ($(findstring 1, $(KBUILD_EXTRA_WARN)),)
24a86fe353SMasahiro Yamada
2564a91907SMasahiro YamadaKBUILD_CFLAGS += -Wextra -Wunused -Wno-unused-parameter
2664a91907SMasahiro YamadaKBUILD_CFLAGS += -Wmissing-declarations
2764a91907SMasahiro YamadaKBUILD_CFLAGS += -Wmissing-format-attribute
2864a91907SMasahiro YamadaKBUILD_CFLAGS += -Wmissing-prototypes
2964a91907SMasahiro YamadaKBUILD_CFLAGS += -Wold-style-definition
3064a91907SMasahiro YamadaKBUILD_CFLAGS += -Wmissing-include-dirs
3164a91907SMasahiro YamadaKBUILD_CFLAGS += $(call cc-option, -Wunused-but-set-variable)
3264a91907SMasahiro YamadaKBUILD_CFLAGS += $(call cc-option, -Wunused-const-variable)
3364a91907SMasahiro YamadaKBUILD_CFLAGS += $(call cc-option, -Wpacked-not-aligned)
3464a91907SMasahiro YamadaKBUILD_CFLAGS += $(call cc-option, -Wstringop-truncation)
354c8dd95aSMasahiro Yamada# The following turn off the warnings enabled by -Wextra
3664a91907SMasahiro YamadaKBUILD_CFLAGS += -Wno-missing-field-initializers
3764a91907SMasahiro YamadaKBUILD_CFLAGS += -Wno-sign-compare
38355a3587SRikard FalkebornKBUILD_CFLAGS += -Wno-type-limits
391344794aSArnd BergmannKBUILD_CFLAGS += -Wno-shift-negative-value
40a86fe353SMasahiro Yamada
41*80b6093bSMasahiro YamadaKBUILD_CPPFLAGS += -Wundef
426863f564SMasahiro YamadaKBUILD_CPPFLAGS += -DKBUILD_EXTRA_WARN1
436863f564SMasahiro Yamada
4426ea6bb1SBehan Websterelse
4526ea6bb1SBehan Webster
4664a91907SMasahiro Yamada# Some diagnostics enabled by default are noisy.
4764a91907SMasahiro Yamada# Suppress them by using -Wno... except for W=1.
4864a91907SMasahiro Yamada
49076f421dSMasahiro Yamadaifdef CONFIG_CC_IS_CLANG
50a1494304SMasahiro YamadaKBUILD_CFLAGS += -Wno-initializer-overrides
51b0839b28SNick Desaulniers# Clang before clang-16 would warn on default argument promotions.
5288b61e3bSNick Desaulniersifneq ($(call clang-min-version, 160000),y)
53b0839b28SNick Desaulniers# Disable -Wformat
5421f9c8a1SLinus TorvaldsKBUILD_CFLAGS += -Wno-format
55b0839b28SNick Desaulniers# Then re-enable flags that were part of the -Wformat group that aren't
56b0839b28SNick Desaulniers# problematic.
57b0839b28SNick DesaulniersKBUILD_CFLAGS += -Wformat-extra-args -Wformat-invalid-specifier
58b0839b28SNick DesaulniersKBUILD_CFLAGS += -Wformat-zero-length -Wnonnull
59b0839b28SNick Desaulniers# Requires clang-12+.
6088b61e3bSNick Desaulniersifeq ($(call clang-min-version, 120000),y)
61b0839b28SNick DesaulniersKBUILD_CFLAGS += -Wformat-insufficient-args
62b0839b28SNick Desaulniersendif
63b0839b28SNick Desaulniersendif
64a1494304SMasahiro YamadaKBUILD_CFLAGS += -Wno-sign-compare
6582f2bc2fSNathan ChancellorKBUILD_CFLAGS += $(call cc-disable-warning, pointer-to-enum-cast)
66afe956c5SNathan ChancellorKBUILD_CFLAGS += -Wno-tautological-constant-out-of-range-compare
671cf5f151SNathan ChancellorKBUILD_CFLAGS += $(call cc-disable-warning, unaligned-access)
6821206351SSami TolvanenKBUILD_CFLAGS += $(call cc-disable-warning, cast-function-type-strict)
6926ea6bb1SBehan Websterendif
7064a91907SMasahiro Yamada
7164a91907SMasahiro Yamadaendif
7264a91907SMasahiro Yamada
7364a91907SMasahiro Yamada#
7464a91907SMasahiro Yamada# W=2 - warnings which occur quite often but may still be relevant
7564a91907SMasahiro Yamada#
76e27128dbSMasahiro Yamadaifneq ($(findstring 2, $(KBUILD_EXTRA_WARN)),)
7764a91907SMasahiro Yamada
7864a91907SMasahiro YamadaKBUILD_CFLAGS += -Wdisabled-optimization
7964a91907SMasahiro YamadaKBUILD_CFLAGS += -Wshadow
8064a91907SMasahiro YamadaKBUILD_CFLAGS += $(call cc-option, -Wlogical-op)
8164a91907SMasahiro YamadaKBUILD_CFLAGS += -Wmissing-field-initializers
82355a3587SRikard FalkebornKBUILD_CFLAGS += -Wtype-limits
8364a91907SMasahiro YamadaKBUILD_CFLAGS += $(call cc-option, -Wmaybe-uninitialized)
8464a91907SMasahiro YamadaKBUILD_CFLAGS += $(call cc-option, -Wunused-macros)
8564a91907SMasahiro Yamada
866863f564SMasahiro YamadaKBUILD_CPPFLAGS += -DKBUILD_EXTRA_WARN2
876863f564SMasahiro Yamada
8864a91907SMasahiro Yamadaendif
8964a91907SMasahiro Yamada
9064a91907SMasahiro Yamada#
9164a91907SMasahiro Yamada# W=3 - more obscure warnings, can most likely be ignored
9264a91907SMasahiro Yamada#
93e27128dbSMasahiro Yamadaifneq ($(findstring 3, $(KBUILD_EXTRA_WARN)),)
9464a91907SMasahiro Yamada
9564a91907SMasahiro YamadaKBUILD_CFLAGS += -Wbad-function-cast
96095fbca0SArnd BergmannKBUILD_CFLAGS += -Wcast-align
9764a91907SMasahiro YamadaKBUILD_CFLAGS += -Wcast-qual
9864a91907SMasahiro YamadaKBUILD_CFLAGS += -Wconversion
9964a91907SMasahiro YamadaKBUILD_CFLAGS += -Wpacked
10064a91907SMasahiro YamadaKBUILD_CFLAGS += -Wpadded
10164a91907SMasahiro YamadaKBUILD_CFLAGS += -Wpointer-arith
10264a91907SMasahiro YamadaKBUILD_CFLAGS += -Wredundant-decls
103a97ea93eSJoe PerchesKBUILD_CFLAGS += -Wsign-compare
10464a91907SMasahiro YamadaKBUILD_CFLAGS += -Wswitch-default
10564a91907SMasahiro YamadaKBUILD_CFLAGS += $(call cc-option, -Wpacked-bitfield-compat)
10664a91907SMasahiro Yamada
1076863f564SMasahiro YamadaKBUILD_CPPFLAGS += -DKBUILD_EXTRA_WARN3
1086863f564SMasahiro Yamada
109a86fe353SMasahiro Yamadaendif
110c77d06e7SYann Droneaud
111c77d06e7SYann Droneaud#
112c77d06e7SYann Droneaud# W=e - error out on warnings
113c77d06e7SYann Droneaud#
114c77d06e7SYann Droneaudifneq ($(findstring e, $(KBUILD_EXTRA_WARN)),)
115c77d06e7SYann Droneaud
116c77d06e7SYann DroneaudKBUILD_CFLAGS += -Werror
117c77d06e7SYann Droneaud
118c77d06e7SYann Droneaudendif
119