Message ID | 20181005154910.3099-17-alex.bennee@linaro.org |
---|---|
State | New |
Headers | show |
Series | Trace updates and plugin RFC | expand |
On 10/5/18 8:49 AM, Alex Bennée wrote: > +GLIB_CFLAGS = $(shell pkg-config --cflags glib-2.0) > +CFLAGS = -I$(QEMU_SRC)/include/plugins $(GLIB_CFLAGS) -fno-PIE -fPIC -O3 -g > +LDFLAGS = $(shell pkg-config --libs glib-2.0) -shared I'm not keen on defaulting to -O3. I'd prefer if we passed up the flags from top-level, but I know you're also trying to support out-of-tree builds. Perhaps CFLAGS ?= -O2 -g QEMU_CFLAGS = $(CFLAGS) $(GLIB_CFLAGS) -I$(QEMU_SRC)/... -fno-PIE -fPIC > +SRC = $(wildcard *.c) > +PLUGINS = $(addprefix $(BUILD_DIR)/,$(SRC:.c=.so)) > + > +$(BUILD_DIR)/%.so: %.c > + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< > + > +all: $(PLUGINS) Do you really want one plugin per source file rather than one plugin per directory? I think the latter makes more sense... And of course you know the second thing people are going to want is to write these plugins in C++... r~
Richard Henderson <richard.henderson@linaro.org> writes: > On 10/5/18 8:49 AM, Alex Bennée wrote: >> +GLIB_CFLAGS = $(shell pkg-config --cflags glib-2.0) >> +CFLAGS = -I$(QEMU_SRC)/include/plugins $(GLIB_CFLAGS) -fno-PIE -fPIC -O3 -g >> +LDFLAGS = $(shell pkg-config --libs glib-2.0) -shared > > I'm not keen on defaulting to -O3. Fair enough... I'll drop it down if not set... > I'd prefer if we passed up the flags from top-level, but I know you're also > trying to support out-of-tree builds. > > Perhaps > > CFLAGS ?= -O2 -g > QEMU_CFLAGS = $(CFLAGS) $(GLIB_CFLAGS) -I$(QEMU_SRC)/... -fno-PIE -fPIC > >> +SRC = $(wildcard *.c) >> +PLUGINS = $(addprefix $(BUILD_DIR)/,$(SRC:.c=.so)) >> + >> +$(BUILD_DIR)/%.so: %.c >> + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< >> + >> +all: $(PLUGINS) > > Do you really want one plugin per source file rather than one plugin per > directory? I think the latter makes more sense... > > And of course you know the second thing people are going to want is to write > these plugins in C++... > > > r~ -- Alex Bennée
diff --git a/Makefile b/Makefile index 1144d6e3ba..e04d1c5124 100644 --- a/Makefile +++ b/Makefile @@ -438,7 +438,7 @@ dummy := $(call unnest-vars,, \ include $(SRC_PATH)/tests/Makefile.include -all: $(DOCS) $(TOOLS) $(HELPERS-y) recurse-all modules +all: $(DOCS) $(TOOLS) $(HELPERS-y) recurse-all modules plugins qemu-version.h: FORCE $(call quiet-command, \ @@ -1091,6 +1091,9 @@ help: @echo ' all - Build all' ifdef CONFIG_MODULES @echo ' modules - Build all modules' +endif +ifdef CONFIG_TRACE_PLUGIN + @echo ' plugins - Build all plugins' endif @echo ' dir/file.o - Build specified target only' @echo ' install - Install QEMU, documentation and tools' diff --git a/trace/Makefile.objs b/trace/Makefile.objs index 4977f654a5..4f62022595 100644 --- a/trace/Makefile.objs +++ b/trace/Makefile.objs @@ -58,3 +58,27 @@ util-obj-$(CONFIG_TRACE_PLUGIN) += plugins.o util-obj-y += control.o target-obj-y += control-target.o util-obj-y += qmp.o + +###################################################################### +# Plugins +ifdef CONFIG_TRACE_PLUGIN + +PLUGINS=$(dir $(wildcard $(SRC_PATH)/trace/plugins/*/.)) + +.PHONY: plugins $(PLUGINS) + +plugins: $(PLUGINS) + $(info built all plugins $(PLUGINS)) + +$(PLUGINS): + $(call quiet-command, \ + (cd $@ && $(MAKE) -f $(SRC_PATH)/trace/plugins/Makefile.plugins \ + QEMU_SRC=$(SRC_PATH) \ + BUILD_DIR=$(BUILD_DIR)/trace/plugins), \ + "PLUGIN","in $@") + +else + +plugins: + +endif diff --git a/trace/plugins/Makefile.plugins b/trace/plugins/Makefile.plugins new file mode 100644 index 0000000000..0056d91c74 --- /dev/null +++ b/trace/plugins/Makefile.plugins @@ -0,0 +1,32 @@ +# -*- Mode: makefile -*- +# +# QEMU plugins +# +# This Makefile is used to build plugins for QEMU. Unlike the rest of +# the object files we build we don't have visibility of QEMU's +# internals. When called from the main makefile we build plugins into +# BUILD_DIR/plugins otherwise where ever the Makefile was called from. +# QEMU_SRC +# + +BUILD_DIR ?= $(CURDIR) +CC ?= cc + +ifndef QEMU_SRC +$(error need to define QEMU_SRC for the build) +endif + +GLIB_CFLAGS = $(shell pkg-config --cflags glib-2.0) +CFLAGS = -I$(QEMU_SRC)/include/plugins $(GLIB_CFLAGS) -fno-PIE -fPIC -O3 -g +LDFLAGS = $(shell pkg-config --libs glib-2.0) -shared + +SRC = $(wildcard *.c) +PLUGINS = $(addprefix $(BUILD_DIR)/,$(SRC:.c=.so)) + +$(BUILD_DIR)/%.so: %.c + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< + +all: $(PLUGINS) + +clean: + rm -f $(PLUGIN_SO) $(PLUGIN_OBJ)
This allows us to build any bundled plugins in the source tree. Out-of-tree builds can call Makefile.plugins to build in their own source tree: make -f $(QEMU_PATH)/trace/plugins/Makefile.plugins QEMU_SRC=$(QEMU_PATH) Signed-off-by: Alex Bennée <alex.bennee@linaro.org> --- Makefile | 5 ++++- trace/Makefile.objs | 24 ++++++++++++++++++++++++ trace/plugins/Makefile.plugins | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 trace/plugins/Makefile.plugins -- 2.17.1