* [PATCH 1/6] meson: pick libfdt from common_ss when building target-specific files
2024-05-08 7:50 [PATCH v2 0/6] kconfig: express dependency of individual boards on libfdt Paolo Bonzini
@ 2024-05-08 7:51 ` Paolo Bonzini
2024-05-08 8:24 ` Philippe Mathieu-Daudé
2024-05-08 7:51 ` [PATCH 2/6] meson: move libfdt together with other dependencies Paolo Bonzini
` (4 subsequent siblings)
5 siblings, 1 reply; 9+ messages in thread
From: Paolo Bonzini @ 2024-05-08 7:51 UTC (permalink / raw)
To: qemu-devel; +Cc: philmd
Avoid having to list dependencies such as libfdt twice, both on common_ss
and specific_ss. Instead, just take all the dependencies in common_ss
and allow the target-specific libqemu-*.fa library to use them.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
meson.build | 14 +++++++++++---
hw/arm/meson.build | 2 +-
hw/loongarch/meson.build | 2 +-
hw/mips/meson.build | 2 +-
hw/openrisc/meson.build | 4 ++--
hw/ppc/meson.build | 4 +---
hw/riscv/meson.build | 2 +-
7 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/meson.build b/meson.build
index 43da4923721..7ca0ba4987f 100644
--- a/meson.build
+++ b/meson.build
@@ -3868,15 +3868,23 @@ foreach target : target_dirs
target_common = common_ss.apply(config_target, strict: false)
objects = common_all.extract_objects(target_common.sources())
- deps = target_common.dependencies()
+ arch_deps += target_common.dependencies()
target_specific = specific_ss.apply(config_target, strict: false)
arch_srcs += target_specific.sources()
arch_deps += target_specific.dependencies()
+ # allow using headers from the dependencies but do not include the sources,
+ # because this emulator only needs those in "objects". For external
+ # dependencies, the full dependency is included below in the executable.
+ lib_deps = []
+ foreach dep : arch_deps
+ lib_deps += dep.partial_dependency(compile_args: true, includes: true)
+ endforeach
+
lib = static_library('qemu-' + target,
sources: arch_srcs + genh,
- dependencies: arch_deps,
+ dependencies: lib_deps,
objects: objects,
include_directories: target_inc,
c_args: c_args,
@@ -3924,7 +3932,7 @@ foreach target : target_dirs
emulator = executable(exe_name, exe['sources'],
install: true,
c_args: c_args,
- dependencies: arch_deps + deps + exe['dependencies'],
+ dependencies: arch_deps + exe['dependencies'],
objects: lib.extract_all_objects(recursive: true),
link_depends: [block_syms, qemu_syms],
link_args: link_args,
diff --git a/hw/arm/meson.build b/hw/arm/meson.build
index 6808135c1f7..aefde0c69a3 100644
--- a/hw/arm/meson.build
+++ b/hw/arm/meson.build
@@ -1,5 +1,5 @@
arm_ss = ss.source_set()
-arm_ss.add(files('boot.c'), fdt)
+arm_ss.add(files('boot.c'))
arm_ss.add(when: 'CONFIG_ARM_VIRT', if_true: files('virt.c'))
arm_ss.add(when: 'CONFIG_ACPI', if_true: files('virt-acpi-build.c'))
arm_ss.add(when: 'CONFIG_DIGIC', if_true: files('digic_boards.c'))
diff --git a/hw/loongarch/meson.build b/hw/loongarch/meson.build
index d306d82c2ee..bce7ebac97e 100644
--- a/hw/loongarch/meson.build
+++ b/hw/loongarch/meson.build
@@ -3,7 +3,7 @@ loongarch_ss.add(files(
'fw_cfg.c',
'boot.c',
))
-loongarch_ss.add(when: 'CONFIG_LOONGARCH_VIRT', if_true: [files('virt.c'), fdt])
+loongarch_ss.add(when: 'CONFIG_LOONGARCH_VIRT', if_true: files('virt.c'))
loongarch_ss.add(when: 'CONFIG_ACPI', if_true: files('acpi-build.c'))
hw_arch += {'loongarch': loongarch_ss}
diff --git a/hw/mips/meson.build b/hw/mips/meson.build
index f06d88f3430..ca37c42d900 100644
--- a/hw/mips/meson.build
+++ b/hw/mips/meson.build
@@ -9,7 +9,7 @@ if 'CONFIG_TCG' in config_all_accel
mips_ss.add(when: 'CONFIG_JAZZ', if_true: files('jazz.c'))
mips_ss.add(when: 'CONFIG_MIPSSIM', if_true: files('mipssim.c'))
mips_ss.add(when: 'CONFIG_FULOONG', if_true: files('fuloong2e.c'))
-mips_ss.add(when: 'CONFIG_MIPS_BOSTON', if_true: [files('boston.c'), fdt])
+mips_ss.add(when: 'CONFIG_MIPS_BOSTON', if_true: files('boston.c'))
endif
hw_arch += {'mips': mips_ss}
diff --git a/hw/openrisc/meson.build b/hw/openrisc/meson.build
index 2dbc6365bb7..82f1f0ef1cc 100644
--- a/hw/openrisc/meson.build
+++ b/hw/openrisc/meson.build
@@ -1,7 +1,7 @@
openrisc_ss = ss.source_set()
openrisc_ss.add(files('cputimer.c'))
openrisc_ss.add(files('boot.c'))
-openrisc_ss.add(when: 'CONFIG_OR1K_SIM', if_true: [files('openrisc_sim.c'), fdt])
-openrisc_ss.add(when: 'CONFIG_OR1K_VIRT', if_true: [files('virt.c'), fdt])
+openrisc_ss.add(when: 'CONFIG_OR1K_SIM', if_true: files('openrisc_sim.c'))
+openrisc_ss.add(when: 'CONFIG_OR1K_VIRT', if_true: files('virt.c'))
hw_arch += {'openrisc': openrisc_ss}
diff --git a/hw/ppc/meson.build b/hw/ppc/meson.build
index d096636ee7f..3ebbf329bcc 100644
--- a/hw/ppc/meson.build
+++ b/hw/ppc/meson.build
@@ -3,9 +3,7 @@ ppc_ss.add(files(
'ppc.c',
'ppc_booke.c',
))
-ppc_ss.add(when: 'CONFIG_FDT_PPC', if_true: [files(
- 'fdt.c',
-), fdt])
+ppc_ss.add(when: 'CONFIG_FDT_PPC', if_true: files('fdt.c'))
ppc_ss.add(when: 'CONFIG_FW_CFG_PPC', if_true: files('fw_cfg.c'))
# IBM pSeries (sPAPR)
diff --git a/hw/riscv/meson.build b/hw/riscv/meson.build
index 2f7ee81be3c..f872674093a 100644
--- a/hw/riscv/meson.build
+++ b/hw/riscv/meson.build
@@ -1,5 +1,5 @@
riscv_ss = ss.source_set()
-riscv_ss.add(files('boot.c'), fdt)
+riscv_ss.add(files('boot.c'))
riscv_ss.add(when: 'CONFIG_RISCV_NUMA', if_true: files('numa.c'))
riscv_ss.add(files('riscv_hart.c'))
riscv_ss.add(when: 'CONFIG_OPENTITAN', if_true: files('opentitan.c'))
--
2.45.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/6] meson: pick libfdt from common_ss when building target-specific files
2024-05-08 7:51 ` [PATCH 1/6] meson: pick libfdt from common_ss when building target-specific files Paolo Bonzini
@ 2024-05-08 8:24 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 9+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-05-08 8:24 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 8/5/24 09:51, Paolo Bonzini wrote:
> Avoid having to list dependencies such as libfdt twice, both on common_ss
> and specific_ss. Instead, just take all the dependencies in common_ss
> and allow the target-specific libqemu-*.fa library to use them.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> meson.build | 14 +++++++++++---
> hw/arm/meson.build | 2 +-
> hw/loongarch/meson.build | 2 +-
> hw/mips/meson.build | 2 +-
> hw/openrisc/meson.build | 4 ++--
> hw/ppc/meson.build | 4 +---
> hw/riscv/meson.build | 2 +-
> 7 files changed, 18 insertions(+), 12 deletions(-)
> target_common = common_ss.apply(config_target, strict: false)
> objects = common_all.extract_objects(target_common.sources())
> - deps = target_common.dependencies()
> + arch_deps += target_common.dependencies()
>
> target_specific = specific_ss.apply(config_target, strict: false)
> arch_srcs += target_specific.sources()
> arch_deps += target_specific.dependencies()
>
> + # allow using headers from the dependencies but do not include the sources,
> + # because this emulator only needs those in "objects". For external
> + # dependencies, the full dependency is included below in the executable.
> + lib_deps = []
> + foreach dep : arch_deps
> + lib_deps += dep.partial_dependency(compile_args: true, includes: true)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> + endforeach
> +
> lib = static_library('qemu-' + target,
> sources: arch_srcs + genh,
> - dependencies: arch_deps,
> + dependencies: lib_deps,
> objects: objects,
> include_directories: target_inc,
> c_args: c_args,
> @@ -3924,7 +3932,7 @@ foreach target : target_dirs
> emulator = executable(exe_name, exe['sources'],
> install: true,
> c_args: c_args,
> - dependencies: arch_deps + deps + exe['dependencies'],
> + dependencies: arch_deps + exe['dependencies'],
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/6] meson: move libfdt together with other dependencies
2024-05-08 7:50 [PATCH v2 0/6] kconfig: express dependency of individual boards on libfdt Paolo Bonzini
2024-05-08 7:51 ` [PATCH 1/6] meson: pick libfdt from common_ss when building target-specific files Paolo Bonzini
@ 2024-05-08 7:51 ` Paolo Bonzini
2024-05-08 8:21 ` Philippe Mathieu-Daudé
2024-05-08 7:51 ` [PATCH 3/6] kconfig: allow compiling out QEMU device tree code per target Paolo Bonzini
` (3 subsequent siblings)
5 siblings, 1 reply; 9+ messages in thread
From: Paolo Bonzini @ 2024-05-08 7:51 UTC (permalink / raw)
To: qemu-devel; +Cc: philmd
Move the libfdt detection code together with other dependencies instead
of keeping it with subprojects. This has the disadvantage of performing
the detection even if no target requires libfdt; but it has the advantage
that Kconfig will be able to observe the availability of the library.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
meson.build | 79 ++++++++++++++++++++++++++---------------------------
1 file changed, 38 insertions(+), 41 deletions(-)
diff --git a/meson.build b/meson.build
index 7ca0ba4987f..2e7e2b15406 100644
--- a/meson.build
+++ b/meson.build
@@ -1858,6 +1858,34 @@ if numa.found() and not cc.links('''
endif
endif
+fdt = not_found
+fdt_opt = get_option('fdt')
+if fdt_opt == 'enabled' and get_option('wrap_mode') == 'nodownload'
+ fdt_opt = 'system'
+endif
+if fdt_opt in ['enabled', 'system'] or (fdt_opt == 'auto' and have_system)
+ fdt = cc.find_library('fdt', required: fdt_opt == 'system')
+ if fdt.found() and cc.links('''
+ #include <libfdt.h>
+ #include <libfdt_env.h>
+ int main(void) { fdt_find_max_phandle(NULL, NULL); return 0; }''',
+ dependencies: fdt)
+ fdt_opt = 'system'
+ elif fdt_opt != 'system'
+ fdt_opt = get_option('wrap_mode') == 'nodownload' ? 'disabled' : 'internal'
+ fdt = not_found
+ else
+ error('system libfdt is too old (1.5.1 or newer required)')
+ endif
+endif
+if fdt_opt == 'internal'
+ assert(not fdt.found())
+ libfdt_proj = subproject('dtc', required: true,
+ default_options: ['tools=false', 'yaml=disabled',
+ 'python=disabled', 'default_library=static'])
+ fdt = libfdt_proj.get_variable('libfdt_dep')
+endif
+
rdma = not_found
if not get_option('rdma').auto() or have_system
libumad = cc.find_library('ibumad', required: get_option('rdma'))
@@ -2199,6 +2227,7 @@ config_host_data.set('CONFIG_BSD', host_os in bsd_oses)
config_host_data.set('CONFIG_CAPSTONE', capstone.found())
config_host_data.set('CONFIG_COCOA', cocoa.found())
config_host_data.set('CONFIG_DARWIN', host_os == 'darwin')
+config_host_data.set('CONFIG_FDT', fdt.found())
config_host_data.set('CONFIG_FUZZ', get_option('fuzzing'))
config_host_data.set('CONFIG_GCOV', get_option('b_coverage'))
config_host_data.set('CONFIG_LIBUDEV', libudev.found())
@@ -3025,14 +3054,16 @@ foreach target : target_dirs
error('No accelerator available for target @0@'.format(target))
endif
- actual_target_dirs += target
config_target += keyval.load('configs/targets' / target + '.mak')
config_target += { 'TARGET_' + config_target['TARGET_ARCH'].to_upper(): 'y' }
- if 'TARGET_NEED_FDT' in config_target
+ if 'TARGET_NEED_FDT' in config_target and not fdt.found()
fdt_required += target
+ continue
endif
+ actual_target_dirs += target
+
# Add default keys
if 'TARGET_BASE_ARCH' not in config_target
config_target += {'TARGET_BASE_ARCH': config_target['TARGET_ARCH']}
@@ -3120,6 +3151,10 @@ genh += custom_target('config-poison.h',
command: [find_program('scripts/make-config-poison.sh'),
target_configs_h])
+if fdt_required.length() > 0
+ error('fdt disabled but required by targets ' + ', '.join(fdt_required))
+endif
+
###############
# Subprojects #
###############
@@ -3130,44 +3165,6 @@ if have_system and vfio_user_server_allowed
libvfio_user_dep = libvfio_user_proj.get_variable('libvfio_user_dep')
endif
-fdt = not_found
-fdt_opt = get_option('fdt')
-if fdt_required.length() > 0 or fdt_opt == 'enabled'
- if fdt_opt == 'disabled'
- error('fdt disabled but required by targets ' + ', '.join(fdt_required))
- endif
-
- if fdt_opt in ['enabled', 'auto', 'system']
- if get_option('wrap_mode') == 'nodownload'
- fdt_opt = 'system'
- endif
- fdt = cc.find_library('fdt', required: fdt_opt == 'system')
- if fdt.found() and cc.links('''
- #include <libfdt.h>
- #include <libfdt_env.h>
- int main(void) { fdt_find_max_phandle(NULL, NULL); return 0; }''',
- dependencies: fdt)
- fdt_opt = 'system'
- elif fdt_opt == 'system'
- error('system libfdt requested, but it is too old (1.5.1 or newer required)')
- else
- fdt_opt = 'internal'
- fdt = not_found
- endif
- endif
- if not fdt.found()
- assert(fdt_opt == 'internal')
- libfdt_proj = subproject('dtc', required: true,
- default_options: ['tools=false', 'yaml=disabled',
- 'python=disabled', 'default_library=static'])
- fdt = libfdt_proj.get_variable('libfdt_dep')
- endif
-else
- fdt_opt = 'disabled'
-endif
-
-config_host_data.set('CONFIG_FDT', fdt.found())
-
vhost_user = not_found
if host_os == 'linux' and have_vhost_user
libvhost_user = subproject('libvhost-user')
@@ -4419,7 +4416,7 @@ summary_info += {'Linux AIO support': libaio}
summary_info += {'Linux io_uring support': linux_io_uring}
summary_info += {'ATTR/XATTR support': libattr}
summary_info += {'RDMA support': rdma}
-summary_info += {'fdt support': fdt_opt == 'disabled' ? false : fdt_opt}
+summary_info += {'fdt support': fdt_opt == 'internal' ? 'internal' : fdt}
summary_info += {'libcap-ng support': libcap_ng}
summary_info += {'bpf support': libbpf}
summary_info += {'rbd support': rbd}
--
2.45.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/6] meson: move libfdt together with other dependencies
2024-05-08 7:51 ` [PATCH 2/6] meson: move libfdt together with other dependencies Paolo Bonzini
@ 2024-05-08 8:21 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 9+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-05-08 8:21 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 8/5/24 09:51, Paolo Bonzini wrote:
> Move the libfdt detection code together with other dependencies instead
> of keeping it with subprojects. This has the disadvantage of performing
> the detection even if no target requires libfdt; but it has the advantage
> that Kconfig will be able to observe the availability of the library.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> meson.build | 79 ++++++++++++++++++++++++++---------------------------
> 1 file changed, 38 insertions(+), 41 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/6] kconfig: allow compiling out QEMU device tree code per target
2024-05-08 7:50 [PATCH v2 0/6] kconfig: express dependency of individual boards on libfdt Paolo Bonzini
2024-05-08 7:51 ` [PATCH 1/6] meson: pick libfdt from common_ss when building target-specific files Paolo Bonzini
2024-05-08 7:51 ` [PATCH 2/6] meson: move libfdt together with other dependencies Paolo Bonzini
@ 2024-05-08 7:51 ` Paolo Bonzini
2024-05-08 7:51 ` [PATCH 4/6] kconfig: express dependency of individual boards on libfdt Paolo Bonzini
` (2 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Paolo Bonzini @ 2024-05-08 7:51 UTC (permalink / raw)
To: qemu-devel; +Cc: philmd
Introduce a new Kconfig symbol, CONFIG_DEVICE_TREE, that specifies whether
to include the common device tree code in system/device_tree.c and to
link to libfdt. For now, include it unconditionally if libfdt is
available.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
meson.build | 1 +
include/monitor/hmp.h | 1 +
include/sysemu/device_tree.h | 1 -
monitor/hmp-cmds.c | 17 +++++++++++++++++
system/device_tree-stub.c | 10 ++++++++++
system/device_tree.c | 14 --------------
Kconfig.host | 4 ++++
hw/core/Kconfig | 9 ++++++++-
hw/core/meson.build | 2 +-
system/meson.build | 4 +++-
10 files changed, 45 insertions(+), 18 deletions(-)
create mode 100644 system/device_tree-stub.c
diff --git a/meson.build b/meson.build
index 2e7e2b15406..d8f259d2610 100644
--- a/meson.build
+++ b/meson.build
@@ -2990,6 +2990,7 @@ host_kconfig = \
(have_ivshmem ? ['CONFIG_IVSHMEM=y'] : []) + \
(opengl.found() ? ['CONFIG_OPENGL=y'] : []) + \
(x11.found() ? ['CONFIG_X11=y'] : []) + \
+ (fdt.found() ? ['CONFIG_FDT=y'] : []) + \
(have_vhost_user ? ['CONFIG_VHOST_USER=y'] : []) + \
(have_vhost_vdpa ? ['CONFIG_VHOST_VDPA=y'] : []) + \
(have_vhost_kernel ? ['CONFIG_VHOST_KERNEL=y'] : []) + \
diff --git a/include/monitor/hmp.h b/include/monitor/hmp.h
index f4cf8f6717d..954f3c83ad9 100644
--- a/include/monitor/hmp.h
+++ b/include/monitor/hmp.h
@@ -180,5 +180,6 @@ void hmp_ioport_write(Monitor *mon, const QDict *qdict);
void hmp_boot_set(Monitor *mon, const QDict *qdict);
void hmp_info_mtree(Monitor *mon, const QDict *qdict);
void hmp_info_cryptodev(Monitor *mon, const QDict *qdict);
+void hmp_dumpdtb(Monitor *mon, const QDict *qdict);
#endif
diff --git a/include/sysemu/device_tree.h b/include/sysemu/device_tree.h
index 8eab3959341..eb601522f88 100644
--- a/include/sysemu/device_tree.h
+++ b/include/sysemu/device_tree.h
@@ -134,7 +134,6 @@ int qemu_fdt_add_path(void *fdt, const char *path);
} while (0)
void qemu_fdt_dumpdtb(void *fdt, int size);
-void hmp_dumpdtb(Monitor *mon, const QDict *qdict);
/**
* qemu_fdt_setprop_sized_cells_from_array:
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index 871898ac46b..ea79148ee85 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -22,6 +22,7 @@
#include "monitor/monitor-internal.h"
#include "qapi/error.h"
#include "qapi/qapi-commands-control.h"
+#include "qapi/qapi-commands-machine.h"
#include "qapi/qapi-commands-misc.h"
#include "qapi/qmp/qdict.h"
#include "qemu/cutils.h"
@@ -443,3 +444,19 @@ void hmp_info_mtree(Monitor *mon, const QDict *qdict)
mtree_info(flatview, dispatch_tree, owner, disabled);
}
+
+#if defined(CONFIG_FDT)
+void hmp_dumpdtb(Monitor *mon, const QDict *qdict)
+{
+ const char *filename = qdict_get_str(qdict, "filename");
+ Error *local_err = NULL;
+
+ qmp_dumpdtb(filename, &local_err);
+
+ if (hmp_handle_error(mon, local_err)) {
+ return;
+ }
+
+ monitor_printf(mon, "dtb dumped to %s", filename);
+}
+#endif
diff --git a/system/device_tree-stub.c b/system/device_tree-stub.c
new file mode 100644
index 00000000000..bddda6fa37a
--- /dev/null
+++ b/system/device_tree-stub.c
@@ -0,0 +1,10 @@
+#include "qemu/osdep.h"
+#include "qapi/error.h"
+#include "qapi/qapi-commands-machine.h"
+
+#ifdef CONFIG_FDT
+void qmp_dumpdtb(const char *filename, Error **errp)
+{
+ error_setg(errp, "This machine doesn't have a FDT");
+}
+#endif
diff --git a/system/device_tree.c b/system/device_tree.c
index eb5166ca360..2e38259d34f 100644
--- a/system/device_tree.c
+++ b/system/device_tree.c
@@ -668,20 +668,6 @@ void qmp_dumpdtb(const char *filename, Error **errp)
}
}
-void hmp_dumpdtb(Monitor *mon, const QDict *qdict)
-{
- const char *filename = qdict_get_str(qdict, "filename");
- Error *local_err = NULL;
-
- qmp_dumpdtb(filename, &local_err);
-
- if (hmp_handle_error(mon, local_err)) {
- return;
- }
-
- info_report("dtb dumped to %s", filename);
-}
-
void qemu_fdt_randomize_seeds(void *fdt)
{
int noffset, poffset, len;
diff --git a/Kconfig.host b/Kconfig.host
index f6a2a131e6c..a0d4a52131e 100644
--- a/Kconfig.host
+++ b/Kconfig.host
@@ -23,6 +23,10 @@ config IVSHMEM
config TPM
bool
+config FDT
+ bool
+ select DEVICE_TREE
+
config VHOST_USER
bool
diff --git a/hw/core/Kconfig b/hw/core/Kconfig
index 9397503656d..24411f59306 100644
--- a/hw/core/Kconfig
+++ b/hw/core/Kconfig
@@ -4,8 +4,14 @@ config EMPTY_SLOT
config PTIMER
bool
+config DEVICE_TREE
+ bool
+ # fail the build if libfdt not found
+ depends on FDT
+
config FITLOADER
bool
+ depends on DEVICE_TREE
config GENERIC_LOADER
bool
@@ -14,13 +20,14 @@ config GENERIC_LOADER
config GUEST_LOADER
bool
default y
- depends on TCG
+ depends on TCG && DEVICE_TREE
config OR_IRQ
bool
config PLATFORM_BUS
bool
+ depends on DEVICE_TREE
config REGISTER
bool
diff --git a/hw/core/meson.build b/hw/core/meson.build
index f20d4143f7a..a3d9bab9f42 100644
--- a/hw/core/meson.build
+++ b/hw/core/meson.build
@@ -16,7 +16,7 @@ common_ss.add(files('cpu-common.c'))
common_ss.add(files('machine-smp.c'))
system_ss.add(when: 'CONFIG_FITLOADER', if_true: files('loader-fit.c'))
system_ss.add(when: 'CONFIG_GENERIC_LOADER', if_true: files('generic-loader.c'))
-system_ss.add(when: ['CONFIG_GUEST_LOADER', fdt], if_true: files('guest-loader.c'))
+system_ss.add(when: 'CONFIG_GUEST_LOADER', if_true: files('guest-loader.c'))
system_ss.add(when: 'CONFIG_OR_IRQ', if_true: files('or-irq.c'))
system_ss.add(when: 'CONFIG_PLATFORM_BUS', if_true: files('platform-bus.c'))
system_ss.add(when: 'CONFIG_PTIMER', if_true: files('ptimer.c'))
diff --git a/system/meson.build b/system/meson.build
index 25e21172505..a296270cb00 100644
--- a/system/meson.build
+++ b/system/meson.build
@@ -32,7 +32,9 @@ if have_tpm
endif
system_ss.add(when: seccomp, if_true: files('qemu-seccomp.c'))
-system_ss.add(when: fdt, if_true: files('device_tree.c'))
+system_ss.add(when: 'CONFIG_DEVICE_TREE',
+ if_true: [fdt, files('device_tree.c')],
+ if_false: files('device_tree-stub.c'))
if host_os == 'linux'
system_ss.add(files('async-teardown.c'))
endif
--
2.45.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 4/6] kconfig: express dependency of individual boards on libfdt
2024-05-08 7:50 [PATCH v2 0/6] kconfig: express dependency of individual boards on libfdt Paolo Bonzini
` (2 preceding siblings ...)
2024-05-08 7:51 ` [PATCH 3/6] kconfig: allow compiling out QEMU device tree code per target Paolo Bonzini
@ 2024-05-08 7:51 ` Paolo Bonzini
2024-05-08 7:51 ` [PATCH 5/6] hw/xtensa: require libfdt Paolo Bonzini
2024-05-08 7:51 ` [PATCH 6/6] configs: disable emulators that require it if libfdt is not found Paolo Bonzini
5 siblings, 0 replies; 9+ messages in thread
From: Paolo Bonzini @ 2024-05-08 7:51 UTC (permalink / raw)
To: qemu-devel; +Cc: philmd
Now that boards are enabled by default and the "CONFIG_FOO=y"
entries are gone from configs/devices/, there cannot be any more
a conflicts between the default contents of configs/devices/
and a failed "depends on" clause.
With this change, each individual board or target can express
whether it needs FDT. It can then include the common code in the
build via "select DEVICE_TREE", which will also as tell meson to link
with libfdt.
This allows building non-microvm x86 emulators without having
libfdt available.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
Kconfig.host | 1 -
hw/arm/Kconfig | 5 +++++
hw/i386/Kconfig | 3 ++-
hw/loongarch/Kconfig | 3 ++-
hw/mips/Kconfig | 3 ++-
hw/openrisc/Kconfig | 2 ++
hw/ppc/Kconfig | 15 ++++++++-------
hw/riscv/Kconfig | 4 ++++
hw/rx/Kconfig | 3 ++-
hw/xtensa/Kconfig | 1 +
target/arm/Kconfig | 2 ++
target/microblaze/Kconfig | 1 +
target/openrisc/Kconfig | 1 +
target/riscv/Kconfig | 2 ++
14 files changed, 34 insertions(+), 12 deletions(-)
diff --git a/Kconfig.host b/Kconfig.host
index a0d4a52131e..17f405004b3 100644
--- a/Kconfig.host
+++ b/Kconfig.host
@@ -25,7 +25,6 @@ config TPM
config FDT
bool
- select DEVICE_TREE
config VHOST_USER
bool
diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
index 98c264ed219..8b97683a45e 100644
--- a/hw/arm/Kconfig
+++ b/hw/arm/Kconfig
@@ -15,6 +15,7 @@ config ARM_VIRT
select ACPI
select ARM_SMMUV3
select GPIO_KEY
+ select DEVICE_TREE
select FW_CFG_DMA
select PCI_EXPRESS
select PCI_EXPRESS_GENERIC_BRIDGE
@@ -265,6 +266,7 @@ config SBSA_REF
default y
depends on TCG && AARCH64
imply PCI_DEVICES
+ select DEVICE_TREE
select AHCI
select ARM_SMMUV3
select GPIO_KEY
@@ -347,6 +349,7 @@ config VEXPRESS
bool
default y
depends on TCG && ARM
+ select DEVICE_TREE
select A9MPCORE
select A15MPCORE
select ARM_MPTIMER
@@ -492,6 +495,7 @@ config XLNX_ZYNQMP_ARM
select CPU_CLUSTER
select DDC
select DPCD
+ select DEVICE_TREE
select SDHCI
select SSI
select SSI_M25P80
@@ -509,6 +513,7 @@ config XLNX_VERSAL
depends on TCG && AARCH64
select ARM_GIC
select CPU_CLUSTER
+ select DEVICE_TREE
select PL011
select CADENCE
select VIRTIO_MMIO
diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig
index 4362164962c..5af47f4bf2f 100644
--- a/hw/i386/Kconfig
+++ b/hw/i386/Kconfig
@@ -115,7 +115,8 @@ config Q35
config MICROVM
bool
default y
- depends on I386
+ depends on I386 && FDT
+ select DEVICE_TREE
select SERIAL_ISA # for serial_hds_isa_init()
select ISA_BUS
select APIC
diff --git a/hw/loongarch/Kconfig b/hw/loongarch/Kconfig
index 78640505630..830cfef72db 100644
--- a/hw/loongarch/Kconfig
+++ b/hw/loongarch/Kconfig
@@ -1,7 +1,8 @@
config LOONGARCH_VIRT
bool
default y
- depends on LOONGARCH64
+ depends on LOONGARCH64 && FDT
+ select DEVICE_TREE
select PCI
select PCI_EXPRESS_GENERIC_BRIDGE
imply VIRTIO_VGA
diff --git a/hw/mips/Kconfig b/hw/mips/Kconfig
index 9bccb363eb9..a7f26edebe8 100644
--- a/hw/mips/Kconfig
+++ b/hw/mips/Kconfig
@@ -80,9 +80,10 @@ config MIPS_CPS
config MIPS_BOSTON
bool
default y
- depends on MIPS64 && !TARGET_BIG_ENDIAN
+ depends on MIPS64 && !TARGET_BIG_ENDIAN && FDT
imply PCI_DEVICES
imply TEST_DEVICES
+ select DEVICE_TREE
select FITLOADER
select MIPS_CPS
select PCI_EXPRESS_XILINX
diff --git a/hw/openrisc/Kconfig b/hw/openrisc/Kconfig
index 9c9015e0a5d..76b953c62c2 100644
--- a/hw/openrisc/Kconfig
+++ b/hw/openrisc/Kconfig
@@ -2,6 +2,7 @@ config OR1K_SIM
bool
default y
depends on OPENRISC
+ select DEVICE_TREE
select SERIAL
select OPENCORES_ETH
select OMPIC
@@ -14,6 +15,7 @@ config OR1K_VIRT
imply PCI_DEVICES
imply VIRTIO_VGA
imply TEST_DEVICES
+ select DEVICE_TREE
select PCI
select PCI_EXPRESS_GENERIC_BRIDGE
select GOLDFISH_RTC
diff --git a/hw/ppc/Kconfig b/hw/ppc/Kconfig
index 78f83e78ce5..347212f4dba 100644
--- a/hw/ppc/Kconfig
+++ b/hw/ppc/Kconfig
@@ -1,7 +1,7 @@
config PSERIES
bool
default y
- depends on PPC64
+ depends on PPC64 && FDT
imply USB_OHCI_PCI
imply PCI_DEVICES
imply TEST_DEVICES
@@ -26,7 +26,7 @@ config SPAPR_RNG
config POWERNV
bool
default y
- depends on PPC64
+ depends on PPC64 && FDT
imply PCI_DEVICES
imply TEST_DEVICES
select ISA_IPMI_BT
@@ -52,7 +52,7 @@ config PPC405
config PPC440
bool
default y
- depends on PPC
+ depends on PPC && FDT
imply PCI_DEVICES
imply TEST_DEVICES
imply E1000_PCI
@@ -71,7 +71,7 @@ config PPC4XX
config SAM460EX
bool
default y
- depends on PPC
+ depends on PPC && FDT
select PFLASH_CFI01
select IDE_SII3112
select M41T80
@@ -168,19 +168,19 @@ config E500
config E500PLAT
bool
default y
- depends on PPC
+ depends on PPC && FDT
select E500
config MPC8544DS
bool
default y
- depends on PPC
+ depends on PPC && FDT
select E500
config VIRTEX
bool
default y
- depends on PPC
+ depends on PPC && FDT
select PPC4XX
select PFLASH_CFI01
select SERIAL
@@ -193,6 +193,7 @@ config FW_CFG_PPC
bool
config FDT_PPC
+ select DEVICE_TREE
bool
config VOF
diff --git a/hw/riscv/Kconfig b/hw/riscv/Kconfig
index 5f5f9e31bb0..a2030e3a6ff 100644
--- a/hw/riscv/Kconfig
+++ b/hw/riscv/Kconfig
@@ -12,6 +12,7 @@ config MICROCHIP_PFSOC
depends on RISCV64
select CADENCE_SDHCI
select CPU_CLUSTER
+ select DEVICE_TREE
select MCHP_PFSOC_DMC
select MCHP_PFSOC_IOSCB
select MCHP_PFSOC_MMUART
@@ -37,6 +38,7 @@ config RISCV_VIRT
imply VIRTIO_VGA
imply TEST_DEVICES
imply TPM_TIS_SYSBUS
+ select DEVICE_TREE
select RISCV_NUMA
select GOLDFISH_RTC
select PCI
@@ -82,6 +84,7 @@ config SIFIVE_U
depends on RISCV32 || RISCV64
select CADENCE
select CPU_CLUSTER
+ select DEVICE_TREE
select RISCV_ACLINT
select SIFIVE_GPIO
select SIFIVE_PDMA
@@ -99,6 +102,7 @@ config SPIKE
bool
default y
depends on RISCV32 || RISCV64
+ select DEVICE_TREE
select RISCV_NUMA
select HTIF
select RISCV_ACLINT
diff --git a/hw/rx/Kconfig b/hw/rx/Kconfig
index b2fa2b7eec3..aa9242d1ef6 100644
--- a/hw/rx/Kconfig
+++ b/hw/rx/Kconfig
@@ -8,5 +8,6 @@ config RX62N_MCU
config RX_GDBSIM
bool
default y
- depends on RX
+ depends on RX && FDT
+ select DEVICE_TREE
select RX62N_MCU
diff --git a/hw/xtensa/Kconfig b/hw/xtensa/Kconfig
index 443b415c2ba..8ea283a7a3b 100644
--- a/hw/xtensa/Kconfig
+++ b/hw/xtensa/Kconfig
@@ -15,6 +15,7 @@ config XTENSA_XTFPGA
bool
default y
depends on XTENSA
+ imply DEVICE_TREE
select OPENCORES_ETH
select PFLASH_CFI01
select SERIAL
diff --git a/target/arm/Kconfig b/target/arm/Kconfig
index 5847c5a74a7..7f8a2217ae1 100644
--- a/target/arm/Kconfig
+++ b/target/arm/Kconfig
@@ -6,6 +6,8 @@ config ARM
# translate.c v7m helpers under ARM_V7M.
select ARM_V7M if TCG
+ select DEVICE_TREE # needed by boot.c
+
config AARCH64
bool
select ARM
diff --git a/target/microblaze/Kconfig b/target/microblaze/Kconfig
index a5410d9218d..e91d58d88f2 100644
--- a/target/microblaze/Kconfig
+++ b/target/microblaze/Kconfig
@@ -1,2 +1,3 @@
config MICROBLAZE
bool
+ select DEVICE_TREE # needed by boot.c
diff --git a/target/openrisc/Kconfig b/target/openrisc/Kconfig
index e0da4ac1dfc..cd66c2e3b6c 100644
--- a/target/openrisc/Kconfig
+++ b/target/openrisc/Kconfig
@@ -1,2 +1,3 @@
config OPENRISC
bool
+ select DEVICE_TREE # needed by boot.c
diff --git a/target/riscv/Kconfig b/target/riscv/Kconfig
index adb7de3f37d..5f30df22f2f 100644
--- a/target/riscv/Kconfig
+++ b/target/riscv/Kconfig
@@ -1,7 +1,9 @@
config RISCV32
bool
select ARM_COMPATIBLE_SEMIHOSTING # for do_common_semihosting()
+ select DEVICE_TREE # needed by boot.c
config RISCV64
bool
select ARM_COMPATIBLE_SEMIHOSTING # for do_common_semihosting()
+ select DEVICE_TREE # needed by boot.c
--
2.45.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 5/6] hw/xtensa: require libfdt
2024-05-08 7:50 [PATCH v2 0/6] kconfig: express dependency of individual boards on libfdt Paolo Bonzini
` (3 preceding siblings ...)
2024-05-08 7:51 ` [PATCH 4/6] kconfig: express dependency of individual boards on libfdt Paolo Bonzini
@ 2024-05-08 7:51 ` Paolo Bonzini
2024-05-08 7:51 ` [PATCH 6/6] configs: disable emulators that require it if libfdt is not found Paolo Bonzini
5 siblings, 0 replies; 9+ messages in thread
From: Paolo Bonzini @ 2024-05-08 7:51 UTC (permalink / raw)
To: qemu-devel; +Cc: philmd
All other boards require libfdt if it can be used (including for example
i386/x86_64), so change the "imply" to "select" and always allow -dtb
in qemu-system-xtensa.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/xtensa/xtfpga.c | 9 ---------
hw/xtensa/Kconfig | 4 ++--
2 files changed, 2 insertions(+), 11 deletions(-)
diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c
index f49e6591dc2..955e8867a36 100644
--- a/hw/xtensa/xtfpga.c
+++ b/hw/xtensa/xtfpga.c
@@ -356,7 +356,6 @@ static void xtfpga_init(const XtfpgaBoardDesc *board, MachineState *machine)
cur_tagptr = put_tag(cur_tagptr, BP_TAG_COMMAND_LINE,
strlen(kernel_cmdline) + 1, kernel_cmdline);
}
-#ifdef CONFIG_FDT
if (dtb_filename) {
int fdt_size;
void *fdt = load_device_tree(dtb_filename, &fdt_size);
@@ -373,14 +372,6 @@ static void xtfpga_init(const XtfpgaBoardDesc *board, MachineState *machine)
cur_lowmem = QEMU_ALIGN_UP(cur_lowmem + fdt_size, 4 * KiB);
g_free(fdt);
}
-#else
- if (dtb_filename) {
- error_report("could not load DTB '%s': "
- "FDT support is not configured in QEMU",
- dtb_filename);
- exit(EXIT_FAILURE);
- }
-#endif
if (initrd_filename) {
BpMemInfo initrd_location = { 0 };
int initrd_size = load_ramdisk(initrd_filename, cur_lowmem,
diff --git a/hw/xtensa/Kconfig b/hw/xtensa/Kconfig
index 8ea283a7a3b..fc5c785cfac 100644
--- a/hw/xtensa/Kconfig
+++ b/hw/xtensa/Kconfig
@@ -14,8 +14,8 @@ config XTENSA_VIRT
config XTENSA_XTFPGA
bool
default y
- depends on XTENSA
- imply DEVICE_TREE
+ depends on XTENSA && FDT
+ select DEVICE_TREE
select OPENCORES_ETH
select PFLASH_CFI01
select SERIAL
--
2.45.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 6/6] configs: disable emulators that require it if libfdt is not found
2024-05-08 7:50 [PATCH v2 0/6] kconfig: express dependency of individual boards on libfdt Paolo Bonzini
` (4 preceding siblings ...)
2024-05-08 7:51 ` [PATCH 5/6] hw/xtensa: require libfdt Paolo Bonzini
@ 2024-05-08 7:51 ` Paolo Bonzini
5 siblings, 0 replies; 9+ messages in thread
From: Paolo Bonzini @ 2024-05-08 7:51 UTC (permalink / raw)
To: qemu-devel; +Cc: philmd
Since boards can express their dependency on libfdt and
system/device_tree.c, only leave TARGET_NEED_FDT if the target has a
hard dependency.
Those emulators will be skipped if libfdt is disabled, or if it
is "auto" and not found and --disable-download is passed; unless
the target is mentioned explicitly in --target-list, in which case
the build will fail.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configs/targets/aarch64-softmmu.mak | 1 +
configs/targets/arm-softmmu.mak | 1 +
configs/targets/i386-softmmu.mak | 1 -
configs/targets/loongarch64-softmmu.mak | 1 +
configs/targets/microblaze-softmmu.mak | 1 +
configs/targets/microblazeel-softmmu.mak | 1 +
configs/targets/mips64el-softmmu.mak | 1 -
configs/targets/or1k-softmmu.mak | 1 +
configs/targets/ppc-softmmu.mak | 1 -
configs/targets/ppc64-softmmu.mak | 1 +
configs/targets/riscv32-softmmu.mak | 1 +
configs/targets/riscv64-softmmu.mak | 1 +
configs/targets/rx-softmmu.mak | 1 +
configs/targets/x86_64-softmmu.mak | 1 -
meson.build | 6 +++++-
.gitlab-ci.d/buildtest.yml | 8 ++++----
16 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/configs/targets/aarch64-softmmu.mak b/configs/targets/aarch64-softmmu.mak
index 83c22391a69..84cb32dc2f4 100644
--- a/configs/targets/aarch64-softmmu.mak
+++ b/configs/targets/aarch64-softmmu.mak
@@ -3,4 +3,5 @@ TARGET_BASE_ARCH=arm
TARGET_SUPPORTS_MTTCG=y
TARGET_KVM_HAVE_GUEST_DEBUG=y
TARGET_XML_FILES= gdb-xml/aarch64-core.xml gdb-xml/aarch64-fpu.xml gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-vfp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-profile.xml gdb-xml/arm-m-profile-mve.xml gdb-xml/aarch64-pauth.xml
+# needed by boot.c
TARGET_NEED_FDT=y
diff --git a/configs/targets/arm-softmmu.mak b/configs/targets/arm-softmmu.mak
index 92c8349b964..bf390b7a8de 100644
--- a/configs/targets/arm-softmmu.mak
+++ b/configs/targets/arm-softmmu.mak
@@ -1,4 +1,5 @@
TARGET_ARCH=arm
TARGET_SUPPORTS_MTTCG=y
TARGET_XML_FILES= gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-vfp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-profile.xml gdb-xml/arm-m-profile-mve.xml
+# needed by boot.c
TARGET_NEED_FDT=y
diff --git a/configs/targets/i386-softmmu.mak b/configs/targets/i386-softmmu.mak
index d61b5076134..2ac69d5ba37 100644
--- a/configs/targets/i386-softmmu.mak
+++ b/configs/targets/i386-softmmu.mak
@@ -1,5 +1,4 @@
TARGET_ARCH=i386
TARGET_SUPPORTS_MTTCG=y
-TARGET_NEED_FDT=y
TARGET_KVM_HAVE_GUEST_DEBUG=y
TARGET_XML_FILES= gdb-xml/i386-32bit.xml
diff --git a/configs/targets/loongarch64-softmmu.mak b/configs/targets/loongarch64-softmmu.mak
index f23780fdd89..84beb19b90a 100644
--- a/configs/targets/loongarch64-softmmu.mak
+++ b/configs/targets/loongarch64-softmmu.mak
@@ -2,4 +2,5 @@ TARGET_ARCH=loongarch64
TARGET_BASE_ARCH=loongarch
TARGET_SUPPORTS_MTTCG=y
TARGET_XML_FILES= gdb-xml/loongarch-base32.xml gdb-xml/loongarch-base64.xml gdb-xml/loongarch-fpu.xml
+# all boards require libfdt
TARGET_NEED_FDT=y
diff --git a/configs/targets/microblaze-softmmu.mak b/configs/targets/microblaze-softmmu.mak
index e84c0cc7283..eea266d4f3d 100644
--- a/configs/targets/microblaze-softmmu.mak
+++ b/configs/targets/microblaze-softmmu.mak
@@ -1,5 +1,6 @@
TARGET_ARCH=microblaze
TARGET_BIG_ENDIAN=y
TARGET_SUPPORTS_MTTCG=y
+# needed by boot.c
TARGET_NEED_FDT=y
TARGET_XML_FILES=gdb-xml/microblaze-core.xml gdb-xml/microblaze-stack-protect.xml
diff --git a/configs/targets/microblazeel-softmmu.mak b/configs/targets/microblazeel-softmmu.mak
index 9b688036bd3..77b968acad3 100644
--- a/configs/targets/microblazeel-softmmu.mak
+++ b/configs/targets/microblazeel-softmmu.mak
@@ -1,4 +1,5 @@
TARGET_ARCH=microblaze
TARGET_SUPPORTS_MTTCG=y
+# needed by boot.c
TARGET_NEED_FDT=y
TARGET_XML_FILES=gdb-xml/microblaze-core.xml gdb-xml/microblaze-stack-protect.xml
diff --git a/configs/targets/mips64el-softmmu.mak b/configs/targets/mips64el-softmmu.mak
index 8d9ab3ddc4b..3864daa7364 100644
--- a/configs/targets/mips64el-softmmu.mak
+++ b/configs/targets/mips64el-softmmu.mak
@@ -1,3 +1,2 @@
TARGET_ARCH=mips64
TARGET_BASE_ARCH=mips
-TARGET_NEED_FDT=y
diff --git a/configs/targets/or1k-softmmu.mak b/configs/targets/or1k-softmmu.mak
index 432f855a30a..0341cb2a6b3 100644
--- a/configs/targets/or1k-softmmu.mak
+++ b/configs/targets/or1k-softmmu.mak
@@ -1,4 +1,5 @@
TARGET_ARCH=openrisc
TARGET_SUPPORTS_MTTCG=y
TARGET_BIG_ENDIAN=y
+# needed by boot.c and all boards
TARGET_NEED_FDT=y
diff --git a/configs/targets/ppc-softmmu.mak b/configs/targets/ppc-softmmu.mak
index f3ea9c98f75..53120dab41d 100644
--- a/configs/targets/ppc-softmmu.mak
+++ b/configs/targets/ppc-softmmu.mak
@@ -2,4 +2,3 @@ TARGET_ARCH=ppc
TARGET_BIG_ENDIAN=y
TARGET_KVM_HAVE_GUEST_DEBUG=y
TARGET_XML_FILES= gdb-xml/power-core.xml gdb-xml/power-fpu.xml gdb-xml/power-altivec.xml gdb-xml/power-spe.xml
-TARGET_NEED_FDT=y
diff --git a/configs/targets/ppc64-softmmu.mak b/configs/targets/ppc64-softmmu.mak
index 1db8d8381d0..40881d93968 100644
--- a/configs/targets/ppc64-softmmu.mak
+++ b/configs/targets/ppc64-softmmu.mak
@@ -4,4 +4,5 @@ TARGET_BIG_ENDIAN=y
TARGET_SUPPORTS_MTTCG=y
TARGET_KVM_HAVE_GUEST_DEBUG=y
TARGET_XML_FILES= gdb-xml/power64-core.xml gdb-xml/power-fpu.xml gdb-xml/power-altivec.xml gdb-xml/power-spe.xml gdb-xml/power-vsx.xml
+# all boards require libfdt
TARGET_NEED_FDT=y
diff --git a/configs/targets/riscv32-softmmu.mak b/configs/targets/riscv32-softmmu.mak
index d8b71cddcd4..338182d5b89 100644
--- a/configs/targets/riscv32-softmmu.mak
+++ b/configs/targets/riscv32-softmmu.mak
@@ -2,4 +2,5 @@ TARGET_ARCH=riscv32
TARGET_BASE_ARCH=riscv
TARGET_SUPPORTS_MTTCG=y
TARGET_XML_FILES= gdb-xml/riscv-32bit-cpu.xml gdb-xml/riscv-32bit-fpu.xml gdb-xml/riscv-64bit-fpu.xml gdb-xml/riscv-32bit-virtual.xml
+# needed by boot.c
TARGET_NEED_FDT=y
diff --git a/configs/targets/riscv64-softmmu.mak b/configs/targets/riscv64-softmmu.mak
index 7c0e7eeb429..f688ffa7bce 100644
--- a/configs/targets/riscv64-softmmu.mak
+++ b/configs/targets/riscv64-softmmu.mak
@@ -2,4 +2,5 @@ TARGET_ARCH=riscv64
TARGET_BASE_ARCH=riscv
TARGET_SUPPORTS_MTTCG=y
TARGET_XML_FILES= gdb-xml/riscv-64bit-cpu.xml gdb-xml/riscv-32bit-fpu.xml gdb-xml/riscv-64bit-fpu.xml gdb-xml/riscv-64bit-virtual.xml
+# needed by boot.c
TARGET_NEED_FDT=y
diff --git a/configs/targets/rx-softmmu.mak b/configs/targets/rx-softmmu.mak
index 0c458b2d07c..706bbe6062c 100644
--- a/configs/targets/rx-softmmu.mak
+++ b/configs/targets/rx-softmmu.mak
@@ -1,3 +1,4 @@
TARGET_ARCH=rx
TARGET_XML_FILES= gdb-xml/rx-core.xml
+# all boards require libfdt
TARGET_NEED_FDT=y
diff --git a/configs/targets/x86_64-softmmu.mak b/configs/targets/x86_64-softmmu.mak
index c5f882e5ba1..e12ac3dc59b 100644
--- a/configs/targets/x86_64-softmmu.mak
+++ b/configs/targets/x86_64-softmmu.mak
@@ -1,6 +1,5 @@
TARGET_ARCH=x86_64
TARGET_BASE_ARCH=i386
TARGET_SUPPORTS_MTTCG=y
-TARGET_NEED_FDT=y
TARGET_KVM_HAVE_GUEST_DEBUG=y
TARGET_XML_FILES= gdb-xml/i386-64bit.xml
diff --git a/meson.build b/meson.build
index d8f259d2610..b8b3e7d73f5 100644
--- a/meson.build
+++ b/meson.build
@@ -3059,7 +3059,11 @@ foreach target : target_dirs
config_target += { 'TARGET_' + config_target['TARGET_ARCH'].to_upper(): 'y' }
if 'TARGET_NEED_FDT' in config_target and not fdt.found()
- fdt_required += target
+ if default_targets
+ warning('Disabling ' + target + ' due to missing libfdt')
+ else
+ fdt_required += target
+ endif
continue
endif
diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml
index e9402a68a79..92ca396c195 100644
--- a/.gitlab-ci.d/buildtest.yml
+++ b/.gitlab-ci.d/buildtest.yml
@@ -648,8 +648,8 @@ build-tci:
- make check-tcg
# Check our reduced build configurations
-# requires libfdt: aarch64, arm, i386, loongarch64, microblaze, microblazeel,
-# mips64el, or1k, ppc, ppc64, riscv32, riscv64, rx, x86_64
+# requires libfdt: aarch64, arm, loongarch64, microblaze, microblazeel,
+# or1k, ppc64, riscv32, riscv64, rx
# does not build without boards: i386, loongarch64, s390x, sh4, sh4eb, x86_64
build-without-defaults:
extends: .native_build_job_template
@@ -665,7 +665,8 @@ build-without-defaults:
--disable-qom-cast-debug
--disable-strip
TARGETS: alpha-softmmu avr-softmmu cris-softmmu hppa-softmmu m68k-softmmu
- mips-softmmu mips64-softmmu mipsel-softmmu sparc-softmmu
+ mips-softmmu mips64-softmmu mipsel-softmmu mips64el-softmmu
+ ppc-softmmu sparc-softmmu
sparc64-softmmu tricore-softmmu xtensa-softmmu xtensaeb-softmmu
hexagon-linux-user i386-linux-user s390x-linux-user
MAKE_CHECK_ARGS: check
--
2.45.0
^ permalink raw reply related [flat|nested] 9+ messages in thread