On Fri, Jul 24, 2026 at 8:11 AM Pierrick Bouvier <
[email protected]> 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.


  About target-filtering, we already have

enum {
    QEMU_ARCH_ALPHA =       (1UL << SYS_EMU_TARGET_ALPHA),
    QEMU_ARCH_ARM =         (1UL << SYS_EMU_TARGET_ARM) |
                            (1UL << SYS_EMU_TARGET_AARCH64),
    QEMU_ARCH_I386 =        (1UL << SYS_EMU_TARGET_I386) |
                            (1UL << SYS_EMU_TARGET_X86_64),
    QEMU_ARCH_M68K =        (1UL << SYS_EMU_TARGET_M68K),
    QEMU_ARCH_MICROBLAZE =  (1UL << SYS_EMU_TARGET_MICROBLAZE),
    QEMU_ARCH_MIPS =        (1UL << SYS_EMU_TARGET_MIPS) |
                            (1UL << SYS_EMU_TARGET_MIPSEL) |
                            (1UL << SYS_EMU_TARGET_MIPS64) |
                            (1UL << SYS_EMU_TARGET_MIPS64EL),
    QEMU_ARCH_PPC =         (1UL << SYS_EMU_TARGET_PPC) |
                            (1UL << SYS_EMU_TARGET_PPC64),
    QEMU_ARCH_S390X =       (1UL << SYS_EMU_TARGET_S390X),
    QEMU_ARCH_SH4 =         (1UL << SYS_EMU_TARGET_SH4) |
                            (1UL << SYS_EMU_TARGET_SH4EB),
    QEMU_ARCH_SPARC =       (1UL << SYS_EMU_TARGET_SPARC) |
                            (1UL << SYS_EMU_TARGET_SPARC64),
    QEMU_ARCH_XTENSA =      (1UL << SYS_EMU_TARGET_XTENSA) |
                            (1UL << SYS_EMU_TARGET_XTENSAEB),
    QEMU_ARCH_OR1K =        (1UL << SYS_EMU_TARGET_OR1K),
    QEMU_ARCH_TRICORE =     (1UL << SYS_EMU_TARGET_TRICORE),
    QEMU_ARCH_HPPA =        (1UL << SYS_EMU_TARGET_HPPA),
    QEMU_ARCH_RISCV =       (1UL << SYS_EMU_TARGET_RISCV32) |
                            (1UL << SYS_EMU_TARGET_RISCV64),
    QEMU_ARCH_RX =          (1UL << SYS_EMU_TARGET_RX),
    QEMU_ARCH_AVR =         (1UL << SYS_EMU_TARGET_AVR),
    QEMU_ARCH_HEXAGON =     (1UL << SYS_EMU_TARGET_HEXAGON),
    QEMU_ARCH_LOONGARCH =   (1UL << SYS_EMU_TARGET_LOONGARCH64),
    QEMU_ARCH_ALL =         UINT32_MAX,
};

Can we use this to do target filtering instead? And we can extend this to
maximal uint128_t to support maximal 128 targets in future, so it's not a
burden to use it as a enum

and for arm or mips we can use QEMU_ARCH_ARM QEMU_ARCH_MIPS  to support
multiple targets in a single integer.



--
         此致
礼
罗勇刚
Yours
    sincerely,
Yonggang Luo

Reply via email to