qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [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).