From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: thuth@redhat.com, Yang Zhong <yang.zhong@intel.com>
Subject: [Qemu-devel] [PULL 10/54] minikconfig: implement allnoconfig and defconfig modes
Date: Mon, 4 Mar 2019 19:19:30 +0100 [thread overview]
Message-ID: <1551723614-1823-11-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1551723614-1823-1-git-send-email-pbonzini@redhat.com>
Apart from defconfig (which is a no-op),
allyesconfig/allnoconfig/randcondfig can be implemented simply by ignoring
the RHS of assignments and "default" statements. The RHS is replaced
respectively by "true", "false" or a random value.
However, allyesconfig and randconfig do not quite work, because all the
files for hw/ARCH/Kconfig are sourced and therefore you could end up
enabling some ARM boards in x86 or things like that. This is left for
future work, but I am leaving it in to help debugging minikconf itself.
allnoconfig mode is tied to a new configure option, --without-default-devices.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
Makefile | 1 +
configure | 12 +++++++++++-
scripts/minikconf.py | 39 ++++++++++++++++++++++++++++++++++-----
3 files changed, 46 insertions(+), 6 deletions(-)
diff --git a/Makefile b/Makefile
index 0c9cc3e..b0293aa 100644
--- a/Makefile
+++ b/Makefile
@@ -331,6 +331,7 @@ endif
# This has to be kept in sync with Kconfig.host.
MINIKCONF_ARGS = \
+ $(CONFIG_MINIKCONF_MODE) \
$@ $*-config.devices.mak.d $< $(MINIKCONF_INPUTS) \
CONFIG_KVM=$(CONFIG_KVM) \
CONFIG_SPICE=$(CONFIG_SPICE) \
diff --git a/configure b/configure
index 3cc6a94..0fdbab4 100755
--- a/configure
+++ b/configure
@@ -487,7 +487,7 @@ libxml2=""
docker="no"
debug_mutex="no"
libpmem=""
-libudev="no"
+default_devices="yes"
# cross compilers defaults, can be overridden with --cross-cc-ARCH
cross_cc_aarch64="aarch64-linux-gnu-gcc"
@@ -996,6 +996,10 @@ for opt do
;;
--with-trace-file=*) trace_file="$optarg"
;;
+ --with-default-devices) default_devices="yes"
+ ;;
+ --without-default-devices) default_devices="no"
+ ;;
--enable-gprof) gprof="yes"
;;
--enable-gcov) gcov="yes"
@@ -6250,6 +6254,7 @@ echo "capstone $capstone"
echo "docker $docker"
echo "libpmem support $libpmem"
echo "libudev $libudev"
+echo "default devices $default_devices"
if test "$supported_cpu" = "no"; then
echo
@@ -6311,6 +6316,11 @@ echo "GIT_UPDATE=$git_update" >> $config_host_mak
echo "ARCH=$ARCH" >> $config_host_mak
+if test "$default_devices" = "yes" ; then
+ echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
+else
+ echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
+fi
if test "$debug_tcg" = "yes" ; then
echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
fi
diff --git a/scripts/minikconf.py b/scripts/minikconf.py
index 6bedc57..5421db0 100644
--- a/scripts/minikconf.py
+++ b/scripts/minikconf.py
@@ -14,9 +14,11 @@ from __future__ import print_function
import os
import sys
import re
+import random
__all__ = [ 'KconfigDataError', 'KconfigParserError',
- 'KconfigData', 'KconfigParser' ]
+ 'KconfigData', 'KconfigParser' ,
+ 'defconfig', 'allyesconfig', 'allnoconfig', 'randconfig' ]
def debug_print(*args):
#print('# ' + (' '.join(str(x) for x in args)))
@@ -39,6 +41,11 @@ class KconfigDataError(Exception):
def __str__(self):
return self.msg
+allyesconfig = lambda x: True
+allnoconfig = lambda x: False
+defconfig = lambda x: x
+randconfig = lambda x: random.randint(0, 1) == 1
+
class KconfigData:
class Expr:
def __and__(self, rhs):
@@ -192,7 +199,8 @@ class KconfigData:
if self.cond.evaluate():
self.dest.set_value(True, self)
- def __init__(self):
+ def __init__(self, value_mangler=defconfig):
+ self.value_mangler = value_mangler
self.previously_included = []
self.incl_info = None
self.defined_vars = set()
@@ -272,6 +280,7 @@ class KconfigData:
self.clauses.append(KconfigData.AssignmentClause(var, val))
def do_default(self, var, val, cond=None):
+ val = self.value_mangler(val)
self.clauses.append(KconfigData.DefaultClause(var, val, cond))
def do_depends_on(self, var, expr):
@@ -328,9 +337,10 @@ class KconfigParserError(Exception):
return "%s: %s" % (self.loc, self.msg)
class KconfigParser:
+
@classmethod
- def parse(self, fp):
- data = KconfigData()
+ def parse(self, fp, mode=None):
+ data = KconfigData(mode or KconfigParser.defconfig)
parser = KconfigParser(data)
parser.parse_file(fp)
return data
@@ -653,11 +663,30 @@ class KconfigParser:
if __name__ == '__main__':
argv = sys.argv
+ mode = defconfig
+ if len(sys.argv) > 1:
+ if argv[1] == '--defconfig':
+ del argv[1]
+ elif argv[1] == '--randconfig':
+ random.seed()
+ mode = randconfig
+ del argv[1]
+ elif argv[1] == '--allyesconfig':
+ mode = allyesconfig
+ del argv[1]
+ elif argv[1] == '--allnoconfig':
+ mode = allnoconfig
+ del argv[1]
+
if len(argv) == 1:
print ("%s: at least one argument is required" % argv[0], file=sys.stderr)
sys.exit(1)
- data = KconfigData()
+ if argv[1].startswith('-'):
+ print ("%s: invalid option %s" % (argv[0], argv[1]), file=sys.stderr)
+ sys.exit(1)
+
+ data = KconfigData(mode)
parser = KconfigParser(data)
for arg in argv[3:]:
m = re.match(r'^(CONFIG_[A-Z0-9_]+)=([yn]?)$', arg)
--
1.8.3.1
next prev parent reply other threads:[~2019-03-04 18:20 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-04 18:19 [Qemu-devel] [PULL 00/54] Kconfig conversion, excluding ARM and MIPS Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 01/54] block: fix recursion in hw/block/dataplane Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 02/54] 9pfs: remove unnecessary conditionals Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 03/54] xtensa: rename CONFIG_XTENSA_FPGA to CONFIG_XTENSA_XTFPGA Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 04/54] minikconfig: add parser skeleton Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 05/54] minikconfig: add AST Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 06/54] minikconfig: add semantic analysis Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 07/54] hw/display: make edid configurable Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 08/54] kconfig: introduce kconfig files Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 09/54] build: switch to Kconfig Paolo Bonzini
2019-03-04 18:19 ` Paolo Bonzini [this message]
2019-03-04 18:19 ` [Qemu-devel] [PULL 11/54] kconfig: introduce CONFIG_TEST_DEVICES Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 12/54] ide: express dependencies with Kconfig Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 13/54] hw/pci/Makefile.objs: make pcie configurable Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 14/54] isa: express dependencies with kconfig Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 15/54] build: convert pci.mak to Kconfig Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 16/54] build: convert sound.mak " Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 17/54] scsi: express dependencies with Kconfig Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 18/54] build: convert usb.mak to Kconfig Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 19/54] i386: express dependencies with Kconfig Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 20/54] i2c: " Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 21/54] ptimer: " Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 22/54] display: express dependencies with kconfig Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 23/54] hyperv: " Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 24/54] vfio: express vfio dependencies with Kconfig Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 25/54] virtio: express virtio " Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 26/54] tpm: express " Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 27/54] isa: express SuperIO " Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 28/54] ssi: express dependencies with kconfig Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 29/54] sd: " Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 30/54] ipmi: " Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 31/54] i386-softmmu.mak: remove all CONFIG_* except boards definitions Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 32/54] ppc64: Express dependencies of 'pseries' and 'powernv' machines with kconfig Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 33/54] ppc: Express dependencies of the 'prep' and '40p' " Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 34/54] ppc: Express dependencies of the Mac " Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 35/54] ppc: Express dependencies of the Sam460EX " Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 36/54] ppc: Express dependencies of the embedded " Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 37/54] alpha-softmmu.mak: express dependencies with Kconfig Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 38/54] cris-softmmu.mak: " Paolo Bonzini
2019-03-04 18:19 ` [Qemu-devel] [PULL 39/54] hppa-softmmu.mak: " Paolo Bonzini
2019-03-04 18:20 ` [Qemu-devel] [PULL 40/54] lm32-softmmu.mak: " Paolo Bonzini
2019-03-04 23:55 ` Philippe Mathieu-Daudé
2019-03-04 18:20 ` [Qemu-devel] [PULL 41/54] m68k-softmmu.mak: " Paolo Bonzini
2019-03-04 18:20 ` [Qemu-devel] [PULL 42/54] microblaze-softmmu.mak: " Paolo Bonzini
2019-03-04 18:20 ` [Qemu-devel] [PULL 43/54] moxie-softmmu.mak: " Paolo Bonzini
2019-03-04 18:20 ` [Qemu-devel] [PULL 44/54] nios2-softmmu.mak: " Paolo Bonzini
2019-03-04 18:20 ` [Qemu-devel] [PULL 45/54] or1k-softmmu.mak: " Paolo Bonzini
2019-03-04 18:20 ` [Qemu-devel] [PULL 46/54] riscv-softmmu.mak: replace CONFIG_* with Kconfig "select" directives Paolo Bonzini
2019-03-04 18:20 ` [Qemu-devel] [PULL 47/54] s390x: express dependencies with Kconfig Paolo Bonzini
2019-03-04 18:20 ` [Qemu-devel] [PULL 48/54] sh4-softmmu.mak: " Paolo Bonzini
2019-03-04 18:20 ` [Qemu-devel] [PULL 49/54] sparc-softmmu.mak: " Paolo Bonzini
2019-03-04 18:20 ` [Qemu-devel] [PULL 50/54] sparc64-softmmu.mak: " Paolo Bonzini
2019-03-04 18:20 ` [Qemu-devel] [PULL 51/54] unicore32-softmmu.mak: " Paolo Bonzini
2019-03-04 18:20 ` [Qemu-devel] [PULL 52/54] xtensa-softmmu.mak: " Paolo Bonzini
2019-03-04 18:20 ` [Qemu-devel] [PULL 53/54] .travis.yml: test that no-default-device builds do not regress Paolo Bonzini
2019-03-04 18:20 ` [Qemu-devel] [PULL 54/54] kconfig: add documentation Paolo Bonzini
2019-03-04 20:16 ` [Qemu-devel] [PULL 00/54] Kconfig conversion, excluding ARM and MIPS no-reply
2019-03-05 9:32 ` Peter Maydell
2019-03-05 19:45 ` Thomas Huth
2019-03-05 20:08 ` Eric Blake
2019-03-05 20:29 ` Philippe Mathieu-Daudé
2019-03-06 10:12 ` Thomas Huth
2019-03-08 20:52 ` Eric Blake
2019-03-06 10:57 ` Paolo Bonzini
2019-03-06 11:04 ` Thomas Huth
2019-03-06 11:14 ` Philippe Mathieu-Daudé
2019-03-06 11:15 ` Paolo Bonzini
2019-03-07 13:25 ` Peter Maydell
2019-03-07 13:47 ` Philippe Mathieu-Daudé
2019-03-07 14:09 ` Paolo Bonzini
2019-03-07 13:55 ` Paolo Bonzini
2019-03-08 16:23 ` no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1551723614-1823-11-git-send-email-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
--cc=yang.zhong@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).