mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-01-03 17:05:47 +00:00
Include less of the generated modular QAPI headers
In my "build everything" tree, a change to the types in qapi-schema.json triggers a recompile of about 4800 out of 5100 objects. The previous commit split up qmp-commands.h, qmp-event.h, qmp-visit.h, qapi-types.h. Each of these headers still includes all its shards. Reduce compile time by including just the shards we actually need. To illustrate the benefits: adding a type to qapi/migration.json now recompiles some 2300 instead of 4800 objects. The next commit will improve it further. Backports commit 9af2398977a78d37bf184d6ff6bd04c72bfbf006 from qemu
This commit is contained in:
parent
fe90858609
commit
5500a5e912
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -30,6 +30,8 @@ qemu/x86_64-softmmu/
|
||||||
|
|
||||||
qemu/qapi-builtin-types.[ch]
|
qemu/qapi-builtin-types.[ch]
|
||||||
qemu/qapi-builtin-visit.[ch]
|
qemu/qapi-builtin-visit.[ch]
|
||||||
|
qemu/qapi/qapi-types-common.[ch]
|
||||||
|
qemu/qapi/qapi-visit-common.[ch]
|
||||||
qemu/qapi-types.[ch]
|
qemu/qapi-types.[ch]
|
||||||
qemu/qapi-visit.[ch]
|
qemu/qapi-visit.[ch]
|
||||||
qemu/qapi-gen-timestamp
|
qemu/qapi-gen-timestamp
|
||||||
|
|
|
@ -31,7 +31,8 @@
|
||||||
#include "sysemu/sysemu.h"
|
#include "sysemu/sysemu.h"
|
||||||
#include "target/i386/topology.h"
|
#include "target/i386/topology.h"
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "qapi-visit.h"
|
#include "qapi/qapi-visit-common.h"
|
||||||
|
#include "qapi/visitor.h"
|
||||||
|
|
||||||
|
|
||||||
/* XXX: add IGNNE support */
|
/* XXX: add IGNNE support */
|
||||||
|
|
|
@ -32,9 +32,7 @@
|
||||||
#ifndef QOBJECT_H
|
#ifndef QOBJECT_H
|
||||||
#define QOBJECT_H
|
#define QOBJECT_H
|
||||||
|
|
||||||
#include <stddef.h>
|
#include "qapi-builtin-types.h"
|
||||||
#include <assert.h>
|
|
||||||
#include "qapi-types.h"
|
|
||||||
|
|
||||||
struct QObject {
|
struct QObject {
|
||||||
QType type;
|
QType type;
|
||||||
|
|
|
@ -14,10 +14,7 @@
|
||||||
#ifndef QAPI_VISITOR_H
|
#ifndef QAPI_VISITOR_H
|
||||||
#define QAPI_VISITOR_H
|
#define QAPI_VISITOR_H
|
||||||
|
|
||||||
#include "qemu/typedefs.h"
|
#include "qapi-builtin-types.h"
|
||||||
#include "qapi-types.h"
|
|
||||||
#include "qapi/error.h"
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The QAPI schema defines both a set of C data types, and a QMP wire
|
* The QAPI schema defines both a set of C data types, and a QMP wire
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
#include "glib_compat.h"
|
#include "glib_compat.h"
|
||||||
#include "unicorn/platform.h"
|
#include "unicorn/platform.h"
|
||||||
#include "qapi-types.h"
|
#include "qapi-builtin-types.h"
|
||||||
#include "qemu/queue.h"
|
#include "qemu/queue.h"
|
||||||
#include "qemu/typedefs.h"
|
#include "qemu/typedefs.h"
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
|
|
|
@ -15,8 +15,8 @@
|
||||||
#include "qom/object.h"
|
#include "qom/object.h"
|
||||||
#include "qemu/cutils.h"
|
#include "qemu/cutils.h"
|
||||||
#include "qapi/visitor.h"
|
#include "qapi/visitor.h"
|
||||||
#include "qapi-visit.h"
|
|
||||||
#include "qapi/string-input-visitor.h"
|
#include "qapi/string-input-visitor.h"
|
||||||
|
#include "qapi-builtin-visit.h"
|
||||||
#include "qapi/qmp/qerror.h"
|
#include "qapi/qmp/qerror.h"
|
||||||
|
|
||||||
/* TODO: replace QObject with a simpler visitor to avoid a dependency
|
/* TODO: replace QObject with a simpler visitor to avoid a dependency
|
||||||
|
|
|
@ -165,23 +165,26 @@ class QAPISchemaGenEventVisitor(QAPISchemaModularCVisitor):
|
||||||
return basename
|
return basename
|
||||||
|
|
||||||
def _begin_module(self, name):
|
def _begin_module(self, name):
|
||||||
|
types = self._module_basename('qapi-types', name)
|
||||||
|
visit = self._module_basename('qapi-visit', name)
|
||||||
self._genc.add(mcgen('''
|
self._genc.add(mcgen('''
|
||||||
#include "qemu-common.h"
|
#include "qemu-common.h"
|
||||||
#include "%(prefix)sqapi-event.h"
|
#include "%(prefix)sqapi-event.h"
|
||||||
#include "%(prefix)sqapi-visit.h"
|
#include "%(visit)s.h"
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "qapi/qmp/qdict.h"
|
#include "qapi/qmp/qdict.h"
|
||||||
#include "qapi/qobject-output-visitor.h"
|
#include "qapi/qobject-output-visitor.h"
|
||||||
#include "qapi/qmp-event.h"
|
#include "qapi/qmp-event.h"
|
||||||
|
|
||||||
''',
|
''',
|
||||||
prefix=self._prefix))
|
visit=visit, prefix=self._prefix))
|
||||||
|
|
||||||
self._genh.add(mcgen('''
|
self._genh.add(mcgen('''
|
||||||
#include "%(prefix)sqapi-types.h"
|
/* #include "qapi/util.h" */
|
||||||
|
#include "%(types)s.h"
|
||||||
|
|
||||||
''',
|
''',
|
||||||
prefix=self._prefix))
|
types=types))
|
||||||
|
|
||||||
def visit_end(self):
|
def visit_end(self):
|
||||||
self._genh.add(gen_enum(self._enum_name, self._event_names))
|
self._genh.add(gen_enum(self._enum_name, self._event_names))
|
||||||
|
|
|
@ -185,13 +185,15 @@ class QAPISchemaGenTypeVisitor(QAPISchemaModularCVisitor):
|
||||||
'''))
|
'''))
|
||||||
|
|
||||||
def _begin_module(self, name):
|
def _begin_module(self, name):
|
||||||
|
types = self._module_basename('qapi-types', name)
|
||||||
|
visit = self._module_basename('qapi-visit', name)
|
||||||
self._genc.preamble_add(mcgen('''
|
self._genc.preamble_add(mcgen('''
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
#include "qapi/dealloc-visitor.h"
|
#include "qapi/dealloc-visitor.h"
|
||||||
#include "%(prefix)sqapi-types.h"
|
#include "%(types)s.h"
|
||||||
#include "%(prefix)sqapi-visit.h"
|
#include "%(visit)s.h"
|
||||||
''',
|
''',
|
||||||
prefix=self._prefix))
|
types=types, visit=visit))
|
||||||
self._genh.preamble_add(mcgen('''
|
self._genh.preamble_add(mcgen('''
|
||||||
#include "qapi-builtin-types.h"
|
#include "qapi-builtin-types.h"
|
||||||
'''))
|
'''))
|
||||||
|
|
|
@ -284,20 +284,22 @@ class QAPISchemaGenVisitVisitor(QAPISchemaModularCVisitor):
|
||||||
prefix=prefix))
|
prefix=prefix))
|
||||||
|
|
||||||
def _begin_module(self, name):
|
def _begin_module(self, name):
|
||||||
|
types = self._module_basename('qapi-types', name)
|
||||||
|
visit = self._module_basename('qapi-visit', name)
|
||||||
self._genc.preamble_add(mcgen('''
|
self._genc.preamble_add(mcgen('''
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
#include "qemu-common.h"
|
#include "qemu-common.h"
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "qapi/qmp/qerror.h"
|
#include "qapi/qmp/qerror.h"
|
||||||
#include "%(prefix)sqapi-visit.h"
|
#include "%(visit)s.h"
|
||||||
''',
|
''',
|
||||||
prefix=self._prefix))
|
visit=visit, prefix=self._prefix))
|
||||||
self._genh.preamble_add(mcgen('''
|
self._genh.preamble_add(mcgen('''
|
||||||
#include "qapi-builtin-visit.h"
|
#include "qapi-builtin-visit.h"
|
||||||
#include "%(prefix)sqapi-types.h"
|
#include "%(types)s.h"
|
||||||
|
|
||||||
''',
|
''',
|
||||||
prefix=self._prefix))
|
types=types))
|
||||||
|
|
||||||
def visit_enum_type(self, name, info, values, prefix):
|
def visit_enum_type(self, name, info, values, prefix):
|
||||||
self._genh.add(gen_visit_decl(name, scalar=True))
|
self._genh.add(gen_visit_decl(name, scalar=True))
|
||||||
|
|
Loading…
Reference in a new issue