Hi Paolo, On 1/25/19 11:06 AM, Paolo Bonzini wrote: > The make_device_config.sh script is replaced by minikconf, which > is modified to support the same command line as its predecessor. > > The roots of the parsing are default-configs/*.mak, Kconfig.host and > hw/Kconfig. One difference with make_device_config.sh is that all symbols > have to be defined in a Kconfig file, including those coming from the > configure script. This is the reason for the Kconfig.host file introduced > in the previous patch. Whenever a file in default-configs/*.mak used > $(...) to refer to a config-host.mak symbol, this is replaced by a > Kconfig dependency; this part must be done already in this patch > for bisectability. > > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > Signed-off-by: Yang Zhong <yang.zh...@intel.com> > Acked-by: Thomas Huth <th...@redhat.com> > Message-Id: <20190123065618.3520-28-yang.zh...@intel.com> > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > --- > Kconfig.host | 3 ++- > Makefile | 19 ++++++++++++++++--- > Makefile.target | 7 ++++++- > configure | 3 +++ > default-configs/arm-softmmu.mak | 2 -- > default-configs/i386-softmmu.mak | 5 +---- > default-configs/lm32-softmmu.mak | 1 - > default-configs/pci.mak | 1 - > default-configs/ppc-softmmu.mak | 1 - > default-configs/ppc64-softmmu.mak | 6 ------ > default-configs/s390x-softmmu.mak | 4 +--- > default-configs/virtio.mak | 3 --- > hw/9pfs/Kconfig | 1 + > hw/block/Kconfig | 1 + > hw/display/Kconfig | 4 ++++ > hw/i386/Kconfig | 6 +++++- > hw/input/Kconfig | 5 +++++ > hw/intc/Kconfig | 12 ++++++++++++ > hw/misc/Kconfig | 2 ++ > hw/ppc/Kconfig | 4 ++++ > hw/scsi/Kconfig | 6 ++++++ > hw/tpm/Kconfig | 2 ++ > hw/vfio/Kconfig | 11 +++++++++++ > rules.mak | 2 +- > scripts/make_device_config.sh | 30 ------------------------------ > 25 files changed, 83 insertions(+), 58 deletions(-) > delete mode 100644 scripts/make_device_config.sh > > diff --git a/Kconfig.host b/Kconfig.host > index f43f418..3772627 100644 > --- a/Kconfig.host > +++ b/Kconfig.host > @@ -1,5 +1,6 @@ > # These are "proxy" symbols used to pass config-host.mak values > -# down to Kconfig. > +# down to Kconfig. See also MINIKCONF_ARGS in the Makefile: > +# these two need to be kept in sync. > > config KVM > bool > diff --git a/Makefile b/Makefile > index de898ea..70b9aec 100644 > --- a/Makefile > +++ b/Makefile > @@ -326,9 +326,22 @@ endif > > -include $(SUBDIR_DEVICES_MAK_DEP) > > -%/config-devices.mak: default-configs/%.mak > $(SRC_PATH)/scripts/make_device_config.sh > - $(call quiet-command, \ > - $(SHELL) $(SRC_PATH)/scripts/make_device_config.sh $< > $*-config-devices.mak.d $@ > $@.tmp,"GEN","$@.tmp") > +# This has to be kept in sync with Kconfig.host. > +MINIKCONF_ARGS = \ > + $@ $*-config.devices.mak.d $< $(MINIKCONF_INPUTS) \ > + CONFIG_KVM=$(CONFIG_KVM) \ > + CONFIG_SPICE=$(CONFIG_SPICE) \ > + CONFIG_TPM=$(CONFIG_TPM) \ > + CONFIG_XEN=$(CONFIG_XEN) \
There is something I don't understand here: Does CONFIG_XEN in Kconfig.host take precedence over the target configs? I'm looking at these configs: if supported_xen_target $target; then echo "CONFIG_XEN=n" >> $config_target_mak if test "$xen_pci_passthrough" = yes; then echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" fi fi It seems Kconfig.host has precedence over them, so if all targets are trying to build with Xen even if they don't support it. I cc'ed the Xen team, it would be nice if one of them also tests this. > + CONFIG_OPENGL=$(CONFIG_OPENGL) \ > + CONFIG_VHOST_USER=$(CONFIG_VHOST_USER) \ > + CONFIG_LINUX=$(CONFIG_LINUX) > + > +MINIKCONF_INPUTS = $(SRC_PATH)/Kconfig.host $(SRC_PATH)/hw/Kconfig > +MINIKCONF = $(PYTHON) $(SRC_PATH)/scripts/minikconf.py \ > + > +%/config-devices.mak: default-configs/%.mak $(MINIKCONF_INPUTS) > + $(call quiet-command, $(MINIKCONF) $(MINIKCONF_ARGS) > $@.tmp, "GEN", > "$@.tmp") > $(call quiet-command, if test -f $@; then \ > if cmp -s $@.old $@; then \ > mv $@.tmp $@; \ > diff --git a/Makefile.target b/Makefile.target > index 39f72e8..f31692c 100644 > --- a/Makefile.target > +++ b/Makefile.target > @@ -4,9 +4,12 @@ BUILD_DIR?=$(CURDIR)/.. > > include ../config-host.mak > include config-target.mak > -include config-devices.mak > include $(SRC_PATH)/rules.mak > > +ifdef CONFIG_SOFTMMU > +include config-devices.mak > +endif > + > $(call set-vpath, $(SRC_PATH):$(BUILD_DIR)) > ifdef CONFIG_LINUX > QEMU_CFLAGS += -I../linux-headers > @@ -190,7 +193,9 @@ all-obj-$(CONFIG_SOFTMMU) += $(crypto-obj-y) > all-obj-$(CONFIG_SOFTMMU) += $(io-obj-y) > all-obj-$(CONFIG_SOFTMMU) += $(slirp-obj-y) > > +ifdef CONFIG_SOFTMMU > $(QEMU_PROG_BUILD): config-devices.mak > +endif > > COMMON_LDADDS = ../libqemuutil.a > > diff --git a/configure b/configure > index 8f312ac..dae1b67 100755 > --- a/configure > +++ b/configure > @@ -7377,12 +7377,15 @@ if supported_xen_target $target; then > fi > if supported_kvm_target $target; then > echo "CONFIG_KVM=y" >> $config_target_mak > + echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak > if test "$vhost_net" = "yes" ; then > echo "CONFIG_VHOST_NET=y" >> $config_target_mak > if test "$vhost_user" = "yes" ; then > echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> > $config_host_mak > fi > fi > +else > + echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak > fi > if supported_hax_target $target; then > echo "CONFIG_HAX=y" >> $config_target_mak > diff --git a/default-configs/arm-softmmu.mak b/default-configs/arm-softmmu.mak > index 4f0ecba..b0995a0 100644 > --- a/default-configs/arm-softmmu.mak > +++ b/default-configs/arm-softmmu.mak > @@ -51,7 +51,6 @@ CONFIG_ARM_V7M=y > CONFIG_NETDUINO2=y > > CONFIG_ARM_GIC=y > -CONFIG_ARM_GIC_KVM=$(CONFIG_KVM) > CONFIG_ARM_TIMER=y > CONFIG_ARM_MPTIMER=y > CONFIG_A9_GTIMER=y > @@ -123,7 +122,6 @@ CONFIG_VERSATILE_PCI=y > CONFIG_VERSATILE_I2C=y > > CONFIG_PCI_EXPRESS_GENERIC_BRIDGE=y > -CONFIG_VFIO=$(CONFIG_LINUX) > CONFIG_VFIO_PLATFORM=y > CONFIG_VFIO_XGMAC=y > CONFIG_VFIO_AMD_XGBE=y > diff --git a/default-configs/i386-softmmu.mak > b/default-configs/i386-softmmu.mak > index 15b6287..412c8c5 100644 > --- a/default-configs/i386-softmmu.mak > +++ b/default-configs/i386-softmmu.mak > @@ -4,7 +4,6 @@ include pci.mak > include sound.mak > include usb.mak > include hyperv.mak > -CONFIG_QXL=$(CONFIG_SPICE) > CONFIG_VGA_ISA=y > CONFIG_VGA_CIRRUS=y > CONFIG_VMWARE_VGA=y > @@ -37,8 +36,6 @@ CONFIG_HPET=y > CONFIG_APPLESMC=y > CONFIG_I8259=y > CONFIG_PFLASH_CFI01=y > -CONFIG_TPM_TIS=$(CONFIG_TPM) > -CONFIG_TPM_CRB=$(CONFIG_TPM) > CONFIG_MC146818RTC=y > CONFIG_PCI_PIIX=y > CONFIG_WDT_IB700=y > @@ -66,9 +63,9 @@ CONFIG_ACPI_SMBUS=y > CONFIG_SMBUS_EEPROM=y > CONFIG_FW_CFG_DMA=y > CONFIG_I2C=y > -CONFIG_SEV=$(CONFIG_KVM) > CONFIG_VTD=y > CONFIG_AMD_IOMMU=y > CONFIG_PAM=y > +CONFIG_PC=y > CONFIG_I440FX=y > CONFIG_Q35=y > diff --git a/default-configs/lm32-softmmu.mak > b/default-configs/lm32-softmmu.mak > index 4889348..ef0f4ba 100644 > --- a/default-configs/lm32-softmmu.mak > +++ b/default-configs/lm32-softmmu.mak > @@ -2,7 +2,6 @@ > > CONFIG_LM32=y > CONFIG_MILKYMIST=y > -CONFIG_MILKYMIST_TMU2=$(CONFIG_OPENGL) > CONFIG_FRAMEBUFFER=y > CONFIG_PTIMER=y > CONFIG_PFLASH_CFI01=y > diff --git a/default-configs/pci.mak b/default-configs/pci.mak > index 0552190..3d4c71d 100644 > --- a/default-configs/pci.mak > +++ b/default-configs/pci.mak > @@ -47,6 +47,5 @@ CONFIG_VGA_PCI=y > CONFIG_BOCHS_DISPLAY=y > CONFIG_IVSHMEM_DEVICE=$(CONFIG_IVSHMEM) > CONFIG_ROCKER=y > -CONFIG_VFIO=$(CONFIG_LINUX) > CONFIG_VFIO_PCI=y > CONFIG_EDID=y > diff --git a/default-configs/ppc-softmmu.mak b/default-configs/ppc-softmmu.mak > index 52acb7c..90118cb 100644 > --- a/default-configs/ppc-softmmu.mak > +++ b/default-configs/ppc-softmmu.mak > @@ -18,7 +18,6 @@ CONFIG_I8259=y > CONFIG_XILINX=y > CONFIG_XILINX_ETHLITE=y > CONFIG_E500=y > -CONFIG_OPENPIC_KVM=$(call land,$(CONFIG_E500),$(CONFIG_KVM)) > CONFIG_PLATFORM_BUS=y > CONFIG_ETSEC=y > CONFIG_PPC405=y > diff --git a/default-configs/ppc64-softmmu.mak > b/default-configs/ppc64-softmmu.mak > index ccd7b17..a0a9151 100644 > --- a/default-configs/ppc64-softmmu.mak > +++ b/default-configs/ppc64-softmmu.mak > @@ -13,12 +13,6 @@ CONFIG_ISA_IPMI_BT=y > # For pSeries > CONFIG_PSERIES=y > CONFIG_VIRTIO_VGA=y > -CONFIG_XICS=$(CONFIG_PSERIES) > -CONFIG_XICS_SPAPR=$(CONFIG_PSERIES) > -CONFIG_XICS_KVM=$(call land,$(CONFIG_PSERIES),$(CONFIG_KVM)) > -CONFIG_XIVE=$(CONFIG_PSERIES) > -CONFIG_XIVE_SPAPR=$(CONFIG_PSERIES) > -CONFIG_VFIO_SPAPR=$(CONFIG_PSERIES) > CONFIG_MEM_DEVICE=y > CONFIG_DIMM=y > CONFIG_SPAPR_RNG=y > diff --git a/default-configs/s390x-softmmu.mak > b/default-configs/s390x-softmmu.mak > index 6f2c6ce..2794ffb 100644 > --- a/default-configs/s390x-softmmu.mak > +++ b/default-configs/s390x-softmmu.mak > @@ -1,12 +1,10 @@ > CONFIG_PCI=y > -CONFIG_VIRTIO_PCI=$(CONFIG_PCI) > +CONFIG_VIRTIO_PCI=y > include virtio.mak > CONFIG_SCLPCONSOLE=y > CONFIG_TERMINAL3270=y > CONFIG_S390_FLIC=y > -CONFIG_S390_FLIC_KVM=$(CONFIG_KVM) > CONFIG_WDT_DIAG288=y > CONFIG_S390_CCW_VIRTIO=y > -CONFIG_VFIO=$(CONFIG_LINUX) > CONFIG_VFIO_CCW=y > CONFIG_VFIO_AP=y > diff --git a/default-configs/virtio.mak b/default-configs/virtio.mak > index ecb4420..51599ed 100644 > --- a/default-configs/virtio.mak > +++ b/default-configs/virtio.mak > @@ -1,5 +1,3 @@ > -CONFIG_VHOST_USER_SCSI=$(call land,$(CONFIG_VHOST_USER),$(CONFIG_LINUX)) > -CONFIG_VHOST_USER_BLK=$(call land,$(CONFIG_VHOST_USER),$(CONFIG_LINUX)) > CONFIG_VIRTIO=y > CONFIG_VIRTIO_9P=$(CONFIG_VIRTFS) > CONFIG_VIRTIO_BALLOON=y > @@ -12,4 +10,3 @@ CONFIG_VIRTIO_RNG=y > CONFIG_SCSI=y > CONFIG_VIRTIO_SCSI=y > CONFIG_VIRTIO_SERIAL=y > -CONFIG_VIRTIO_INPUT_HOST=$(CONFIG_LINUX) > diff --git a/hw/9pfs/Kconfig b/hw/9pfs/Kconfig > index be8e5b3..84d2366 100644 > --- a/hw/9pfs/Kconfig > +++ b/hw/9pfs/Kconfig > @@ -2,3 +2,4 @@ config VIRTFS > > config VIRTIO_9P > bool > + default y if VIRTFS > diff --git a/hw/block/Kconfig b/hw/block/Kconfig > index 9d418bc..1780569 100644 > --- a/hw/block/Kconfig > +++ b/hw/block/Kconfig > @@ -27,3 +27,4 @@ config VIRTIO_BLK > > config VHOST_USER_BLK > bool > + default y if VHOST_USER && LINUX > diff --git a/hw/display/Kconfig b/hw/display/Kconfig > index d5c022c..429056b 100644 > --- a/hw/display/Kconfig > +++ b/hw/display/Kconfig > @@ -51,6 +51,8 @@ config FRAMEBUFFER > > config MILKYMIST_TMU2 > bool > + default y > + depends on OPENGL > > config SM501 > bool > @@ -66,6 +68,8 @@ config VGA > > config QXL > bool > + default y if PC > + depends on SPICE && PCI > > config VIRTIO_GPU > bool > diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig > index 2dbe2b5..9a0e559 100644 > --- a/hw/i386/Kconfig > +++ b/hw/i386/Kconfig > @@ -1,4 +1,8 @@ > -config KVM > +config SEV > + bool > + default y if PC && KVM > + > +config PC > bool > > config I440FX > diff --git a/hw/input/Kconfig b/hw/input/Kconfig > index 91bae47..98a18a1 100644 > --- a/hw/input/Kconfig > +++ b/hw/input/Kconfig > @@ -19,5 +19,10 @@ config TSC2005 > config VIRTIO_INPUT > bool > > +config VIRTIO_INPUT_HOST > + bool > + default y if LINUX > + depends on LINUX > + > config TSC210X > bool > diff --git a/hw/intc/Kconfig b/hw/intc/Kconfig > index 69adbd1..6eea14e 100644 > --- a/hw/intc/Kconfig > +++ b/hw/intc/Kconfig > @@ -21,18 +21,28 @@ config APIC > > config ARM_GIC_KVM > bool > + default y > + depends on ARM_GIC && KVM > > config OPENPIC_KVM > bool > + default y > + depends on OPENPIC && KVM > > config XICS > bool > + default y > + depends on PSERIES > > config XICS_SPAPR > bool > + default y > + depends on PSERIES > > config XICS_KVM > bool > + default y > + depends on XICS && KVM > > config ALLWINNER_A10_PIC > bool > @@ -42,6 +52,8 @@ config S390_FLIC > > config S390_FLIC_KVM > bool > + default y > + depends on S390_FLIC && KVM > > config OMPIC > bool > diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig > index c006b04..cc8dbed 100644 > --- a/hw/misc/Kconfig > +++ b/hw/misc/Kconfig > @@ -48,6 +48,8 @@ config MACIO > > config IVSHMEM_DEVICE > bool > + default y > + depends on PCI > > config ECCMEMCTL > bool > diff --git a/hw/ppc/Kconfig b/hw/ppc/Kconfig > index 9da9d7d..b0095e1 100644 > --- a/hw/ppc/Kconfig > +++ b/hw/ppc/Kconfig > @@ -45,12 +45,16 @@ config MAC_PMU > > config XIVE > bool > + default y > + depends on PSERIES > > config MACIO_GPIO > bool > > config XIVE_SPAPR > bool > + default y > + depends on PSERIES > > config CUDA > bool > diff --git a/hw/scsi/Kconfig b/hw/scsi/Kconfig > index eb78478..834413b 100644 > --- a/hw/scsi/Kconfig > +++ b/hw/scsi/Kconfig > @@ -19,8 +19,14 @@ config ESP > config ESP_PCI > bool > > +config SPAPR_VSCSI > + bool > + default y > + depends on PSERIES > + > config VIRTIO_SCSI > bool > > config VHOST_USER_SCSI > bool > + default y if VHOST_USER && LINUX > diff --git a/hw/tpm/Kconfig b/hw/tpm/Kconfig > index 2eee8eb..db57388 100644 > --- a/hw/tpm/Kconfig > +++ b/hw/tpm/Kconfig > @@ -3,6 +3,8 @@ config TPM > > config TPM_TIS > bool > + default y if PC > + depends on TPM > > config TPM_CRB > bool > diff --git a/hw/vfio/Kconfig b/hw/vfio/Kconfig > index 31d8dfc..f896779 100644 > --- a/hw/vfio/Kconfig > +++ b/hw/vfio/Kconfig > @@ -1,17 +1,26 @@ > config VFIO > bool > + depends on LINUX > > config VFIO_PCI > bool > + select VFIO > + depends on LINUX > > config VFIO_SPAPR > bool > + default y > + depends on VFIO && LINUX && PSERIES > > config VFIO_CCW > bool > + select VFIO > + depends on LINUX > > config VFIO_PLATFORM > bool > + select VFIO > + depends on LINUX > > config VFIO_XGMAC > bool > @@ -21,3 +30,5 @@ config VFIO_AMD_XGBE > > config VFIO_AP > bool > + select VFIO > + depends on LINUX > diff --git a/rules.mak b/rules.mak > index 86e033d..62cf02e 100644 > --- a/rules.mak > +++ b/rules.mak > @@ -144,7 +144,7 @@ cc-option = $(if $(shell $(CC) $1 $2 -S -o /dev/null -xc > /dev/null \ > cc-c-option = $(if $(shell $(CC) $1 $2 -c -o /dev/null -xc /dev/null \ > >/dev/null 2>&1 && echo OK), $2, $3) > > -VPATH_SUFFIXES = %.c %.h %.S %.cc %.cpp %.m %.mak %.texi %.sh %.rc > +VPATH_SUFFIXES = %.c %.h %.S %.cc %.cpp %.m %.mak %.texi %.sh %.rc Kconfig% > set-vpath = $(if $1,$(foreach PATTERN,$(VPATH_SUFFIXES),$(eval vpath > $(PATTERN) $1))) > > # install-prog list, dir > diff --git a/scripts/make_device_config.sh b/scripts/make_device_config.sh > deleted file mode 100644 > index 354af31..0000000 > --- a/scripts/make_device_config.sh > +++ /dev/null > @@ -1,30 +0,0 @@ > -#! /bin/sh > -# Writes a target device config file to stdout, from a default and from > -# include directives therein. Also emits Makefile dependencies. > -# > -# Usage: make_device_config.sh SRC DEPFILE-NAME DEPFILE-TARGET > DEST > - > -src=$1 > -dep=$2 > -target=$3 > -src_dir=$(dirname $src) > -all_includes= > - > -process_includes () { > - cat $1 | grep '^include' | \ > - while read include file ; do > - all_includes="$all_includes $src_dir/$file" > - process_includes $src_dir/$file > - done > -} > - > -f=$src > -while [ -n "$f" ] ; do > - f=$(cat $f | tr -d '\r' | awk '/^include / {printf "'$src_dir'/%s ", $2}') > - [ $? = 0 ] || exit 1 > - all_includes="$all_includes $f" > -done > -process_includes $src > - > -cat $src $all_includes | grep -v '^include' > -echo "$target: $all_includes" > $dep >