qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: thuth@redhat.com, philmd@redhat.com
Subject: [Qemu-devel] [PATCH 07/51] minikconfig: implement allnoconfig and defconfig modes
Date: Thu,  7 Feb 2019 18:56:50 +0100	[thread overview]
Message-ID: <1549562254-41157-8-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1549562254-41157-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 | 43 ++++++++++++++++++++++++++++++++++---------
 3 files changed, 46 insertions(+), 10 deletions(-)

diff --git a/Makefile b/Makefile
index 959ab9e..e444f91 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 64f843f..39e80c7 100755
--- a/configure
+++ b/configure
@@ -486,7 +486,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"
@@ -997,6 +997,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"
@@ -6183,6 +6187,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
@@ -6244,6 +6249,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 dd96ab9..dc1b612 100644
--- a/scripts/minikconf.py
+++ b/scripts/minikconf.py
@@ -14,17 +14,15 @@ from __future__ import print_function
 import os
 import sys
 import re
+import random
 
- __all__ = [ 'KconfigParserError', 'KconfigData', 'KconfigParser' ]
+__all__ = [ 'KconfigParserError', 'KconfigData', 'KconfigParser',
+        'defconfig', 'allyesconfig', 'allnoconfig', 'randconfig' ]
 
 def debug_print(*args):
     print('#' + (' '.join(str(x) for x in args)))
     pass
 
-def debug_print(*args):
-    #print ' '.join(str(x) for x in args)
-    pass
-
 # -------------------------------------------
 # KconfigData implements the Kconfig semantics.  For now it can only
 # detect undefined symbols, i.e. symbols that were referenced in
@@ -35,6 +33,11 @@ def debug_print(*args):
 # just its name).
 # -------------------------------------------
 
+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):
@@ -188,7 +191,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()
@@ -268,6 +272,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):
@@ -324,9 +329,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
@@ -649,11 +655,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

  parent reply	other threads:[~2019-02-07 17:57 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-07 17:56 [Qemu-devel] [PATCH v6 00/51] Support Kconfig in QEMU Paolo Bonzini
2019-02-07 17:56 ` [Qemu-devel] [PATCH 01/51] minikconfig: add parser skeleton Paolo Bonzini
2019-02-07 17:56 ` [Qemu-devel] [PATCH 02/51] minikconfig: add AST Paolo Bonzini
2019-02-07 17:56 ` [Qemu-devel] [PATCH 03/51] minikconfig: add semantic analysis Paolo Bonzini
2019-02-07 17:56 ` [Qemu-devel] [PATCH 04/51] hw/display: make edid configurable Paolo Bonzini
2019-02-07 17:56 ` [Qemu-devel] [PATCH 05/51] kconfig: introduce kconfig files Paolo Bonzini
2019-02-07 18:35   ` Thomas Huth
2019-02-20 15:42   ` Thomas Huth
2019-02-20 15:46     ` Paolo Bonzini
2019-02-20 16:55   ` Max Filippov
2019-02-20 17:44     ` Paolo Bonzini
2019-02-21 15:58   ` Stefano Garzarella
2019-02-07 17:56 ` [Qemu-devel] [PATCH 06/51] build: switch to Kconfig Paolo Bonzini
2019-02-21 15:44   ` Stefano Garzarella
2019-02-21 17:59     ` Paolo Bonzini
2019-02-21 20:15       ` Stefano Garzarella
2019-02-07 17:56 ` Paolo Bonzini [this message]
2019-02-07 17:56 ` [Qemu-devel] [PATCH 08/51] kconfig: introduce CONFIG_TEST_DEVICES Paolo Bonzini
2019-02-07 17:56 ` [Qemu-devel] [PATCH 09/51] ide: express dependencies with Kconfig Paolo Bonzini
2019-02-07 17:56 ` [Qemu-devel] [PATCH 10/51] hw/pci/Makefile.objs: make pcie configurable Paolo Bonzini
2019-02-07 17:56 ` [Qemu-devel] [PATCH 11/51] build: convert pci.mak to Kconfig Paolo Bonzini
2019-02-07 17:56 ` [Qemu-devel] [PATCH 12/51] build: convert sound.mak " Paolo Bonzini
2019-02-07 17:56 ` [Qemu-devel] [PATCH 13/51] build: convert usb.mak " Paolo Bonzini
2019-02-07 17:56 ` [Qemu-devel] [PATCH 14/51] block: fix recursion in hw/block/dataplane Paolo Bonzini
2019-02-07 17:56 ` [Qemu-devel] [PATCH 15/51] scsi: express dependencies with Kconfig Paolo Bonzini
2019-02-07 17:56 ` [Qemu-devel] [PATCH 16/51] isa: express dependencies with kconfig Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 17/51] i386: express dependencies with Kconfig Paolo Bonzini
2019-02-25  8:44   ` Stefano Garzarella
2019-02-26 13:23     ` Paolo Bonzini
2019-02-26 13:44       ` Markus Armbruster
2019-02-26 15:25         ` Paolo Bonzini
2019-02-26 17:24           ` Markus Armbruster
2019-02-26 15:42   ` Thomas Huth
2019-02-07 17:57 ` [Qemu-devel] [PATCH 18/51] i2c: " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 19/51] ptimer: " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 20/51] display: express dependencies with kconfig Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 21/51] hyperv: " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 22/51] vfio: express vfio dependencies with Kconfig Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 23/51] virtio: express virtio " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 24/51] tpm: express " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 25/51] isa: express SuperIO " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 26/51] ssi: express dependencies with kconfig Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 27/51] sd: " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 28/51] ipmi: " Paolo Bonzini
2019-02-20 14:06   ` Corey Minyard
2019-02-07 17:57 ` [Qemu-devel] [PATCH 29/51] i386-softmmu.mak: remove all CONFIG_* except boards definitions Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 30/51] ppc64: Express dependencies of 'pseries' and 'powernv' machines with kconfig Paolo Bonzini
2019-02-28 10:44   ` Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 31/51] ppc: Express dependencies of the 'prep' and '40p' " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 32/51] ppc: Express dependencies of the Mac " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 33/51] ppc: Express dependencies of the Sam460EX " Paolo Bonzini
2019-02-07 23:16   ` BALATON Zoltan
2019-02-08  4:30     ` Thomas Huth
2019-02-07 17:57 ` [Qemu-devel] [PATCH 34/51] ppc: Express dependencies of the embedded " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 35/51] alpha-softmmu.mak: express dependencies with Kconfig Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 36/51] cris-softmmu.mak: " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 37/51] hppa-softmmu.mak: " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 38/51] lm32-softmmu.mak: " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 39/51] m68k-softmmu.mak: " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 40/51] microblaze-softmmu.mak: " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 41/51] moxie-softmmu.mak: " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 42/51] nios2-softmmu.mak: " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 43/51] or1k-softmmu.mak: " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 44/51] s390x: " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 45/51] sh4-softmmu.mak: " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 46/51] sparc-softmmu.mak: " Paolo Bonzini
2019-02-08 17:33   ` Mark Cave-Ayland
2019-02-08 17:40     ` Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 47/51] sparc64-softmmu.mak: " Paolo Bonzini
2019-02-08 17:35   ` Mark Cave-Ayland
2019-02-07 17:57 ` [Qemu-devel] [PATCH 48/51] unicore32-softmmu.mak: " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 49/51] xtensa-softmmu.mak: " Paolo Bonzini
2019-02-07 17:57 ` [Qemu-devel] [PATCH 50/51] .travis.yml: test that no-default-device builds do not regress Paolo Bonzini
2019-02-07 18:26   ` Thomas Huth
2019-02-07 17:57 ` [Qemu-devel] [PATCH 51/51] FIXME vhost: add more stubs Paolo Bonzini
2019-02-07 18:52 ` [Qemu-devel] [PATCH v6 00/51] Support Kconfig in QEMU no-reply
2019-02-07 18:56 ` no-reply
2019-02-07 19:37 ` Michael S. Tsirkin
2019-02-07 19:47 ` no-reply
2019-02-07 19:50 ` no-reply
2019-02-08  0:14 ` 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=1549562254-41157-8-git-send-email-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=thuth@redhat.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).