libqemuutil, qapi, trace: convert to meson
This shows how to do some "computations" in meson.build using its array and dictionary data structures, and also a basic usage of the sourceset module for conditional compilation. Notice the new "if have_system" part of util/meson.build, which fixes a bug in the old build system was buggy: util/dbus.c was built even for non-softmmu builds, but the dependency on -lgio was lost when the linking was done through libqemuutil.a. Because all of its users required gio otherwise, the bug was hidden. Meson instead propagates libqemuutil's dependencies down to its users, and shows the problem. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
245dac4a1b
commit
a81df1b68b
228
Makefile
228
Makefile
@ -137,184 +137,60 @@ FULL_VERSION := $(if $(QEMU_PKGVERSION),$(VERSION) ($(QEMU_PKGVERSION)),$(VERSIO
|
|||||||
|
|
||||||
generated-files-y = qemu-version.h config-host.h qemu-options.def
|
generated-files-y = qemu-version.h config-host.h qemu-options.def
|
||||||
|
|
||||||
GENERATED_QAPI_FILES = qapi/qapi-builtin-types.h qapi/qapi-builtin-types.c
|
|
||||||
GENERATED_QAPI_FILES += qapi/qapi-types.h qapi/qapi-types.c
|
|
||||||
GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-types-%.h)
|
|
||||||
GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-types-%.c)
|
|
||||||
GENERATED_QAPI_FILES += qapi/qapi-builtin-visit.h qapi/qapi-builtin-visit.c
|
|
||||||
GENERATED_QAPI_FILES += qapi/qapi-visit.h qapi/qapi-visit.c
|
|
||||||
GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-visit-%.h)
|
|
||||||
GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-visit-%.c)
|
|
||||||
GENERATED_QAPI_FILES += qapi/qapi-init-commands.h qapi/qapi-init-commands.c
|
|
||||||
GENERATED_QAPI_FILES += qapi/qapi-commands.h qapi/qapi-commands.c
|
|
||||||
GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-commands-%.h)
|
|
||||||
GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-commands-%.c)
|
|
||||||
GENERATED_QAPI_FILES += qapi/qapi-emit-events.h qapi/qapi-emit-events.c
|
|
||||||
GENERATED_QAPI_FILES += qapi/qapi-events.h qapi/qapi-events.c
|
|
||||||
GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-events-%.h)
|
|
||||||
GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-events-%.c)
|
|
||||||
GENERATED_QAPI_FILES += qapi/qapi-introspect.c qapi/qapi-introspect.h
|
|
||||||
GENERATED_QAPI_FILES += qapi/qapi-doc.texi
|
|
||||||
|
|
||||||
# The following list considers only the storage daemon main module. All other
|
|
||||||
# modules are currently shared with the main schema, so we don't actually
|
|
||||||
# generate additional files.
|
|
||||||
|
|
||||||
GENERATED_STORAGE_DAEMON_QAPI_FILES = storage-daemon/qapi/qapi-commands.h
|
|
||||||
GENERATED_STORAGE_DAEMON_QAPI_FILES += storage-daemon/qapi/qapi-commands.c
|
|
||||||
GENERATED_STORAGE_DAEMON_QAPI_FILES += storage-daemon/qapi/qapi-emit-events.h
|
|
||||||
GENERATED_STORAGE_DAEMON_QAPI_FILES += storage-daemon/qapi/qapi-emit-events.c
|
|
||||||
GENERATED_STORAGE_DAEMON_QAPI_FILES += storage-daemon/qapi/qapi-events.h
|
|
||||||
GENERATED_STORAGE_DAEMON_QAPI_FILES += storage-daemon/qapi/qapi-events.c
|
|
||||||
GENERATED_STORAGE_DAEMON_QAPI_FILES += storage-daemon/qapi/qapi-init-commands.h
|
|
||||||
GENERATED_STORAGE_DAEMON_QAPI_FILES += storage-daemon/qapi/qapi-init-commands.c
|
|
||||||
GENERATED_STORAGE_DAEMON_QAPI_FILES += storage-daemon/qapi/qapi-introspect.h
|
|
||||||
GENERATED_STORAGE_DAEMON_QAPI_FILES += storage-daemon/qapi/qapi-introspect.c
|
|
||||||
GENERATED_STORAGE_DAEMON_QAPI_FILES += storage-daemon/qapi/qapi-types.h
|
|
||||||
GENERATED_STORAGE_DAEMON_QAPI_FILES += storage-daemon/qapi/qapi-types.c
|
|
||||||
GENERATED_STORAGE_DAEMON_QAPI_FILES += storage-daemon/qapi/qapi-visit.h
|
|
||||||
GENERATED_STORAGE_DAEMON_QAPI_FILES += storage-daemon/qapi/qapi-visit.c
|
|
||||||
GENERATED_STORAGE_DAEMON_QAPI_FILES += storage-daemon/qapi/qapi-doc.texi
|
|
||||||
|
|
||||||
generated-files-y += $(GENERATED_QAPI_FILES)
|
|
||||||
generated-files-y += $(GENERATED_STORAGE_DAEMON_QAPI_FILES)
|
|
||||||
|
|
||||||
generated-files-y += trace/generated-tcg-tracers.h
|
generated-files-y += trace/generated-tcg-tracers.h
|
||||||
|
|
||||||
generated-files-y += trace/generated-helpers-wrappers.h
|
generated-files-y += trace/generated-helpers-wrappers.h
|
||||||
generated-files-y += trace/generated-helpers.h
|
generated-files-y += trace/generated-helpers.h
|
||||||
generated-files-y += trace/generated-helpers.c
|
generated-files-y += trace/generated-helpers.c
|
||||||
|
|
||||||
generated-files-$(CONFIG_TRACE_UST) += trace-ust-all.h
|
|
||||||
generated-files-$(CONFIG_TRACE_UST) += trace-ust-all.c
|
|
||||||
|
|
||||||
generated-files-y += module_block.h
|
generated-files-y += module_block.h
|
||||||
|
|
||||||
TRACE_HEADERS = trace/trace-root.h
|
|
||||||
TRACE_SOURCES = trace/trace-root.c
|
|
||||||
TRACE_DTRACE =
|
|
||||||
ifdef CONFIG_TRACE_DTRACE
|
|
||||||
TRACE_HEADERS += trace-dtrace-root.h $(trace-events-subdirs:%=%/trace-dtrace.h)
|
|
||||||
TRACE_DTRACE += trace-dtrace-root.dtrace $(trace-events-subdirs:%=%/trace-dtrace.dtrace)
|
|
||||||
endif
|
|
||||||
ifdef CONFIG_TRACE_UST
|
|
||||||
TRACE_HEADERS += trace-ust-root.h $(trace-events-subdirs:%=%/trace-ust.h)
|
|
||||||
endif
|
|
||||||
|
|
||||||
generated-files-y += $(BUILD_DIR)/trace-events-all
|
|
||||||
generated-files-y += .git-submodule-status
|
generated-files-y += .git-submodule-status
|
||||||
|
|
||||||
trace-group-name = $(shell dirname $1 | sed -e 's/[^a-zA-Z0-9]/_/g')
|
|
||||||
trace-group-suffix = $(shell echo $1 | sed -e 's/[^a-zA-Z0-9]/_/g')
|
|
||||||
|
|
||||||
tracetool-y = $(SRC_PATH)/scripts/tracetool.py
|
tracetool-y = $(SRC_PATH)/scripts/tracetool.py
|
||||||
tracetool-y += $(shell find $(SRC_PATH)/scripts/tracetool -name "*.py")
|
tracetool-y += $(shell find $(SRC_PATH)/scripts/tracetool -name "*.py")
|
||||||
|
|
||||||
define __trace_rules
|
trace/generated-helpers-wrappers.h: trace/generated-helpers-wrappers.h-timestamp
|
||||||
TRACE_HEADERS += trace/trace-$2.h
|
|
||||||
TRACE_SOURCES += trace/trace-$2.c
|
|
||||||
trace-obj-y += trace/trace-$2.o
|
|
||||||
trace/trace-$2.h: trace/trace-$2.h-timestamp
|
|
||||||
@cmp $$< $$@ >/dev/null 2>&1 || cp $$< $$@
|
|
||||||
trace/trace-$2.h-timestamp: $(SRC_PATH)/$1/trace-events $(tracetool-y) $(BUILD_DIR)/config-host.mak
|
|
||||||
$(call quiet-command,$(TRACETOOL) \
|
|
||||||
--group=$2 \
|
|
||||||
--format=h \
|
|
||||||
--backends=$(TRACE_BACKENDS) \
|
|
||||||
$$< > $$@,"GEN","$$(@:%-timestamp=%)")
|
|
||||||
|
|
||||||
trace/trace-$2.c: trace/trace-$2.c-timestamp
|
|
||||||
@cmp $$< $$@ >/dev/null 2>&1 || cp $$< $$@
|
|
||||||
trace/trace-$2.c-timestamp: $(SRC_PATH)/$1/trace-events $(tracetool-y) $(BUILD_DIR)/config-host.mak
|
|
||||||
$(call quiet-command,$(TRACETOOL) \
|
|
||||||
--group=$2 \
|
|
||||||
--format=c \
|
|
||||||
--backends=$(TRACE_BACKENDS) \
|
|
||||||
$$< > $$@,"GEN","$$(@:%-timestamp=%)")
|
|
||||||
endef
|
|
||||||
|
|
||||||
%/trace-ust.h: %/trace-ust.h-timestamp
|
|
||||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||||
%/trace-ust.h-timestamp: $(SRC_PATH)/%/trace-events $(tracetool-y) $(BUILD_DIR)/config-host.mak
|
trace/generated-helpers-wrappers.h-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
||||||
$(call quiet-command,$(TRACETOOL) \
|
@mkdir -p $(dir $@)
|
||||||
--group=$(call trace-group-name,$@) \
|
|
||||||
--format=ust-events-h \
|
|
||||||
--backends=$(TRACE_BACKENDS) \
|
|
||||||
$< > $@,"GEN","$(@:%-timestamp=%)")
|
|
||||||
|
|
||||||
%/trace-dtrace.dtrace: %/trace-dtrace.dtrace-timestamp
|
|
||||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
|
||||||
%/trace-dtrace.dtrace-timestamp: $(SRC_PATH)/%/trace-events $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
|
||||||
$(call quiet-command,$(TRACETOOL) \
|
|
||||||
--group=$(call trace-group-name,$@) \
|
|
||||||
--format=d \
|
|
||||||
--backends=$(TRACE_BACKENDS) \
|
|
||||||
$< > $@,"GEN","$(@:%-timestamp=%)")
|
|
||||||
|
|
||||||
%/trace-dtrace.h: %/trace-dtrace.dtrace $(tracetool-y)
|
|
||||||
$(call quiet-command,dtrace -o $@ -h -s $<, "GEN","$@")
|
|
||||||
|
|
||||||
%/trace-dtrace.o: %/trace-dtrace.dtrace $(tracetool-y)
|
|
||||||
|
|
||||||
|
|
||||||
trace/trace-root.h: trace/trace-root.h-timestamp
|
|
||||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
|
||||||
trace/trace-root.h-timestamp: $(SRC_PATH)/trace-events $(tracetool-y) $(BUILD_DIR)/config-host.mak
|
|
||||||
$(call quiet-command,$(TRACETOOL) \
|
$(call quiet-command,$(TRACETOOL) \
|
||||||
--group=root \
|
--group=root \
|
||||||
--format=h \
|
--format=tcg-helper-wrapper-h \
|
||||||
--backends=$(TRACE_BACKENDS) \
|
--backend=$(TRACE_BACKENDS) \
|
||||||
$< > $@,"GEN","$(@:%-timestamp=%)")
|
$< > $@,"GEN","$(patsubst %-timestamp,%,$@)")
|
||||||
|
|
||||||
trace/trace-root.c: trace/trace-root.c-timestamp
|
trace/generated-helpers.h: trace/generated-helpers.h-timestamp
|
||||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||||
trace/trace-root.c-timestamp: $(SRC_PATH)/trace-events $(tracetool-y) $(BUILD_DIR)/config-host.mak
|
trace/generated-helpers.h-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
||||||
|
@mkdir -p $(dir $@)
|
||||||
$(call quiet-command,$(TRACETOOL) \
|
$(call quiet-command,$(TRACETOOL) \
|
||||||
--group=root \
|
--group=root \
|
||||||
--format=c \
|
--format=tcg-helper-h \
|
||||||
--backends=$(TRACE_BACKENDS) \
|
--backend=$(TRACE_BACKENDS) \
|
||||||
$< > $@,"GEN","$(@:%-timestamp=%)")
|
$< > $@,"GEN","$(patsubst %-timestamp,%,$@)")
|
||||||
|
|
||||||
trace-ust-root.h: trace-ust-root.h-timestamp
|
trace/generated-helpers.c: trace/generated-helpers.c-timestamp
|
||||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||||
trace-ust-root.h-timestamp: $(SRC_PATH)/trace-events $(tracetool-y) $(BUILD_DIR)/config-host.mak
|
trace/generated-helpers.c-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
||||||
|
@mkdir -p $(dir $@)
|
||||||
$(call quiet-command,$(TRACETOOL) \
|
$(call quiet-command,$(TRACETOOL) \
|
||||||
--group=root \
|
--group=root \
|
||||||
--format=ust-events-h \
|
--format=tcg-helper-c \
|
||||||
--backends=$(TRACE_BACKENDS) \
|
--backend=$(TRACE_BACKENDS) \
|
||||||
$< > $@,"GEN","$(@:%-timestamp=%)")
|
$< > $@,"GEN","$(patsubst %-timestamp,%,$@)")
|
||||||
|
|
||||||
trace-ust-all.h: trace-ust-all.h-timestamp
|
trace/generated-helpers.o: trace/generated-helpers.c
|
||||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
|
||||||
trace-ust-all.h-timestamp: $(trace-events-files) $(tracetool-y) $(BUILD_DIR)/config-host.mak
|
|
||||||
$(call quiet-command,$(TRACETOOL) \
|
|
||||||
--group=all \
|
|
||||||
--format=ust-events-h \
|
|
||||||
--backends=$(TRACE_BACKENDS) \
|
|
||||||
$(trace-events-files) > $@,"GEN","$(@:%-timestamp=%)")
|
|
||||||
|
|
||||||
trace-ust-all.c: trace-ust-all.c-timestamp
|
trace/generated-tcg-tracers.h: trace/generated-tcg-tracers.h-timestamp
|
||||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||||
trace-ust-all.c-timestamp: $(trace-events-files) $(tracetool-y) $(BUILD_DIR)/config-host.mak
|
trace/generated-tcg-tracers.h-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
||||||
$(call quiet-command,$(TRACETOOL) \
|
@mkdir -p $(dir $@)
|
||||||
--group=all \
|
|
||||||
--format=ust-events-c \
|
|
||||||
--backends=$(TRACE_BACKENDS) \
|
|
||||||
$(trace-events-files) > $@,"GEN","$(@:%-timestamp=%)")
|
|
||||||
|
|
||||||
trace-dtrace-root.dtrace: trace-dtrace-root.dtrace-timestamp
|
|
||||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
|
||||||
trace-dtrace-root.dtrace-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
|
||||||
$(call quiet-command,$(TRACETOOL) \
|
$(call quiet-command,$(TRACETOOL) \
|
||||||
--group=root \
|
--group=root \
|
||||||
--format=d \
|
--format=tcg-h \
|
||||||
--backends=$(TRACE_BACKENDS) \
|
--backend=$(TRACE_BACKENDS) \
|
||||||
$< > $@,"GEN","$(@:%-timestamp=%)")
|
$< > $@,"GEN","$(patsubst %-timestamp,%,$@)")
|
||||||
|
|
||||||
trace-dtrace-root.h: trace-dtrace-root.dtrace
|
|
||||||
$(call quiet-command,dtrace -o $@ -h -s $<, "GEN","$@")
|
|
||||||
|
|
||||||
trace-dtrace-root.o: trace-dtrace-root.dtrace
|
|
||||||
|
|
||||||
KEYCODEMAP_GEN = $(SRC_PATH)/ui/keycodemapdb/tools/keymap-gen
|
KEYCODEMAP_GEN = $(SRC_PATH)/ui/keycodemapdb/tools/keymap-gen
|
||||||
KEYCODEMAP_CSV = $(SRC_PATH)/ui/keycodemapdb/data/keymaps.csv
|
KEYCODEMAP_CSV = $(SRC_PATH)/ui/keycodemapdb/data/keymaps.csv
|
||||||
@ -485,10 +361,8 @@ include $(SRC_PATH)/Makefile.objs
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
dummy := $(call unnest-vars,, \
|
dummy := $(call unnest-vars,, \
|
||||||
stub-obj-y \
|
|
||||||
authz-obj-y \
|
authz-obj-y \
|
||||||
chardev-obj-y \
|
chardev-obj-y \
|
||||||
util-obj-y \
|
|
||||||
qga-obj-y \
|
qga-obj-y \
|
||||||
elf2dmp-obj-y \
|
elf2dmp-obj-y \
|
||||||
ivshmem-client-obj-y \
|
ivshmem-client-obj-y \
|
||||||
@ -509,14 +383,7 @@ dummy := $(call unnest-vars,, \
|
|||||||
qom-obj-y \
|
qom-obj-y \
|
||||||
io-obj-y \
|
io-obj-y \
|
||||||
common-obj-y \
|
common-obj-y \
|
||||||
common-obj-m \
|
common-obj-m)
|
||||||
trace-obj-y)
|
|
||||||
|
|
||||||
dummy := $(foreach DIR,$(trace-events-subdirs),$(eval $(call __trace_rules,$(DIR),$(call trace-group-suffix,$(DIR)))))
|
|
||||||
|
|
||||||
generated-files-y += $(TRACE_HEADERS)
|
|
||||||
generated-files-y += $(TRACE_SOURCES)
|
|
||||||
|
|
||||||
|
|
||||||
include $(SRC_PATH)/tests/Makefile.include
|
include $(SRC_PATH)/tests/Makefile.include
|
||||||
|
|
||||||
@ -630,8 +497,7 @@ Makefile: $(version-obj-y)
|
|||||||
######################################################################
|
######################################################################
|
||||||
# Build libraries
|
# Build libraries
|
||||||
|
|
||||||
libqemuutil.a: $(util-obj-y) $(trace-obj-y) $(stub-obj-y)
|
libvhost-user.a: $(libvhost-user-obj-y)
|
||||||
libvhost-user.a: $(libvhost-user-obj-y) $(util-obj-y) $(stub-obj-y)
|
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
@ -694,27 +560,6 @@ qga/qapi-generated/qapi-gen-timestamp: $(SRC_PATH)/qga/qapi-schema.json $(qapi-p
|
|||||||
"GEN","$(@:%-timestamp=%)")
|
"GEN","$(@:%-timestamp=%)")
|
||||||
@>$@
|
@>$@
|
||||||
|
|
||||||
qapi-modules = $(SRC_PATH)/qapi/qapi-schema.json \
|
|
||||||
$(QAPI_MODULES:%=$(SRC_PATH)/qapi/%.json)
|
|
||||||
|
|
||||||
$(GENERATED_QAPI_FILES): qapi-gen-timestamp ;
|
|
||||||
qapi-gen-timestamp: $(qapi-modules) $(qapi-py)
|
|
||||||
$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-gen.py \
|
|
||||||
-o "qapi" -b $<, \
|
|
||||||
"GEN","$(@:%-timestamp=%)")
|
|
||||||
@>$@
|
|
||||||
|
|
||||||
qapi-modules-storage-daemon = \
|
|
||||||
$(SRC_PATH)/storage-daemon/qapi/qapi-schema.json \
|
|
||||||
$(QAPI_MODULES_STORAGE_DAEMON:%=$(SRC_PATH)/qapi/%.json)
|
|
||||||
|
|
||||||
$(GENERATED_STORAGE_DAEMON_QAPI_FILES): storage-daemon/qapi/qapi-gen-timestamp ;
|
|
||||||
storage-daemon/qapi/qapi-gen-timestamp: $(qapi-modules-storage-daemon) $(qapi-py)
|
|
||||||
$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-gen.py \
|
|
||||||
-o "storage-daemon/qapi" $<, \
|
|
||||||
"GEN","$(@:%-timestamp=%)")
|
|
||||||
@>$@
|
|
||||||
|
|
||||||
QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qapi-commands.h qga-qapi-init-commands.h)
|
QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qapi-commands.h qga-qapi-init-commands.h)
|
||||||
$(qga-obj-y): $(QGALIB_GEN)
|
$(qga-obj-y): $(QGALIB_GEN)
|
||||||
|
|
||||||
@ -752,9 +597,9 @@ ivshmem-client$(EXESUF): $(ivshmem-client-obj-y) $(COMMON_LDADDS)
|
|||||||
ivshmem-server$(EXESUF): $(ivshmem-server-obj-y) $(COMMON_LDADDS)
|
ivshmem-server$(EXESUF): $(ivshmem-server-obj-y) $(COMMON_LDADDS)
|
||||||
$(call LINK, $^)
|
$(call LINK, $^)
|
||||||
endif
|
endif
|
||||||
vhost-user-scsi$(EXESUF): $(vhost-user-scsi-obj-y) libvhost-user.a
|
vhost-user-scsi$(EXESUF): $(vhost-user-scsi-obj-y) libvhost-user.a $(COMMON_LDADDS)
|
||||||
$(call LINK, $^)
|
$(call LINK, $^)
|
||||||
vhost-user-blk$(EXESUF): $(vhost-user-blk-obj-y) libvhost-user.a
|
vhost-user-blk$(EXESUF): $(vhost-user-blk-obj-y) libvhost-user.a $(COMMON_LDADDS)
|
||||||
$(call LINK, $^)
|
$(call LINK, $^)
|
||||||
|
|
||||||
rdmacm-mux$(EXESUF): LIBS += "-libumad"
|
rdmacm-mux$(EXESUF): LIBS += "-libumad"
|
||||||
@ -767,12 +612,12 @@ virtiofsd$(EXESUF): $(virtiofsd-obj-y) libvhost-user.a $(COMMON_LDADDS)
|
|||||||
$(call LINK, $^)
|
$(call LINK, $^)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
vhost-user-gpu$(EXESUF): $(vhost-user-gpu-obj-y) $(libvhost-user-obj-y) libqemuutil.a
|
vhost-user-gpu$(EXESUF): $(vhost-user-gpu-obj-y) libvhost-user.a $(COMMON_LDADDS)
|
||||||
$(call LINK, $^)
|
$(call LINK, $^)
|
||||||
|
|
||||||
ifdef CONFIG_VHOST_USER_INPUT
|
ifdef CONFIG_VHOST_USER_INPUT
|
||||||
ifdef CONFIG_LINUX
|
ifdef CONFIG_LINUX
|
||||||
vhost-user-input$(EXESUF): $(vhost-user-input-obj-y) libvhost-user.a libqemuutil.a
|
vhost-user-input$(EXESUF): $(vhost-user-input-obj-y) libvhost-user.a $(COMMON_LDADDS)
|
||||||
$(call LINK, $^)
|
$(call LINK, $^)
|
||||||
|
|
||||||
# build by default, do not install
|
# build by default, do not install
|
||||||
@ -801,9 +646,6 @@ clean: recurse-clean ninja-clean clean-ctlist
|
|||||||
rm -f fsdev/*.pod scsi/*.pod
|
rm -f fsdev/*.pod scsi/*.pod
|
||||||
rm -f qemu-img-cmds.h
|
rm -f qemu-img-cmds.h
|
||||||
rm -f ui/shader/*-vert.h ui/shader/*-frag.h
|
rm -f ui/shader/*-vert.h ui/shader/*-frag.h
|
||||||
@# May not be present in generated-files-y
|
|
||||||
rm -f trace/generated-tracers-dtrace.dtrace*
|
|
||||||
rm -f trace/generated-tracers-dtrace.h*
|
|
||||||
rm -f $(foreach f,$(generated-files-y),$(f) $(f)-timestamp)
|
rm -f $(foreach f,$(generated-files-y),$(f) $(f)-timestamp)
|
||||||
rm -f qapi-gen-timestamp
|
rm -f qapi-gen-timestamp
|
||||||
rm -f storage-daemon/qapi/qapi-gen-timestamp
|
rm -f storage-daemon/qapi/qapi-gen-timestamp
|
||||||
@ -1033,7 +875,9 @@ endif
|
|||||||
set -e; for x in $(KEYMAPS); do \
|
set -e; for x in $(KEYMAPS); do \
|
||||||
$(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \
|
$(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \
|
||||||
done
|
done
|
||||||
$(INSTALL_DATA) $(BUILD_DIR)/trace-events-all "$(DESTDIR)$(qemu_datadir)/trace-events-all"
|
for d in $(TARGET_DIRS); do \
|
||||||
|
$(MAKE) $(SUBDIR_MAKEFLAGS) TARGET_DIR=$$d/ -C $$d $@ || exit 1 ; \
|
||||||
|
done
|
||||||
|
|
||||||
# opengl shader programs
|
# opengl shader programs
|
||||||
ui/shader/%-vert.h: $(SRC_PATH)/ui/shader/%.vert $(SRC_PATH)/scripts/shaderinclude.pl
|
ui/shader/%-vert.h: $(SRC_PATH)/ui/shader/%.vert $(SRC_PATH)/scripts/shaderinclude.pl
|
||||||
@ -1244,10 +1088,6 @@ Makefile: $(generated-files-y)
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
.SECONDARY: $(TRACE_HEADERS) $(TRACE_HEADERS:%=%-timestamp) \
|
|
||||||
$(TRACE_SOURCES) $(TRACE_SOURCES:%=%-timestamp) \
|
|
||||||
$(TRACE_DTRACE) $(TRACE_DTRACE:%=%-timestamp)
|
|
||||||
|
|
||||||
# Include automatically generated dependency files
|
# Include automatically generated dependency files
|
||||||
# Dependencies in Makefile.objs files come from our recursive subdir rules
|
# Dependencies in Makefile.objs files come from our recursive subdir rules
|
||||||
-include $(wildcard *.d tests/*.d)
|
-include $(wildcard *.d tests/*.d)
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
#######################################################################
|
#######################################################################
|
||||||
# Common libraries for tools and emulators
|
# Common libraries for tools and emulators
|
||||||
stub-obj-y = stubs/
|
|
||||||
util-obj-y = crypto/ util/ qobject/ qapi/
|
|
||||||
qom-obj-y = qom/
|
qom-obj-y = qom/
|
||||||
|
|
||||||
#######################################################################
|
#######################################################################
|
||||||
@ -94,10 +92,6 @@ common-obj-y += disas/
|
|||||||
# Resource file for Windows executables
|
# Resource file for Windows executables
|
||||||
version-obj-$(CONFIG_WIN32) += $(BUILD_DIR)/version.o
|
version-obj-$(CONFIG_WIN32) += $(BUILD_DIR)/version.o
|
||||||
|
|
||||||
######################################################################
|
|
||||||
# tracing
|
|
||||||
util-obj-y += trace/
|
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# guest agent
|
# guest agent
|
||||||
|
|
||||||
@ -123,92 +117,3 @@ vhost-user-gpu-obj-y = contrib/vhost-user-gpu/
|
|||||||
virtiofsd-obj-y = tools/virtiofsd/
|
virtiofsd-obj-y = tools/virtiofsd/
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
trace-events-subdirs =
|
|
||||||
trace-events-subdirs += accel/kvm
|
|
||||||
trace-events-subdirs += accel/tcg
|
|
||||||
trace-events-subdirs += backends
|
|
||||||
trace-events-subdirs += backends/tpm
|
|
||||||
trace-events-subdirs += crypto
|
|
||||||
trace-events-subdirs += monitor
|
|
||||||
ifeq ($(CONFIG_USER_ONLY),y)
|
|
||||||
trace-events-subdirs += linux-user
|
|
||||||
endif
|
|
||||||
ifeq ($(CONFIG_BLOCK),y)
|
|
||||||
trace-events-subdirs += authz
|
|
||||||
trace-events-subdirs += block
|
|
||||||
trace-events-subdirs += io
|
|
||||||
trace-events-subdirs += nbd
|
|
||||||
trace-events-subdirs += scsi
|
|
||||||
endif
|
|
||||||
ifeq ($(CONFIG_SOFTMMU),y)
|
|
||||||
trace-events-subdirs += audio
|
|
||||||
trace-events-subdirs += chardev
|
|
||||||
trace-events-subdirs += hw/9pfs
|
|
||||||
trace-events-subdirs += hw/acpi
|
|
||||||
trace-events-subdirs += hw/alpha
|
|
||||||
trace-events-subdirs += hw/arm
|
|
||||||
trace-events-subdirs += hw/audio
|
|
||||||
trace-events-subdirs += hw/block
|
|
||||||
trace-events-subdirs += hw/block/dataplane
|
|
||||||
trace-events-subdirs += hw/char
|
|
||||||
trace-events-subdirs += hw/dma
|
|
||||||
trace-events-subdirs += hw/hppa
|
|
||||||
trace-events-subdirs += hw/hyperv
|
|
||||||
trace-events-subdirs += hw/i2c
|
|
||||||
trace-events-subdirs += hw/i386
|
|
||||||
trace-events-subdirs += hw/i386/xen
|
|
||||||
trace-events-subdirs += hw/ide
|
|
||||||
trace-events-subdirs += hw/input
|
|
||||||
trace-events-subdirs += hw/intc
|
|
||||||
trace-events-subdirs += hw/isa
|
|
||||||
trace-events-subdirs += hw/mem
|
|
||||||
trace-events-subdirs += hw/mips
|
|
||||||
trace-events-subdirs += hw/misc
|
|
||||||
trace-events-subdirs += hw/misc/macio
|
|
||||||
trace-events-subdirs += hw/net
|
|
||||||
trace-events-subdirs += hw/nvram
|
|
||||||
trace-events-subdirs += hw/pci
|
|
||||||
trace-events-subdirs += hw/pci-host
|
|
||||||
trace-events-subdirs += hw/ppc
|
|
||||||
trace-events-subdirs += hw/rdma
|
|
||||||
trace-events-subdirs += hw/rdma/vmw
|
|
||||||
trace-events-subdirs += hw/rtc
|
|
||||||
trace-events-subdirs += hw/s390x
|
|
||||||
trace-events-subdirs += hw/scsi
|
|
||||||
trace-events-subdirs += hw/sd
|
|
||||||
trace-events-subdirs += hw/sparc
|
|
||||||
trace-events-subdirs += hw/sparc64
|
|
||||||
trace-events-subdirs += hw/ssi
|
|
||||||
trace-events-subdirs += hw/timer
|
|
||||||
trace-events-subdirs += hw/tpm
|
|
||||||
trace-events-subdirs += hw/usb
|
|
||||||
trace-events-subdirs += hw/vfio
|
|
||||||
trace-events-subdirs += hw/virtio
|
|
||||||
trace-events-subdirs += hw/watchdog
|
|
||||||
trace-events-subdirs += hw/xen
|
|
||||||
trace-events-subdirs += hw/gpio
|
|
||||||
trace-events-subdirs += hw/riscv
|
|
||||||
trace-events-subdirs += migration
|
|
||||||
trace-events-subdirs += net
|
|
||||||
trace-events-subdirs += ui
|
|
||||||
endif
|
|
||||||
trace-events-subdirs += hw/core
|
|
||||||
trace-events-subdirs += hw/display
|
|
||||||
trace-events-subdirs += qapi
|
|
||||||
trace-events-subdirs += qom
|
|
||||||
trace-events-subdirs += target/arm
|
|
||||||
trace-events-subdirs += target/hppa
|
|
||||||
trace-events-subdirs += target/i386
|
|
||||||
trace-events-subdirs += target/mips
|
|
||||||
trace-events-subdirs += target/ppc
|
|
||||||
trace-events-subdirs += target/riscv
|
|
||||||
trace-events-subdirs += target/s390x
|
|
||||||
trace-events-subdirs += target/sparc
|
|
||||||
trace-events-subdirs += util
|
|
||||||
|
|
||||||
trace-events-files = $(SRC_PATH)/trace-events $(trace-events-subdirs:%=$(SRC_PATH)/%/trace-events)
|
|
||||||
|
|
||||||
trace-obj-y = trace-root.o
|
|
||||||
trace-obj-$(CONFIG_TRACE_UST) += trace-ust-all.o
|
|
||||||
trace-obj-$(CONFIG_TRACE_DTRACE) += trace-dtrace-root.o
|
|
||||||
trace-obj-$(CONFIG_TRACE_DTRACE) += $(trace-events-subdirs:%=%/trace-dtrace.o)
|
|
||||||
|
@ -57,7 +57,7 @@ endif
|
|||||||
tracetool-y = $(SRC_PATH)/scripts/tracetool.py
|
tracetool-y = $(SRC_PATH)/scripts/tracetool.py
|
||||||
tracetool-y += $(shell find $(SRC_PATH)/scripts/tracetool -name "*.py")
|
tracetool-y += $(shell find $(SRC_PATH)/scripts/tracetool -name "*.py")
|
||||||
|
|
||||||
$(QEMU_PROG).stp-installed: $(BUILD_DIR)/trace-events-all $(tracetool-y)
|
$(QEMU_PROG).stp-installed: $(BUILD_DIR)/trace/trace-events-all $(tracetool-y)
|
||||||
$(call quiet-command,$(TRACETOOL) \
|
$(call quiet-command,$(TRACETOOL) \
|
||||||
--group=all \
|
--group=all \
|
||||||
--format=stap \
|
--format=stap \
|
||||||
@ -67,7 +67,7 @@ $(QEMU_PROG).stp-installed: $(BUILD_DIR)/trace-events-all $(tracetool-y)
|
|||||||
--target-type=$(TARGET_TYPE) \
|
--target-type=$(TARGET_TYPE) \
|
||||||
$< > $@,"GEN","$(TARGET_DIR)$(QEMU_PROG).stp-installed")
|
$< > $@,"GEN","$(TARGET_DIR)$(QEMU_PROG).stp-installed")
|
||||||
|
|
||||||
$(QEMU_PROG).stp: $(BUILD_DIR)/trace-events-all $(tracetool-y)
|
$(QEMU_PROG).stp: $(BUILD_DIR)/trace/trace-events-all $(tracetool-y)
|
||||||
$(call quiet-command,$(TRACETOOL) \
|
$(call quiet-command,$(TRACETOOL) \
|
||||||
--group=all \
|
--group=all \
|
||||||
--format=stap \
|
--format=stap \
|
||||||
@ -77,7 +77,7 @@ $(QEMU_PROG).stp: $(BUILD_DIR)/trace-events-all $(tracetool-y)
|
|||||||
--target-type=$(TARGET_TYPE) \
|
--target-type=$(TARGET_TYPE) \
|
||||||
$< > $@,"GEN","$(TARGET_DIR)$(QEMU_PROG).stp")
|
$< > $@,"GEN","$(TARGET_DIR)$(QEMU_PROG).stp")
|
||||||
|
|
||||||
$(QEMU_PROG)-simpletrace.stp: $(BUILD_DIR)/trace-events-all $(tracetool-y)
|
$(QEMU_PROG)-simpletrace.stp: $(BUILD_DIR)/trace/trace-events-all $(tracetool-y)
|
||||||
$(call quiet-command,$(TRACETOOL) \
|
$(call quiet-command,$(TRACETOOL) \
|
||||||
--group=all \
|
--group=all \
|
||||||
--format=simpletrace-stap \
|
--format=simpletrace-stap \
|
||||||
@ -85,7 +85,7 @@ $(QEMU_PROG)-simpletrace.stp: $(BUILD_DIR)/trace-events-all $(tracetool-y)
|
|||||||
--probe-prefix=qemu.$(TARGET_TYPE).$(TARGET_NAME) \
|
--probe-prefix=qemu.$(TARGET_TYPE).$(TARGET_NAME) \
|
||||||
$< > $@,"GEN","$(TARGET_DIR)$(QEMU_PROG)-simpletrace.stp")
|
$< > $@,"GEN","$(TARGET_DIR)$(QEMU_PROG)-simpletrace.stp")
|
||||||
|
|
||||||
$(QEMU_PROG)-log.stp: $(BUILD_DIR)/trace-events-all $(tracetool-y)
|
$(QEMU_PROG)-log.stp: $(BUILD_DIR)/trace/trace-events-all $(tracetool-y)
|
||||||
$(call quiet-command,$(TRACETOOL) \
|
$(call quiet-command,$(TRACETOOL) \
|
||||||
--group=all \
|
--group=all \
|
||||||
--format=log-stap \
|
--format=log-stap \
|
||||||
|
8
configure
vendored
8
configure
vendored
@ -7247,6 +7247,8 @@ fi
|
|||||||
echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
|
echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
|
||||||
if test "$gnutls" = "yes" ; then
|
if test "$gnutls" = "yes" ; then
|
||||||
echo "CONFIG_GNUTLS=y" >> $config_host_mak
|
echo "CONFIG_GNUTLS=y" >> $config_host_mak
|
||||||
|
echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
|
||||||
|
echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
if test "$gcrypt" = "yes" ; then
|
if test "$gcrypt" = "yes" ; then
|
||||||
echo "CONFIG_GCRYPT=y" >> $config_host_mak
|
echo "CONFIG_GCRYPT=y" >> $config_host_mak
|
||||||
@ -7257,6 +7259,8 @@ fi
|
|||||||
if test "$nettle" = "yes" ; then
|
if test "$nettle" = "yes" ; then
|
||||||
echo "CONFIG_NETTLE=y" >> $config_host_mak
|
echo "CONFIG_NETTLE=y" >> $config_host_mak
|
||||||
echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
|
echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
|
||||||
|
echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
|
||||||
|
echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
if test "$qemu_private_xts" = "yes" ; then
|
if test "$qemu_private_xts" = "yes" ; then
|
||||||
echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
|
echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
|
||||||
@ -7633,6 +7637,8 @@ if have_backend "log"; then
|
|||||||
fi
|
fi
|
||||||
if have_backend "ust"; then
|
if have_backend "ust"; then
|
||||||
echo "CONFIG_TRACE_UST=y" >> $config_host_mak
|
echo "CONFIG_TRACE_UST=y" >> $config_host_mak
|
||||||
|
echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
|
||||||
|
echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
if have_backend "dtrace"; then
|
if have_backend "dtrace"; then
|
||||||
echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
|
echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
|
||||||
@ -7858,6 +7864,8 @@ echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
|
|||||||
echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
|
echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
|
||||||
echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
|
echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
|
||||||
echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
|
echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
|
||||||
|
echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
|
||||||
|
echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
|
||||||
if test "$sparse" = "yes" ; then
|
if test "$sparse" = "yes" ; then
|
||||||
echo "SPARSE_CFLAGS = -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
|
echo "SPARSE_CFLAGS = -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
|
@ -35,9 +35,3 @@ crypto-obj-$(CONFIG_QEMU_PRIVATE_XTS) += xts.o
|
|||||||
crypto-obj-y += block.o
|
crypto-obj-y += block.o
|
||||||
crypto-obj-y += block-qcow.o
|
crypto-obj-y += block-qcow.o
|
||||||
crypto-obj-y += block-luks.o
|
crypto-obj-y += block-luks.o
|
||||||
|
|
||||||
util-obj-$(CONFIG_GCRYPT) += random-gcrypt.o
|
|
||||||
util-obj-$(if $(CONFIG_GCRYPT),n,$(CONFIG_GNUTLS)) += random-gnutls.o
|
|
||||||
util-obj-$(if $(CONFIG_GCRYPT),n,$(if $(CONFIG_GNUTLS),n,$(CONFIG_RNG_NONE))) += random-none.o
|
|
||||||
util-obj-$(if $(CONFIG_GCRYPT),n,$(if $(CONFIG_GNUTLS),n,$(if $(CONFIG_RNG_NONE),n,y))) += random-platform.o
|
|
||||||
util-obj-y += aes.o init.o
|
|
||||||
|
11
crypto/meson.build
Normal file
11
crypto/meson.build
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
util_ss.add(files('aes.c'))
|
||||||
|
util_ss.add(files('init.c'))
|
||||||
|
if 'CONFIG_GCRYPT' in config_host
|
||||||
|
util_ss.add(files('random-gcrypt.c'))
|
||||||
|
elif 'CONFIG_GNUTLS' in config_host
|
||||||
|
util_ss.add(files('random-gnutls.c'), gnutls)
|
||||||
|
elif 'CONFIG_RNG_NONE' in config_host
|
||||||
|
util_ss.add(files('random-none.c'))
|
||||||
|
else
|
||||||
|
util_ss.add(files('random-platform.c'))
|
||||||
|
endif
|
@ -60,7 +60,7 @@ general. It is strongly preferred that all events be declared directly in
|
|||||||
the sub-directory that uses them. The only exception is where there are some
|
the sub-directory that uses them. The only exception is where there are some
|
||||||
shared trace events defined in the top level directory trace-events file.
|
shared trace events defined in the top level directory trace-events file.
|
||||||
The top level directory generates trace files with a filename prefix of
|
The top level directory generates trace files with a filename prefix of
|
||||||
"trace-root" instead of just "trace". This is to avoid ambiguity between
|
"trace/trace-root" instead of just "trace". This is to avoid ambiguity between
|
||||||
a trace.h in the current directory, vs the top level directory.
|
a trace.h in the current directory, vs the top level directory.
|
||||||
|
|
||||||
=== Using trace events ===
|
=== Using trace events ===
|
||||||
|
194
meson.build
194
meson.build
@ -4,6 +4,9 @@ project('qemu', ['c'], meson_version: '>=0.55.0',
|
|||||||
|
|
||||||
not_found = dependency('', required: false)
|
not_found = dependency('', required: false)
|
||||||
keyval = import('unstable-keyval')
|
keyval = import('unstable-keyval')
|
||||||
|
ss = import('sourceset')
|
||||||
|
|
||||||
|
cc = meson.get_compiler('c')
|
||||||
config_host = keyval.load(meson.current_build_dir() / 'config-host.mak')
|
config_host = keyval.load(meson.current_build_dir() / 'config-host.mak')
|
||||||
|
|
||||||
add_project_arguments(config_host['QEMU_CFLAGS'].split(),
|
add_project_arguments(config_host['QEMU_CFLAGS'].split(),
|
||||||
@ -43,6 +46,197 @@ supported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86
|
|||||||
cpu = host_machine.cpu_family()
|
cpu = host_machine.cpu_family()
|
||||||
targetos = host_machine.system()
|
targetos = host_machine.system()
|
||||||
|
|
||||||
|
m = cc.find_library('m', required: false)
|
||||||
|
util = cc.find_library('util', required: false)
|
||||||
|
socket = []
|
||||||
|
if targetos == 'windows'
|
||||||
|
socket = cc.find_library('ws2_32')
|
||||||
|
endif
|
||||||
|
glib = declare_dependency(compile_args: config_host['GLIB_CFLAGS'].split(),
|
||||||
|
link_args: config_host['GLIB_LIBS'].split())
|
||||||
|
gio = not_found
|
||||||
|
if 'CONFIG_GIO' in config_host
|
||||||
|
gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(),
|
||||||
|
link_args: config_host['GIO_LIBS'].split())
|
||||||
|
endif
|
||||||
|
lttng = not_found
|
||||||
|
if 'CONFIG_TRACE_UST' in config_host
|
||||||
|
lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split())
|
||||||
|
endif
|
||||||
|
urcubp = not_found
|
||||||
|
if 'CONFIG_TRACE_UST' in config_host
|
||||||
|
urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split())
|
||||||
|
endif
|
||||||
|
nettle = not_found
|
||||||
|
if 'CONFIG_NETTLE' in config_host
|
||||||
|
nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(),
|
||||||
|
link_args: config_host['NETTLE_LIBS'].split())
|
||||||
|
endif
|
||||||
|
gnutls = not_found
|
||||||
|
if 'CONFIG_GNUTLS' in config_host
|
||||||
|
gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(),
|
||||||
|
link_args: config_host['GNUTLS_LIBS'].split())
|
||||||
|
endif
|
||||||
|
|
||||||
|
target_dirs = config_host['TARGET_DIRS'].split()
|
||||||
|
have_user = false
|
||||||
|
have_system = false
|
||||||
|
foreach target : target_dirs
|
||||||
|
have_user = have_user or target.endswith('-user')
|
||||||
|
have_system = have_system or target.endswith('-softmmu')
|
||||||
|
endforeach
|
||||||
|
have_tools = 'CONFIG_TOOLS' in config_host
|
||||||
|
have_block = have_system or have_tools
|
||||||
|
|
||||||
|
# Generators
|
||||||
|
|
||||||
|
qapi_gen = find_program('scripts/qapi-gen.py')
|
||||||
|
qapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py',
|
||||||
|
meson.source_root() / 'scripts/qapi/commands.py',
|
||||||
|
meson.source_root() / 'scripts/qapi/common.py',
|
||||||
|
meson.source_root() / 'scripts/qapi/doc.py',
|
||||||
|
meson.source_root() / 'scripts/qapi/error.py',
|
||||||
|
meson.source_root() / 'scripts/qapi/events.py',
|
||||||
|
meson.source_root() / 'scripts/qapi/expr.py',
|
||||||
|
meson.source_root() / 'scripts/qapi/gen.py',
|
||||||
|
meson.source_root() / 'scripts/qapi/introspect.py',
|
||||||
|
meson.source_root() / 'scripts/qapi/parser.py',
|
||||||
|
meson.source_root() / 'scripts/qapi/schema.py',
|
||||||
|
meson.source_root() / 'scripts/qapi/source.py',
|
||||||
|
meson.source_root() / 'scripts/qapi/types.py',
|
||||||
|
meson.source_root() / 'scripts/qapi/visit.py',
|
||||||
|
meson.source_root() / 'scripts/qapi/common.py',
|
||||||
|
meson.source_root() / 'scripts/qapi/doc.py',
|
||||||
|
meson.source_root() / 'scripts/qapi-gen.py'
|
||||||
|
]
|
||||||
|
|
||||||
|
tracetool = [
|
||||||
|
python, files('scripts/tracetool.py'),
|
||||||
|
'--backend=' + config_host['TRACE_BACKENDS']
|
||||||
|
]
|
||||||
|
|
||||||
|
# Collect sourcesets.
|
||||||
|
|
||||||
|
util_ss = ss.source_set()
|
||||||
|
stub_ss = ss.source_set()
|
||||||
|
trace_ss = ss.source_set()
|
||||||
|
|
||||||
|
###############
|
||||||
|
# Trace files #
|
||||||
|
###############
|
||||||
|
|
||||||
|
trace_events_subdirs = [
|
||||||
|
'accel/kvm',
|
||||||
|
'accel/tcg',
|
||||||
|
'crypto',
|
||||||
|
'monitor',
|
||||||
|
]
|
||||||
|
if have_user
|
||||||
|
trace_events_subdirs += [ 'linux-user' ]
|
||||||
|
endif
|
||||||
|
if have_block
|
||||||
|
trace_events_subdirs += [
|
||||||
|
'authz',
|
||||||
|
'block',
|
||||||
|
'io',
|
||||||
|
'nbd',
|
||||||
|
'scsi',
|
||||||
|
]
|
||||||
|
endif
|
||||||
|
if have_system
|
||||||
|
trace_events_subdirs += [
|
||||||
|
'audio',
|
||||||
|
'backends',
|
||||||
|
'backends/tpm',
|
||||||
|
'chardev',
|
||||||
|
'hw/9pfs',
|
||||||
|
'hw/acpi',
|
||||||
|
'hw/alpha',
|
||||||
|
'hw/arm',
|
||||||
|
'hw/audio',
|
||||||
|
'hw/block',
|
||||||
|
'hw/block/dataplane',
|
||||||
|
'hw/char',
|
||||||
|
'hw/display',
|
||||||
|
'hw/dma',
|
||||||
|
'hw/hppa',
|
||||||
|
'hw/hyperv',
|
||||||
|
'hw/i2c',
|
||||||
|
'hw/i386',
|
||||||
|
'hw/i386/xen',
|
||||||
|
'hw/ide',
|
||||||
|
'hw/input',
|
||||||
|
'hw/intc',
|
||||||
|
'hw/isa',
|
||||||
|
'hw/mem',
|
||||||
|
'hw/mips',
|
||||||
|
'hw/misc',
|
||||||
|
'hw/misc/macio',
|
||||||
|
'hw/net',
|
||||||
|
'hw/nvram',
|
||||||
|
'hw/pci',
|
||||||
|
'hw/pci-host',
|
||||||
|
'hw/ppc',
|
||||||
|
'hw/rdma',
|
||||||
|
'hw/rdma/vmw',
|
||||||
|
'hw/rtc',
|
||||||
|
'hw/s390x',
|
||||||
|
'hw/scsi',
|
||||||
|
'hw/sd',
|
||||||
|
'hw/sparc',
|
||||||
|
'hw/sparc64',
|
||||||
|
'hw/ssi',
|
||||||
|
'hw/timer',
|
||||||
|
'hw/tpm',
|
||||||
|
'hw/usb',
|
||||||
|
'hw/vfio',
|
||||||
|
'hw/virtio',
|
||||||
|
'hw/watchdog',
|
||||||
|
'hw/xen',
|
||||||
|
'hw/gpio',
|
||||||
|
'hw/riscv',
|
||||||
|
'migration',
|
||||||
|
'net',
|
||||||
|
'ui',
|
||||||
|
]
|
||||||
|
endif
|
||||||
|
trace_events_subdirs += [
|
||||||
|
'hw/core',
|
||||||
|
'qapi',
|
||||||
|
'qom',
|
||||||
|
'target/arm',
|
||||||
|
'target/hppa',
|
||||||
|
'target/i386',
|
||||||
|
'target/mips',
|
||||||
|
'target/ppc',
|
||||||
|
'target/riscv',
|
||||||
|
'target/s390x',
|
||||||
|
'target/sparc',
|
||||||
|
'util',
|
||||||
|
]
|
||||||
|
|
||||||
|
genh = []
|
||||||
|
|
||||||
|
subdir('qapi')
|
||||||
|
subdir('qobject')
|
||||||
|
subdir('stubs')
|
||||||
|
subdir('trace')
|
||||||
|
subdir('util')
|
||||||
|
subdir('crypto')
|
||||||
|
subdir('storage-daemon')
|
||||||
|
|
||||||
|
# Build targets from sourcesets
|
||||||
|
|
||||||
|
stub_ss = stub_ss.apply(config_host, strict: false)
|
||||||
|
|
||||||
|
util_ss.add_all(trace_ss)
|
||||||
|
util_ss = util_ss.apply(config_host, strict: false)
|
||||||
|
libqemuutil = static_library('qemuutil',
|
||||||
|
sources: util_ss.sources() + stub_ss.sources() + genh,
|
||||||
|
dependencies: [util_ss.dependencies(), m, glib, socket])
|
||||||
|
qemuutil = declare_dependency(link_with: libqemuutil,
|
||||||
|
sources: genh)
|
||||||
|
|
||||||
summary_info = {}
|
summary_info = {}
|
||||||
summary_info += {'Install prefix': config_host['prefix']}
|
summary_info += {'Install prefix': config_host['prefix']}
|
||||||
summary_info += {'BIOS directory': config_host['qemu_datadir']}
|
summary_info += {'BIOS directory': config_host['qemu_datadir']}
|
||||||
|
@ -1,25 +1,4 @@
|
|||||||
util-obj-y = qapi-visit-core.o qapi-dealloc-visitor.o qobject-input-visitor.o
|
|
||||||
util-obj-y += qobject-output-visitor.o qmp-registry.o qmp-dispatch.o
|
|
||||||
util-obj-y += string-input-visitor.o string-output-visitor.o
|
|
||||||
util-obj-y += opts-visitor.o qapi-clone-visitor.o
|
|
||||||
util-obj-y += qmp-event.o
|
|
||||||
util-obj-y += qapi-util.o
|
|
||||||
|
|
||||||
QAPI_COMMON_MODULES = audio authz block-core block char common control crypto
|
|
||||||
QAPI_COMMON_MODULES += dump error introspect job machine migration misc
|
|
||||||
QAPI_COMMON_MODULES += net pragma qdev qom rdma rocker run-state sockets tpm
|
|
||||||
QAPI_COMMON_MODULES += trace transaction ui
|
|
||||||
QAPI_TARGET_MODULES = machine-target misc-target
|
QAPI_TARGET_MODULES = machine-target misc-target
|
||||||
QAPI_MODULES = $(QAPI_COMMON_MODULES) $(QAPI_TARGET_MODULES)
|
|
||||||
|
|
||||||
util-obj-y += qapi-builtin-types.o
|
|
||||||
util-obj-y += $(QAPI_COMMON_MODULES:%=qapi-types-%.o)
|
|
||||||
util-obj-y += qapi-builtin-visit.o
|
|
||||||
util-obj-y += $(QAPI_COMMON_MODULES:%=qapi-visit-%.o)
|
|
||||||
util-obj-y += qapi-emit-events.o
|
|
||||||
util-obj-y += $(QAPI_COMMON_MODULES:%=qapi-events-%.o)
|
|
||||||
|
|
||||||
common-obj-y = $(QAPI_COMMON_MODULES:%=qapi-commands-%.o)
|
|
||||||
|
|
||||||
obj-y = qapi-introspect.o
|
obj-y = qapi-introspect.o
|
||||||
obj-y += $(QAPI_TARGET_MODULES:%=qapi-types-%.o)
|
obj-y += $(QAPI_TARGET_MODULES:%=qapi-types-%.o)
|
||||||
@ -34,5 +13,3 @@ obj-y += qapi-init-commands.o
|
|||||||
|
|
||||||
QAPI_MODULES_STORAGE_DAEMON = block-core char common control crypto
|
QAPI_MODULES_STORAGE_DAEMON = block-core char common control crypto
|
||||||
QAPI_MODULES_STORAGE_DAEMON += introspect job qom sockets pragma transaction
|
QAPI_MODULES_STORAGE_DAEMON += introspect job qom sockets pragma transaction
|
||||||
|
|
||||||
storage-daemon-obj-y += $(QAPI_MODULES_STORAGE_DAEMON:%=qapi-commands-%.o)
|
|
||||||
|
121
qapi/meson.build
Normal file
121
qapi/meson.build
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
util_ss.add(files(
|
||||||
|
'opts-visitor.c',
|
||||||
|
'qapi-clone-visitor.c',
|
||||||
|
'qapi-dealloc-visitor.c',
|
||||||
|
'qapi-util.c',
|
||||||
|
'qapi-visit-core.c',
|
||||||
|
'qmp-dispatch.c',
|
||||||
|
'qmp-event.c',
|
||||||
|
'qmp-registry.c',
|
||||||
|
'qobject-input-visitor.c',
|
||||||
|
'qobject-output-visitor.c',
|
||||||
|
'string-input-visitor.c',
|
||||||
|
'string-output-visitor.c',
|
||||||
|
))
|
||||||
|
|
||||||
|
qapi_all_modules = [
|
||||||
|
'audio',
|
||||||
|
'authz',
|
||||||
|
'block-core',
|
||||||
|
'block',
|
||||||
|
'char',
|
||||||
|
'common',
|
||||||
|
'control',
|
||||||
|
'crypto',
|
||||||
|
'dump',
|
||||||
|
'error',
|
||||||
|
'introspect',
|
||||||
|
'job',
|
||||||
|
'machine',
|
||||||
|
'machine-target',
|
||||||
|
'migration',
|
||||||
|
'misc',
|
||||||
|
'misc-target',
|
||||||
|
'net',
|
||||||
|
'pragma',
|
||||||
|
'qdev',
|
||||||
|
'qom',
|
||||||
|
'rdma',
|
||||||
|
'rocker',
|
||||||
|
'run-state',
|
||||||
|
'sockets',
|
||||||
|
'tpm',
|
||||||
|
'trace',
|
||||||
|
'transaction',
|
||||||
|
'ui',
|
||||||
|
]
|
||||||
|
|
||||||
|
qapi_storage_daemon_modules = [
|
||||||
|
'block-core',
|
||||||
|
'char',
|
||||||
|
'common',
|
||||||
|
'control',
|
||||||
|
'crypto',
|
||||||
|
'introspect',
|
||||||
|
'job',
|
||||||
|
'qom',
|
||||||
|
'sockets',
|
||||||
|
'pragma',
|
||||||
|
'transaction',
|
||||||
|
]
|
||||||
|
|
||||||
|
qapi_nonmodule_outputs = [
|
||||||
|
'qapi-introspect.c', 'qapi-introspect.h',
|
||||||
|
'qapi-types.c', 'qapi-types.h',
|
||||||
|
'qapi-visit.h', 'qapi-visit.c',
|
||||||
|
'qapi-commands.h', 'qapi-commands.c',
|
||||||
|
'qapi-init-commands.h', 'qapi-init-commands.c',
|
||||||
|
'qapi-events.h', 'qapi-events.c',
|
||||||
|
'qapi-emit-events.c', 'qapi-emit-events.h',
|
||||||
|
]
|
||||||
|
|
||||||
|
# First build all sources
|
||||||
|
qapi_util_outputs = [
|
||||||
|
'qapi-builtin-types.c', 'qapi-builtin-visit.c',
|
||||||
|
'qapi-builtin-types.h', 'qapi-builtin-visit.h',
|
||||||
|
]
|
||||||
|
|
||||||
|
qapi_inputs = []
|
||||||
|
qapi_specific_outputs = []
|
||||||
|
foreach module : qapi_all_modules
|
||||||
|
qapi_inputs += [ files(module + '.json') ]
|
||||||
|
qapi_module_outputs = [
|
||||||
|
'qapi-types-@0@.c'.format(module),
|
||||||
|
'qapi-types-@0@.h'.format(module),
|
||||||
|
'qapi-visit-@0@.c'.format(module),
|
||||||
|
'qapi-visit-@0@.h'.format(module),
|
||||||
|
'qapi-events-@0@.c'.format(module),
|
||||||
|
'qapi-events-@0@.h'.format(module),
|
||||||
|
'qapi-commands-@0@.c'.format(module),
|
||||||
|
'qapi-commands-@0@.h'.format(module),
|
||||||
|
]
|
||||||
|
if module.endswith('-target')
|
||||||
|
qapi_specific_outputs += qapi_module_outputs
|
||||||
|
else
|
||||||
|
qapi_util_outputs += qapi_module_outputs
|
||||||
|
endif
|
||||||
|
endforeach
|
||||||
|
|
||||||
|
qapi_files = custom_target('shared QAPI source files',
|
||||||
|
output: qapi_util_outputs + qapi_specific_outputs + qapi_nonmodule_outputs + ['qapi-doc.texi'],
|
||||||
|
input: [ files('qapi-schema.json') ],
|
||||||
|
command: [ qapi_gen, '-o', 'qapi', '-b', '@INPUT0@' ],
|
||||||
|
depend_files: [ qapi_inputs, qapi_gen_depends ])
|
||||||
|
|
||||||
|
# Now go through all the outputs and add them to the right sourceset.
|
||||||
|
# These loops must be synchronized with the output of the above custom target.
|
||||||
|
|
||||||
|
i = 0
|
||||||
|
foreach output : qapi_util_outputs
|
||||||
|
if output.endswith('.h')
|
||||||
|
genh += qapi_files[i]
|
||||||
|
endif
|
||||||
|
util_ss.add(qapi_files[i])
|
||||||
|
i = i + 1
|
||||||
|
endforeach
|
||||||
|
|
||||||
|
# These are still handled by the Makefile
|
||||||
|
i += qapi_nonmodule_outputs.length()
|
||||||
|
i += qapi_specific_outputs.length()
|
||||||
|
|
||||||
|
qapi_doc_texi = qapi_files[i]
|
@ -1,3 +0,0 @@
|
|||||||
util-obj-y = qnull.o qnum.o qstring.o qdict.o qlist.o qbool.o qlit.o
|
|
||||||
util-obj-y += qjson.o qobject.o json-lexer.o json-streamer.o json-parser.o
|
|
||||||
util-obj-y += block-qdict.o
|
|
3
qobject/meson.build
Normal file
3
qobject/meson.build
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
util_ss.add(files('qnull.c', 'qnum.c', 'qstring.c', 'qdict.c', 'qlist.c', 'qbool.c',
|
||||||
|
'qlit.c', 'qjson.c', 'qobject.c', 'json-lexer.c', 'json-streamer.c', 'json-parser.c',
|
||||||
|
'block-qdict.c'))
|
@ -32,7 +32,7 @@ QEMU_DGFLAGS += -MMD -MP -MT $@ -MF $(@D)/$(*F).d
|
|||||||
# dir, one absolute and the other relative to the compiler working
|
# dir, one absolute and the other relative to the compiler working
|
||||||
# directory. These are the same for target-independent files, but
|
# directory. These are the same for target-independent files, but
|
||||||
# different for target-dependent ones.
|
# different for target-dependent ones.
|
||||||
QEMU_LOCAL_INCLUDES = -iquote $(BUILD_DIR)/$(@D) -iquote $(@D)
|
QEMU_LOCAL_INCLUDES = -iquote $(BUILD_DIR) -iquote $(BUILD_DIR)/$(@D) -iquote $(@D)
|
||||||
|
|
||||||
WL_U := -Wl,-u,
|
WL_U := -Wl,-u,
|
||||||
find-symbols = $(if $1, $(sort $(shell $(NM) -P -g $1 | $2)))
|
find-symbols = $(if $1, $(sort $(shell $(NM) -P -g $1 | $2)))
|
||||||
|
0
scripts/qapi-gen.py
Executable file → Normal file
0
scripts/qapi-gen.py
Executable file → Normal file
0
scripts/tracetool.py
Executable file → Normal file
0
scripts/tracetool.py
Executable file → Normal file
@ -38,7 +38,7 @@ def generate_h_begin(events, group):
|
|||||||
if group == "root":
|
if group == "root":
|
||||||
header = "trace-dtrace-root.h"
|
header = "trace-dtrace-root.h"
|
||||||
else:
|
else:
|
||||||
header = "trace-dtrace.h"
|
header = "trace-dtrace-%s.h" % group
|
||||||
|
|
||||||
# Workaround for ust backend, which also includes <sys/sdt.h> and may
|
# Workaround for ust backend, which also includes <sys/sdt.h> and may
|
||||||
# require SDT_USE_VARIADIC to be defined. If dtrace includes <sys/sdt.h>
|
# require SDT_USE_VARIADIC to be defined. If dtrace includes <sys/sdt.h>
|
||||||
|
@ -19,11 +19,7 @@ PUBLIC = True
|
|||||||
|
|
||||||
|
|
||||||
def generate_h_begin(events, group):
|
def generate_h_begin(events, group):
|
||||||
if group == "root":
|
header = 'trace-ust-' + group + '.h'
|
||||||
header = "trace-ust-root.h"
|
|
||||||
else:
|
|
||||||
header = "trace-ust.h"
|
|
||||||
|
|
||||||
out('#include <lttng/tracepoint.h>',
|
out('#include <lttng/tracepoint.h>',
|
||||||
'#include "%s"' % header,
|
'#include "%s"' % header,
|
||||||
'',
|
'',
|
||||||
|
@ -1 +1,3 @@
|
|||||||
storage-daemon-obj-y += qapi/
|
storage-daemon-obj-y = qapi/libqsd-qapi.fa
|
||||||
|
|
||||||
|
qemu-storage-daemon.o: storage-daemon/qapi/qapi-commands.h storage-daemon/qapi/qapi-init-commands.h
|
||||||
|
1
storage-daemon/meson.build
Normal file
1
storage-daemon/meson.build
Normal file
@ -0,0 +1 @@
|
|||||||
|
subdir('qapi')
|
@ -1 +0,0 @@
|
|||||||
storage-daemon-obj-y += qapi-commands.o qapi-init-commands.o qapi-introspect.o
|
|
10
storage-daemon/qapi/meson.build
Normal file
10
storage-daemon/qapi/meson.build
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
qsd_qapi_files = custom_target('QAPI files for qemu-storage-daemon',
|
||||||
|
output: qapi_nonmodule_outputs + ['qapi-doc.texi'],
|
||||||
|
input: [ files('qapi-schema.json') ],
|
||||||
|
command: [ qapi_gen, '-o', 'storage-daemon/qapi', '@INPUT@' ],
|
||||||
|
depend_files: [ qapi_inputs, qapi_gen_depends ])
|
||||||
|
|
||||||
|
static_library('qsd-qapi',
|
||||||
|
qsd_qapi_files.to_list(),
|
||||||
|
name_suffix: 'fa',
|
||||||
|
build_by_default: false)
|
@ -1,56 +0,0 @@
|
|||||||
stub-obj-y += blk-commit-all.o
|
|
||||||
stub-obj-y += cmos.o
|
|
||||||
stub-obj-y += cpu-get-clock.o
|
|
||||||
stub-obj-y += cpu-get-icount.o
|
|
||||||
stub-obj-y += dump.o
|
|
||||||
stub-obj-y += error-printf.o
|
|
||||||
stub-obj-y += fdset.o
|
|
||||||
stub-obj-y += gdbstub.o
|
|
||||||
stub-obj-y += iothread-lock.o
|
|
||||||
stub-obj-y += is-daemonized.o
|
|
||||||
stub-obj-y += isa-bus.o
|
|
||||||
stub-obj-$(CONFIG_LINUX_AIO) += linux-aio.o
|
|
||||||
stub-obj-$(CONFIG_LINUX_IO_URING) += io_uring.o
|
|
||||||
stub-obj-y += monitor-core.o
|
|
||||||
stub-obj-y += notify-event.o
|
|
||||||
stub-obj-y += pci-bus.o
|
|
||||||
stub-obj-y += qmp_memory_device.o
|
|
||||||
stub-obj-y += qtest.o
|
|
||||||
stub-obj-y += ramfb.o
|
|
||||||
stub-obj-y += replay.o
|
|
||||||
stub-obj-y += runstate-check.o
|
|
||||||
stub-obj-$(CONFIG_SOFTMMU) += semihost.o
|
|
||||||
stub-obj-y += set-fd-handler.o
|
|
||||||
stub-obj-y += sysbus.o
|
|
||||||
stub-obj-y += tpm.o
|
|
||||||
stub-obj-y += trace-control.o
|
|
||||||
stub-obj-y += vmgenid.o
|
|
||||||
stub-obj-y += vmstate.o
|
|
||||||
stub-obj-$(CONFIG_SOFTMMU) += win32-kbd-hook.o
|
|
||||||
|
|
||||||
#######################################################################
|
|
||||||
# code used by both qemu system emulation and qemu-img
|
|
||||||
|
|
||||||
ifeq ($(call lor,$(CONFIG_SOFTMMU),$(CONFIG_TOOLS)),y)
|
|
||||||
|
|
||||||
stub-obj-y += arch_type.o
|
|
||||||
stub-obj-y += bdrv-next-monitor-owned.o
|
|
||||||
stub-obj-y += blockdev-close-all-bdrv-states.o
|
|
||||||
stub-obj-y += change-state-handler.o
|
|
||||||
stub-obj-y += clock-warp.o
|
|
||||||
stub-obj-y += fd-register.o
|
|
||||||
stub-obj-y += fw_cfg.o
|
|
||||||
stub-obj-y += get-vm-name.o
|
|
||||||
stub-obj-y += iothread.o
|
|
||||||
stub-obj-y += machine-init-done.o
|
|
||||||
stub-obj-y += migr-blocker.o
|
|
||||||
stub-obj-y += monitor.o
|
|
||||||
stub-obj-y += pci-host-piix.o
|
|
||||||
stub-obj-y += ram-block.o
|
|
||||||
stub-obj-y += replay-user.o
|
|
||||||
stub-obj-y += target-get-monitor-def.o
|
|
||||||
stub-obj-y += target-monitor-defs.o
|
|
||||||
stub-obj-y += uuid.o
|
|
||||||
stub-obj-y += vm-stop.o
|
|
||||||
|
|
||||||
endif # CONFIG_SOFTMMU || CONFIG_TOOLS
|
|
50
stubs/meson.build
Normal file
50
stubs/meson.build
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
stub_ss.add(files('arch_type.c'))
|
||||||
|
stub_ss.add(files('bdrv-next-monitor-owned.c'))
|
||||||
|
stub_ss.add(files('blk-commit-all.c'))
|
||||||
|
stub_ss.add(files('blockdev-close-all-bdrv-states.c'))
|
||||||
|
stub_ss.add(files('change-state-handler.c'))
|
||||||
|
stub_ss.add(files('clock-warp.c'))
|
||||||
|
stub_ss.add(files('cmos.c'))
|
||||||
|
stub_ss.add(files('cpu-get-clock.c'))
|
||||||
|
stub_ss.add(files('cpu-get-icount.c'))
|
||||||
|
stub_ss.add(files('dump.c'))
|
||||||
|
stub_ss.add(files('error-printf.c'))
|
||||||
|
stub_ss.add(files('fd-register.c'))
|
||||||
|
stub_ss.add(files('fdset.c'))
|
||||||
|
stub_ss.add(files('fw_cfg.c'))
|
||||||
|
stub_ss.add(files('gdbstub.c'))
|
||||||
|
stub_ss.add(files('get-vm-name.c'))
|
||||||
|
stub_ss.add(when: 'CONFIG_LINUX_IO_URING', if_true: files('io_uring.c'))
|
||||||
|
stub_ss.add(files('iothread.c'))
|
||||||
|
stub_ss.add(files('iothread-lock.c'))
|
||||||
|
stub_ss.add(files('isa-bus.c'))
|
||||||
|
stub_ss.add(files('is-daemonized.c'))
|
||||||
|
stub_ss.add(when: 'CONFIG_LINUX_AIO', if_true: files('linux-aio.c'))
|
||||||
|
stub_ss.add(files('machine-init-done.c'))
|
||||||
|
stub_ss.add(files('migr-blocker.c'))
|
||||||
|
stub_ss.add(files('monitor.c'))
|
||||||
|
stub_ss.add(files('monitor-core.c'))
|
||||||
|
stub_ss.add(files('notify-event.c'))
|
||||||
|
stub_ss.add(files('pci-bus.c'))
|
||||||
|
stub_ss.add(files('pci-host-piix.c'))
|
||||||
|
stub_ss.add(files('qmp_memory_device.c'))
|
||||||
|
stub_ss.add(files('qtest.c'))
|
||||||
|
stub_ss.add(files('ram-block.c'))
|
||||||
|
stub_ss.add(files('ramfb.c'))
|
||||||
|
stub_ss.add(files('replay.c'))
|
||||||
|
stub_ss.add(files('replay-user.c'))
|
||||||
|
stub_ss.add(files('runstate-check.c'))
|
||||||
|
stub_ss.add(files('set-fd-handler.c'))
|
||||||
|
stub_ss.add(files('sysbus.c'))
|
||||||
|
stub_ss.add(files('target-get-monitor-def.c'))
|
||||||
|
stub_ss.add(files('target-monitor-defs.c'))
|
||||||
|
stub_ss.add(files('tpm.c'))
|
||||||
|
stub_ss.add(files('trace-control.c'))
|
||||||
|
stub_ss.add(files('uuid.c'))
|
||||||
|
stub_ss.add(files('vmgenid.c'))
|
||||||
|
stub_ss.add(files('vmstate.c'))
|
||||||
|
stub_ss.add(files('vm-stop.c'))
|
||||||
|
stub_ss.add(files('win32-kbd-hook.c'))
|
||||||
|
if have_system
|
||||||
|
stub_ss.add(files('semihost.c'))
|
||||||
|
endif
|
@ -1,59 +1,8 @@
|
|||||||
# -*- mode: makefile -*-
|
# -*- mode: makefile -*-
|
||||||
|
|
||||||
$(BUILD_DIR)/trace-events-all: $(trace-events-files)
|
|
||||||
$(call quiet-command,cat $^ > $@)
|
|
||||||
|
|
||||||
|
|
||||||
##################################################
|
##################################################
|
||||||
# Translation level
|
# Translation level
|
||||||
|
|
||||||
$(obj)/generated-helpers-wrappers.h: $(obj)/generated-helpers-wrappers.h-timestamp
|
|
||||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
|
||||||
$(obj)/generated-helpers-wrappers.h-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
|
||||||
$(call quiet-command,$(TRACETOOL) \
|
|
||||||
--group=root \
|
|
||||||
--format=tcg-helper-wrapper-h \
|
|
||||||
--backend=$(TRACE_BACKENDS) \
|
|
||||||
$< > $@,"GEN","$(patsubst %-timestamp,%,$@)")
|
|
||||||
|
|
||||||
$(obj)/generated-helpers.h: $(obj)/generated-helpers.h-timestamp
|
|
||||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
|
||||||
$(obj)/generated-helpers.h-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
|
||||||
$(call quiet-command,$(TRACETOOL) \
|
|
||||||
--group=root \
|
|
||||||
--format=tcg-helper-h \
|
|
||||||
--backend=$(TRACE_BACKENDS) \
|
|
||||||
$< > $@,"GEN","$(patsubst %-timestamp,%,$@)")
|
|
||||||
|
|
||||||
$(obj)/generated-helpers.c: $(obj)/generated-helpers.c-timestamp
|
|
||||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
|
||||||
$(obj)/generated-helpers.c-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
|
||||||
$(call quiet-command,$(TRACETOOL) \
|
|
||||||
--group=root \
|
|
||||||
--format=tcg-helper-c \
|
|
||||||
--backend=$(TRACE_BACKENDS) \
|
|
||||||
$< > $@,"GEN","$(patsubst %-timestamp,%,$@)")
|
|
||||||
|
|
||||||
$(obj)/generated-helpers.o: $(obj)/generated-helpers.c
|
|
||||||
|
|
||||||
obj-y += generated-helpers.o
|
obj-y += generated-helpers.o
|
||||||
|
|
||||||
|
|
||||||
$(obj)/generated-tcg-tracers.h: $(obj)/generated-tcg-tracers.h-timestamp
|
|
||||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
|
||||||
$(obj)/generated-tcg-tracers.h-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
|
||||||
$(call quiet-command,$(TRACETOOL) \
|
|
||||||
--group=root \
|
|
||||||
--format=tcg-h \
|
|
||||||
--backend=$(TRACE_BACKENDS) \
|
|
||||||
$< > $@,"GEN","$(patsubst %-timestamp,%,$@)")
|
|
||||||
|
|
||||||
|
|
||||||
######################################################################
|
|
||||||
# Backend code
|
|
||||||
|
|
||||||
util-obj-$(CONFIG_TRACE_SIMPLE) += simple.o
|
|
||||||
util-obj-$(CONFIG_TRACE_FTRACE) += ftrace.o
|
|
||||||
util-obj-y += control.o
|
|
||||||
obj-y += control-target.o
|
obj-y += control-target.o
|
||||||
util-obj-y += qmp.o
|
|
||||||
|
76
trace/meson.build
Normal file
76
trace/meson.build
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
trace_events_files = []
|
||||||
|
foreach dir : [ '.' ] + trace_events_subdirs
|
||||||
|
trace_events_file = meson.source_root() / dir / 'trace-events'
|
||||||
|
trace_events_files += [ trace_events_file ]
|
||||||
|
group_name = dir == '.' ? 'root' : dir.underscorify()
|
||||||
|
group = '--group=' + group_name
|
||||||
|
fmt = '@0@-' + group_name + '.@1@'
|
||||||
|
|
||||||
|
trace_h = custom_target(fmt.format('trace', 'h'),
|
||||||
|
output: fmt.format('trace', 'h'),
|
||||||
|
input: trace_events_file,
|
||||||
|
command: [ tracetool, group, '--format=h', '@INPUT@' ],
|
||||||
|
capture: true)
|
||||||
|
genh += trace_h
|
||||||
|
trace_c = custom_target(fmt.format('trace', 'c'),
|
||||||
|
output: fmt.format('trace', 'c'),
|
||||||
|
input: trace_events_file,
|
||||||
|
command: [ tracetool, group, '--format=c', '@INPUT@' ],
|
||||||
|
capture: true)
|
||||||
|
if 'CONFIG_TRACE_UST' in config_host
|
||||||
|
trace_ust_h = custom_target(fmt.format('trace-ust', 'h'),
|
||||||
|
output: fmt.format('trace-ust', 'h'),
|
||||||
|
input: trace_events_file,
|
||||||
|
command: [ tracetool, group, '--format=ust-events-h', '@INPUT@' ],
|
||||||
|
capture: true)
|
||||||
|
trace_ss.add(trace_ust_h, lttng, urcubp)
|
||||||
|
genh += trace_ust_h
|
||||||
|
endif
|
||||||
|
trace_ss.add(trace_h, trace_c)
|
||||||
|
if 'CONFIG_TRACE_DTRACE' in config_host
|
||||||
|
trace_dtrace = custom_target(fmt.format('trace-dtrace', 'dtrace'),
|
||||||
|
output: fmt.format('trace-dtrace', 'dtrace'),
|
||||||
|
input: trace_events_file,
|
||||||
|
command: [ tracetool, group, '--format=d', '@INPUT@' ],
|
||||||
|
capture: true)
|
||||||
|
trace_dtrace_h = custom_target(fmt.format('trace-dtrace', 'h'),
|
||||||
|
output: fmt.format('trace-dtrace', 'h'),
|
||||||
|
input: trace_dtrace,
|
||||||
|
command: [ 'dtrace', '-o', '@OUTPUT@', '-h', '-s', '@INPUT@' ])
|
||||||
|
trace_dtrace_o = custom_target(fmt.format('trace-dtrace', 'o'),
|
||||||
|
output: fmt.format('trace-dtrace', 'o'),
|
||||||
|
input: trace_dtrace,
|
||||||
|
command: [ 'dtrace', '-o', '@OUTPUT@', '-G', '-s', '@INPUT@' ])
|
||||||
|
|
||||||
|
trace_ss.add(trace_dtrace_h, trace_dtrace_o)
|
||||||
|
genh += trace_dtrace_h
|
||||||
|
endif
|
||||||
|
endforeach
|
||||||
|
|
||||||
|
custom_target('trace-events-all',
|
||||||
|
output: 'trace-events-all',
|
||||||
|
input: trace_events_files,
|
||||||
|
command: [ 'cat', '@INPUT@' ],
|
||||||
|
capture: true,
|
||||||
|
install: true,
|
||||||
|
install_dir: config_host['qemu_datadir'])
|
||||||
|
|
||||||
|
if 'CONFIG_TRACE_UST' in config_host
|
||||||
|
trace_ust_all_h = custom_target('trace-ust-all.h',
|
||||||
|
output: 'trace-ust-all.h',
|
||||||
|
input: trace_events_files,
|
||||||
|
command: [ tracetool, '--group=all', '--format=ust-events-h', '@INPUT@' ],
|
||||||
|
capture: true)
|
||||||
|
trace_ust_all_c = custom_target('trace-ust-all.c',
|
||||||
|
output: 'trace-ust-all.c',
|
||||||
|
input: trace_events_files,
|
||||||
|
command: [ tracetool, '--group=all', '--format=ust-events-c', '@INPUT@' ],
|
||||||
|
capture: true)
|
||||||
|
trace_ss.add(trace_ust_all_h, trace_ust_all_c)
|
||||||
|
genh += trace_ust_all_h
|
||||||
|
endif
|
||||||
|
|
||||||
|
trace_ss.add(when: 'CONFIG_TRACE_SIMPLE', if_true: files('simple.c'))
|
||||||
|
trace_ss.add(when: 'CONFIG_TRACE_FTRACE', if_true: files('ftrace.c'))
|
||||||
|
trace_ss.add(files('control.c'))
|
||||||
|
trace_ss.add(files('qmp.c'))
|
@ -1,83 +0,0 @@
|
|||||||
util-obj-y = osdep.o cutils.o unicode.o qemu-timer-common.o
|
|
||||||
util-obj-$(call lnot,$(CONFIG_ATOMIC64)) += atomic64.o
|
|
||||||
util-obj-$(CONFIG_POSIX) += aio-posix.o
|
|
||||||
util-obj-$(CONFIG_POSIX) += fdmon-poll.o
|
|
||||||
util-obj-$(CONFIG_EPOLL_CREATE1) += fdmon-epoll.o
|
|
||||||
util-obj-$(CONFIG_LINUX_IO_URING) += fdmon-io_uring.o
|
|
||||||
util-obj-$(CONFIG_POSIX) += compatfd.o
|
|
||||||
util-obj-$(CONFIG_POSIX) += event_notifier-posix.o
|
|
||||||
util-obj-$(CONFIG_POSIX) += mmap-alloc.o
|
|
||||||
util-obj-$(CONFIG_POSIX) += oslib-posix.o
|
|
||||||
util-obj-$(CONFIG_POSIX) += qemu-openpty.o
|
|
||||||
util-obj-$(CONFIG_POSIX) += qemu-thread-posix.o
|
|
||||||
util-obj-$(CONFIG_POSIX) += memfd.o
|
|
||||||
util-obj-$(CONFIG_WIN32) += aio-win32.o
|
|
||||||
util-obj-$(CONFIG_WIN32) += event_notifier-win32.o
|
|
||||||
util-obj-$(CONFIG_WIN32) += oslib-win32.o
|
|
||||||
util-obj-$(CONFIG_WIN32) += qemu-thread-win32.o
|
|
||||||
util-obj-y += envlist.o path.o module.o
|
|
||||||
util-obj-y += host-utils.o
|
|
||||||
util-obj-y += bitmap.o bitops.o
|
|
||||||
util-obj-y += fifo8.o
|
|
||||||
util-obj-y += cacheinfo.o
|
|
||||||
util-obj-y += error.o qemu-error.o
|
|
||||||
util-obj-y += qemu-print.o
|
|
||||||
util-obj-y += id.o
|
|
||||||
util-obj-y += qemu-config.o notify.o
|
|
||||||
util-obj-y += qemu-option.o qemu-progress.o
|
|
||||||
util-obj-y += keyval.o
|
|
||||||
util-obj-y += crc32c.o
|
|
||||||
util-obj-y += uuid.o
|
|
||||||
util-obj-y += getauxval.o
|
|
||||||
util-obj-y += rcu.o
|
|
||||||
util-obj-$(CONFIG_MEMBARRIER) += sys_membarrier.o
|
|
||||||
util-obj-y += log.o
|
|
||||||
util-obj-y += pagesize.o
|
|
||||||
util-obj-y += qdist.o
|
|
||||||
util-obj-y += qht.o
|
|
||||||
util-obj-y += qsp.o
|
|
||||||
util-obj-y += range.o
|
|
||||||
util-obj-y += stats64.o
|
|
||||||
util-obj-y += systemd.o
|
|
||||||
util-obj-$(CONFIG_POSIX) += drm.o
|
|
||||||
util-obj-y += guest-random.o
|
|
||||||
util-obj-$(CONFIG_GIO) += dbus.o
|
|
||||||
dbus.o-cflags = $(GIO_CFLAGS)
|
|
||||||
dbus.o-libs = $(GIO_LIBS)
|
|
||||||
util-obj-$(CONFIG_USER_ONLY) += selfmap.o
|
|
||||||
|
|
||||||
#######################################################################
|
|
||||||
# code used by both qemu system emulation and qemu-img
|
|
||||||
|
|
||||||
ifeq ($(call lor,$(CONFIG_SOFTMMU),$(CONFIG_TOOLS)),y)
|
|
||||||
|
|
||||||
util-obj-y += aio-wait.o
|
|
||||||
util-obj-y += aiocb.o
|
|
||||||
util-obj-y += async.o
|
|
||||||
util-obj-y += base64.o
|
|
||||||
util-obj-y += buffer.o
|
|
||||||
util-obj-y += bufferiszero.o
|
|
||||||
util-obj-y += coroutine-$(CONFIG_COROUTINE_BACKEND).o
|
|
||||||
util-obj-y += hexdump.o
|
|
||||||
util-obj-y += lockcnt.o
|
|
||||||
util-obj-y += iov.o
|
|
||||||
util-obj-y += iova-tree.o
|
|
||||||
util-obj-y += hbitmap.o
|
|
||||||
util-obj-y += main-loop.o
|
|
||||||
util-obj-y += nvdimm-utils.o
|
|
||||||
util-obj-y += qemu-coroutine.o qemu-coroutine-lock.o qemu-coroutine-io.o
|
|
||||||
util-obj-y += qemu-coroutine-sleep.o
|
|
||||||
util-obj-y += qemu-co-shared-resource.o
|
|
||||||
util-obj-y += qemu-sockets.o
|
|
||||||
util-obj-y += qemu-timer.o
|
|
||||||
util-obj-y += thread-pool.o
|
|
||||||
util-obj-y += throttle.o
|
|
||||||
util-obj-y += timed-average.o
|
|
||||||
util-obj-y += uri.o
|
|
||||||
|
|
||||||
util-obj-$(CONFIG_LINUX) += vfio-helpers.o
|
|
||||||
util-obj-$(CONFIG_INOTIFY1) += filemonitor-inotify.o
|
|
||||||
util-obj-$(call lnot,$(CONFIG_INOTIFY1)) += filemonitor-stub.o
|
|
||||||
util-obj-$(CONFIG_BLOCK) += readline.o
|
|
||||||
|
|
||||||
endif # CONFIG_SOFTMMU || CONFIG_TOOLS
|
|
78
util/meson.build
Normal file
78
util/meson.build
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
util_ss.add(dependency('threads'))
|
||||||
|
util_ss.add(files('osdep.c', 'cutils.c', 'unicode.c', 'qemu-timer-common.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_ATOMIC64', if_false: files('atomic64.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_POSIX', if_true: files('aio-posix.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_POSIX', if_true: files('fdmon-poll.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_EPOLL_CREATE1', if_true: files('fdmon-epoll.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_LINUX_IO_URING', if_true: files('fdmon-io_uring.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_POSIX', if_true: files('compatfd.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_POSIX', if_true: files('event_notifier-posix.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_POSIX', if_true: files('mmap-alloc.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_POSIX', if_true: files('oslib-posix.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_POSIX', if_true: [files('qemu-openpty.c'), util])
|
||||||
|
util_ss.add(when: 'CONFIG_POSIX', if_true: files('qemu-thread-posix.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_POSIX', if_true: files('memfd.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_WIN32', if_true: files('aio-win32.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_WIN32', if_true: files('event_notifier-win32.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_WIN32', if_true: files('oslib-win32.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_WIN32', if_true: files('qemu-thread-win32.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_WIN32', if_true: winmm)
|
||||||
|
util_ss.add(files('envlist.c', 'path.c', 'module.c'))
|
||||||
|
util_ss.add(files('host-utils.c'))
|
||||||
|
util_ss.add(files('bitmap.c', 'bitops.c'))
|
||||||
|
util_ss.add(files('fifo8.c'))
|
||||||
|
util_ss.add(files('cacheinfo.c'))
|
||||||
|
util_ss.add(files('error.c', 'qemu-error.c'))
|
||||||
|
util_ss.add(files('qemu-print.c'))
|
||||||
|
util_ss.add(files('id.c'))
|
||||||
|
util_ss.add(files('qemu-config.c', 'notify.c'))
|
||||||
|
util_ss.add(files('qemu-option.c', 'qemu-progress.c'))
|
||||||
|
util_ss.add(files('keyval.c'))
|
||||||
|
util_ss.add(files('crc32c.c'))
|
||||||
|
util_ss.add(files('uuid.c'))
|
||||||
|
util_ss.add(files('getauxval.c'))
|
||||||
|
util_ss.add(files('rcu.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_MEMBARRIER', if_true: files('sys_membarrier.c'))
|
||||||
|
util_ss.add(files('log.c'))
|
||||||
|
util_ss.add(files('pagesize.c'))
|
||||||
|
util_ss.add(files('qdist.c'))
|
||||||
|
util_ss.add(files('qht.c'))
|
||||||
|
util_ss.add(files('qsp.c'))
|
||||||
|
util_ss.add(files('range.c'))
|
||||||
|
util_ss.add(files('stats64.c'))
|
||||||
|
util_ss.add(files('systemd.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_POSIX', if_true: files('drm.c'))
|
||||||
|
util_ss.add(files('guest-random.c'))
|
||||||
|
|
||||||
|
if have_user
|
||||||
|
util_ss.add(files('selfmap.c'))
|
||||||
|
endif
|
||||||
|
|
||||||
|
if have_system
|
||||||
|
util_ss.add(when: 'CONFIG_GIO', if_true: [files('dbus.c'), gio])
|
||||||
|
endif
|
||||||
|
|
||||||
|
if have_block
|
||||||
|
util_ss.add(files('aiocb.c', 'async.c', 'aio-wait.c'))
|
||||||
|
util_ss.add(files('base64.c'))
|
||||||
|
util_ss.add(files('buffer.c'))
|
||||||
|
util_ss.add(files('bufferiszero.c'))
|
||||||
|
util_ss.add(files('coroutine-@0@.c'.format(config_host['CONFIG_COROUTINE_BACKEND'])))
|
||||||
|
util_ss.add(files('hbitmap.c'))
|
||||||
|
util_ss.add(files('hexdump.c'))
|
||||||
|
util_ss.add(files('iova-tree.c'))
|
||||||
|
util_ss.add(files('iov.c', 'qemu-sockets.c', 'uri.c'))
|
||||||
|
util_ss.add(files('lockcnt.c'))
|
||||||
|
util_ss.add(files('main-loop.c'))
|
||||||
|
util_ss.add(files('nvdimm-utils.c'))
|
||||||
|
util_ss.add(files('qemu-coroutine.c', 'qemu-coroutine-lock.c', 'qemu-coroutine-io.c'))
|
||||||
|
util_ss.add(files('qemu-coroutine-sleep.c'))
|
||||||
|
util_ss.add(files('qemu-co-shared-resource.c'))
|
||||||
|
util_ss.add(files('thread-pool.c', 'qemu-timer.c'))
|
||||||
|
util_ss.add(files('readline.c'))
|
||||||
|
util_ss.add(files('throttle.c'))
|
||||||
|
util_ss.add(files('timed-average.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_INOTIFY1', if_true: files('filemonitor-inotify.c'),
|
||||||
|
if_false: files('filemonitor-stub.c'))
|
||||||
|
util_ss.add(when: 'CONFIG_LINUX', if_true: files('vfio-helpers.c'))
|
||||||
|
endif
|
Loading…
Reference in New Issue
Block a user