build: switch to Kconfig
authorPaolo Bonzini <pbonzini@redhat.com>
Wed, 23 Jan 2019 06:56:01 +0000 (14:56 +0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 7 Mar 2019 20:45:53 +0000 (21:45 +0100)
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 <pbonzini@redhat.com>
Signed-off-by: Yang Zhong <yang.zhong@intel.com>
Acked-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20190123065618.3520-28-yang.zhong@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
27 files changed:
Kconfig.host
Makefile
Makefile.target
configure
default-configs/arm-softmmu.mak
default-configs/i386-softmmu.mak
default-configs/lm32-softmmu.mak
default-configs/pci.mak
default-configs/ppc-softmmu.mak
default-configs/ppc64-softmmu.mak
default-configs/s390x-softmmu.mak
default-configs/virtio.mak
hw/9pfs/Kconfig
hw/arm/Kconfig
hw/block/Kconfig
hw/display/Kconfig
hw/i386/Kconfig
hw/input/Kconfig
hw/intc/Kconfig
hw/misc/Kconfig
hw/ppc/Kconfig
hw/scsi/Kconfig
hw/tpm/Kconfig
hw/vfio/Kconfig
hw/xtensa/Kconfig
rules.mak
scripts/make_device_config.sh [deleted file]

index 11fefa48132b9f0444d98ebea13bc04856997908..add5b179f707f1150b6463b81b0faf8519287ccf 100644 (file)
@@ -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
 
index cad585b4d6bffda9c14f8e05a50d5e50e67fed7a..2b251c39d939bfb0f3b88dcac0802f1fd7a3546e 100644 (file)
--- 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 $@; \
index 3b79e7074c87d0930935ebb2a500d9e09e70a327..ec72733ace57ce401b29979a0502d6fb4493b25f 100644 (file)
@@ -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
 
index 5921d08cb392ad335114a4b2a7a2210875c3a4cd..89e4a23f6c70a81167a2bdc3cdf85599c15ddcb8 100755 (executable)
--- 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
index bd6943b691ad512db2c01f61898f66d4284ba623..797bfa52fe676e7559f35927ee8b507f6ca47129 100644 (file)
@@ -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
 
index 15b628757bae244e696c9d5f3c587cf36ff5c11f..412c8c5b4f79a1d07e412d9ae6373c9a416c7044 100644 (file)
@@ -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
index 4049b23562bdf0ea10f3490598030ecbe8c9d1e4..ef0f4bae72d1776718ad7f522dbab5a37c448327 100644 (file)
@@ -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
index 055219030a26ea393f654e1145cddf10420adfa9..3d4c71d2af515e6bd188cc6511246c1d31b1a492 100644 (file)
@@ -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
index 52acb7cf39e454895b7d96065b7dbaa8196e21e6..90118cb7671f85642cc6728295ca67e1bf4092bc 100644 (file)
@@ -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
index 7f34ad0528ed465c2de78f9685fced16b8314f94..a0a91513289040b7c0ce02a0b9e216f13d60d3a1 100644 (file)
@@ -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
index 6f2c6cec18ae412e23013320fcb6e13ae46783b6..2794ffb8bdbc0ee0b1b01f5ca985f26979b6a912 100644 (file)
@@ -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
index b653aa06b141630fcdafb0888d2dab125c730f29..51599ed276ca1d786db053db5c6d4dbe710744e8 100644 (file)
@@ -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)
index a4750999d921e7132c79c01cf26d671044e6c980..c9e244fdff09eac08fd892ec16833ac2594f8ef8 100644 (file)
@@ -1,2 +1,4 @@
 config VIRTIO_9P
     bool
+    default y
+    depends on VIRTFS
index e4386ce78f4f0ce8d72e46fa74db458be4347921..9eab67bddde9b0566e1b33afe32560c2d314c1f4 100644 (file)
@@ -1,5 +1,6 @@
 config ARM_VIRT
     bool
+    imply VFIO_PLATFORM
 
 config DIGIC
     bool
index 9d418bce4d0fe035a817f9041e5577939a2e81c2..65431c47f2ece0037e405c348b8085632f533d46 100644 (file)
@@ -27,3 +27,5 @@ config VIRTIO_BLK
 
 config VHOST_USER_BLK
     bool
+    default y
+    depends on VHOST_USER && LINUX
index d5c022c88601a09f186e722931f6d6509b216f23..1149ea2bcdd72c7dc8469cd51a3fad5b349b545e 100644 (file)
@@ -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
index c851e2b5ab336950cd7bf34d0047b28f7bfbe2d6..307a804349ac16d9fd5ec22b2dfe910781f88f7d 100644 (file)
@@ -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
index 91bae474983956fad4c79396cf3463cf739a9ae9..c729dcd0b21d2fee20a61e88f79e8ca009c1b0a1 100644 (file)
@@ -19,5 +19,10 @@ config TSC2005
 config VIRTIO_INPUT
     bool
 
+config VIRTIO_INPUT_HOST
+    bool
+    default y
+    depends on LINUX
+
 config TSC210X
     bool
index 69adbd135f97873acaddee5fb6c837b0eec71ed1..6eea14e8047da62d3405c3ac697d4cabe1d1aea2 100644 (file)
@@ -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
index d5126349d9d064226de84c253910c5e02a97e00e..fc068efdfdd2728743fb70b1492d6fcf53c11517 100644 (file)
@@ -48,6 +48,8 @@ config MACIO
 
 config IVSHMEM_DEVICE
     bool
+    default y
+    depends on PCI && LINUX && IVSHMEM
 
 config ECCMEMCTL
     bool
index 608745488ae880c8a2b19edc8de74c1741e70bce..fb085d76fde7727e8b449a87beabfcf60ac5224b 100644 (file)
@@ -39,6 +39,10 @@ config VIRTEX
 
 config XIVE
     bool
+    default y
+    depends on PSERIES
 
 config XIVE_SPAPR
     bool
+    default y
+    depends on PSERIES
index eb78478ef0807c01194d824ae24b1a68d251de05..a3518a3754e5924116efe353440fd4a415bb4775 100644 (file)
@@ -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
index 2eee8eb865c82d724183e34f27e6504056eeb827..b5d1724f8c6157d24bebfb194fd330ad73b1058b 100644 (file)
@@ -3,9 +3,11 @@ config TPM
 
 config TPM_TIS
     bool
+    depends on TPM
 
 config TPM_CRB
     bool
+    depends on TPM
 
 config TPM_PASSTHROUGH
     bool
index 36069674cb761278fe758b151a7098246d62f8fb..0fdff10c130eca6b89408bb5077eea296c037eaa 100644 (file)
@@ -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
index 97543a926386a6c20a89fbe205ef6243df28e173..dc8eaf6080b8af032fbf82b38778493f84fa1844 100644 (file)
@@ -1,5 +1,5 @@
 config XTENSA_SIM
     bool
 
-config XTENSA_FPGA
+config XTENSA_XTFPGA
     bool
index 19f3d2c1261d47305bdffe4017c42d55694b2288..df45bcffb4821ab766ae6fa85095edb6b2d7a0ba 100644 (file)
--- 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 (file)
index 354af31..0000000
+++ /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