[U-Boot] [RFC PATCH v3 1/3] tools: moveconfig: Add an option to build a fuller database of options

Jean-Jacques Hiblot jjhiblot at ti.com
Fri Oct 26 11:14:15 UTC 2018


"moveconfig -b" will build a database of config options based on the
content of include/config/auto.conf that reflects the .config

Add a new option '-B' that does essentially the same, except that it uses
the content of u-boot.cfg, spl/u-boot.cfg and tpl/u-boot.cfg.
This allows to get the options from .config AND the headers for all the
possible binary types (u-boot, SPL and TPL)

Signed-off-by: Jean-Jacques Hiblot <jjhiblot at ti.com>
Reviewed-by: Simon Glass <sjg at chromium.org>
---

Changes in v3: None
Changes in v2: New

 tools/moveconfig.py | 56 ++++++++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 49 insertions(+), 7 deletions(-)

diff --git a/tools/moveconfig.py b/tools/moveconfig.py
index caa81ac..85c2b8b 100755
--- a/tools/moveconfig.py
+++ b/tools/moveconfig.py
@@ -1151,9 +1151,17 @@ class Slot:
                                    self.ps.stderr.read())
         self.finish(False)
 
+    def remove_cfg_files(self):
+        for base in ['.', 'spl', 'tpl']:
+            try:
+                os.remove(os.path.join(self.build_dir, base, "u-boot.cfg"))
+            except:
+                pass
+
     def do_defconfig(self):
         """Run 'make <board>_defconfig' to create the .config file."""
-
+        # first remove old cfg files that may have been produced earlier
+        self.remove_cfg_files()
         cmd = list(self.make_cmd)
         cmd.append(self.defconfig)
         self.ps = subprocess.Popen(cmd, stdout=self.devnull,
@@ -1182,15 +1190,43 @@ class Slot:
                                    cwd=self.current_src_dir)
         self.state = STATE_AUTOCONF
 
+
     def do_build_db(self):
         """Add the board to the database"""
-        configs = {}
-        with open(os.path.join(self.build_dir, AUTO_CONF_PATH)) as fd:
-            for line in fd.readlines():
+        def conf_to_dic(filename):
+            configs = {}
+            if not os.path.isfile(filename):
+                return None
+
+            try:
+                if filename.endswith("u-boot.cfg"):
+                        with tempfile.NamedTemporaryFile(delete = True) as fd:
+                            lines = subprocess.check_call("sed -n -f tools/scripts/define2mk.sed {}".format(filename).split(), stdout = fd)
+                            fd.seek(0)
+                            lines = fd.readlines()
+                else:
+                        with open(filename, "r") as fd:
+                            lines = fd.readlines()
+            except:
+                return None
+
+            for line in lines:
                 if line.startswith('CONFIG'):
                     config, value = line.split('=', 1)
                     configs[config] = value.rstrip()
-        self.db_queue.put([self.defconfig, configs])
+            return configs
+
+        list_of_conf = []
+        if self.options.build_full_db:
+            list_of_conf.append((self.defconfig,"u-boot.cfg"))
+            list_of_conf.append(("{} SPL".format(self.defconfig),"spl/u-boot.cfg"))
+            list_of_conf.append(("{} TPL".format(self.defconfig),"tpl/u-boot.cfg"))
+        else:
+            list_of_conf.append((self.defconfig,AUTO_CONF_PATH))
+        for name,conf_file in list_of_conf:
+            configs = conf_to_dic(os.path.join(self.build_dir, conf_file))
+            if configs:
+                self.db_queue.put([name, configs])
         self.finish(True)
 
     def do_savedefconfig(self):
@@ -1770,7 +1806,9 @@ def main():
                       help="don't show options which are already marked as "
                       'implying others')
     parser.add_option('-b', '--build-db', action='store_true', default=False,
-                      help='build a CONFIG database')
+                      help='build a CONFIG database based only on auto.conf')
+    parser.add_option('-B', '--build-full-db', action='store_true', default=False,
+                      help='build a CONFIG database based only on u-boot.cfg (and also for SPL and TPL)')
     parser.add_option('-c', '--color', action='store_true', default=False,
                       help='display the log in color')
     parser.add_option('-C', '--commit', action='store_true', default=False,
@@ -1807,6 +1845,9 @@ def main():
 
     (options, configs) = parser.parse_args()
 
+    if options.build_full_db:
+        options.build_db = True
+
     if len(configs) == 0 and not any((options.force_sync, options.build_db,
                                       options.imply)):
         parser.print_usage()
@@ -1875,7 +1916,8 @@ def main():
 
     if options.build_db:
         with open(CONFIG_DATABASE, 'w') as fd:
-            for defconfig, configs in config_db.iteritems():
+            for defconfig in sorted(config_db.keys()):
+                configs = config_db[defconfig]
                 fd.write('%s\n' % defconfig)
                 for config in sorted(configs.keys()):
                     fd.write('   %s=%s\n' % (config, configs[config]))
-- 
2.7.4



More information about the U-Boot mailing list