qapi: Generate command registration stuff into separate files
Having to include qapi-commands.h just for qmp_init_marshal() is suboptimal. Generate it into separate files. This lets monitor/misc.c, qga/main.c, and the generated qapi-commands-FOO.h include less. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20191120182551.23795-4-armbru@redhat.com> [Typos in docs/devel/qapi-code-gen.txt fixed] Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
0cc0e26894
commit
00ca24ff9e
1
.gitignore
vendored
1
.gitignore
vendored
@ -37,6 +37,7 @@
|
|||||||
/qapi/qapi-emit-events.[ch]
|
/qapi/qapi-emit-events.[ch]
|
||||||
/qapi/qapi-events-*.[ch]
|
/qapi/qapi-events-*.[ch]
|
||||||
/qapi/qapi-events.[ch]
|
/qapi/qapi-events.[ch]
|
||||||
|
/qapi/qapi-init-commands.[ch]
|
||||||
/qapi/qapi-introspect.[ch]
|
/qapi/qapi-introspect.[ch]
|
||||||
/qapi/qapi-types-*.[ch]
|
/qapi/qapi-types-*.[ch]
|
||||||
/qapi/qapi-types.[ch]
|
/qapi/qapi-types.[ch]
|
||||||
|
4
Makefile
4
Makefile
@ -117,6 +117,7 @@ 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/qapi-visit.h qapi/qapi-visit.c
|
||||||
GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-visit-%.h)
|
GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-visit-%.h)
|
||||||
GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-visit-%.c)
|
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/qapi-commands.h qapi/qapi-commands.c
|
||||||
GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-commands-%.h)
|
GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-commands-%.h)
|
||||||
GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-commands-%.c)
|
GENERATED_QAPI_FILES += $(QAPI_MODULES:%=qapi/qapi-commands-%.c)
|
||||||
@ -601,6 +602,7 @@ $(SRC_PATH)/scripts/qapi-gen.py
|
|||||||
qga/qapi-generated/qga-qapi-types.c qga/qapi-generated/qga-qapi-types.h \
|
qga/qapi-generated/qga-qapi-types.c qga/qapi-generated/qga-qapi-types.h \
|
||||||
qga/qapi-generated/qga-qapi-visit.c qga/qapi-generated/qga-qapi-visit.h \
|
qga/qapi-generated/qga-qapi-visit.c qga/qapi-generated/qga-qapi-visit.h \
|
||||||
qga/qapi-generated/qga-qapi-commands.h qga/qapi-generated/qga-qapi-commands.c \
|
qga/qapi-generated/qga-qapi-commands.h qga/qapi-generated/qga-qapi-commands.c \
|
||||||
|
qga/qapi-generated/qga-qapi-init-commands.h qga/qapi-generated/qga-qapi-init-commands.c \
|
||||||
qga/qapi-generated/qga-qapi-doc.texi: \
|
qga/qapi-generated/qga-qapi-doc.texi: \
|
||||||
qga/qapi-generated/qapi-gen-timestamp ;
|
qga/qapi-generated/qapi-gen-timestamp ;
|
||||||
qga/qapi-generated/qapi-gen-timestamp: $(SRC_PATH)/qga/qapi-schema.json $(qapi-py)
|
qga/qapi-generated/qapi-gen-timestamp: $(SRC_PATH)/qga/qapi-schema.json $(qapi-py)
|
||||||
@ -619,7 +621,7 @@ qapi-gen-timestamp: $(qapi-modules) $(qapi-py)
|
|||||||
"GEN","$(@:%-timestamp=%)")
|
"GEN","$(@:%-timestamp=%)")
|
||||||
@>$@
|
@>$@
|
||||||
|
|
||||||
QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qapi-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)
|
||||||
|
|
||||||
qemu-ga$(EXESUF): $(qga-obj-y) $(COMMON_LDADDS)
|
qemu-ga$(EXESUF): $(qga-obj-y) $(COMMON_LDADDS)
|
||||||
|
@ -1493,6 +1493,10 @@ $(prefix)qapi-commands.c: Command marshal/dispatch functions for each
|
|||||||
$(prefix)qapi-commands.h: Function prototypes for the QMP commands
|
$(prefix)qapi-commands.h: Function prototypes for the QMP commands
|
||||||
specified in the schema
|
specified in the schema
|
||||||
|
|
||||||
|
$(prefix)qapi-init-commands.h - Command initialization prototype
|
||||||
|
|
||||||
|
$(prefix)qapi-init-commands.c - Command initialization code
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
$ cat qapi-generated/example-qapi-commands.h
|
$ cat qapi-generated/example-qapi-commands.h
|
||||||
@ -1502,11 +1506,9 @@ Example:
|
|||||||
#define EXAMPLE_QAPI_COMMANDS_H
|
#define EXAMPLE_QAPI_COMMANDS_H
|
||||||
|
|
||||||
#include "example-qapi-types.h"
|
#include "example-qapi-types.h"
|
||||||
#include "qapi/qmp/dispatch.h"
|
|
||||||
|
|
||||||
UserDefOne *qmp_my_command(UserDefOneList *arg1, Error **errp);
|
UserDefOne *qmp_my_command(UserDefOneList *arg1, Error **errp);
|
||||||
void qmp_marshal_my_command(QDict *args, QObject **ret, Error **errp);
|
void qmp_marshal_my_command(QDict *args, QObject **ret, Error **errp);
|
||||||
void example_qmp_init_marshal(QmpCommandList *cmds);
|
|
||||||
|
|
||||||
#endif /* EXAMPLE_QAPI_COMMANDS_H */
|
#endif /* EXAMPLE_QAPI_COMMANDS_H */
|
||||||
$ cat qapi-generated/example-qapi-commands.c
|
$ cat qapi-generated/example-qapi-commands.c
|
||||||
@ -1566,7 +1568,19 @@ Example:
|
|||||||
visit_end_struct(v, NULL);
|
visit_end_struct(v, NULL);
|
||||||
visit_free(v);
|
visit_free(v);
|
||||||
}
|
}
|
||||||
|
[Uninteresting stuff omitted...]
|
||||||
|
$ cat qapi-generated/example-qapi-init-commands.h
|
||||||
|
[Uninteresting stuff omitted...]
|
||||||
|
#ifndef EXAMPLE_QAPI_INIT_COMMANDS_H
|
||||||
|
#define EXAMPLE_QAPI_INIT_COMMANDS_H
|
||||||
|
|
||||||
|
#include "qapi/qmp/dispatch.h"
|
||||||
|
|
||||||
|
void example_qmp_init_marshal(QmpCommandList *cmds);
|
||||||
|
|
||||||
|
#endif /* EXAMPLE_QAPI_INIT_COMMANDS_H */
|
||||||
|
$ cat qapi-generated/example-qapi-init-commands.c
|
||||||
|
[Uninteresting stuff omitted...]
|
||||||
void example_qmp_init_marshal(QmpCommandList *cmds)
|
void example_qmp_init_marshal(QmpCommandList *cmds)
|
||||||
{
|
{
|
||||||
QTAILQ_INIT(cmds);
|
QTAILQ_INIT(cmds);
|
||||||
@ -1574,7 +1588,6 @@ Example:
|
|||||||
qmp_register_command(cmds, "my-command",
|
qmp_register_command(cmds, "my-command",
|
||||||
qmp_marshal_my_command, QCO_NO_OPTIONS);
|
qmp_marshal_my_command, QCO_NO_OPTIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Uninteresting stuff omitted...]
|
[Uninteresting stuff omitted...]
|
||||||
|
|
||||||
For a modular QAPI schema (see section Include directives), code for
|
For a modular QAPI schema (see section Include directives), code for
|
||||||
|
@ -66,8 +66,13 @@
|
|||||||
#include "qemu/option.h"
|
#include "qemu/option.h"
|
||||||
#include "qemu/thread.h"
|
#include "qemu/thread.h"
|
||||||
#include "block/qapi.h"
|
#include "block/qapi.h"
|
||||||
#include "qapi/qapi-commands.h"
|
#include "qapi/qapi-commands-char.h"
|
||||||
|
#include "qapi/qapi-commands-migration.h"
|
||||||
|
#include "qapi/qapi-commands-misc.h"
|
||||||
|
#include "qapi/qapi-commands-qom.h"
|
||||||
|
#include "qapi/qapi-commands-trace.h"
|
||||||
#include "qapi/qapi-emit-events.h"
|
#include "qapi/qapi-emit-events.h"
|
||||||
|
#include "qapi/qapi-init-commands.h"
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "qapi/qmp-event.h"
|
#include "qapi/qmp-event.h"
|
||||||
#include "qapi/qapi-introspect.h"
|
#include "qapi/qapi-introspect.h"
|
||||||
|
@ -30,3 +30,4 @@ obj-y += $(QAPI_TARGET_MODULES:%=qapi-events-%.o)
|
|||||||
obj-y += qapi-events.o
|
obj-y += qapi-events.o
|
||||||
obj-y += $(QAPI_TARGET_MODULES:%=qapi-commands-%.o)
|
obj-y += $(QAPI_TARGET_MODULES:%=qapi-commands-%.o)
|
||||||
obj-y += qapi-commands.o
|
obj-y += qapi-commands.o
|
||||||
|
obj-y += qapi-init-commands.o
|
||||||
|
@ -5,5 +5,6 @@ qga-obj-$(CONFIG_WIN32) += commands-win32.o channel-win32.o service-win32.o
|
|||||||
qga-obj-$(CONFIG_WIN32) += vss-win32.o
|
qga-obj-$(CONFIG_WIN32) += vss-win32.o
|
||||||
qga-obj-y += qapi-generated/qga-qapi-types.o qapi-generated/qga-qapi-visit.o
|
qga-obj-y += qapi-generated/qga-qapi-types.o qapi-generated/qga-qapi-visit.o
|
||||||
qga-obj-y += qapi-generated/qga-qapi-commands.o
|
qga-obj-y += qapi-generated/qga-qapi-commands.o
|
||||||
|
qga-obj-y += qapi-generated/qga-qapi-init-commands.o
|
||||||
|
|
||||||
qga-vss-dll-obj-$(CONFIG_QGA_VSS) += vss-win32/
|
qga-vss-dll-obj-$(CONFIG_QGA_VSS) += vss-win32/
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
#include "qapi/qmp/qjson.h"
|
#include "qapi/qmp/qjson.h"
|
||||||
#include "qapi/qmp/qstring.h"
|
#include "qapi/qmp/qstring.h"
|
||||||
#include "guest-agent-core.h"
|
#include "guest-agent-core.h"
|
||||||
#include "qga-qapi-commands.h"
|
#include "qga-qapi-init-commands.h"
|
||||||
#include "qapi/qmp/qerror.h"
|
#include "qapi/qmp/qerror.h"
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "channel.h"
|
#include "channel.h"
|
||||||
|
@ -263,18 +263,25 @@ class QAPISchemaGenCommandVisitor(QAPISchemaModularCVisitor):
|
|||||||
commands=commands, visit=visit))
|
commands=commands, visit=visit))
|
||||||
self._genh.add(mcgen('''
|
self._genh.add(mcgen('''
|
||||||
#include "%(types)s.h"
|
#include "%(types)s.h"
|
||||||
#include "qapi/qmp/dispatch.h"
|
|
||||||
|
|
||||||
''',
|
''',
|
||||||
types=types))
|
types=types))
|
||||||
|
|
||||||
def visit_end(self):
|
def visit_end(self):
|
||||||
(genc, genh) = self._module[self._main_module]
|
self._add_system_module('init', ' * QAPI Commands initialization')
|
||||||
genh.add(mcgen('''
|
self._genh.add(mcgen('''
|
||||||
|
#include "qapi/qmp/dispatch.h"
|
||||||
|
|
||||||
void %(c_prefix)sqmp_init_marshal(QmpCommandList *cmds);
|
void %(c_prefix)sqmp_init_marshal(QmpCommandList *cmds);
|
||||||
''',
|
''',
|
||||||
c_prefix=c_name(self._prefix, protect=False)))
|
c_prefix=c_name(self._prefix, protect=False)))
|
||||||
genc.add(gen_registry(self._regy.get_content(), self._prefix))
|
self._genc.preamble_add(mcgen('''
|
||||||
|
#include "qemu/osdep.h"
|
||||||
|
#include "%(prefix)sqapi-commands.h"
|
||||||
|
#include "%(prefix)sqapi-init-commands.h"
|
||||||
|
''',
|
||||||
|
prefix=self._prefix))
|
||||||
|
self._genc.add(gen_registry(self._regy.get_content(), self._prefix))
|
||||||
|
|
||||||
def visit_command(self, name, info, ifcond, arg_type, ret_type, gen,
|
def visit_command(self, name, info, ifcond, arg_type, ret_type, gen,
|
||||||
success_response, boxed, allow_oob, allow_preconfig,
|
success_response, boxed, allow_oob, allow_preconfig,
|
||||||
|
1
tests/.gitignore
vendored
1
tests/.gitignore
vendored
@ -12,6 +12,7 @@ test-*
|
|||||||
!test-*.c
|
!test-*.c
|
||||||
!docker/test-*
|
!docker/test-*
|
||||||
test-qapi-commands.[ch]
|
test-qapi-commands.[ch]
|
||||||
|
test-qapi-init-commands.[ch]
|
||||||
include/test-qapi-commands-sub-module.[ch]
|
include/test-qapi-commands-sub-module.[ch]
|
||||||
test-qapi-commands-sub-sub-module.[ch]
|
test-qapi-commands-sub-sub-module.[ch]
|
||||||
test-qapi-emit-events.[ch]
|
test-qapi-emit-events.[ch]
|
||||||
|
@ -504,6 +504,7 @@ generated-files-y += tests/test-qapi-visit.h
|
|||||||
generated-files-y += tests/include/test-qapi-visit-sub-module.h
|
generated-files-y += tests/include/test-qapi-visit-sub-module.h
|
||||||
generated-files-y += tests/test-qapi-visit-sub-sub-module.h
|
generated-files-y += tests/test-qapi-visit-sub-sub-module.h
|
||||||
generated-files-y += tests/test-qapi-commands.h
|
generated-files-y += tests/test-qapi-commands.h
|
||||||
|
generated-files-y += tests/test-qapi-init-commands.h
|
||||||
generated-files-y += tests/include/test-qapi-commands-sub-module.h
|
generated-files-y += tests/include/test-qapi-commands-sub-module.h
|
||||||
generated-files-y += tests/test-qapi-commands-sub-sub-module.h
|
generated-files-y += tests/test-qapi-commands-sub-sub-module.h
|
||||||
generated-files-y += tests/test-qapi-emit-events.h
|
generated-files-y += tests/test-qapi-emit-events.h
|
||||||
@ -617,6 +618,8 @@ tests/test-qapi-commands-sub-sub-module.h \
|
|||||||
tests/test-qapi-commands-sub-sub-module.c \
|
tests/test-qapi-commands-sub-sub-module.c \
|
||||||
tests/test-qapi-emit-events.c tests/test-qapi-emit-events.h \
|
tests/test-qapi-emit-events.c tests/test-qapi-emit-events.h \
|
||||||
tests/test-qapi-events.c tests/test-qapi-events.h \
|
tests/test-qapi-events.c tests/test-qapi-events.h \
|
||||||
|
tests/test-qapi-init-commands.c \
|
||||||
|
tests/test-qapi-init-commands.h \
|
||||||
tests/include/test-qapi-events-sub-module.c \
|
tests/include/test-qapi-events-sub-module.c \
|
||||||
tests/include/test-qapi-events-sub-module.h \
|
tests/include/test-qapi-events-sub-module.h \
|
||||||
tests/test-qapi-events-sub-sub-module.c \
|
tests/test-qapi-events-sub-sub-module.c \
|
||||||
@ -660,7 +663,7 @@ tests/test-qmp-event$(EXESUF): tests/test-qmp-event.o $(test-qapi-obj-y) tests/t
|
|||||||
tests/test-qobject-output-visitor$(EXESUF): tests/test-qobject-output-visitor.o $(test-qapi-obj-y)
|
tests/test-qobject-output-visitor$(EXESUF): tests/test-qobject-output-visitor.o $(test-qapi-obj-y)
|
||||||
tests/test-clone-visitor$(EXESUF): tests/test-clone-visitor.o $(test-qapi-obj-y)
|
tests/test-clone-visitor$(EXESUF): tests/test-clone-visitor.o $(test-qapi-obj-y)
|
||||||
tests/test-qobject-input-visitor$(EXESUF): tests/test-qobject-input-visitor.o $(test-qapi-obj-y)
|
tests/test-qobject-input-visitor$(EXESUF): tests/test-qobject-input-visitor.o $(test-qapi-obj-y)
|
||||||
tests/test-qmp-cmds$(EXESUF): tests/test-qmp-cmds.o tests/test-qapi-commands.o $(test-qapi-obj-y)
|
tests/test-qmp-cmds$(EXESUF): tests/test-qmp-cmds.o tests/test-qapi-commands.o tests/test-qapi-init-commands.o $(test-qapi-obj-y)
|
||||||
tests/test-visitor-serialization$(EXESUF): tests/test-visitor-serialization.o $(test-qapi-obj-y)
|
tests/test-visitor-serialization$(EXESUF): tests/test-visitor-serialization.o $(test-qapi-obj-y)
|
||||||
tests/test-opts-visitor$(EXESUF): tests/test-opts-visitor.o $(test-qapi-obj-y)
|
tests/test-opts-visitor$(EXESUF): tests/test-opts-visitor.o $(test-qapi-obj-y)
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "tests/test-qapi-types.h"
|
#include "tests/test-qapi-types.h"
|
||||||
#include "tests/test-qapi-visit.h"
|
#include "tests/test-qapi-visit.h"
|
||||||
#include "test-qapi-commands.h"
|
#include "test-qapi-commands.h"
|
||||||
|
#include "test-qapi-init-commands.h"
|
||||||
|
|
||||||
static QmpCommandList qmp_commands;
|
static QmpCommandList qmp_commands;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user