2016-05-24 01:09:38 +03:00
i f d e f C O N F I G _ G C C _ P L U G I N S
__PLUGINCC := $( call cc-ifversion, -ge, 0408, $( HOSTCXX) , $( HOSTCC) )
PLUGINCC := $( shell $( CONFIG_SHELL) $( srctree) /scripts/gcc-plugin.sh " $( __PLUGINCC) " " $( HOSTCXX) " " $( CC) " )
2016-05-24 01:11:37 +03:00
SANCOV_PLUGIN := -fplugin= $( objtree) /scripts/gcc-plugins/sancov_plugin.so
2016-05-24 01:10:35 +03:00
gcc-plugin-$( CONFIG_GCC_PLUGIN_CYC_COMPLEXITY) += cyc_complexity_plugin.so
2016-05-24 01:11:37 +03:00
ifdef CONFIG_GCC_PLUGIN_SANCOV
ifeq ( $( CFLAGS_KCOV) ,)
# It is needed because of the gcc-plugin.sh and gcc version checks.
gcc-plugin-$( CONFIG_GCC_PLUGIN_SANCOV) += sancov_plugin.so
ifneq ( $( PLUGINCC) ,)
CFLAGS_KCOV := $( SANCOV_PLUGIN)
else
$( warning warning: cannot use CONFIG_KCOV: -fsanitize-coverage= trace-pc is not supported by compiler)
endif
endif
endif
2016-06-20 21:40:24 +03:00
GCC_PLUGINS_CFLAGS := $( strip $( addprefix -fplugin= $( objtree) /scripts/gcc-plugins/, $( gcc-plugin-y) ) $( gcc-plugin-cflags-y) )
2016-05-24 01:09:38 +03:00
2016-06-26 18:38:20 +03:00
export PLUGINCC GCC_PLUGINS_CFLAGS GCC_PLUGIN GCC_PLUGIN_SUBDIR SANCOV_PLUGIN
2016-05-24 01:09:38 +03:00
2016-06-18 09:11:12 +03:00
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)
2016-06-26 18:38:20 +03:00
GCC_PLUGIN_SUBDIR := $( gcc-plugin-subdir-y)
2016-06-18 09:11:12 +03:00
e n d i f
# 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
i f d e f C O N F I G _ G C C _ P L U G I N S
2016-05-24 01:09:38 +03:00
ifeq ( $( PLUGINCC) ,)
ifneq ( $( GCC_PLUGINS_CFLAGS) ,)
ifeq ( $( call cc-ifversion, -ge, 0405, y) , y)
2016-06-18 09:11:12 +03:00
$( 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
2016-05-24 01:09:38 +03:00
else
2016-06-18 09:11:12 +03:00
@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
2016-05-24 01:09:38 +03:00
endif
endif
endif
2016-06-18 09:11:12 +03:00
e n d i f
@:
2016-05-24 01:09:38 +03:00
2016-06-18 09:11:12 +03:00
# Actually do the build, if requested.
PHONY += gcc-plugins
gcc-plugins : scripts_basic gcc -plugins -check
i f d e f C O N F I G _ G C C _ P L U G I N S
$( Q) $( MAKE) $( build) = scripts/gcc-plugins
2016-05-24 01:09:38 +03:00
e n d i f
2016-06-18 09:11:12 +03:00
@: