All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/27] single-binary: implement dynamic filtering for machine types
@ 2026-07-24  0:09 Pierrick Bouvier
  2026-07-24  0:09 ` [PATCH 01/27] include/qemu/target-info-qom.h: declare TYPE_TARGET_SPECIFIC interface Pierrick Bouvier
                   ` (28 more replies)
  0 siblings, 29 replies; 56+ messages in thread
From: Pierrick Bouvier @ 2026-07-24  0:09 UTC (permalink / raw)
  To: qemu-devel
  Cc: Philippe Mathieu-Daudé, Pierrick Bouvier, Nicholas Piggin,
	Daniel Henrique Barboza, Bernhard Beschow, Anton Johansson,
	Alistair Francis, Peter Maydell, Alistair Francis

Now that we can link a single-binary with at least two targets (arm, aarch64),
we want to make sure that we expose the same set of machines (later devices and
cpus) than target binaries. For that, we implemented a static filtering based on
target interfaces that each machine will implement to declare which targets have
this machine.

However, we discovered that this static filtering is not enough. Indeed, some
machines and devices do not depend only on target, and their presence can depend
on Kconfig or host/target combination. Thus, our static approach can't work, and
we need something more flexible.

This series adds a new TYPE_TARGET_SPECIFIC, that declare a single function
bool is_available(void). From there, any machine type (and later devices and
cpus) can implement it to override their presence for each target.
We first replace the existing static mechanism with this, and once done, we
cleanup all the old interface. One nice benefit is that we can get rid of
config/targets/*.c files, which saves duplication.

This series was tested by comparing list of machines for all qemu system
binaries, before and after this change, to make sure we don't introduce a
regression.

Pierrick Bouvier (27):
  include/qemu/target-info-qom.h: declare TYPE_TARGET_SPECIFIC interface
  hw/arm: implement TYPE_TARGET_SPECIFIC
  target-info: add target_riscv32 and target_base_riscv
  hw/riscv: implement TYPE_TARGET_SPECIFIC
  target-info: add target_config_multiprocess
  hw/remote/machine: remove unsupported arm target
  hw/remote/machine: implement TYPE_TARGET_SPECIFIC
  target-info: add target_config_xen
  hw/arm/xen-pvh: implement TYPE_TARGET_SPECIFIC
  hw/xenpv/xen_machine_pv: implement TYPE_TARGET_SPECIFIC
  target-info: add target_config_nitro
  hw/nitro/machine: implement TYPE_TARGET_SPECIFIC
  target-info-qom: implement new machine filtering per target
  target-info-qom: use TYPE_MACHINE instead of target_machine_typename
  target-info: remove target_machine_typename
  target-info-qom: add type_target_specific
  hw/arm: remove TYPE_TARGET_{AARCH64,ARM}_MACHINE
  hw/arm: remove {arm,arm_aarch64,aarch64}_machine_interfaces
  include/hw/core/boards.h: add DEFINE_MACHINE_TARGET_SPECIFIC
  hw/arm: remove DEFINE_MACHINE_{AARCH64,ARM}
  hw/arm: remove machines-qom.h
  hw/riscv: remove TYPE_TARGET_{RISCV32,RISCV64}_MACHINE
  hw/riscv: remove {riscv32,riscv32_64,riscv64}_machine_interfaces
  hw/riscv: remove DEFINE_MACHINE_{RISCV32,RISCV64}
  hw/riscv: remove machines-qom.h
  configs/targets: remove target info definitions
  target-info: rename target-info-stub.c in target-info-def.c

 configs/targets/aarch64-softmmu.c         | 27 ------------
 configs/targets/arm-softmmu.c             | 27 ------------
 configs/targets/meson.build               |  6 ---
 configs/targets/riscv32-softmmu.c         | 26 -----------
 configs/targets/riscv64-softmmu.c         | 26 -----------
 hw/arm/aspeed.c                           |  1 -
 hw/arm/aspeed_ast1040_evb.c               |  4 +-
 hw/arm/aspeed_ast10x0_evb.c               |  7 +--
 hw/arm/aspeed_ast2400_palmetto.c          |  4 +-
 hw/arm/aspeed_ast2400_quanta-q71l.c       |  4 +-
 hw/arm/aspeed_ast2400_supermicrox11.c     |  4 +-
 hw/arm/aspeed_ast2500_evb.c               |  4 +-
 hw/arm/aspeed_ast2500_g220a.c             |  4 +-
 hw/arm/aspeed_ast2500_romulus.c           |  4 +-
 hw/arm/aspeed_ast2500_supermicro-x11spi.c |  4 +-
 hw/arm/aspeed_ast2500_tiogapass.c         |  4 +-
 hw/arm/aspeed_ast2500_witherspoon.c       |  4 +-
 hw/arm/aspeed_ast2500_yosemitev2.c        |  4 +-
 hw/arm/aspeed_ast2600_anacapa.c           |  4 +-
 hw/arm/aspeed_ast2600_bletchley.c         |  4 +-
 hw/arm/aspeed_ast2600_catalina.c          |  4 +-
 hw/arm/aspeed_ast2600_evb.c               |  4 +-
 hw/arm/aspeed_ast2600_fby35.c             |  4 +-
 hw/arm/aspeed_ast2600_fuji.c              |  4 +-
 hw/arm/aspeed_ast2600_gb200nvl.c          |  4 +-
 hw/arm/aspeed_ast2600_rainier.c           |  4 +-
 hw/arm/aspeed_ast27x0-fc.c                |  4 +-
 hw/arm/aspeed_ast27x0_evb.c               |  7 +--
 hw/arm/b-l475e-iot01a.c                   |  4 +-
 hw/arm/bananapi_m2u.c                     |  4 +-
 hw/arm/collie.c                           |  4 +-
 hw/arm/cubieboard.c                       |  4 +-
 hw/arm/digic_boards.c                     |  4 +-
 hw/arm/exynos4_boards.c                   |  7 +--
 hw/arm/imx25_pdk.c                        |  4 +-
 hw/arm/imx8mm-evk.c                       |  4 +-
 hw/arm/imx8mp-evk.c                       |  4 +-
 hw/arm/integratorcp.c                     |  4 +-
 hw/arm/kzm.c                              |  4 +-
 hw/arm/max78000fthr.c                     |  4 +-
 hw/arm/mcimx6ul-evk.c                     |  4 +-
 hw/arm/mcimx7d-sabre.c                    |  4 +-
 hw/arm/microbit.c                         |  4 +-
 hw/arm/mps2-tz.c                          | 13 +++---
 hw/arm/mps2.c                             | 13 +++---
 hw/arm/mps3r.c                            |  4 +-
 hw/arm/msf2-som.c                         |  4 +-
 hw/arm/musca.c                            |  7 +--
 hw/arm/musicpal.c                         |  4 +-
 hw/arm/netduino2.c                        |  4 +-
 hw/arm/netduinoplus2.c                    |  4 +-
 hw/arm/npcm7xx_boards.c                   | 16 ++++---
 hw/arm/npcm8xx_boards.c                   |  4 +-
 hw/arm/olimex-stm32-h405.c                |  4 +-
 hw/arm/omap_sx1.c                         |  7 +--
 hw/arm/orangepi.c                         |  4 +-
 hw/arm/raspi.c                            | 16 ++++---
 hw/arm/raspi4b.c                          |  4 +-
 hw/arm/realview.c                         | 13 +++---
 hw/arm/sabrelite.c                        |  4 +-
 hw/arm/sbsa-ref.c                         |  4 +-
 hw/arm/stellaris.c                        |  7 +--
 hw/arm/stm32vldiscovery.c                 |  4 +-
 hw/arm/versatilepb.c                      |  7 +--
 hw/arm/vexpress.c                         |  7 +--
 hw/arm/virt.c                             |  4 +-
 hw/arm/xen-pvh.c                          |  4 +-
 hw/arm/xilinx_zynq.c                      |  4 +-
 hw/arm/xlnx-versal-virt.c                 |  7 +--
 hw/arm/xlnx-zcu102.c                      |  4 +-
 hw/core/machine-qmp-cmds.c                |  3 +-
 hw/core/null-machine.c                    |  9 +---
 hw/nitro/machine.c                        |  4 +-
 hw/remote/machine.c                       |  5 +--
 hw/riscv/boston-aia.c                     |  4 +-
 hw/riscv/k230.c                           |  4 +-
 hw/riscv/microblaze-v-generic.c           |  4 +-
 hw/riscv/microchip_pfsoc.c                |  4 +-
 hw/riscv/opentitan.c                      |  4 +-
 hw/riscv/shakti_c.c                       |  4 +-
 hw/riscv/sifive_e.c                       |  4 +-
 hw/riscv/sifive_u.c                       |  4 +-
 hw/riscv/spike.c                          |  4 +-
 hw/riscv/tt_atlantis.c                    |  4 +-
 hw/riscv/virt.c                           |  3 --
 hw/riscv/xiangshan_kmh.c                  |  4 +-
 hw/xenpv/xen_machine_pv.c                 |  3 +-
 include/hw/arm/machines-qom.h             | 46 -------------------
 include/hw/core/boards.h                  |  4 ++
 include/hw/riscv/machines-qom.h           | 46 -------------------
 include/qemu/target-info-impl.h           |  9 +++-
 include/qemu/target-info-qom.h            | 24 ++++++++++
 include/qemu/target-info.h                | 45 +++++++++++++++----
 meson.build                               |  9 +---
 monitor/qemu-config-qmp.c                 |  4 +-
 system/vl.c                               |  5 +--
 target-info-stub.c => target-info-def.c   | 29 ++++++++++--
 target-info-qom.c                         | 54 ++++++++++++++++-------
 target-info.c                             | 36 ++++++++++++---
 target/arm/machine.c                      | 19 +-------
 target/riscv/machine.c                    | 18 +-------
 101 files changed, 385 insertions(+), 481 deletions(-)
 delete mode 100644 configs/targets/aarch64-softmmu.c
 delete mode 100644 configs/targets/arm-softmmu.c
 delete mode 100644 configs/targets/meson.build
 delete mode 100644 configs/targets/riscv32-softmmu.c
 delete mode 100644 configs/targets/riscv64-softmmu.c
 delete mode 100644 include/hw/arm/machines-qom.h
 delete mode 100644 include/hw/riscv/machines-qom.h
 rename target-info-stub.c => target-info-def.c (67%)

-- 
2.43.0



^ permalink raw reply	[flat|nested] 56+ messages in thread

end of thread, other threads:[~2026-08-10 22:27 UTC | newest]

Thread overview: 56+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-24  0:09 [PATCH 00/27] single-binary: implement dynamic filtering for machine types Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 01/27] include/qemu/target-info-qom.h: declare TYPE_TARGET_SPECIFIC interface Pierrick Bouvier
2026-07-24  6:21   ` Philippe Mathieu-Daudé
2026-07-24 16:54     ` Pierrick Bouvier
2026-08-05 14:05   ` Daniel P. Berrangé
2026-08-05 16:16     ` Pierrick Bouvier
2026-08-05 16:53       ` Daniel P. Berrangé
2026-08-05 19:10         ` Pierrick Bouvier
2026-08-06 10:21           ` Daniel P. Berrangé
2026-08-06 14:52             ` Philippe Mathieu-Daudé
2026-08-06 16:38               ` Pierrick Bouvier
2026-08-06 18:15                 ` Daniel P. Berrangé
2026-08-06 21:04                   ` Pierrick Bouvier
2026-08-10 22:26                   ` Pierrick Bouvier
2026-08-06 16:52               ` Daniel P. Berrangé
2026-08-06 20:21                 ` Pierrick Bouvier
2026-08-10 15:56                   ` Daniel P. Berrangé
2026-08-10 16:11                     ` Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 02/27] hw/arm: implement TYPE_TARGET_SPECIFIC Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 03/27] target-info: add target_riscv32 and target_base_riscv Pierrick Bouvier
2026-07-24  6:09   ` Philippe Mathieu-Daudé
2026-07-24  0:09 ` [PATCH 04/27] hw/riscv: implement TYPE_TARGET_SPECIFIC Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 05/27] target-info: add target_config_multiprocess Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 06/27] hw/remote/machine: remove unsupported arm target Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 07/27] hw/remote/machine: implement TYPE_TARGET_SPECIFIC Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 08/27] target-info: add target_config_xen Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 09/27] hw/arm/xen-pvh: implement TYPE_TARGET_SPECIFIC Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 10/27] hw/xenpv/xen_machine_pv: " Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 11/27] target-info: add target_config_nitro Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 12/27] hw/nitro/machine: implement TYPE_TARGET_SPECIFIC Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 13/27] target-info-qom: implement new machine filtering per target Pierrick Bouvier
2026-07-24  6:12   ` Philippe Mathieu-Daudé
2026-07-24  0:09 ` [PATCH 14/27] target-info-qom: use TYPE_MACHINE instead of target_machine_typename Pierrick Bouvier
2026-07-24  6:12   ` Philippe Mathieu-Daudé
2026-07-24  0:09 ` [PATCH 15/27] target-info: remove target_machine_typename Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 16/27] target-info-qom: add type_target_specific Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 17/27] hw/arm: remove TYPE_TARGET_{AARCH64,ARM}_MACHINE Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 18/27] hw/arm: remove {arm, arm_aarch64, aarch64}_machine_interfaces Pierrick Bouvier via qemu development
2026-07-24  0:09 ` [PATCH 19/27] include/hw/core/boards.h: add DEFINE_MACHINE_TARGET_SPECIFIC Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 20/27] hw/arm: remove DEFINE_MACHINE_{AARCH64,ARM} Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 21/27] hw/arm: remove machines-qom.h Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 22/27] hw/riscv: remove TYPE_TARGET_{RISCV32,RISCV64}_MACHINE Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 23/27] hw/riscv: remove {riscv32, riscv32_64, riscv64}_machine_interfaces Pierrick Bouvier via qemu development
2026-07-24  0:09 ` [PATCH 24/27] hw/riscv: remove DEFINE_MACHINE_{RISCV32,RISCV64} Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 25/27] hw/riscv: remove machines-qom.h Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 26/27] configs/targets: remove target info definitions Pierrick Bouvier
2026-07-24  0:09 ` [PATCH 27/27] target-info: rename target-info-stub.c in target-info-def.c Pierrick Bouvier
2026-07-30 17:33 ` [PATCH 00/27] single-binary: implement dynamic filtering for machine types Pierrick Bouvier
2026-08-05 13:30   ` Yonggang Luo
2026-08-05 16:20     ` Pierrick Bouvier
2026-08-06 20:29       ` Daniel Henrique Barboza
2026-08-10 15:46 ` Peter Maydell
2026-08-10 15:55   ` Pierrick Bouvier
2026-08-10 16:00     ` Peter Maydell
2026-08-10 16:14       ` Pierrick Bouvier
2026-08-10 16:42         ` Daniel P. Berrangé

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.