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>
This commit is contained in:
@@ -23,21 +23,37 @@ ifdef CONFIG_GCC_PLUGINS
|
||||
|
||||
export PLUGINCC GCC_PLUGINS_CFLAGS GCC_PLUGIN SANCOV_PLUGIN
|
||||
|
||||
ifeq ($(PLUGINCC),)
|
||||
ifneq ($(GCC_PLUGINS_CFLAGS),)
|
||||
ifeq ($(call cc-ifversion, -ge, 0405, y), y)
|
||||
PLUGINCC := $(shell $(CONFIG_SHELL) -x $(srctree)/scripts/gcc-plugin.sh "$(__PLUGINCC)" "$(HOSTCXX)" "$(CC)")
|
||||
$(warning warning: your gcc installation does not support plugins, perhaps the necessary headers are missing?)
|
||||
else
|
||||
$(warning warning: your gcc version does not support plugins, you should upgrade it to gcc 4.5 at least)
|
||||
endif
|
||||
endif
|
||||
else
|
||||
ifneq ($(PLUGINCC),)
|
||||
# SANCOV_PLUGIN can be only in CFLAGS_KCOV because avoid duplication.
|
||||
GCC_PLUGINS_CFLAGS := $(filter-out $(SANCOV_PLUGIN), $(GCC_PLUGINS_CFLAGS))
|
||||
endif
|
||||
|
||||
KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS)
|
||||
GCC_PLUGIN := $(gcc-plugin-y)
|
||||
|
||||
endif
|
||||
|
||||
# If plugins aren't supported, abort the build before hard-to-read compiler
|
||||
# errors start getting spewed by the main build.
|
||||
PHONY += gcc-plugins-check
|
||||
gcc-plugins-check: FORCE
|
||||
ifdef CONFIG_GCC_PLUGINS
|
||||
ifeq ($(PLUGINCC),)
|
||||
ifneq ($(GCC_PLUGINS_CFLAGS),)
|
||||
ifeq ($(call cc-ifversion, -ge, 0405, y), y)
|
||||
$(Q)$(srctree)/scripts/gcc-plugin.sh --show-error "$(__PLUGINCC)" "$(HOSTCXX)" "$(CC)" || true
|
||||
@echo "Cannot use CONFIG_GCC_PLUGINS: your gcc installation does not support plugins, perhaps the necessary headers are missing?" >&2 && exit 1
|
||||
else
|
||||
@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
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
@:
|
||||
|
||||
# Actually do the build, if requested.
|
||||
PHONY += gcc-plugins
|
||||
gcc-plugins: scripts_basic gcc-plugins-check
|
||||
ifdef CONFIG_GCC_PLUGINS
|
||||
$(Q)$(MAKE) $(build)=scripts/gcc-plugins
|
||||
endif
|
||||
@:
|
||||
|
||||
Reference in New Issue
Block a user