On 8/6/19 5:14 PM, Markus Armbruster wrote: > In my "build everything" tree, changing a type in qapi/common.json > triggers a recompile of some 3600 out of 6600 objects (not counting > tests and objects that don't depend on qemu/osdep.h). > > One common dependency is QapiErrorClass: it's used only in in > qapi/error.h, which uses nothing else, and is widely included. > > Move QapiErrorClass from common.json to new error.json. Touching > common.json now recompiles only some 2900 objects.
Nice. > > Cc: Eric Blake <ebl...@redhat.com> > Signed-off-by: Markus Armbruster <arm...@redhat.com> > Reviewed-by: Eric Blake <ebl...@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <phi...@redhat.com> Tested-by: Philippe Mathieu-Daudé <phi...@redhat.com> > --- > MAINTAINERS | 2 ++ > include/qapi/error.h | 2 +- > qapi/Makefile.objs | 2 +- > qapi/common.json | 24 ------------------------ > qapi/error.json | 29 +++++++++++++++++++++++++++++ > qapi/qapi-schema.json | 1 + > 6 files changed, 34 insertions(+), 26 deletions(-) > create mode 100644 qapi/error.json > > diff --git a/MAINTAINERS b/MAINTAINERS > index d6de200453..adc64cfe33 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -1874,6 +1874,7 @@ M: Markus Armbruster <arm...@redhat.com> > S: Supported > F: include/qapi/error.h > F: include/qemu/error-report.h > +F: qapi/error.json > F: util/error.c > F: util/qemu-error.c > > @@ -2062,6 +2063,7 @@ F: monitor/monitor-internal.h > F: monitor/qmp* > F: monitor/misc.c > F: monitor/monitor.c > +F: qapi/error.json > F: docs/devel/*qmp-* > F: docs/interop/*qmp-* > F: scripts/qmp/ > diff --git a/include/qapi/error.h b/include/qapi/error.h > index 51b63dd4b5..3f95141a01 100644 > --- a/include/qapi/error.h > +++ b/include/qapi/error.h > @@ -119,7 +119,7 @@ > #ifndef ERROR_H > #define ERROR_H > > -#include "qapi/qapi-types-common.h" > +#include "qapi/qapi-types-error.h" > > /* > * Overall category of an error. > diff --git a/qapi/Makefile.objs b/qapi/Makefile.objs > index c5a29e86e2..dd3f5e6f94 100644 > --- a/qapi/Makefile.objs > +++ b/qapi/Makefile.objs > @@ -6,7 +6,7 @@ util-obj-y += qmp-event.o > util-obj-y += qapi-util.o > > QAPI_COMMON_MODULES = audio authz block-core block char common crypto > -QAPI_COMMON_MODULES += dump introspect job machine migration misc net > +QAPI_COMMON_MODULES += dump error introspect job machine migration misc net > QAPI_COMMON_MODULES += qdev qom rdma rocker run-state sockets tpm > QAPI_COMMON_MODULES += trace transaction ui > QAPI_TARGET_MODULES = machine-target misc-target > diff --git a/qapi/common.json b/qapi/common.json > index 99d313ef3b..3d4e8de1e0 100644 > --- a/qapi/common.json > +++ b/qapi/common.json > @@ -4,30 +4,6 @@ > # = Common data types > ## > > -## > -# @QapiErrorClass: > -# > -# QEMU error classes > -# > -# @GenericError: this is used for errors that don't require a specific error > -# class. This should be the default case for most errors > -# > -# @CommandNotFound: the requested command has not been found > -# > -# @DeviceNotActive: a device has failed to be become active > -# > -# @DeviceNotFound: the requested device has not been found > -# > -# @KVMMissingCap: the requested operation can't be fulfilled because a > -# required KVM capability is missing > -# > -# Since: 1.2 > -## > -{ 'enum': 'QapiErrorClass', > - # Keep this in sync with ErrorClass in error.h > - 'data': [ 'GenericError', 'CommandNotFound', > - 'DeviceNotActive', 'DeviceNotFound', 'KVMMissingCap' ] } > - > ## > # @IoOperationType: > # > diff --git a/qapi/error.json b/qapi/error.json > new file mode 100644 > index 0000000000..3fad08f506 > --- /dev/null > +++ b/qapi/error.json > @@ -0,0 +1,29 @@ > +# -*- Mode: Python -*- > + > +## > +# = QMP errors > +## > + > +## > +# @QapiErrorClass: > +# > +# QEMU error classes > +# > +# @GenericError: this is used for errors that don't require a specific error > +# class. This should be the default case for most errors > +# > +# @CommandNotFound: the requested command has not been found > +# > +# @DeviceNotActive: a device has failed to be become active > +# > +# @DeviceNotFound: the requested device has not been found > +# > +# @KVMMissingCap: the requested operation can't be fulfilled because a > +# required KVM capability is missing > +# > +# Since: 1.2 > +## > +{ 'enum': 'QapiErrorClass', > + # Keep this in sync with ErrorClass in error.h > + 'data': [ 'GenericError', 'CommandNotFound', > + 'DeviceNotActive', 'DeviceNotFound', 'KVMMissingCap' ] } > diff --git a/qapi/qapi-schema.json b/qapi/qapi-schema.json > index 38af54d6b3..920b03b0aa 100644 > --- a/qapi/qapi-schema.json > +++ b/qapi/qapi-schema.json > @@ -80,6 +80,7 @@ > # stable order, it's best to include each sub-schema just once, or > # include it first right here. > > +{ 'include': 'error.json' } > { 'include': 'common.json' } > { 'include': 'sockets.json' } > { 'include': 'run-state.json' } >