summaryrefslogtreecommitdiff
path: root/Makefile.extrawarn
diff options
context:
space:
mode:
authorDavid Sterba <dsterba@suse.com>2015-10-06 14:40:07 +0200
committerDavid Sterba <dsterba@suse.com>2015-10-21 14:29:26 +0200
commitb556a992c3adf892948106503f6572704d877cdb (patch)
tree04fb167af6d8b8d66b20ef8d31bb535539d51309 /Makefile.extrawarn
parentc2e85337f6600bed1b348c9e86f83c27f753df6b (diff)
btrfs-progs: build: allow to build with various compiler warnings
Copied from linux kernel, 'make W=1' will build with various additional warnings turned on. There are 3 levels, combinations are possible. The build is quite noisy, not all warnings need to be fixed. A specific warning can be turned on by 'make EXTRA_CFLAGS=-Wsomething'. Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'Makefile.extrawarn')
-rw-r--r--Makefile.extrawarn90
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