summaryrefslogtreecommitdiffstats
path: root/scripts/Makefile.gcc-plugins
diff options
context:
space:
mode:
authorKees Cook <keescook@chromium.org>2016-06-18 02:11:12 -0400
committerKees Cook <keescook@chromium.org>2016-08-08 20:49:05 -0400
commited58c0e9eefef517aa5a547b78658e2ab4422232 (patch)
tree678081bd9195ee83fc89ccf06ffd4c551d1d9d44 /scripts/Makefile.gcc-plugins
parentd26e94149276f8c3d4911aa2c8395ba99b613c8d (diff)
gcc-plugins: abort builds cleanly when not supported
When the compiler doesn't support gcc plugins (either due to missing headers or too old a version), report the problem and abort the build instead of emitting a warning and letting the build founder with arcane compiler errors. Signed-off-by: Kees Cook <keescook@chromium.org>
Diffstat (limited to 'scripts/Makefile.gcc-plugins')
-rw-r--r--scripts/Makefile.gcc-plugins34
1 files changed, 25 insertions, 9 deletions
diff --git a/scripts/Makefile.gcc-plugins b/scripts/Makefile.gcc-plugins
index 5e22b60589c1..bbca1f46f6e4 100644
--- a/scripts/Makefile.gcc-plugins
+++ b/scripts/Makefile.gcc-plugins
@@ -23,21 +23,37 @@ ifdef CONFIG_GCC_PLUGINS
23 23
24 export PLUGINCC GCC_PLUGINS_CFLAGS GCC_PLUGIN SANCOV_PLUGIN 24 export PLUGINCC GCC_PLUGINS_CFLAGS GCC_PLUGIN SANCOV_PLUGIN
25 25
26 ifneq ($(PLUGINCC),)
27 # SANCOV_PLUGIN can be only in CFLAGS_KCOV because avoid duplication.
28 GCC_PLUGINS_CFLAGS := $(filter-out $(SANCOV_PLUGIN), $(GCC_PLUGINS_CFLAGS))
29 endif
30
31 KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS)
32 GCC_PLUGIN := $(gcc-plugin-y)
33endif
34
35# If plugins aren't supported, abort the build before hard-to-read compiler
36# errors start getting spewed by the main build.
37PHONY += gcc-plugins-check
38gcc-plugins-check: FORCE
39ifdef CONFIG_GCC_PLUGINS
26 ifeq ($(PLUGINCC),) 40 ifeq ($(PLUGINCC),)
27 ifneq ($(GCC_PLUGINS_CFLAGS),) 41 ifneq ($(GCC_PLUGINS_CFLAGS),)
28 ifeq ($(call cc-ifversion, -ge, 0405, y), y) 42 ifeq ($(call cc-ifversion, -ge, 0405, y), y)
29 PLUGINCC := $(shell $(CONFIG_SHELL) -x $(srctree)/scripts/gcc-plugin.sh "$(__PLUGINCC)" "$(HOSTCXX)" "$(CC)") 43 $(Q)$(srctree)/scripts/gcc-plugin.sh --show-error "$(__PLUGINCC)" "$(HOSTCXX)" "$(CC)" || true
30 $(warning warning: your gcc installation does not support plugins, perhaps the necessary headers are missing?) 44 @echo "Cannot use CONFIG_GCC_PLUGINS: your gcc installation does not support plugins, perhaps the necessary headers are missing?" >&2 && exit 1
31 else 45 else
32 $(warning warning: your gcc version does not support plugins, you should upgrade it to gcc 4.5 at least) 46 @echo "Cannot use CONFIG_GCC_PLUGINS: your gcc version does not support plugins, you should upgrade it to at least gcc 4.5" >&2 && exit 1
33 endif 47 endif
34 endif 48 endif
35 else
36 # SANCOV_PLUGIN can be only in CFLAGS_KCOV because avoid duplication.
37 GCC_PLUGINS_CFLAGS := $(filter-out $(SANCOV_PLUGIN), $(GCC_PLUGINS_CFLAGS))
38 endif 49 endif
50endif
51 @:
39 52
40 KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) 53# Actually do the build, if requested.
41 GCC_PLUGIN := $(gcc-plugin-y) 54PHONY += gcc-plugins
42 55gcc-plugins: scripts_basic gcc-plugins-check
56ifdef CONFIG_GCC_PLUGINS
57 $(Q)$(MAKE) $(build)=scripts/gcc-plugins
43endif 58endif
59 @: