qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC PATCH-for-9.1] qapi: Do not generate commands/events/introspect


From: Philippe Mathieu-Daudé
Subject: Re: [RFC PATCH-for-9.1] qapi: Do not generate commands/events/introspect code for user emulation
Date: Fri, 5 Apr 2024 10:43:04 +0200
User-agent: Mozilla Thunderbird

Hi Markus,

On 5/4/24 07:35, Markus Armbruster wrote:
Philippe Mathieu-Daudé <philmd@linaro.org> writes:

User emulation requires the QAPI types. Due to the command
line processing, some visitor code is also used. The rest
is irrelevant (no QMP socket).

Add an option to the qapi-gen script to allow generating
the minimum when only user emulation is being built.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
RFC: Quick PoC for Markus. It is useful for user-only builds.
---
  qapi/meson.build     |  6 +++++-
  scripts/qapi/main.py | 16 +++++++++++-----
  2 files changed, 16 insertions(+), 6 deletions(-)


@@ -50,9 +51,10 @@ def generate(schema_file: str,
      schema = QAPISchema(schema_file)
      gen_types(schema, output_dir, prefix, builtins)
      gen_visit(schema, output_dir, prefix, builtins)
-    gen_commands(schema, output_dir, prefix, gen_tracing)
-    gen_events(schema, output_dir, prefix)
-    gen_introspect(schema, output_dir, prefix, unmask)
+    if not gen_types_only:
+        gen_commands(schema, output_dir, prefix, gen_tracing)
+        gen_events(schema, output_dir, prefix)
+        gen_introspect(schema, output_dir, prefix, unmask)

This is the behavior change, everything else is plumbing.  You suppress
generation of source code for commands, events, and introspection, i.e.

     qapi-commands*.[ch]
     qapi-init-commands.[ch]
     qapi-events*[ch]
     qapi-introspect.[ch]

and the associated .trace-events.

But none of these .c get compiled for a user-only build.

So, all we save is a bit of build time and disk space: less than 0.1s on
my machine, ~1.6MiB in ~220 files.  My linux-user-only build tree clocks
in at 317MiB in ~4900 files, a full build takes me around 30s (real
time, -j 14 with ccache), so we're talking about 0.5% in disk space and
0.3% in build time.

What I want to catch is invalid uses of these headers in user-only
units.

See for example:
20240404194757.9343-5-philmd@linaro.org/">https://lore.kernel.org/qemu-devel/20240404194757.9343-5-philmd@linaro.org/

(Actually I have this patch based on that series).

Moreover, the patch needs work:

     FAILED: 
tests/unit/test-qobject-input-visitor.p/test-qobject-input-visitor.c.o
     cc [...] -c ../tests/unit/test-qobject-input-visitor.c
     ../tests/unit/test-qobject-input-visitor.c:27:10: fatal error: 
qapi/qapi-introspect.h: No such file or directory
        27 | #include "qapi/qapi-introspect.h"
           |          ^~~~~~~~~~~~~~~~~~~~~~~~

I'd simply skip these tests on user-only builds.

     FAILED: libqemuutil.a.p/stubs_monitor-core.c.o
     cc [...] -c ../stubs/monitor-core.c
     ../stubs/monitor-core.c:3:10: fatal error: qapi/qapi-emit-events.h: No 
such file or directory
         3 | #include "qapi/qapi-emit-events.h"
           |          ^~~~~~~~~~~~~~~~~~~~~~~~~

Doh, this is 20240404194757.9343-4-philmd@linaro.org/">https://lore.kernel.org/qemu-devel/20240404194757.9343-4-philmd@linaro.org/, again I forgot:

Based-on: <20240404194757.9343-1-philmd@linaro.org>


I don't think it's worth the bother.

OK, I'll keep it locally until I finish my full exec/ rework then.

Regards,

Phil.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]