Skip to content

Commit 0ab8ed1

Browse files
berrangestefanhaRH
authored andcommitted
trace: switch to modular code generation for sub-directories
Introduce rules in the top level Makefile that are able to generate trace.[ch] files in every subdirectory which has a trace-events file. The top level directory is handled specially, so instead of creating trace.h, it creates trace-root.h. This allows sub-directories to include the top level trace-root.h file, without ambiguity wrt to the trace.g file in the current sub-dir. Reviewed-by: Stefan Hajnoczi <[email protected]> Signed-off-by: Daniel P. Berrange <[email protected]> Message-id: [email protected] Signed-off-by: Stefan Hajnoczi <[email protected]>
1 parent 2098c56 commit 0ab8ed1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+283
-209
lines changed

.gitignore

+16-6
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,12 @@
66
/config.status
77
/config-temp
88
/trace-events-all
9-
/trace/generated-tracers.h
10-
/trace/generated-tracers.c
11-
/trace/generated-tracers-dtrace.h
12-
/trace/generated-tracers.dtrace
139
/trace/generated-events.h
1410
/trace/generated-events.c
1511
/trace/generated-helpers-wrappers.h
1612
/trace/generated-helpers.h
1713
/trace/generated-helpers.c
1814
/trace/generated-tcg-tracers.h
19-
/trace/generated-ust-provider.h
20-
/trace/generated-ust.c
2115
/ui/shader/texture-blit-frag.h
2216
/ui/shader/texture-blit-vert.h
2317
*-timestamp
@@ -120,3 +114,19 @@ tags
120114
TAGS
121115
docker-src.*
122116
*~
117+
trace.h
118+
trace.c
119+
trace-ust.h
120+
trace-ust.h
121+
trace-dtrace.h
122+
trace-dtrace.dtrace
123+
trace-root.h
124+
trace-root.c
125+
trace-ust-root.h
126+
trace-ust-root.h
127+
trace-ust-all.h
128+
trace-ust-all.c
129+
trace-dtrace-root.h
130+
trace-dtrace-root.dtrace
131+
trace-ust-all.h
132+
trace-ust-all.c

Makefile

+137-19
Original file line numberDiff line numberDiff line change
@@ -56,25 +56,136 @@ GENERATED_SOURCES += qmp-marshal.c qapi-types.c qapi-visit.c qapi-event.c
5656
GENERATED_HEADERS += qmp-introspect.h
5757
GENERATED_SOURCES += qmp-introspect.c
5858

59-
GENERATED_HEADERS += trace/generated-tracers.h
60-
ifeq ($(findstring dtrace,$(TRACE_BACKENDS)),dtrace)
61-
GENERATED_HEADERS += trace/generated-tracers-dtrace.h
62-
endif
63-
GENERATED_SOURCES += trace/generated-tracers.c
64-
6559
GENERATED_HEADERS += trace/generated-tcg-tracers.h
6660

6761
GENERATED_HEADERS += trace/generated-helpers-wrappers.h
6862
GENERATED_HEADERS += trace/generated-helpers.h
6963
GENERATED_SOURCES += trace/generated-helpers.c
7064

71-
ifeq ($(findstring ust,$(TRACE_BACKENDS)),ust)
72-
GENERATED_HEADERS += trace/generated-ust-provider.h
73-
GENERATED_SOURCES += trace/generated-ust.c
65+
ifdef CONFIG_TRACE_UST
66+
GENERATED_HEADERS += trace-ust-all.h
67+
GENERATED_SOURCES += trace-ust-all.c
7468
endif
7569

7670
GENERATED_HEADERS += module_block.h
7771

72+
TRACE_HEADERS = trace-root.h $(trace-events-subdirs:%=%/trace.h)
73+
TRACE_SOURCES = trace-root.c $(trace-events-subdirs:%=%/trace.c)
74+
TRACE_DTRACE =
75+
ifdef CONFIG_TRACE_DTRACE
76+
TRACE_HEADERS += trace-dtrace-root.h $(trace-events-subdirs:%=%/trace-dtrace.h)
77+
TRACE_DTRACE += trace-dtrace-root.dtrace $(trace-events-subdirs:%=%/trace-dtrace.dtrace)
78+
endif
79+
ifdef CONFIG_TRACE_UST
80+
TRACE_HEADERS += trace-ust-root.h $(trace-events-subdirs:%=%/trace-ust.h)
81+
endif
82+
83+
GENERATED_HEADERS += $(TRACE_HEADERS)
84+
GENERATED_SOURCES += $(TRACE_SOURCES)
85+
86+
trace-group-name = $(shell dirname $1 | sed -e 's/[^a-zA-Z0-9]/_/g')
87+
88+
%/trace.h: %/trace.h-timestamp
89+
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
90+
%/trace.h-timestamp: $(SRC_PATH)/%/trace-events $(tracetool-y)
91+
$(call quiet-command,$(TRACETOOL) \
92+
--group=$(call trace-group-name,$@) \
93+
--format=h \
94+
--backends=$(TRACE_BACKENDS) \
95+
$< > $@,"GEN","$(@:%-timestamp=%)")
96+
97+
%/trace.c: %/trace.c-timestamp
98+
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
99+
%/trace.c-timestamp: $(SRC_PATH)/%/trace-events $(tracetool-y)
100+
$(call quiet-command,$(TRACETOOL) \
101+
--group=$(call trace-group-name,$@) \
102+
--format=c \
103+
--backends=$(TRACE_BACKENDS) \
104+
$< > $@,"GEN","$(@:%-timestamp=%)")
105+
106+
%/trace-ust.h: %/trace-ust.h-timestamp
107+
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
108+
%/trace-ust.h-timestamp: $(SRC_PATH)/%/trace-events $(tracetool-y)
109+
$(call quiet-command,$(TRACETOOL) \
110+
--group=$(call trace-group-name,$@) \
111+
--format=ust-events-h \
112+
--backends=$(TRACE_BACKENDS) \
113+
$< > $@,"GEN","$(@:%-timestamp=%)")
114+
115+
%/trace-dtrace.dtrace: %/trace-dtrace.dtrace-timestamp
116+
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
117+
%/trace-dtrace.dtrace-timestamp: $(SRC_PATH)/%/trace-events $(BUILD_DIR)/config-host.mak $(tracetool-y)
118+
$(call quiet-command,$(TRACETOOL) \
119+
--group=$(call trace-group-name,$@) \
120+
--format=d \
121+
--backends=$(TRACE_BACKENDS) \
122+
$< > $@,"GEN","$(@:%-timestamp=%)")
123+
124+
%/trace-dtrace.h: %/trace-dtrace.dtrace $(tracetool-y)
125+
$(call quiet-command,dtrace -o $@ -h -s $<, "GEN","$@")
126+
127+
%/trace-dtrace.o: %/trace-dtrace.dtrace $(tracetool-y)
128+
129+
130+
trace-root.h: trace-root.h-timestamp
131+
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
132+
trace-root.h-timestamp: $(SRC_PATH)/trace-events $(tracetool-y)
133+
$(call quiet-command,$(TRACETOOL) \
134+
--group=root \
135+
--format=h \
136+
--backends=$(TRACE_BACKENDS) \
137+
$< > $@,"GEN","$(@:%-timestamp=%)")
138+
139+
trace-root.c: trace-root.c-timestamp
140+
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
141+
trace-root.c-timestamp: $(SRC_PATH)/trace-events $(tracetool-y)
142+
$(call quiet-command,$(TRACETOOL) \
143+
--group=root \
144+
--format=c \
145+
--backends=$(TRACE_BACKENDS) \
146+
$< > $@,"GEN","$(@:%-timestamp=%)")
147+
148+
trace-ust-root.h: trace-ust-root.h-timestamp
149+
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
150+
trace-ust-root.h-timestamp: $(SRC_PATH)/trace-events $(tracetool-y)
151+
$(call quiet-command,$(TRACETOOL) \
152+
--group=root \
153+
--format=ust-events-h \
154+
--backends=$(TRACE_BACKENDS) \
155+
$< > $@,"GEN","$(@:%-timestamp=%)")
156+
157+
trace-ust-all.h: trace-ust-all.h-timestamp
158+
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
159+
trace-ust-all.h-timestamp: $(trace-events-files) $(tracetool-y)
160+
$(call quiet-command,$(TRACETOOL) \
161+
--group=all \
162+
--format=ust-events-h \
163+
--backends=$(TRACE_BACKENDS) \
164+
$(trace-events-files) > $@,"GEN","$(@:%-timestamp=%)")
165+
166+
trace-ust-all.c: trace-ust-all.c-timestamp
167+
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
168+
trace-ust-all.c-timestamp: $(trace-events-files) $(tracetool-y)
169+
$(call quiet-command,$(TRACETOOL) \
170+
--group=all \
171+
--format=ust-events-c \
172+
--backends=$(TRACE_BACKENDS) \
173+
$(trace-events-files) > $@,"GEN","$(@:%-timestamp=%)")
174+
175+
trace-dtrace-root.dtrace: trace-dtrace-root.dtrace-timestamp
176+
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
177+
trace-dtrace-root.dtrace-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak $(tracetool-y)
178+
$(call quiet-command,$(TRACETOOL) \
179+
--group=root \
180+
--format=d \
181+
--backends=$(TRACE_BACKENDS) \
182+
$< > $@,"GEN","$(@:%-timestamp=%)")
183+
184+
trace-dtrace-root.h: trace-dtrace-root.dtrace
185+
$(call quiet-command,dtrace -o $@ -h -s $<, "GEN","$@")
186+
187+
trace-dtrace-root.o: trace-dtrace-root.dtrace
188+
78189
# Don't try to regenerate Makefile or configure
79190
# We don't generate any of them
80191
Makefile: ;
@@ -160,7 +271,8 @@ dummy := $(call unnest-vars,, \
160271
qom-obj-y \
161272
io-obj-y \
162273
common-obj-y \
163-
common-obj-m)
274+
common-obj-m \
275+
trace-obj-y)
164276

165277
ifneq ($(wildcard config-host.mak),)
166278
include $(SRC_PATH)/tests/Makefile.include
@@ -223,7 +335,7 @@ subdir-dtc:dtc/libfdt dtc/tests
223335
dtc/%:
224336
mkdir -p $@
225337

226-
$(SUBDIR_RULES): libqemuutil.a libqemustub.a $(common-obj-y) $(qom-obj-y) $(crypto-aes-obj-$(CONFIG_USER_ONLY))
338+
$(SUBDIR_RULES): libqemuutil.a libqemustub.a $(common-obj-y) $(qom-obj-y) $(crypto-aes-obj-$(CONFIG_USER_ONLY)) $(trace-obj-y)
227339

228340
ROMSUBDIR_RULES=$(patsubst %,romsubdir-%, $(ROMS))
229341
# Only keep -O and -g cflags
@@ -247,15 +359,17 @@ libqemuutil.a: $(util-obj-y)
247359

248360
######################################################################
249361

362+
COMMON_LDADDS = $(trace-obj-y) libqemuutil.a libqemustub.a
363+
250364
qemu-img.o: qemu-img-cmds.h
251365

252-
qemu-img$(EXESUF): qemu-img.o $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) libqemuutil.a libqemustub.a
253-
qemu-nbd$(EXESUF): qemu-nbd.o $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) libqemuutil.a libqemustub.a
254-
qemu-io$(EXESUF): qemu-io.o $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) libqemuutil.a libqemustub.a
366+
qemu-img$(EXESUF): qemu-img.o $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
367+
qemu-nbd$(EXESUF): qemu-nbd.o $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
368+
qemu-io$(EXESUF): qemu-io.o $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
255369

256-
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o libqemuutil.a libqemustub.a
370+
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o $(COMMON_LDADDS)
257371

258-
fsdev/virtfs-proxy-helper$(EXESUF): fsdev/virtfs-proxy-helper.o fsdev/9p-marshal.o fsdev/9p-iov-marshal.o libqemuutil.a libqemustub.a
372+
fsdev/virtfs-proxy-helper$(EXESUF): fsdev/virtfs-proxy-helper.o fsdev/9p-marshal.o fsdev/9p-iov-marshal.o $(COMMON_LDADDS)
259373
fsdev/virtfs-proxy-helper$(EXESUF): LIBS += -lcap
260374

261375
qemu-img-cmds.h: $(SRC_PATH)/qemu-img-cmds.hx $(SRC_PATH)/scripts/hxtool
@@ -320,7 +434,7 @@ $(qapi-modules) $(SRC_PATH)/scripts/qapi-introspect.py $(qapi-py)
320434
QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qmp-commands.h)
321435
$(qga-obj-y) qemu-ga.o: $(QGALIB_GEN)
322436

323-
qemu-ga$(EXESUF): $(qga-obj-y) libqemuutil.a libqemustub.a
437+
qemu-ga$(EXESUF): $(qga-obj-y) $(COMMON_LDADDS)
324438
$(call LINK, $^)
325439

326440
ifdef QEMU_GA_MSI_ENABLED
@@ -345,9 +459,9 @@ ifneq ($(EXESUF),)
345459
qemu-ga: qemu-ga$(EXESUF) $(QGA_VSS_PROVIDER) $(QEMU_GA_MSI)
346460
endif
347461

348-
ivshmem-client$(EXESUF): $(ivshmem-client-obj-y) libqemuutil.a libqemustub.a
462+
ivshmem-client$(EXESUF): $(ivshmem-client-obj-y) $(COMMON_LDADDS)
349463
$(call LINK, $^)
350-
ivshmem-server$(EXESUF): $(ivshmem-server-obj-y) libqemuutil.a libqemustub.a
464+
ivshmem-server$(EXESUF): $(ivshmem-server-obj-y) $(COMMON_LDADDS)
351465
$(call LINK, $^)
352466

353467
module_block.h: $(SRC_PATH)/scripts/modules/module_block.py config-host.mak
@@ -664,6 +778,10 @@ ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fa
664778
Makefile: $(GENERATED_HEADERS)
665779
endif
666780

781+
.SECONDARY: $(TRACE_HEADERS) $(TRACE_HEADERS:%=%-timestamp) \
782+
$(TRACE_SOURCES) $(TRACE_SOURCES:%=%-timestamp) \
783+
$(TRACE_DTRACE) $(TRACE_DTRACE:%=%-timestamp)
784+
667785
# Include automatically generated dependency files
668786
# Dependencies in Makefile.objs files come from our recursive subdir rules
669787
-include $(wildcard *.d tests/*.d)

Makefile.objs

+55-47
Original file line numberDiff line numberDiff line change
@@ -118,50 +118,58 @@ ivshmem-server-obj-y = contrib/ivshmem-server/
118118
libvhost-user-obj-y = contrib/libvhost-user/
119119

120120
######################################################################
121-
trace-events-y = trace-events
122-
trace-events-y += util/trace-events
123-
trace-events-y += crypto/trace-events
124-
trace-events-y += io/trace-events
125-
trace-events-y += migration/trace-events
126-
trace-events-y += block/trace-events
127-
trace-events-y += hw/block/trace-events
128-
trace-events-y += hw/block/dataplane/trace-events
129-
trace-events-y += hw/char/trace-events
130-
trace-events-y += hw/intc/trace-events
131-
trace-events-y += hw/net/trace-events
132-
trace-events-y += hw/virtio/trace-events
133-
trace-events-y += hw/audio/trace-events
134-
trace-events-y += hw/misc/trace-events
135-
trace-events-y += hw/usb/trace-events
136-
trace-events-y += hw/scsi/trace-events
137-
trace-events-y += hw/nvram/trace-events
138-
trace-events-y += hw/display/trace-events
139-
trace-events-y += hw/input/trace-events
140-
trace-events-y += hw/timer/trace-events
141-
trace-events-y += hw/dma/trace-events
142-
trace-events-y += hw/sparc/trace-events
143-
trace-events-y += hw/sd/trace-events
144-
trace-events-y += hw/isa/trace-events
145-
trace-events-y += hw/mem/trace-events
146-
trace-events-y += hw/i386/trace-events
147-
trace-events-y += hw/i386/xen/trace-events
148-
trace-events-y += hw/9pfs/trace-events
149-
trace-events-y += hw/ppc/trace-events
150-
trace-events-y += hw/pci/trace-events
151-
trace-events-y += hw/s390x/trace-events
152-
trace-events-y += hw/vfio/trace-events
153-
trace-events-y += hw/acpi/trace-events
154-
trace-events-y += hw/arm/trace-events
155-
trace-events-y += hw/alpha/trace-events
156-
trace-events-y += hw/xen/trace-events
157-
trace-events-y += ui/trace-events
158-
trace-events-y += audio/trace-events
159-
trace-events-y += net/trace-events
160-
trace-events-y += target/arm/trace-events
161-
trace-events-y += target/i386/trace-events
162-
trace-events-y += target/sparc/trace-events
163-
trace-events-y += target/s390x/trace-events
164-
trace-events-y += target/ppc/trace-events
165-
trace-events-y += qom/trace-events
166-
trace-events-y += linux-user/trace-events
167-
trace-events-y += qapi/trace-events
121+
trace-events-subdirs =
122+
trace-events-subdirs += util
123+
trace-events-subdirs += crypto
124+
trace-events-subdirs += io
125+
trace-events-subdirs += migration
126+
trace-events-subdirs += block
127+
trace-events-subdirs += hw/block
128+
trace-events-subdirs += hw/block/dataplane
129+
trace-events-subdirs += hw/char
130+
trace-events-subdirs += hw/intc
131+
trace-events-subdirs += hw/net
132+
trace-events-subdirs += hw/virtio
133+
trace-events-subdirs += hw/audio
134+
trace-events-subdirs += hw/misc
135+
trace-events-subdirs += hw/usb
136+
trace-events-subdirs += hw/scsi
137+
trace-events-subdirs += hw/nvram
138+
trace-events-subdirs += hw/display
139+
trace-events-subdirs += hw/input
140+
trace-events-subdirs += hw/timer
141+
trace-events-subdirs += hw/dma
142+
trace-events-subdirs += hw/sparc
143+
trace-events-subdirs += hw/sd
144+
trace-events-subdirs += hw/isa
145+
trace-events-subdirs += hw/mem
146+
trace-events-subdirs += hw/i386
147+
trace-events-subdirs += hw/i386/xen
148+
trace-events-subdirs += hw/9pfs
149+
trace-events-subdirs += hw/ppc
150+
trace-events-subdirs += hw/pci
151+
trace-events-subdirs += hw/s390x
152+
trace-events-subdirs += hw/vfio
153+
trace-events-subdirs += hw/acpi
154+
trace-events-subdirs += hw/arm
155+
trace-events-subdirs += hw/alpha
156+
trace-events-subdirs += hw/xen
157+
trace-events-subdirs += ui
158+
trace-events-subdirs += audio
159+
trace-events-subdirs += net
160+
trace-events-subdirs += target/arm
161+
trace-events-subdirs += target/i386
162+
trace-events-subdirs += target/sparc
163+
trace-events-subdirs += target/s390x
164+
trace-events-subdirs += target/ppc
165+
trace-events-subdirs += qom
166+
trace-events-subdirs += linux-user
167+
trace-events-subdirs += qapi
168+
169+
trace-events-files = $(SRC_PATH)/trace-events $(trace-events-subdirs:%=$(SRC_PATH)/%/trace-events)
170+
171+
trace-obj-y = trace-root.o
172+
trace-obj-y += $(trace-events-subdirs:%=%/trace.o)
173+
trace-obj-$(CONFIG_TRACE_UST) += trace-ust-all.o
174+
trace-obj-$(CONFIG_TRACE_DTRACE) += trace-dtrace-root.o
175+
trace-obj-$(CONFIG_TRACE_DTRACE) += $(trace-events-subdirs:%=%/trace-dtrace.o)

Makefile.target

+5-2
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,8 @@ dummy := $(call unnest-vars,.., \
186186
qom-obj-y \
187187
io-obj-y \
188188
common-obj-y \
189-
common-obj-m)
189+
common-obj-m \
190+
trace-obj-y)
190191
target-obj-y := $(target-obj-y-save)
191192
all-obj-y += $(common-obj-y)
192193
all-obj-y += $(target-obj-y)
@@ -198,8 +199,10 @@ all-obj-$(CONFIG_SOFTMMU) += $(io-obj-y)
198199

199200
$(QEMU_PROG_BUILD): config-devices.mak
200201

202+
COMMON_LDADDS = $(trace-obj-y) ../libqemuutil.a ../libqemustub.a
203+
201204
# build either PROG or PROGW
202-
$(QEMU_PROG_BUILD): $(all-obj-y) ../libqemuutil.a ../libqemustub.a
205+
$(QEMU_PROG_BUILD): $(all-obj-y) $(COMMON_LDADDS)
203206
$(call LINK, $(filter-out %.mak, $^))
204207
ifdef CONFIG_DARWIN
205208
$(call quiet-command,Rez -append $(SRC_PATH)/pc-bios/qemu.rsrc -o $@,"REZ","$(TARGET_DIR)$@")

aio-posix.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
#include "qemu/rcu_queue.h"
2020
#include "qemu/sockets.h"
2121
#include "qemu/cutils.h"
22-
#include "trace.h"
22+
#include "trace-root.h"
2323
#ifdef CONFIG_EPOLL_CREATE1
2424
#include <sys/epoll.h>
2525
#endif

0 commit comments

Comments
 (0)