linux-yocto/scripts/gcc-plugins/Makefile
Ross Burton f41fc97004 scripts/gcc-plugins: consistently use HOSTCC
The GCC plugins are built using HOSTCC, but the path to the GCC plugins
headers is obtained using CC.  This can lead to interesting failures if
the host compiler and cross compiler are different versions, and the
host compiler uses the cross headers.

Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/20210923152811.406516-1-ross.burton@arm.com
Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
2021-09-24 11:30:46 -04:00

2.3 KiB

SPDX-License-Identifier: GPL-2.0

$(obj)/randomize_layout_plugin.so: $(objtree)/$(obj)/randomize_layout_seed.h quiet_cmd_create_randomize_layout_seed = GENSEED $@ cmd_create_randomize_layout_seed =
$(CONFIG_SHELL) $(srctree)/$(src)/gen-random-seed.sh $@ $(objtree)/include/generated/randomize_layout_hash.h $(objtree)/$(obj)/randomize_layout_seed.h: FORCE $(call if_changed,create_randomize_layout_seed) targets += randomize_layout_seed.h randomize_layout_hash.h

Build rules for plugins

No extra code is needed for single-file plugins.

For multi-file plugins, use *-objs syntax to list the objects.

If the plugin foo.so is compiled from foo.c and foo2.c, you can do:

foo-objs := foo.o foo2.o

always-y += $(GCC_PLUGIN)

GCC_PLUGINS_DIR = $(shell $(HOSTCXX) -print-file-name=plugin)

plugin_cxxflags = -Wp,-MMD,$(depfile) $(KBUILD_HOSTCXXFLAGS) -fPIC
-include $(srctree)/include/linux/compiler-version.h
-I $(GCC_PLUGINS_DIR)/include -I $(obj) -std=gnu++11
-fno-rtti -fno-exceptions -fasynchronous-unwind-tables
-ggdb -Wno-narrowing -Wno-unused-variable
-Wno-format-diag

plugin_ldflags = -shared

plugin-single := $(foreach m, $(GCC_PLUGIN), $(if $($(m:%.so=%-objs)),,$(m))) plugin-multi := $(filter-out $(plugin-single), $(GCC_PLUGIN)) plugin-objs := $(sort $(foreach m, $(plugin-multi), $($(m:%.so=%-objs))))

targets += $(plugin-single) $(plugin-multi) $(plugin-objs) clean-files += *.so

plugin-single := $(addprefix $(obj)/, $(plugin-single)) plugin-multi := $(addprefix $(obj)/, $(plugin-multi)) plugin-objs := $(addprefix $(obj)/, $(plugin-objs))

quiet_cmd_plugin_cxx_so_c = HOSTCXX $@ cmd_plugin_cxx_so_c = $(HOSTCXX) $(plugin_cxxflags) $(plugin_ldflags) -o $@ $<

$(plugin-single): $(obj)/%.so: $(src)/%.c FORCE $(call if_changed_dep,plugin_cxx_so_c)

quiet_cmd_plugin_ld_so_o = HOSTLD $@ cmd_plugin_ld_so_o = $(HOSTCXX) $(plugin_ldflags) -o $@
$(addprefix $(obj)/, $($(target-stem)-objs))

$(plugin-multi): FORCE $(call if_changed,plugin_ld_so_o) $(foreach m, $(notdir $(plugin-multi)), $(eval $(obj)/$m: $(addprefix $(obj)/, $($(m:%.so=%-objs)))))

quiet_cmd_plugin_cxx_o_c = HOSTCXX $@ cmd_plugin_cxx_o_c = $(HOSTCXX) $(plugin_cxxflags) -c -o $@ $<

$(plugin-objs): $(obj)/%.o: $(src)/%.c FORCE $(call if_changed_dep,plugin_cxx_o_c)