From e0e312f3525ad6ac18ba6633af29190dd9620cbc Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 23 Jan 2019 14:56:01 +0800 Subject: [PATCH] build: switch to Kconfig 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 Signed-off-by: Yang Zhong Acked-by: Thomas Huth Message-Id: <20190123065618.3520-28-yang.zhong@intel.com> Signed-off-by: Paolo Bonzini --- Kconfig.host | 9 ++++++++- Makefile | 26 +++++++++++++++++++++----- Makefile.target | 7 ++++++- configure | 6 ++++++ default-configs/arm-softmmu.mak | 3 --- 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 | 5 ----- default-configs/s390x-softmmu.mak | 4 +--- default-configs/virtio.mak | 3 --- hw/9pfs/Kconfig | 2 ++ hw/arm/Kconfig | 1 + hw/block/Kconfig | 2 ++ hw/display/Kconfig | 3 +++ hw/i386/Kconfig | 8 ++++++++ hw/input/Kconfig | 5 +++++ hw/intc/Kconfig | 12 ++++++++++++ hw/misc/Kconfig | 2 ++ hw/ppc/Kconfig | 4 ++++ hw/scsi/Kconfig | 7 +++++++ hw/tpm/Kconfig | 2 ++ hw/vfio/Kconfig | 9 +++++++++ hw/xtensa/Kconfig | 2 +- rules.mak | 2 +- scripts/make_device_config.sh | 30 ------------------------------ 27 files changed, 102 insertions(+), 60 deletions(-) delete mode 100644 scripts/make_device_config.sh diff --git a/Kconfig.host b/Kconfig.host index 11fefa4813..add5b179f7 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 @@ -10,9 +11,15 @@ config LINUX config OPENGL bool +config X11 + bool + config SPICE bool +config IVSHMEM + bool + config TPM bool diff --git a/Makefile b/Makefile index cad585b4d6..2b251c39d9 100644 --- a/Makefile +++ b/Makefile @@ -327,8 +327,8 @@ DOCS= endif SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory --quiet) BUILD_DIR=$(BUILD_DIR) -SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS)) -SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_DIRS)) +SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(filter %-softmmu, $(TARGET_DIRS))) +SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %.d, $(SUBDIR_DEVICES_MAK)) ifeq ($(SUBDIR_DEVICES_MAK),) config-all-devices.mak: @@ -343,9 +343,25 @@ 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_IVSHMEM=$(CONFIG_IVSHMEM) \ + CONFIG_TPM=$(CONFIG_TPM) \ + CONFIG_XEN=$(CONFIG_XEN) \ + CONFIG_OPENGL=$(CONFIG_OPENGL) \ + CONFIG_X11=$(CONFIG_X11) \ + CONFIG_VHOST_USER=$(CONFIG_VHOST_USER) \ + CONFIG_VIRTFS=$(CONFIG_VIRTFS) \ + CONFIG_LINUX=$(CONFIG_LINUX) + +MINIKCONF_INPUTS = $(SRC_PATH)/Kconfig.host $(SRC_PATH)/hw/Kconfig +MINIKCONF = $(PYTHON) $(SRC_PATH)/scripts/minikconf.py \ + +$(SUBDIR_DEVICES_MAK): %/config-devices.mak: default-configs/%.mak $(MINIKCONF_INPUTS) $(BUILD_DIR)/config-host.mak + $(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 3b79e7074c..ec72733ace 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 @@ -201,7 +204,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 5921d08cb3..89e4a23f6c 100755 --- a/configure +++ b/configure @@ -7438,12 +7438,18 @@ fi if supported_xen_target $target; then echo "CONFIG_XEN=y" >> $config_target_mak + echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak if test "$xen_pci_passthrough" = yes; then echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" fi +else + echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak 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 +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 bd6943b691..797bfa52fe 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 @@ -126,8 +125,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 15b628757b..412c8c5b4f 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 4049b23562..ef0f4bae72 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=$(call land,$(CONFIG_X11),$(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 055219030a..3d4c71d2af 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 52acb7cf39..90118cb767 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 7f34ad0528..a0a9151328 100644 --- a/default-configs/ppc64-softmmu.mak +++ b/default-configs/ppc64-softmmu.mak @@ -13,11 +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_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 6f2c6cec18..2794ffb8bd 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 b653aa06b1..51599ed276 100644 --- a/default-configs/virtio.mak +++ b/default-configs/virtio.mak @@ -1,5 +1,3 @@ -CONFIG_VHOST_USER_SCSI=$(CONFIG_VHOST_USER) -CONFIG_VHOST_USER_BLK=$(CONFIG_VHOST_USER) 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 a4750999d9..c9e244fdff 100644 --- a/hw/9pfs/Kconfig +++ b/hw/9pfs/Kconfig @@ -1,2 +1,4 @@ config VIRTIO_9P bool + default y + depends on VIRTFS diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index e4386ce78f..9eab67bddd 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -1,5 +1,6 @@ config ARM_VIRT bool + imply VFIO_PLATFORM config DIGIC bool diff --git a/hw/block/Kconfig b/hw/block/Kconfig index 9d418bce4d..65431c47f2 100644 --- a/hw/block/Kconfig +++ b/hw/block/Kconfig @@ -27,3 +27,5 @@ config VIRTIO_BLK config VHOST_USER_BLK bool + default y + depends on VHOST_USER && LINUX diff --git a/hw/display/Kconfig b/hw/display/Kconfig index d5c022c886..1149ea2bcd 100644 --- a/hw/display/Kconfig +++ b/hw/display/Kconfig @@ -51,6 +51,8 @@ config FRAMEBUFFER config MILKYMIST_TMU2 bool + default y + depends on OPENGL && X11 config SM501 bool @@ -66,6 +68,7 @@ config VGA config QXL bool + depends on SPICE && PCI config VIRTIO_GPU bool diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig index c851e2b5ab..307a804349 100644 --- a/hw/i386/Kconfig +++ b/hw/i386/Kconfig @@ -1,5 +1,13 @@ config SEV bool + depends on KVM + +config PC + bool + imply QXL + imply SEV + imply TPM_CRB + imply TPM_TIS config I440FX bool diff --git a/hw/input/Kconfig b/hw/input/Kconfig index 91bae47498..c729dcd0b2 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 + depends on LINUX + config TSC210X bool diff --git a/hw/intc/Kconfig b/hw/intc/Kconfig index 69adbd135f..6eea14e804 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 d5126349d9..fc068efdfd 100644 --- a/hw/misc/Kconfig +++ b/hw/misc/Kconfig @@ -48,6 +48,8 @@ config MACIO config IVSHMEM_DEVICE bool + default y + depends on PCI && LINUX && IVSHMEM config ECCMEMCTL bool diff --git a/hw/ppc/Kconfig b/hw/ppc/Kconfig index 608745488a..fb085d76fd 100644 --- a/hw/ppc/Kconfig +++ b/hw/ppc/Kconfig @@ -39,6 +39,10 @@ config VIRTEX config XIVE bool + default y + depends on PSERIES config XIVE_SPAPR bool + default y + depends on PSERIES diff --git a/hw/scsi/Kconfig b/hw/scsi/Kconfig index eb78478ef0..a3518a3754 100644 --- a/hw/scsi/Kconfig +++ b/hw/scsi/Kconfig @@ -19,8 +19,15 @@ 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 + depends on VHOST_USER && LINUX diff --git a/hw/tpm/Kconfig b/hw/tpm/Kconfig index 2eee8eb865..b5d1724f8c 100644 --- a/hw/tpm/Kconfig +++ b/hw/tpm/Kconfig @@ -3,9 +3,11 @@ config TPM config TPM_TIS bool + depends on TPM config TPM_CRB bool + depends on TPM config TPM_PASSTHROUGH bool diff --git a/hw/vfio/Kconfig b/hw/vfio/Kconfig index 36069674cb..0fdff10c13 100644 --- a/hw/vfio/Kconfig +++ b/hw/vfio/Kconfig @@ -1,14 +1,21 @@ config VFIO bool + depends on LINUX config VFIO_PCI bool + select VFIO + depends on LINUX config VFIO_CCW bool + select VFIO + depends on LINUX config VFIO_PLATFORM bool + select VFIO + depends on LINUX config VFIO_XGMAC bool @@ -18,3 +25,5 @@ config VFIO_AMD_XGBE config VFIO_AP bool + select VFIO + depends on LINUX diff --git a/hw/xtensa/Kconfig b/hw/xtensa/Kconfig index 97543a9263..dc8eaf6080 100644 --- a/hw/xtensa/Kconfig +++ b/hw/xtensa/Kconfig @@ -1,5 +1,5 @@ config XTENSA_SIM bool -config XTENSA_FPGA +config XTENSA_XTFPGA bool diff --git a/rules.mak b/rules.mak index 19f3d2c126..df45bcffb4 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 354af317b3..0000000000 --- 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