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