summaryrefslogtreecommitdiff
path: root/genconfig.py
diff options
context:
space:
mode:
authorUlf Magnusson <ulfalizer@gmail.com>2018-06-05 13:16:12 +0200
committerUlf Magnusson <ulfalizer@gmail.com>2018-06-05 16:09:37 +0200
commita0f0018496f01f22caf358a56b1d6b91f100af1a (patch)
tree1ebeaabb12d353ba1e4149709e642b649fd935af /genconfig.py
parent1684cfc14b7e569b4e4e6628d9edde1ad67bd7b1 (diff)
Turn syncconfig.py into genconfig.py and generate header
There should be a script available that generates the output header for the build. It usually makes sense to generate both the header and any incremental build information at the same time (automatically during build), so roll them both into the same script.
Diffstat (limited to 'genconfig.py')
-rwxr-xr-xgenconfig.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/genconfig.py b/genconfig.py
new file mode 100755
index 0000000..f0412ba
--- /dev/null
+++ b/genconfig.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+
+# Generates a C header from the configuration, matching the format generated by
+# include/generated/autoconf.h in the kernel.
+#
+# Optionally generates a directory structure with one file per symbol that can
+# be used to implement incremental builds. See the docstring for
+# Kconfig.sync_deps() in Kconfiglib.
+#
+# Usage (see argument help texts for more information):
+#
+# genconfig.py [-h] [--header-path HEADER_FILE] [--sync-deps [OUTPUT_DIR]] [KCONFIG_FILENAME]
+
+import argparse
+import sys
+
+import kconfiglib
+
+DESCRIPTION = """
+Generates a header file with defines from the configuration. Optionally
+creates/updates a directory with incremental build information as well (see the
+docstring for the Kconfig.sync_deps() function in Kconfiglib). The .config file
+to generate the configuration from can be specified by setting the
+KCONFIG_CONFIG environment variable.
+"""
+
+DEFAULT_HEADER_PATH = "config.h"
+DEFAULT_SYNC_DEPS_PATH = "deps/"
+
+def main():
+ parser = argparse.ArgumentParser(description=DESCRIPTION)
+
+ parser.add_argument(
+ "--header-path",
+ metavar="HEADER_FILE",
+ default=DEFAULT_HEADER_PATH,
+ help="path for the generated header file (default: {})"
+ .format(DEFAULT_HEADER_PATH))
+
+ parser.add_argument(
+ "--sync-deps",
+ dest="sync_deps_path",
+ metavar="OUTPUT_DIR",
+ nargs="?",
+ default=None,
+ const=DEFAULT_SYNC_DEPS_PATH,
+ help="enable generation of build dependency information for "
+ "incremental builds, optionally specifying the output path "
+ "(default: {})".format(DEFAULT_SYNC_DEPS_PATH))
+
+ parser.add_argument(
+ "kconfig_filename",
+ metavar="KCONFIG_FILENAME",
+ nargs="?",
+ default="Kconfig",
+ help="top-level Kconfig file (default: Kconfig)")
+
+ args = parser.parse_args()
+
+
+ kconf = kconfiglib.Kconfig(args.kconfig_filename)
+
+ kconf.load_config(kconfiglib.standard_config_filename())
+
+ kconf.write_autoconf(args.header_path)
+ if args.sync_deps_path is not None:
+ kconf.sync_deps(args.sync_deps_path)
+
+if __name__ == "__main__":
+ main()