[PATCH] meson: leave unnecessary modules out of the build

Paolo Bonzini posted 1 patch 12 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20230504082130.210909-1-pbonzini@redhat.com
Maintainers: Paolo Bonzini <pbonzini@redhat.com>, "Marc-André Lureau" <marcandre.lureau@redhat.com>, "Daniel P. Berrangé" <berrange@redhat.com>, Thomas Huth <thuth@redhat.com>, "Philippe Mathieu-Daudé" <philmd@linaro.org>
meson.build | 4 ++++
1 file changed, 4 insertions(+)
[PATCH] meson: leave unnecessary modules out of the build
Posted by Paolo Bonzini 12 months ago
meson.build files choose whether to build modules based on foo.found()
expressions.  If a feature is enabled (e.g. --enable-gtk), these expressions
are true even if the code is not used by any emulator, and this results
in an unexpected difference between modular and non-modular builds.

For non-modular builds, the files are not included in any binary, and
therefore the source files are never processed.  For modular builds,
however, all .so files are unconditionally built by default, and therefore
a normal "make" tries to build them.  However, the corresponding trace-*.h
files are absent due to this conditional:

if have_system
  trace_events_subdirs += [
    ...
    'ui',
    ...
  ]
endif

which was added to avoid wasting time running tracetool on unused trace-events
files.  This causes a compilation failure; fix it by skipping module builds
entirely if (depending on the module directory) have_block or have_system
are false.

Reported-by: Michael Tokarev <mjt@tls.msk.ru>
Cc: qemu-stable@nongnu.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 meson.build | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/meson.build b/meson.build
index c44d05a13f95..c7e486e0879a 100644
--- a/meson.build
+++ b/meson.build
@@ -3213,6 +3213,10 @@ modinfo_files = []
 block_mods = []
 softmmu_mods = []
 foreach d, list : modules
+  if not (d == 'block' ? have_block : have_system)
+    continue
+  endif
+
   foreach m, module_ss : list
     if enable_modules and targetos != 'windows'
       module_ss = module_ss.apply(config_all, strict: false)
-- 
2.40.0
Re: [PATCH] meson: leave unnecessary modules out of the build
Posted by Michael Tokarev 12 months ago
04.05.2023 11:21, Paolo Bonzini wrote:
> meson.build files choose whether to build modules based on foo.found()
> expressions.  If a feature is enabled (e.g. --enable-gtk), these expressions
> are true even if the code is not used by any emulator, and this results
> in an unexpected difference between modular and non-modular builds.
> 
> For non-modular builds, the files are not included in any binary, and
> therefore the source files are never processed.  For modular builds,
> however, all .so files are unconditionally built by default, and therefore
> a normal "make" tries to build them.  However, the corresponding trace-*.h
> files are absent due to this conditional:
> 
> if have_system
>    trace_events_subdirs += [
>      ...
>      'ui',
>      ...
>    ]
> endif
> 
> which was added to avoid wasting time running tracetool on unused trace-events
> files.  This causes a compilation failure; fix it by skipping module builds
> entirely if (depending on the module directory) have_block or have_system
> are false.
> 
> Reported-by: Michael Tokarev <mjt@tls.msk.ru>
> Cc: qemu-stable@nongnu.org
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>   meson.build | 4 ++++
>   1 file changed, 4 insertions(+)
> 
> diff --git a/meson.build b/meson.build
> index c44d05a13f95..c7e486e0879a 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -3213,6 +3213,10 @@ modinfo_files = []
>   block_mods = []
>   softmmu_mods = []
>   foreach d, list : modules
> +  if not (d == 'block' ? have_block : have_system)
> +    continue
> +  endif
> +
>     foreach m, module_ss : list
>       if enable_modules and targetos != 'windows'
>         module_ss = module_ss.apply(config_all, strict: false)

Tested-by: Michael Tokarev <mjt@tls.msk.ru>

Thank you for the fix Paolo! Yes that looks like it was the case here.

/mjt