forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
kbuild: move host .so build rules to scripts/gcc-plugins/Makefile
The host shared library rules are currently implemented in scripts/Makefile.host, but actually GCC-plugin is the only user of them. (The VDSO .so files are built for the target by different build rules) Hence, they do not need to be treewide available. Move all the relevant build rules to scripts/gcc-plugins/Makefile. I also optimized the build steps so *.so is directly built from .c because every upstream plugin is compiled from a single source file. I am still keeping the multi-file plugin support, which Kees Cook mentioned might be needed by out-of-tree plugins. (https://lkml.org/lkml/2019/1/11/1107) If the plugin, foo.so, is compiled from two files foo.c and foo2.c, then you can do like follows: foo-objs := foo.o foo2.o Single-file plugins do not need the *-objs notation. Signed-off-by: Masahiro Yamada <[email protected]> Acked-by: Kees Cook <[email protected]>
- Loading branch information
Showing
4 changed files
with
55 additions
and
43 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,61 @@ | ||
# SPDX-License-Identifier: GPL-2.0 | ||
GCC_PLUGINS_DIR := $(shell $(CC) -print-file-name=plugin) | ||
|
||
HOST_EXTRACXXFLAGS += -I$(GCC_PLUGINS_DIR)/include -I$(src) -std=gnu++98 -fno-rtti | ||
HOST_EXTRACXXFLAGS += -fno-exceptions -fasynchronous-unwind-tables -ggdb | ||
HOST_EXTRACXXFLAGS += -Wno-narrowing -Wno-unused-variable -Wno-c++11-compat | ||
HOST_EXTRACXXFLAGS += -Wno-format-diag | ||
|
||
$(obj)/randomize_layout_plugin.o: $(objtree)/$(obj)/randomize_layout_seed.h | ||
$(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 | ||
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) | ||
|
||
hostcxxlibs-y := $(GCC_PLUGIN) | ||
always-y := $(hostcxxlibs-y) | ||
GCC_PLUGINS_DIR = $(shell $(CC) -print-file-name=plugin) | ||
|
||
$(foreach p,$(hostcxxlibs-y:%.so=%),$(eval $(p)-objs := $(p).o)) | ||
plugin_cxxflags = -Wp,-MMD,$(depfile) $(KBUILD_HOSTCXXFLAGS) -fPIC \ | ||
-I $(GCC_PLUGINS_DIR)/include -I $(obj) -std=gnu++98 \ | ||
-fno-rtti -fno-exceptions -fasynchronous-unwind-tables \ | ||
-ggdb -Wno-narrowing -Wno-unused-variable -Wno-c++11-compat \ | ||
-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) |