Re: [PATCH 00/27] single-binary: implement dynamic filtering for machine types

Pierrick Bouvier <[email protected]> Wed, 5 Aug 2026 09:20:14 -0700
Newsgroups gmane.comp.emulators.qemu
Message-ID <[email protected]>
On 8/5/2026 6:30 AM, Yonggang Luo wrote:
> 
> 
> On Fri, Jul 31, 2026 at 1:34 AM Pierrick Bouvier
> <[email protected]
> <mailto:[email protected]>> wrote:
>>
>> On 7/23/2026 5:09 PM, Pierrick Bouvier wrote:
>> > 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.
>> >
> 
> I am also tracing for this. So what's the shape of the final command line? 
>

I have those commits ready, but I would like to get filtering done
before so we can focus on command line independently.

Currently, what we have implemented is:
./build/qemu-system -target {arm,aarch64,microblaze}
Or
cp ./build/qemu-system ./build/qemu-system-{arm,aarch64,microblaze} and
there is no need to use -target in this case.

> Maybe we can at least get arm/arm64/riscv32/risv64/riscv32-be/risv64-be
> to be in a single binary.
>

v0 will be arm/arm64/microblaze.
risvc64 is a wip, it's not yet ready for integration.

> The -be is needed because gdbstub would need this to get gdb working
> fine. so the endian mode is important. arm/arm64 have nothing about be
> support yet, even though in spec also have
>  
> 
> 
>> > 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
> 
> Does that mean  target-info-def.c would be compiled N-times. N is the
> target list count and finally linkage into a single binary?
> How to choose this target-info?
>

Yes, correct.
We choose either from -target arch, or from binary name.
In case a single target-info is present, we don't check binary name and
simply use it.

> 
>> >
>>
>> Gentle ping after a week.
>> You're welcome to review only your architecture if time is limited, and
>> validate the global approach.
>>
>> Regards,
>> Pierrick
>>
> 
> 
> --
>          此致
> 礼
> 罗勇刚
> Yours
>     sincerely,
> Yonggang Luo

Regards,
Pierrick