From b60ff2f840b0997d4f437afe78322cbe4c778dce Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Sat, 20 May 2017 19:44:46 -0400 Subject: [PATCH] dts: generate definitions for build system This will generate an additional file that can be sourced by the build system to expose definitions generated by device tree and used for flashing and debugging targets. Change-Id: I184e247f0a8dbd1a4a42dd4b02ea01f2caa70533 Jira: ZEP-2119 Signed-off-by: Anas Nashif --- scripts/extract_dts_includes.py | 39 ++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/scripts/extract_dts_includes.py b/scripts/extract_dts_includes.py index 263cac0e01c..e07518aee81 100755 --- a/scripts/extract_dts_includes.py +++ b/scripts/extract_dts_includes.py @@ -507,7 +507,26 @@ def print_key_value(k, v, tabstop): return -def generate_include_file(defs, fixup): +def generate_keyvalue_file(defs, args): + compatible = reduced['/']['props']['compatible'][0] + + node_keys = sorted(defs.keys()) + for node in node_keys: + sys.stdout.write('# ' + node.split('/')[-1] ) + sys.stdout.write("\n") + + prop_keys = sorted(defs[node].keys()) + for prop in prop_keys: + if prop == 'aliases': + for entry in sorted(defs[node][prop]): + a = defs[node][prop].get(entry) + sys.stdout.write("%s=%s\n" %(entry, defs[node].get(a))) + else: + sys.stdout.write("%s=%s\n" %(prop,defs[node].get(prop))) + + sys.stdout.write("\n") + +def generate_include_file(defs, args): compatible = reduced['/']['props']['compatible'][0] sys.stdout.write("/**************************************************\n") @@ -538,21 +557,23 @@ def generate_include_file(defs, fixup): for prop in prop_keys: if prop == 'aliases': for entry in sorted(defs[node][prop]): - print_key_value(entry, defs[node][prop].get(entry), maxtabstop) + a = defs[node][prop].get(entry) + print_key_value(entry, a, maxtabstop) else: print_key_value(prop, defs[node].get(prop), maxtabstop) + sys.stdout.write("\n") - if fixup and os.path.exists(fixup): + if args.fixup and os.path.exists(args.fixup): sys.stdout.write("\n") sys.stdout.write("/* Following definitions fixup the generated include */\n") try: - with open(fixup, "r") as fd: + with open(args.fixup, "r") as fd: for line in fd.readlines(): sys.stdout.write(line) sys.stdout.write("\n") except: - raise Exception("Input file " + os.path.abspath(fixup) + " does not exist.") + raise Exception("Input file " + os.path.abspath(args.fixup) + " does not exist.") sys.stdout.write("#endif\n") @@ -560,9 +581,12 @@ def parse_arguments(): parser = argparse.ArgumentParser(description = __doc__, formatter_class = argparse.RawDescriptionHelpFormatter) + parser.add_argument("-d", "--dts", help="DTS file") parser.add_argument("-y", "--yaml", help="YAML file") parser.add_argument("-f", "--fixup", help="Fixup file") + parser.add_argument("-k", "--keyvalue", action="store_true", + help="Generate file to be included by the build system") return parser.parse_args() @@ -654,7 +678,10 @@ def main(): extract_reg_prop(chosen['zephyr,sram'], None, defs, "CONFIG_SRAM", 1024) # generate include file - generate_include_file(defs, args.fixup) + if args.keyvalue: + generate_keyvalue_file(defs, args) + else: + generate_include_file(defs, args) if __name__ == '__main__': main()