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