Skip to content

Commit

Permalink
kbuild: Add extra gcc checks
Browse files Browse the repository at this point in the history
Add a 'W=1' Makefile switch which adds additional checking per build
object.

The idea behind this option is targeted at developers who, in the
process of writing their code, want to do the occasional

make W=1 [target.o]

and let gcc do more extensive code checking for them. Then, they
could eyeball the output for valid gcc warnings about various
bugs/discrepancies which are not reported during the normal build
process.

For more background information and a use case, read through this
thread: http://marc.info/?l=kernel-janitors&m=129802065918147&w=2

Cc: Michal Marek <[email protected]>
Cc: [email protected]
Acked-by: Sam Ravnborg <[email protected]>
Acked-by: Ingo Molnar <[email protected]>
Signed-off-by: Borislav Petkov <[email protected]>
Signed-off-by: Michal Marek <[email protected]>
  • Loading branch information
bp3tk0v authored and michal42 committed Mar 9, 2011
1 parent de933bd commit 4a5838a
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 1 deletion.
5 changes: 5 additions & 0 deletions Documentation/kbuild/kbuild.txt
Original file line number Diff line number Diff line change
Expand Up @@ -196,3 +196,8 @@ to be included in the databases, separated by blank space. E.g.:
To get all available archs you can also specify all. E.g.:

$ make ALLSOURCE_ARCHS=all tags

KBUILD_ENABLE_EXTRA_GCC_CHECKS
--------------------------------------------------
If enabled over the make command line with "W=1", it turns on additional
gcc -W... options for more extensive build-time checking.
5 changes: 5 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,10 @@ ifeq ("$(origin O)", "command line")
KBUILD_OUTPUT := $(O)
endif

ifeq ("$(origin W)", "command line")
export KBUILD_ENABLE_EXTRA_GCC_CHECKS := 1
endif

# That's our default target when none is given on the command line
PHONY := _all
_all:
Expand Down Expand Up @@ -1262,6 +1266,7 @@ help:
@echo ' make O=dir [targets] Locate all output files in "dir", including .config'
@echo ' make C=1 [targets] Check all c source with $$CHECK (sparse by default)'
@echo ' make C=2 [targets] Force check of all c source with $$CHECK'
@echo ' make W=1 [targets] Enable extra gcc checks'
@echo ''
@echo 'Execute "make" or "make all" to build all targets marked with [*] '
@echo 'For further info see the ./README file'
Expand Down
35 changes: 34 additions & 1 deletion scripts/Makefile.build
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,40 @@ ifeq ($(KBUILD_NOPEDANTIC),)
$(error CFLAGS was changed in "$(kbuild-file)". Fix it to use EXTRA_CFLAGS)
endif
endif

#
# make W=1 settings
#
# $(call cc-option... ) handles gcc -W.. options which
# are not supported by all versions of the compiler
ifdef KBUILD_ENABLE_EXTRA_GCC_CHECKS
KBUILD_EXTRA_WARNINGS := -Wextra
KBUILD_EXTRA_WARNINGS += -Wunused -Wno-unused-parameter
KBUILD_EXTRA_WARNINGS += -Waggregate-return
KBUILD_EXTRA_WARNINGS += -Wbad-function-cast
KBUILD_EXTRA_WARNINGS += -Wcast-qual
KBUILD_EXTRA_WARNINGS += -Wcast-align
KBUILD_EXTRA_WARNINGS += -Wconversion
KBUILD_EXTRA_WARNINGS += -Wdisabled-optimization
KBUILD_EXTRA_WARNINGS += -Wlogical-op
KBUILD_EXTRA_WARNINGS += -Wmissing-declarations
KBUILD_EXTRA_WARNINGS += -Wmissing-format-attribute
KBUILD_EXTRA_WARNINGS += $(call cc-option, -Wmissing-include-dirs,)
KBUILD_EXTRA_WARNINGS += -Wmissing-prototypes
KBUILD_EXTRA_WARNINGS += -Wnested-externs
KBUILD_EXTRA_WARNINGS += -Wold-style-definition
KBUILD_EXTRA_WARNINGS += $(call cc-option, -Woverlength-strings,)
KBUILD_EXTRA_WARNINGS += -Wpacked
KBUILD_EXTRA_WARNINGS += -Wpacked-bitfield-compat
KBUILD_EXTRA_WARNINGS += -Wpadded
KBUILD_EXTRA_WARNINGS += -Wpointer-arith
KBUILD_EXTRA_WARNINGS += -Wredundant-decls
KBUILD_EXTRA_WARNINGS += -Wshadow
KBUILD_EXTRA_WARNINGS += -Wswitch-default
KBUILD_EXTRA_WARNINGS += $(call cc-option, -Wvla,)
KBUILD_CFLAGS += $(KBUILD_EXTRA_WARNINGS)
endif

include scripts/Makefile.lib

ifdef host-progs
Expand Down Expand Up @@ -403,7 +437,6 @@ ifneq ($(cmd_files),)
include $(cmd_files)
endif


# Declare the contents of the .PHONY variable as phony. We keep that
# information in a variable se we can use it in if_changed and friends.

Expand Down

0 comments on commit 4a5838a

Please sign in to comment.