Message ID | 20190118112410.3010-1-yang.zhong@intel.com (mailing list archive) |
---|---|
Headers | show |
Series | Support Kconfig in QEMU | expand |
On Fri, Jan 18, 2019 at 07:23:27PM +0800, Yang Zhong wrote: > This Kconfig implementation is rebased from Paolo's branch > https://github.com/bonzini/qemu/commits/kconfig > > I rebased most of patches except non-x86 ARCHs dependency definitions > this time. > https://github.com/yangzhon/qemu/commits/topic/upstream/Kconfig > > The current RFC patches only support > (*) x86_64 platform build > Once design is fixed, we can do other archs. > > (*) defconfig > "randconfig" build has some issues, which are mostly related > with CONFIG* in Kconfig.host abd configure. In randconfig mode, > some CONFIG* has different setting value in config-host.mak and > %/config-device.mak, which make QEMU build failure. > > (*) Kconfig in hw/ directory > > The current configure and build command are same with previous > commands and if we want to disable or enable some features, like > "tcg", we still need add "--enable/--disable-tcg" in configure > command line. If we want to disable one emulation device, we can > disable this in related Kconfig file in hw/ directory. > > The current build command: > (*) ./configure --target-list=x86_64-softmmu > (*) make -j8 > > Since the Kconfig language replace traditional CONFIG_* in > default-config/%-softmmu.mak, the %-softmmu.mak file only > define embeded boards or machines, like 440fx and Q35 in x86_64 > platform. The Kconfig has already defined dependency topology > between different Kconfig files, but there are still some issues > > (*) Kconfig for configure(config-host.mak) > Some CONFIG* in configure need some logic to generate, those > are hard to input this CONFIG* in Kconfig.host or Kconfig* file. > > (*) Kconfig for %config-target.mak > The CONFIG* in %/config-target.mak file, this is still related > with configure. > > (*) randconfig support issue. > > Before this RFC patches, we have talked Kconfig in another thread > http://lists.nongnu.org/archive/html/qemu-devel/2018-09/msg02827.html > > Please give your comments on this RFC thread, many thanks! I wonder whether we can support menuconfig as well? Right now entries have no description for menuconfig - can that be added? > Changes in v3: > patch 3: resume CONFIG_ACPI=y for ARM (Thomas Huth) > patch 4: CONFIG_AN5206 for an5206.o and mcf5206.o (Thomas Huth) > patch 6: CONFIG_VT82C686 is only in mips64el-softmmu.mak (Thomas Huth) > patch 7: sort the new config switches into "# For Macs" and > "# For embedded PPC" section (Thomas Huth) > patch 8: sh7750.o and sh7750_regnames.o are "common" code, no need to > define new CONFIG.(Thomas Huth) > patch 12: CONFIG_NIOS2_10M50 replace CONFIG_NIOS2_10M50_BOARD(Thomas Huth) > patch 13: added new CONFIGs for sifive_e.o and sifive_u.o(Thomas Huth) > CONFIG_RISCV_VIRT for virt.o > patch 15~20:added for other non-x86 platforms(alpha/Kconfig, cris/Kconfig > hppa/Kconfig,unicore32/Kconfig,tricore/Kconfig,moxie/Kconfig > openrisc/Kconfig)(Thomas Huth) > patch 25: sort the sources/*/Kconfig entries alphabetically(Thomas Huth) > added the new configs for arm/nios2/ppc/sh4/sparc > patch 29: E1000E_PCI with PCIE dependency(Thomas Huth) > patch 30: CONFIG_ISA_BUS replace CONFIG_ISA(Thomas Huth) > patch 32: changed the commit message (Paolo)(Thomas Huth) > patch 41: "I440FX && Q35" was changedto "I440FX || Q35"(Thomas Huth) > "default y" for IPMI_LOCAL and IPMI_EXTERN > > Changes in v2: > patch 1: added "CONFIG_PAM=y" in default-configs/i386-softmmu.mak > (Thomas Huth) > patch 3~14: added support for other ARCHs configurable(Paolo) > patch 15: changed the annotate (Paolo) > patch 16: changed the python code (Paolo) > patch 19: added other ARCHs Kconfig files(Paolo) > patch 21: added "select IDE_PCI" for CMD646, PIIX, VIA and SII3112(Thomas Huth) > patch 22: added new patch for PCIE configurable. > patch 23: moved "select IDE_PCI" from CMD646, PIIX, VIA to 21 patch(Thomas Huth) > added "select CAN_BUS" for net/Kconfig (Thomas Huth) > added "depends on PCI" for CAN_SJA1000 (Paolo) > removed CONFIG_PCIE=y and add dependency for pcie(Paolo) > patch 26: added "depends on PSERIES" for "config SPAPR_VSCSI" (Thomas Huth) > USB_STORAGE_BOT and USB_STORAGE_UAS must also "select SCSI"(Paolo) > patch 28: added "select SERIAL" into "config SERIAL_PCI" (Thomas Huth) > removed "depend on ISA_BUS" from "config VGA_CIRRUS"(Thomas Huth) > patch 30: "config XLNX_ZYNQMP_ARM" is defined in hw/arm/Kconfig(Thomas Huth) > CONFIG_AUX should select I2C(Paolo) > patch 33: depends on HYPERV for HYPERV_TESTDEV(Thomas Huth) > removed "select HYPERV" and "select HYPERV_TESTDEV" with > "default y if PC" in "config HYPERV" and "config HYPERV_TESTDEV"(Paolo) > patch 34: deleted default-configs/virtio.mak(Thomas Huth) > removed "y" in "config VIRTIO_MMIO"(Thomas Huth) > patch 35: removed remaining CONFIG_* and removed "select xxxx" from hw/i386/Kconfig > to other Kconfigs(Paolo) > > Paolo Bonzini (18): > build: actually use CONFIG_PAM > hw/i386/Makefile.objs: Build pc_piix* and pc_q35 boards > minikconfig: add parser skeleton > minikconfig: add AST > minikconfig: add semantic analysis > kconfig: introduce kconfig files > build: switch to Kconfig > ide: express dependencies with Kconfig > build: convert pci.mak to Kconfig > build: convert sound.mak to Kconfig > build: convert usb.mak to Kconfig > scsi: express dependencies with Kconfig > bluetooth: express dependencies with Kconfig > isa: express dependencies with kconfig > i386: express dependencies with Kconfig > i2c: express dependencies with Kconfig > ptimer: express dependencies with Kconfig > minikconf: implement allyesconfig, allnoconfig, randconfig, defconfig > > Yang Zhong (17): > hw/arm/Makefile.objs: CONFIG_VIRT created for virt board > hw/nios2/Makefile.objs: Conditionally build nios2 > hw/riscv/Makefile.objs: Create CONFIG_* for riscv boards > hw/sparc64/Makefile.objs: Create CONFIG_* for sparc64 > hw/alpha/Makefile.objs: Create CONFIG_* for alpha > hw/cris/Makefile.objs: Create CONFIG_* for cris > hw/hppa/Makefile.objs: Create CONFIG_* for hppa > hw/moxie/Makefile.objs: Conditionally build moxie > hw/openrisc/Makefile.objs: Create CONFIG_* for openrisc > hw/tricore/Makefile.objs: Create CONFIG_* for tricore > hw/display: make edid configurable > hw/pci/Makefile.objs: make pcie configurable > edid: express dependencies with kconfig > hyperv: express dependencies with kconfig > virtio: make virtio dependencies with Kconfig > i386-softmmu.mak: remove all CONFIG_* except boards definitions > Makefile: only support defconfig > > Ákos Kovács (8): > hw/m68k/Makefile.objs: Conditionally build boards > hw/microblaze/Makefile.objs: Create configs for petalogix and xilinx > boards > hw/mips/Makefile.objs: Create CONFIG_* for r4k, malta,mipssim boards > hw/ppc/Makefile.objs: Build all boards conditinally with CONFIG_* > hw/sh4/Makefile.objs: New CONFIG_* varibales created for sh4 boards > and device > hw/sparc/Makefile.objs: CONFIG_* for sun4m and leon3 created > hw/lm32/Makefile.objs: Conditionally build lm32 and milkmyst > hw/xtensa/Makefile.objs: Build xtensa_sim and xtensa_fpga > conditionally > > Kconfig.host | 24 + > Makefile | 19 +- > Makefile.target | 7 +- > default-configs/alpha-softmmu.mak | 7 +- > default-configs/arm-softmmu.mak | 5 +- > default-configs/cris-softmmu.mak | 1 + > default-configs/hppa-softmmu.mak | 5 +- > default-configs/hyperv.mak | 2 - > default-configs/i386-softmmu.mak | 72 +-- > default-configs/m68k-softmmu.mak | 2 + > default-configs/microblaze-softmmu.mak | 3 + > default-configs/mips-softmmu-common.mak | 8 +- > default-configs/moxie-softmmu.mak | 1 + > default-configs/nios2-softmmu.mak | 1 + > default-configs/or1k-softmmu.mak | 1 + > default-configs/pci.mak | 49 -- > default-configs/ppc-softmmu.mak | 12 +- > default-configs/riscv32-softmmu.mak | 11 +- > default-configs/riscv64-softmmu.mak | 11 +- > default-configs/s390x-softmmu.mak | 1 - > default-configs/sh4-softmmu.mak | 5 +- > default-configs/sh4eb-softmmu.mak | 5 +- > default-configs/sound.mak | 4 - > default-configs/sparc-softmmu.mak | 2 + > default-configs/sparc64-softmmu.mak | 5 +- > default-configs/tricore-softmmu.mak | 1 + > default-configs/usb.mak | 11 - > default-configs/virtio.mak | 14 - > default-configs/xtensa-softmmu.mak | 3 + > default-configs/xtensaeb-softmmu.mak | 3 + > hw/9pfs/Kconfig | 4 + > hw/Kconfig | 69 +++ > hw/Makefile.objs | 4 +- > hw/acpi/Kconfig | 30 ++ > hw/adc/Kconfig | 2 + > hw/alpha/Kconfig | 5 + > hw/alpha/Makefile.objs | 4 +- > hw/arm/Kconfig | 113 ++++ > hw/arm/Makefile.objs | 3 +- > hw/audio/Kconfig | 52 ++ > hw/block/Kconfig | 37 ++ > hw/bt/Kconfig | 2 + > hw/char/Kconfig | 42 ++ > hw/core/Kconfig | 11 + > hw/cpu/Kconfig | 8 + > hw/cris/Kconfig | 2 + > hw/cris/Makefile.objs | 2 +- > hw/display/Kconfig | 106 ++++ > hw/display/Makefile.objs | 4 +- > hw/dma/Kconfig | 20 + > hw/gpio/Kconfig | 9 + > hw/hppa/Kconfig | 5 + > hw/hppa/Makefile.objs | 4 +- > hw/hyperv/Kconfig | 9 + > hw/i2c/Kconfig | 27 + > hw/i2c/Makefile.objs | 7 +- > hw/i386/Kconfig | 87 +++ > hw/i386/Makefile.objs | 4 +- > hw/ide/Kconfig | 54 ++ > hw/input/Kconfig | 28 + > hw/intc/Kconfig | 55 ++ > hw/ipack/Kconfig | 4 + > hw/ipmi/Kconfig | 22 + > hw/isa/Kconfig | 30 ++ > hw/lm32/Kconfig | 5 + > hw/lm32/Makefile.objs | 4 +- > hw/m68k/Kconfig | 8 + > hw/m68k/Makefile.objs | 4 +- > hw/mem/Kconfig | 10 + > hw/microblaze/Kconfig | 8 + > hw/microblaze/Makefile.objs | 6 +- > hw/mips/Kconfig | 20 + > hw/mips/Makefile.objs | 6 +- > hw/misc/Kconfig | 110 ++++ > hw/misc/macio/Kconfig | 11 + > hw/moxie/Kconfig | 2 + > hw/moxie/Makefile.objs | 2 +- > hw/net/Kconfig | 122 +++++ > hw/nios2/Kconfig | 5 + > hw/nios2/Makefile.objs | 3 +- > hw/nvram/Kconfig | 8 + > hw/openrisc/Kconfig | 2 + > hw/openrisc/Makefile.objs | 2 +- > hw/pci-bridge/Kconfig | 25 + > hw/pci-host/Kconfig | 46 ++ > hw/pci-host/Makefile.objs | 2 +- > hw/pci/Kconfig | 5 + > hw/pci/Makefile.objs | 5 +- > hw/pcmcia/Kconfig | 2 + > hw/ppc/Kconfig | 56 ++ > hw/ppc/Makefile.objs | 12 +- > hw/riscv/Kconfig | 14 + > hw/riscv/Makefile.objs | 22 +- > hw/scsi/Kconfig | 52 ++ > hw/scsi/Makefile.objs | 2 +- > hw/sd/Kconfig | 14 + > hw/sh4/Kconfig | 11 + > hw/sh4/Makefile.objs | 4 +- > hw/smbios/Kconfig | 2 + > hw/sparc/Kconfig | 11 + > hw/sparc/Makefile.objs | 4 +- > hw/sparc64/Kconfig | 5 + > hw/sparc64/Makefile.objs | 6 +- > hw/ssi/Kconfig | 14 + > hw/timer/Kconfig | 63 +++ > hw/tpm/Kconfig | 20 + > hw/tricore/Kconfig | 2 + > hw/tricore/Makefile.objs | 2 +- > hw/unicore32/Kconfig | 2 + > hw/usb/Kconfig | 92 ++++ > hw/vfio/Kconfig | 11 + > hw/virtio/Kconfig | 27 + > hw/watchdog/Kconfig | 15 + > hw/xtensa/Kconfig | 5 + > hw/xtensa/Makefile.objs | 4 +- > rules.mak | 2 +- > scripts/make_device_config.sh | 30 -- > scripts/minikconf.py | 680 ++++++++++++++++++++++++ > 118 files changed, 2502 insertions(+), 265 deletions(-) > create mode 100644 Kconfig.host > delete mode 100644 default-configs/hyperv.mak > delete mode 100644 default-configs/pci.mak > delete mode 100644 default-configs/sound.mak > delete mode 100644 default-configs/usb.mak > delete mode 100644 default-configs/virtio.mak > create mode 100644 hw/9pfs/Kconfig > create mode 100644 hw/Kconfig > create mode 100644 hw/acpi/Kconfig > create mode 100644 hw/adc/Kconfig > create mode 100644 hw/alpha/Kconfig > create mode 100644 hw/arm/Kconfig > create mode 100644 hw/audio/Kconfig > create mode 100644 hw/block/Kconfig > create mode 100644 hw/bt/Kconfig > create mode 100644 hw/char/Kconfig > create mode 100644 hw/core/Kconfig > create mode 100644 hw/cpu/Kconfig > create mode 100644 hw/cris/Kconfig > create mode 100644 hw/display/Kconfig > create mode 100644 hw/dma/Kconfig > create mode 100644 hw/gpio/Kconfig > create mode 100644 hw/hppa/Kconfig > create mode 100644 hw/hyperv/Kconfig > create mode 100644 hw/i2c/Kconfig > create mode 100644 hw/i386/Kconfig > create mode 100644 hw/ide/Kconfig > create mode 100644 hw/input/Kconfig > create mode 100644 hw/intc/Kconfig > create mode 100644 hw/ipack/Kconfig > create mode 100644 hw/ipmi/Kconfig > create mode 100644 hw/isa/Kconfig > create mode 100644 hw/lm32/Kconfig > create mode 100644 hw/m68k/Kconfig > create mode 100644 hw/mem/Kconfig > create mode 100644 hw/microblaze/Kconfig > create mode 100644 hw/mips/Kconfig > create mode 100644 hw/misc/Kconfig > create mode 100644 hw/misc/macio/Kconfig > create mode 100644 hw/moxie/Kconfig > create mode 100644 hw/net/Kconfig > create mode 100644 hw/nios2/Kconfig > create mode 100644 hw/nvram/Kconfig > create mode 100644 hw/openrisc/Kconfig > create mode 100644 hw/pci-bridge/Kconfig > create mode 100644 hw/pci-host/Kconfig > create mode 100644 hw/pci/Kconfig > create mode 100644 hw/pcmcia/Kconfig > create mode 100644 hw/ppc/Kconfig > create mode 100644 hw/riscv/Kconfig > create mode 100644 hw/scsi/Kconfig > create mode 100644 hw/sd/Kconfig > create mode 100644 hw/sh4/Kconfig > create mode 100644 hw/smbios/Kconfig > create mode 100644 hw/sparc/Kconfig > create mode 100644 hw/sparc64/Kconfig > create mode 100644 hw/ssi/Kconfig > create mode 100644 hw/timer/Kconfig > create mode 100644 hw/tpm/Kconfig > create mode 100644 hw/tricore/Kconfig > create mode 100644 hw/unicore32/Kconfig > create mode 100644 hw/usb/Kconfig > create mode 100644 hw/vfio/Kconfig > create mode 100644 hw/virtio/Kconfig > create mode 100644 hw/watchdog/Kconfig > create mode 100644 hw/xtensa/Kconfig > delete mode 100644 scripts/make_device_config.sh > create mode 100644 scripts/minikconf.py > > -- > 2.17.1 >
On 18/01/19 17:30, Michael S. Tsirkin wrote: > I wonder whether we can support menuconfig as well? > Right now entries have no description for menuconfig - > can that be added? > The problem with menuconfig is that QEMU has many configurations (one per target), not just one. Also, Kconfig has some Linux quirks that are different from QEMU quirks (for example QEMU needs to know about symbols found by probing the host in ./configure), so it's difficult to use it as is; we tried it in Google Summer of Code 2013 and it was not successful. Paolo