[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3 22/22] qidl: unit tests and build infrastruct
From: |
Michael Roth |
Subject: |
Re: [Qemu-devel] [PATCH v3 22/22] qidl: unit tests and build infrastructure |
Date: |
Fri, 12 Oct 2012 16:39:52 -0500 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
On Fri, Oct 05, 2012 at 10:24:30AM +0200, Paolo Bonzini wrote:
> Il 04/10/2012 19:33, Michael Roth ha scritto:
> > +
> > +%.qidl.c: %.c $(SRC_PATH)/qidl.h $(addprefix $(SRC_PATH)/scripts/,lexer.py
> > qidl.py qidl_parser.py qapi.py qapi_visit.py)
> > + $(call rm -f $(*D)/qidl-generated/$(*F).qidl.c)
> > + $(if $(strip $(shell grep "QIDL_ENABLE()" $< 1>/dev/null && echo
> > "true")), \
> > + $(call quiet-command, \
> > + $(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(CFLAGS) -E -c -DQIDL_GEN $<
> > | \
> > + $(PYTHON) $(SRC_PATH)/scripts/qidl.py \
> > + --output-filepath=$(*D)/qidl-generated/$(*F).qidl.c || [ "$$?" -eq
> > 2 ], \
> > + "qidl PP $(*D)/$(*F).c"),)
> > +%.o: %.c %.qidl.c
> > + $(if $(strip $(shell test -f $(*D)/qidl-generated/$(*F).qidl.c && echo
> > "true")), \
> > + $(call quiet-command, \
> > + $(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c \
> > + -DQIDL_ENABLED -include $< -o $@
> > $(*D)/qidl-generated/$(*F).qidl.c, \
> > + "qidl CC $@"), \
> > + $(call quiet-command, \
> > + $(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c \
> > + -o $@ $<," CC $@"))
>
>
> Because the .qidl.c files are not created for files without a QIDL_ENABLE()
> directive, all those files will be grepped on every invocation of the
> makefile.
>
> It is better to define the list of QIDL_ENABLEd files in an auxiliary makefile
> like this (untested):
Thanks for the suggestion / example.
FYI, I tried to get this working but didn't manage to get it in for v4.
Everything
seems to be falling back to the non-qidl %o: target, and I haven't had time to
debug it.
FWIW, it doesn't seem to be a major factor performance-wise. Current build
times on my laptop are (for all-target builds):
QIDL v4:
real 8m35.383s
user 31m1.844s
sys 1m33.998s
upstream:
real 8m28.181s
user 30m44.983s
sys 1m29.926s
There's also a potential performance trade-off with the suggested approach in
that
a smaller build might be slower due to us always grepping over an exhaustive
list
of possibly QIDL-fied files. To be optimal we'd want to limit the search to
objects
the target actually pulls in.
Maintainance-wise, there's also a nice benefit in the current approach in that
we don't need to maintain a list of files to scan through, so anything we add to
the tree will get picked up by QIDL automatically.
So hopefully the current approach is a reasonable start for now.
>
> QIDL_FILES =
> -include qemu-idl-files.mak
> qemu-idl-files.mak: $(obj-y) $(common-obj-y) $(hw-obj-y)
> (grep -l "QIDL_ENABLE()" $^ || :) | sed 's/^/QIDL_FILES += /' > $@
>
> $(QIDL_FILES): %.qidl.c: %.c
> $(call quiet-command, \
> $(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(CFLAGS) -E -c -DQIDL_GEN $<
> | \
> $(PYTHON) $(SRC_PATH)/scripts/qidl.py \
> --output-filepath=$(*D)/qidl-generated/tmp-$(*F).qidl.c || [ "$$?"
> -eq 2 ], \
> "qidl PP $(*D)/$(*F).c"),)
> mv $(*D)/qidl-generated/tmp-$(*F).qidl.c
> $(*D)/qidl-generated/$(*F).qidl.c
>
> $(QIDL_FILES): %.o: %.c %.qidl.c
> $(call quiet-command, \
> $(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c \
> -DQIDL_ENABLED -include $< -o $@
> $(*D)/qidl-generated/$(*F).qidl.c, \
> "qidl CC $@"), \
>
> %.o: %.c
> $(call quiet-command, \
> $(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c \
> -o $@ $<," CC $@"))
>
> Paolo
>
- [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations, (continued)
- [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations, Michael Roth, 2012/10/04
- Re: [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations, Paolo Bonzini, 2012/10/05
- Re: [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations, Paolo Bonzini, 2012/10/05
- Re: [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations, Michael Roth, 2012/10/05
- Re: [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations, Paolo Bonzini, 2012/10/05
- Re: [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations, Michael Roth, 2012/10/05
- Re: [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations, Paolo Bonzini, 2012/10/15
[Qemu-devel] [PATCH v3 22/22] qidl: unit tests and build infrastructure, Michael Roth, 2012/10/04
[Qemu-devel] [PATCH v3 16/22] qdev: move Property-related declarations to qdev-properties.h, Michael Roth, 2012/10/04
[Qemu-devel] [PATCH v3 19/22] qidl: add C parser (based on QC parser), Michael Roth, 2012/10/04
[Qemu-devel] [PATCH v3 14/22] qom-fuse: workaround for truncated properties > 4096, Michael Roth, 2012/10/04
[Qemu-devel] [PATCH v3 20/22] qidl: add QAPI-based code generator, Michael Roth, 2012/10/04
[Qemu-devel] [PATCH v3 13/22] qom-fuse: force single-threaded mode to avoid QMP races, Michael Roth, 2012/10/04
Re: [Qemu-devel] [PATCH v3] Add infrastructure for QIDL-based device serialization, Paolo Bonzini, 2012/10/05