* [PATCH 0/4] express dependency of individual boards on libfdt
@ 2024-05-07 7:19 Paolo Bonzini
2024-05-07 7:19 ` [PATCH 1/4] meson: remove system/internal distinction for libfdt Paolo Bonzini
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: Paolo Bonzini @ 2024-05-07 7:19 UTC (permalink / raw)
To: qemu-devel; +Cc: philmd
Just like we have boards that depend on TCG, not all boards in a
target may require libfdt. Express one by one which boards do,
using Kconfig "depends on" and "select" directives, and use the
result to include system/device_tree.c in the build.
Some binaries do require libfdt altogether. In a normal build without
--target-list or --enable-libfdt, these binaries will be disabled with a
message printed by meson.
Paolo
Paolo Bonzini (4):
meson: remove system/internal distinction for libfdt
kconfig: express dependency of individual boards on libfdt
hw/xtensa: require libfdt
configs: disable emulators that require it if libfdt is not found
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 | 82 ++++++++++++------------
hw/xtensa/xtfpga.c | 9 ---
.gitlab-ci.d/buildtest.yml | 7 +-
Kconfig.host | 3 +
hw/arm/Kconfig | 5 ++
hw/arm/meson.build | 2 +-
hw/core/Kconfig | 9 ++-
hw/core/meson.build | 2 +-
hw/i386/Kconfig | 3 +-
hw/loongarch/Kconfig | 3 +-
hw/loongarch/meson.build | 2 +-
hw/mips/Kconfig | 1 +
hw/mips/meson.build | 2 +-
hw/openrisc/Kconfig | 2 +
hw/openrisc/meson.build | 4 +-
hw/ppc/Kconfig | 15 +++--
hw/ppc/meson.build | 4 +-
hw/riscv/Kconfig | 4 ++
hw/riscv/meson.build | 2 +-
hw/rx/Kconfig | 3 +-
hw/xtensa/Kconfig | 3 +-
meson_options.txt | 6 +-
scripts/meson-buildoptions.sh | 4 +-
system/meson.build | 2 +-
target/arm/Kconfig | 2 +
target/microblaze/Kconfig | 1 +
target/openrisc/Kconfig | 1 +
target/riscv/Kconfig | 2 +
42 files changed, 112 insertions(+), 87 deletions(-)
--
2.45.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/4] meson: remove system/internal distinction for libfdt
2024-05-07 7:19 [PATCH 0/4] express dependency of individual boards on libfdt Paolo Bonzini
@ 2024-05-07 7:19 ` Paolo Bonzini
2024-05-07 7:40 ` Philippe Mathieu-Daudé
2024-05-07 7:19 ` [PATCH 2/4] kconfig: express dependency of individual boards on libfdt Paolo Bonzini
` (2 subsequent siblings)
3 siblings, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2024-05-07 7:19 UTC (permalink / raw)
To: qemu-devel; +Cc: philmd
Treat libfdt like slirp and the other dependencies that use --enable-download;
remove the ability to force usage of the subproject.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
meson.build | 69 +++++++++++++++--------------------
meson_options.txt | 6 +--
scripts/meson-buildoptions.sh | 4 +-
3 files changed, 34 insertions(+), 45 deletions(-)
diff --git a/meson.build b/meson.build
index 43da4923721..530f92c0a9c 100644
--- a/meson.build
+++ b/meson.build
@@ -1858,6 +1858,30 @@ if numa.found() and not cc.links('''
endif
endif
+fdt = not_found
+if get_option('fdt').disable_auto_if(not have_system).allowed()
+ fdt = cc.find_library('fdt', required: false)
+ if fdt.found()
+ if not cc.links('''
+ #include <libfdt.h>
+ #include <libfdt_env.h>
+ int main(void) { fdt_find_max_phandle(NULL, NULL); return 0; }''',
+ dependencies: fdt)
+ libfdt_proj = subproject('dtc', required: get_option('fdt'),
+ default_options: ['tools=false', 'yaml=disabled',
+ 'python=disabled', 'default_library=static'])
+ fdt = libfdt_proj.get_variable('libfdt_dep')
+ endif
+ if not fdt.found()
+ if get_option('fdt').enabled()
+ error('libfdt found but too old (1.5.1 or newer required)')
+ else
+ warning('libfdt found but too old (1.5.1 or newer required)')
+ endif
+ endif
+ endif
+endif
+
rdma = not_found
if not get_option('rdma').auto() or have_system
libumad = cc.find_library('ibumad', required: get_option('rdma'))
@@ -2199,6 +2223,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())
@@ -3120,6 +3145,10 @@ genh += custom_target('config-poison.h',
command: [find_program('scripts/make-config-poison.sh'),
target_configs_h])
+if fdt_required.length() > 0 and not fdt.found()
+ error('fdt disabled but required by targets ' + ', '.join(fdt_required))
+endif
+
###############
# Subprojects #
###############
@@ -3130,44 +3159,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')
@@ -4411,7 +4402,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}
summary_info += {'libcap-ng support': libcap_ng}
summary_info += {'bpf support': libbpf}
summary_info += {'rbd support': rbd}
diff --git a/meson_options.txt b/meson_options.txt
index adc77bae0cd..90902c19d1c 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -308,9 +308,9 @@ option('vduse_blk_export', type: 'feature', value: 'auto',
option('capstone', type: 'feature', value: 'auto',
description: 'Whether and how to find the capstone library')
-option('fdt', type: 'combo', value: 'auto',
- choices: ['disabled', 'enabled', 'auto', 'system', 'internal'],
- description: 'Whether and how to find the libfdt library')
+option('fdt', type: 'feature', value: 'auto',
+ deprecated: { 'system': 'enabled' },
+ description: 'device tree support')
option('selinux', type: 'feature', value: 'auto',
description: 'SELinux support in qemu-nbd')
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 0a29d35fdb6..d816b35a2f4 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -33,8 +33,6 @@ meson_options_help() {
printf "%s\n" ' --enable-debug-stack-usage'
printf "%s\n" ' measure coroutine stack usage'
printf "%s\n" ' --enable-debug-tcg TCG debugging'
- printf "%s\n" ' --enable-fdt[=CHOICE] Whether and how to find the libfdt library'
- printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
printf "%s\n" ' --enable-fuzzing build fuzzing targets'
printf "%s\n" ' --enable-gcov Enable coverage tracking.'
printf "%s\n" ' --enable-lto Use link time optimization'
@@ -113,6 +111,7 @@ meson_options_help() {
printf "%s\n" ' dmg dmg image format support'
printf "%s\n" ' docs Documentations build support'
printf "%s\n" ' dsound DirectSound sound support'
+ printf "%s\n" ' fdt device tree support'
printf "%s\n" ' fuse FUSE block device export'
printf "%s\n" ' fuse-lseek SEEK_HOLE/SEEK_DATA support for FUSE exports'
printf "%s\n" ' gcrypt libgcrypt cryptography support'
@@ -310,7 +309,6 @@ _meson_option_parse() {
--disable-dsound) printf "%s" -Ddsound=disabled ;;
--enable-fdt) printf "%s" -Dfdt=enabled ;;
--disable-fdt) printf "%s" -Dfdt=disabled ;;
- --enable-fdt=*) quote_sh "-Dfdt=$2" ;;
--enable-fuse) printf "%s" -Dfuse=enabled ;;
--disable-fuse) printf "%s" -Dfuse=disabled ;;
--enable-fuse-lseek) printf "%s" -Dfuse_lseek=enabled ;;
--
2.45.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/4] kconfig: express dependency of individual boards on libfdt
2024-05-07 7:19 [PATCH 0/4] express dependency of individual boards on libfdt Paolo Bonzini
2024-05-07 7:19 ` [PATCH 1/4] meson: remove system/internal distinction for libfdt Paolo Bonzini
@ 2024-05-07 7:19 ` Paolo Bonzini
2024-05-07 7:48 ` Philippe Mathieu-Daudé
2024-05-07 7:19 ` [PATCH 3/4] hw/xtensa: require libfdt Paolo Bonzini
2024-05-07 7:19 ` [PATCH 4/4] configs: disable emulators that require it if libfdt is not found Paolo Bonzini
3 siblings, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2024-05-07 7:19 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 also include it in the
build via "select DEVICE_TREE", instead of having each hw/*/meson.build
file do it by hand, and this will bring in more components
such as CONFIG_GUEST_LOADER.
This allows building non-microvm x86 emulators without having
libfdt available.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
meson.build | 1 +
Kconfig.host | 3 +++
hw/arm/Kconfig | 5 +++++
hw/arm/meson.build | 2 +-
hw/core/Kconfig | 9 ++++++++-
hw/core/meson.build | 2 +-
hw/i386/Kconfig | 3 ++-
hw/loongarch/Kconfig | 3 ++-
hw/loongarch/meson.build | 2 +-
hw/mips/Kconfig | 1 +
hw/mips/meson.build | 2 +-
hw/openrisc/Kconfig | 2 ++
hw/openrisc/meson.build | 4 ++--
hw/ppc/Kconfig | 15 ++++++++-------
hw/ppc/meson.build | 4 +---
hw/riscv/Kconfig | 4 ++++
hw/riscv/meson.build | 2 +-
hw/rx/Kconfig | 3 ++-
hw/xtensa/Kconfig | 1 +
system/meson.build | 2 +-
target/arm/Kconfig | 2 ++
target/microblaze/Kconfig | 1 +
target/openrisc/Kconfig | 1 +
target/riscv/Kconfig | 2 ++
24 files changed, 54 insertions(+), 22 deletions(-)
diff --git a/meson.build b/meson.build
index 530f92c0a9c..3ae95215083 100644
--- a/meson.build
+++ b/meson.build
@@ -2986,6 +2986,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/Kconfig.host b/Kconfig.host
index f6a2a131e6c..17f405004b3 100644
--- a/Kconfig.host
+++ b/Kconfig.host
@@ -23,6 +23,9 @@ config IVSHMEM
config TPM
bool
+config FDT
+ bool
+
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/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/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/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/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/Kconfig b/hw/mips/Kconfig
index 9bccb363eb9..e540e10e094 100644
--- a/hw/mips/Kconfig
+++ b/hw/mips/Kconfig
@@ -83,6 +83,7 @@ config MIPS_BOSTON
depends on MIPS64 && !TARGET_BIG_ENDIAN
imply PCI_DEVICES
imply TEST_DEVICES
+ select DEVICE_TREE
select FITLOADER
select MIPS_CPS
select PCI_EXPRESS_XILINX
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/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/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/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/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/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/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'))
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/system/meson.build b/system/meson.build
index 25e21172505..d67328538d0 100644
--- a/system/meson.build
+++ b/system/meson.build
@@ -32,7 +32,7 @@ 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 host_os == 'linux'
system_ss.add(files('async-teardown.c'))
endif
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] 10+ messages in thread
* [PATCH 3/4] hw/xtensa: require libfdt
2024-05-07 7:19 [PATCH 0/4] express dependency of individual boards on libfdt Paolo Bonzini
2024-05-07 7:19 ` [PATCH 1/4] meson: remove system/internal distinction for libfdt Paolo Bonzini
2024-05-07 7:19 ` [PATCH 2/4] kconfig: express dependency of individual boards on libfdt Paolo Bonzini
@ 2024-05-07 7:19 ` Paolo Bonzini
2024-05-07 7:34 ` Philippe Mathieu-Daudé
2024-05-07 7:19 ` [PATCH 4/4] configs: disable emulators that require it if libfdt is not found Paolo Bonzini
3 siblings, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2024-05-07 7:19 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.
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] 10+ messages in thread
* [PATCH 4/4] configs: disable emulators that require it if libfdt is not found
2024-05-07 7:19 [PATCH 0/4] express dependency of individual boards on libfdt Paolo Bonzini
` (2 preceding siblings ...)
2024-05-07 7:19 ` [PATCH 3/4] hw/xtensa: require libfdt Paolo Bonzini
@ 2024-05-07 7:19 ` Paolo Bonzini
2024-05-07 7:51 ` Philippe Mathieu-Daudé
3 siblings, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2024-05-07 7:19 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.
By default, unless --enable-libfdt is passed (in which case the
dependency is mandatory, as usual for --enable-* options) or the
target is mention in --target-list, those emulators will be skipped if
libfdt is not present.
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 | 14 ++++++++++----
.gitlab-ci.d/buildtest.yml | 7 ++++---
16 files changed, 24 insertions(+), 11 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 3ae95215083..365213e21f2 100644
--- a/meson.build
+++ b/meson.build
@@ -3051,14 +3051,20 @@ 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
- fdt_required += target
+ if 'TARGET_NEED_FDT' in config_target and not fdt.found()
+ if default_targets
+ warning('Disabling ' + target + 'due to missing libfdt')
+ else
+ fdt_required += target
+ endif
+ 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']}
@@ -3146,7 +3152,7 @@ genh += custom_target('config-poison.h',
command: [find_program('scripts/make-config-poison.sh'),
target_configs_h])
-if fdt_required.length() > 0 and not fdt.found()
+if fdt_required.length() > 0
error('fdt disabled but required by targets ' + ', '.join(fdt_required))
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] 10+ messages in thread
* Re: [PATCH 3/4] hw/xtensa: require libfdt
2024-05-07 7:19 ` [PATCH 3/4] hw/xtensa: require libfdt Paolo Bonzini
@ 2024-05-07 7:34 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-05-07 7:34 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 7/5/24 09:19, Paolo Bonzini wrote:
> 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.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> hw/xtensa/xtfpga.c | 9 ---------
> hw/xtensa/Kconfig | 4 ++--
> 2 files changed, 2 insertions(+), 11 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/4] meson: remove system/internal distinction for libfdt
2024-05-07 7:19 ` [PATCH 1/4] meson: remove system/internal distinction for libfdt Paolo Bonzini
@ 2024-05-07 7:40 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-05-07 7:40 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 7/5/24 09:19, Paolo Bonzini wrote:
> Treat libfdt like slirp and the other dependencies that use --enable-download;
> remove the ability to force usage of the subproject.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> meson.build | 69 +++++++++++++++--------------------
> meson_options.txt | 6 +--
> scripts/meson-buildoptions.sh | 4 +-
> 3 files changed, 34 insertions(+), 45 deletions(-)
> diff --git a/meson_options.txt b/meson_options.txt
> index adc77bae0cd..90902c19d1c 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -308,9 +308,9 @@ option('vduse_blk_export', type: 'feature', value: 'auto',
>
> option('capstone', type: 'feature', value: 'auto',
> description: 'Whether and how to find the capstone library')
> -option('fdt', type: 'combo', value: 'auto',
> - choices: ['disabled', 'enabled', 'auto', 'system', 'internal'],
> - description: 'Whether and how to find the libfdt library')
> +option('fdt', type: 'feature', value: 'auto',
> + deprecated: { 'system': 'enabled' },
TIL deprecated options:
https://mesonbuild.com/Build-options.html#deprecated-options
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/4] kconfig: express dependency of individual boards on libfdt
2024-05-07 7:19 ` [PATCH 2/4] kconfig: express dependency of individual boards on libfdt Paolo Bonzini
@ 2024-05-07 7:48 ` Philippe Mathieu-Daudé
2024-05-07 10:25 ` Paolo Bonzini
0 siblings, 1 reply; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-05-07 7:48 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 7/5/24 09:19, Paolo Bonzini wrote:
> 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 also include it in the
> build via "select DEVICE_TREE", instead of having each hw/*/meson.build
> file do it by hand, and this will bring in more components
> such as CONFIG_GUEST_LOADER.
>
> This allows building non-microvm x86 emulators without having
> libfdt available.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> meson.build | 1 +
> Kconfig.host | 3 +++
> hw/arm/Kconfig | 5 +++++
> hw/arm/meson.build | 2 +-
> hw/core/Kconfig | 9 ++++++++-
> hw/core/meson.build | 2 +-
> hw/i386/Kconfig | 3 ++-
> hw/loongarch/Kconfig | 3 ++-
> hw/loongarch/meson.build | 2 +-
> hw/mips/Kconfig | 1 +
> hw/mips/meson.build | 2 +-
> hw/openrisc/Kconfig | 2 ++
> hw/openrisc/meson.build | 4 ++--
> hw/ppc/Kconfig | 15 ++++++++-------
> hw/ppc/meson.build | 4 +---
> hw/riscv/Kconfig | 4 ++++
> hw/riscv/meson.build | 2 +-
> hw/rx/Kconfig | 3 ++-
> hw/xtensa/Kconfig | 1 +
> system/meson.build | 2 +-
> target/arm/Kconfig | 2 ++
> target/microblaze/Kconfig | 1 +
> target/openrisc/Kconfig | 1 +
> target/riscv/Kconfig | 2 ++
> 24 files changed, 54 insertions(+), 22 deletions(-)
> 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'))
Don't we need to add fdt includes path to CPPFLAGS?
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 4/4] configs: disable emulators that require it if libfdt is not found
2024-05-07 7:19 ` [PATCH 4/4] configs: disable emulators that require it if libfdt is not found Paolo Bonzini
@ 2024-05-07 7:51 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-05-07 7:51 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 7/5/24 09:19, Paolo Bonzini wrote:
> 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.
>
> By default, unless --enable-libfdt is passed (in which case the
> dependency is mandatory, as usual for --enable-* options) or the
> target is mention in --target-list, those emulators will be skipped if
> libfdt is not present.
>
> 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 | 14 ++++++++++----
> .gitlab-ci.d/buildtest.yml | 7 ++++---
> 16 files changed, 24 insertions(+), 11 deletions(-)
> - if 'TARGET_NEED_FDT' in config_target
> - fdt_required += target
> + if 'TARGET_NEED_FDT' in config_target and not fdt.found()
> + if default_targets
> + warning('Disabling ' + target + 'due to missing libfdt')
Nice.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> + else
> + fdt_required += target
> + endif
> + continue
> endif
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/4] kconfig: express dependency of individual boards on libfdt
2024-05-07 7:48 ` Philippe Mathieu-Daudé
@ 2024-05-07 10:25 ` Paolo Bonzini
0 siblings, 0 replies; 10+ messages in thread
From: Paolo Bonzini @ 2024-05-07 10:25 UTC (permalink / raw)
To: Philippe Mathieu-Daudé; +Cc: qemu-devel
On Tue, May 7, 2024 at 9:48 AM Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>
> On 7/5/24 09:19, Paolo Bonzini wrote:
> > 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 also include it in the
> > build via "select DEVICE_TREE", instead of having each hw/*/meson.build
> > file do it by hand, and this will bring in more components
> > such as CONFIG_GUEST_LOADER.
> >
> > This allows building non-microvm x86 emulators without having
> > libfdt available.
> >
> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> > ---
> > meson.build | 1 +
> > Kconfig.host | 3 +++
> > hw/arm/Kconfig | 5 +++++
> > hw/arm/meson.build | 2 +-
> > hw/core/Kconfig | 9 ++++++++-
> > hw/core/meson.build | 2 +-
> > hw/i386/Kconfig | 3 ++-
> > hw/loongarch/Kconfig | 3 ++-
> > hw/loongarch/meson.build | 2 +-
> > hw/mips/Kconfig | 1 +
> > hw/mips/meson.build | 2 +-
> > hw/openrisc/Kconfig | 2 ++
> > hw/openrisc/meson.build | 4 ++--
> > hw/ppc/Kconfig | 15 ++++++++-------
> > hw/ppc/meson.build | 4 +---
> > hw/riscv/Kconfig | 4 ++++
> > hw/riscv/meson.build | 2 +-
> > hw/rx/Kconfig | 3 ++-
> > hw/xtensa/Kconfig | 1 +
> > system/meson.build | 2 +-
> > target/arm/Kconfig | 2 ++
> > target/microblaze/Kconfig | 1 +
> > target/openrisc/Kconfig | 1 +
> > target/riscv/Kconfig | 2 ++
> > 24 files changed, 54 insertions(+), 22 deletions(-)
>
>
> > 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'))
>
> Don't we need to add fdt includes path to CPPFLAGS?
Good catch! I thought it'd be done automatically for all dependencies
included in common_ss (system_ss is included in common_ss and lists
fdt as a dependency), but actually it needs a small tweak:
diff --git a/meson.build b/meson.build
index 24502f4ff6a..342df23269d 100644
--- a/meson.build
+++ b/meson.build
@@ -3898,7 +3898,7 @@ 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()
@@ -3954,7 +3954,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,
I'll include it in a v2 once I test it more fully.
Paolo
^ permalink raw reply related [flat|nested] 10+ messages in thread
end of thread, other threads:[~2024-05-07 10:26 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-07 7:19 [PATCH 0/4] express dependency of individual boards on libfdt Paolo Bonzini
2024-05-07 7:19 ` [PATCH 1/4] meson: remove system/internal distinction for libfdt Paolo Bonzini
2024-05-07 7:40 ` Philippe Mathieu-Daudé
2024-05-07 7:19 ` [PATCH 2/4] kconfig: express dependency of individual boards on libfdt Paolo Bonzini
2024-05-07 7:48 ` Philippe Mathieu-Daudé
2024-05-07 10:25 ` Paolo Bonzini
2024-05-07 7:19 ` [PATCH 3/4] hw/xtensa: require libfdt Paolo Bonzini
2024-05-07 7:34 ` Philippe Mathieu-Daudé
2024-05-07 7:19 ` [PATCH 4/4] configs: disable emulators that require it if libfdt is not found Paolo Bonzini
2024-05-07 7:51 ` Philippe Mathieu-Daudé
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).