machine/ and net/ are only useful to machines;
block/ and migration/ to machine or tools.
Note we need to keep building machine.json generated sources
on all targets because some want to access X86CPUFeatureWordInfo
from any architecture ¯\_(ツ)_/¯ Otherwise we get on all but
x86 targets:
/usr/bin/ld: libqemu-i386-linux-user.fa.p/target_i386_cpu.c.o: in function `x86_cpu_get_feature_words':
../target/i386/cpu.c:4587: undefined reference to `visit_type_X86CPUFeatureWordInfoList'
collect2: error: ld returned 1 exit status
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
qapi/meson.build | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/qapi/meson.build b/qapi/meson.build
index 656ef0e039..38b01f3083 100644
--- a/qapi/meson.build
+++ b/qapi/meson.build
@@ -23,10 +23,6 @@ endif
qapi_all_modules = [
'authz',
- 'block',
- 'block-core',
- 'block-export',
- 'char',
'common',
'compat',
'control',
@@ -35,26 +31,23 @@ qapi_all_modules = [
'error',
'introspect',
'job',
- 'machine',
- 'machine-target',
+ 'machine', # x86 is considered multiarch by some
'migration',
'misc',
'misc-target',
- 'net',
'pragma',
- 'qom',
'replay',
'run-state',
'sockets',
'trace',
- 'transaction',
- 'yank',
]
if have_system
qapi_all_modules += [
'acpi',
'audio',
'qdev',
+ 'machine-target',
+ 'net',
'pci',
'rdma',
'rocker',
@@ -63,7 +56,14 @@ if have_system
endif
if have_system or have_tools
qapi_all_modules += [
+ 'block',
+ 'block-core',
+ 'block-export',
+ 'char',
+ 'qom',
'ui',
+ 'transaction',
+ 'yank',
]
endif
--
2.34.1
On 04/02/2022 16.29, Philippe Mathieu-Daudé wrote: > machine/ and net/ are only useful to machines; > block/ and migration/ to machine or tools. > > Note we need to keep building machine.json generated sources > on all targets because some want to access X86CPUFeatureWordInfo > from any architecture ¯\_(ツ)_/¯ Otherwise we get on all but > x86 targets: > > /usr/bin/ld: libqemu-i386-linux-user.fa.p/target_i386_cpu.c.o: in function `x86_cpu_get_feature_words': > ../target/i386/cpu.c:4587: undefined reference to `visit_type_X86CPUFeatureWordInfoList' > collect2: error: ld returned 1 exit status Would it be possible to move the X86CPUFeatureWordInfo stuff into machine-target.json first, adding a proper 'if': 'TARGET_I386' there? Thomas > Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> > --- > qapi/meson.build | 20 ++++++++++---------- > 1 file changed, 10 insertions(+), 10 deletions(-) > > diff --git a/qapi/meson.build b/qapi/meson.build > index 656ef0e039..38b01f3083 100644 > --- a/qapi/meson.build > +++ b/qapi/meson.build > @@ -23,10 +23,6 @@ endif > > qapi_all_modules = [ > 'authz', > - 'block', > - 'block-core', > - 'block-export', > - 'char', > 'common', > 'compat', > 'control', > @@ -35,26 +31,23 @@ qapi_all_modules = [ > 'error', > 'introspect', > 'job', > - 'machine', > - 'machine-target', > + 'machine', # x86 is considered multiarch by some > 'migration', > 'misc', > 'misc-target', > - 'net', > 'pragma', > - 'qom', > 'replay', > 'run-state', > 'sockets', > 'trace', > - 'transaction', > - 'yank', > ] > if have_system > qapi_all_modules += [ > 'acpi', > 'audio', > 'qdev', > + 'machine-target', > + 'net', > 'pci', > 'rdma', > 'rocker', > @@ -63,7 +56,14 @@ if have_system > endif > if have_system or have_tools > qapi_all_modules += [ > + 'block', > + 'block-core', > + 'block-export', > + 'char', > + 'qom', > 'ui', > + 'transaction', > + 'yank', > ] > endif >
On 2/4/22 16:29, Philippe Mathieu-Daudé via wrote:
> machine/ and net/ are only useful to machines;
> block/ and migration/ to machine or tools.
>
> Note we need to keep building machine.json generated sources
> on all targets because some want to access X86CPUFeatureWordInfo
> from any architecture ¯\_(ツ)_/¯ Otherwise we get on all but
> x86 targets:
>
> /usr/bin/ld: libqemu-i386-linux-user.fa.p/target_i386_cpu.c.o: in function `x86_cpu_get_feature_words':
> ../target/i386/cpu.c:4587: undefined reference to `visit_type_X86CPUFeatureWordInfoList'
> collect2: error: ld returned 1 exit status
I suppose you mean "on all but x86 hosts", since it links
libqemu-i386-linux-user.fa.p? But I don't understand how that happens.
Is it related to
{ 'struct': 'DummyForceArrays',
'data': { 'unused': ['X86CPUFeatureWordInfo'] } }
and if so can DummyForceArrays be moved to machine-target.json together
with X86CPUFeatureWordInfo, and under 'if': 'TARGET_I386'?
Thanks,
Paolo
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> qapi/meson.build | 20 ++++++++++----------
> 1 file changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/qapi/meson.build b/qapi/meson.build
> index 656ef0e039..38b01f3083 100644
> --- a/qapi/meson.build
> +++ b/qapi/meson.build
> @@ -23,10 +23,6 @@ endif
>
> qapi_all_modules = [
> 'authz',
> - 'block',
> - 'block-core',
> - 'block-export',
> - 'char',
> 'common',
> 'compat',
> 'control',
> @@ -35,26 +31,23 @@ qapi_all_modules = [
> 'error',
> 'introspect',
> 'job',
> - 'machine',
> - 'machine-target',
> + 'machine', # x86 is considered multiarch by some
> 'migration',
> 'misc',
> 'misc-target',
> - 'net',
> 'pragma',
> - 'qom',
> 'replay',
> 'run-state',
> 'sockets',
> 'trace',
> - 'transaction',
> - 'yank',
> ]
> if have_system
> qapi_all_modules += [
> 'acpi',
> 'audio',
> 'qdev',
> + 'machine-target',
> + 'net',
> 'pci',
> 'rdma',
> 'rocker',
> @@ -63,7 +56,14 @@ if have_system
> endif
> if have_system or have_tools
> qapi_all_modules += [
> + 'block',
> + 'block-core',
> + 'block-export',
> + 'char',
> + 'qom',
> 'ui',
> + 'transaction',
> + 'yank',
> ]
> endif
>
On 4/2/22 18:00, Paolo Bonzini wrote:
> On 2/4/22 16:29, Philippe Mathieu-Daudé via wrote:
>> machine/ and net/ are only useful to machines;
>> block/ and migration/ to machine or tools.
>>
>> Note we need to keep building machine.json generated sources
>> on all targets because some want to access X86CPUFeatureWordInfo
>> from any architecture ¯\_(ツ)_/¯ Otherwise we get on all but
>> x86 targets:
>>
>> /usr/bin/ld: libqemu-i386-linux-user.fa.p/target_i386_cpu.c.o: in
>> function `x86_cpu_get_feature_words':
>> ../target/i386/cpu.c:4587: undefined reference to
>> `visit_type_X86CPUFeatureWordInfoList'
>> collect2: error: ld returned 1 exit status
>
> I suppose you mean "on all but x86 hosts", since it links
> libqemu-i386-linux-user.fa.p? But I don't understand how that happens.
> Is it related to
>
> { 'struct': 'DummyForceArrays',
> 'data': { 'unused': ['X86CPUFeatureWordInfo'] } }
>
> and if so can DummyForceArrays be moved to machine-target.json together
> with X86CPUFeatureWordInfo, and under 'if': 'TARGET_I386'?
Err this one is not an *arch* problem, but a user/system one (sorry I
got confused with another one). Here the problem is it is not trivial
to restrict visit_type_X86CPUFeatureWordInfoList() to sysemu.
So machine.json must be in qapi_all_modules[] even if !have_system.
© 2016 - 2026 Red Hat, Inc.