diff options
Diffstat (limited to 'Makefile.extrawarn')
-rw-r--r-- | Makefile.extrawarn | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/Makefile.extrawarn b/Makefile.extrawarn new file mode 100644 index 00000000..1f4bda94 --- /dev/null +++ b/Makefile.extrawarn @@ -0,0 +1,90 @@ +# From linux.git/scripts/Kbuild.include +# +# try-run +# Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise) +# Exit code chooses option. "$$TMP" is can be used as temporary file and +# is automatically cleaned up. +try-run = $(shell set -e; \ + TMP="$(TMPOUT).$$$$.tmp"; \ + TMPO="$(TMPOUT).$$$$.o"; \ + if ($(1)) >/dev/null 2>&1; \ + then echo "$(2)"; \ + else echo "$(3)"; \ + fi; \ + rm -f "$$TMP" "$$TMPO") + + # cc-option + # Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586) + + cc-option = $(call try-run,\ + $(CC) $(CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2)) + +# From linux.git/scripts/Makefile.extrawarn +# ========================================================================== +# +# make W=... settings +# +# W=1 - warnings that may be relevant and does not occur too often +# W=2 - warnings that occur quite often but may still be relevant +# W=3 - the more obscure warnings, can most likely be ignored +# +# $(call cc-option, -W...) handles gcc -W.. options which +# are not supported by all versions of the compiler +# ========================================================================== + +ifeq ("$(origin W)", "command line") + export BUILD_ENABLE_EXTRA_GCC_CHECKS := $(W) +endif + +ifdef BUILD_ENABLE_EXTRA_GCC_CHECKS +warning- := $(empty) + +warning-1 := -Wextra -Wunused -Wno-unused-parameter +warning-1 += -Wmissing-declarations +warning-1 += -Wmissing-format-attribute +warning-1 += $(call cc-option, -Wmissing-prototypes) +warning-1 += -Wold-style-definition +warning-1 += $(call cc-option, -Wmissing-include-dirs) +warning-1 += $(call cc-option, -Wunused-but-set-variable) +warning-1 += $(call cc-disable-warning, missing-field-initializers) + +warning-2 := -Waggregate-return +warning-2 += -Wcast-align +warning-2 += -Wdisabled-optimization +warning-2 += -Wnested-externs +warning-2 += -Wshadow +warning-2 += $(call cc-option, -Wlogical-op) +warning-2 += $(call cc-option, -Wmissing-field-initializers) + +warning-3 := -Wbad-function-cast +warning-3 += -Wcast-qual +warning-3 += -Wconversion +warning-3 += -Wpacked +warning-3 += -Wpadded +warning-3 += -Wpointer-arith +warning-3 += -Wredundant-decls +warning-3 += -Wswitch-default +warning-3 += $(call cc-option, -Wpacked-bitfield-compat) +warning-3 += $(call cc-option, -Wvla) + +warning := $(warning-$(findstring 1, $(BUILD_ENABLE_EXTRA_GCC_CHECKS))) +warning += $(warning-$(findstring 2, $(BUILD_ENABLE_EXTRA_GCC_CHECKS))) +warning += $(warning-$(findstring 3, $(BUILD_ENABLE_EXTRA_GCC_CHECKS))) + +ifeq ("$(strip $(warning))","") + $(error W=$(BUILD_ENABLE_EXTRA_GCC_CHECKS) is unknown) +endif + +EXTRAWARN_CFLAGS += $(warning) +else + +ifeq ($(COMPILER),clang) +EXTRAWARN_CFLAGS += $(call cc-disable-warning, initializer-overrides) +EXTRAWARN_CFLAGS += $(call cc-disable-warning, unused-value) +EXTRAWARN_CFLAGS += $(call cc-disable-warning, format) +EXTRAWARN_CFLAGS += $(call cc-disable-warning, unknown-warning-option) +EXTRAWARN_CFLAGS += $(call cc-disable-warning, sign-compare) +EXTRAWARN_CFLAGS += $(call cc-disable-warning, format-zero-length) +EXTRAWARN_CFLAGS += $(call cc-disable-warning, uninitialized) +endif +endif |