def get_kconfig (): global kconfig if kconfig: return kconfig project = get_project () if not project: return None os.environ.setdefault ("KCONFIG_CONFIG", "config/kconfig.mk") kconfig = Kconfig ("kconfig") kconfig.disable_redun_warnings () kconfig.disable_override_warnings () # load project kconfig.mk if os.path.isfile ("config/kconfig.mk"): kconfig.load_config ("config/kconfig.mk", False) else: soc_common = os.path.join (project ["soc_dir"], "soc.config") if os.path.isfile (soc_common): kconfig.load_config (soc_common, False) # load soc.config soc_config = project ["soc_cfg"] kconfig.load_config (soc_config, False) # load bsp.config bsp_config = os.path.join (project ["bsp_dir"], "bsp.config") if os.path.isfile (bsp_config): kconfig.load_config (bsp_config, False) return kconfig
"usage: merge_config.py Kconfig merged_config config1 [config2 ...]") kconf = Kconfig(sys.argv[1]) # Enable warnings for assignments to undefined symbols kconf.enable_undef_warnings() # (This script uses alldefconfig as the base. Other starting states could be # set up here as well. The approach in examples/allnoconfig_simpler.py could # provide an allnoconfig starting state for example.) # Disable warnings generated for multiple assignments to the same symbol within # a (set of) configuration files. Assigning a symbol multiple times might be # done intentionally when merging configuration files. kconf.disable_override_warnings() kconf.disable_redun_warnings() # Create a merged configuration by loading the fragments with replace=False for config in sys.argv[3:]: kconf.load_config(config, replace=False) # Write the merged configuration kconf.write_config(sys.argv[2]) # Print warnings for symbols whose actual value doesn't match the assigned # value def name_and_loc(sym): # Helper for printing symbol names and Kconfig file location(s) in warnings
def main(): args = parse_args() print("Parsing Kconfig tree in " + args.kconfig_root) kconf = Kconfig(args.kconfig_root, warn_to_stderr=False) # prj.conf may override settings from the board configuration, so disable # warnings about symbols being assigned more than once kconf.disable_override_warnings() kconf.disable_redun_warnings() # Warn for assignments to undefined symbols kconf.enable_undef_warnings() for i, config in enumerate(args.conf_fragments): print( ("Loading {} as base" if i == 0 else "Merging {}").format(config)) # replace=False creates a merged configuration kconf.load_config(config, replace=False) # Print warnings for symbols whose actual value doesn't match the assigned # value for sym in kconf.unique_defined_syms: # Was the symbol assigned to? Choice symbols are checked separately. if sym.user_value is not None and not sym.choice: verify_assigned_sym_value(sym) # Print warnings for choices whose actual selection doesn't match the user # selection for choice in kconf.unique_choices: if choice.user_selection: verify_assigned_choice_value(choice) # Hack: Force all symbols to be evaluated, to catch warnings generated # during evaluation. Wait till the end to write the actual output files, so # that we don't generate any output if there are warnings-turned-errors. # # Kconfiglib caches calculated symbol values internally, so this is still # fast. kconf.write_config(os.devnull) # Print warnings ourselves so that we can put a blank line between them for # readability. We could roll this into the loop below, but it's nice to # always print all warnings, even if one of them turns out to be fatal. for warning in kconf.warnings: print("\n" + warning, file=sys.stderr) # Turn all warnings except for explicity whitelisted ones into errors. In # particular, this will turn assignments to undefined Kconfig variables # into errors. # # A warning is generated by this script whenever a symbol gets a different # value than the one it was assigned. Keep that one as just a warning for # now as well. for warning in kconf.warnings: if fatal(warning): sys.exit("\n" + textwrap.fill( "Error: Aborting due to non-whitelisted Kconfig " "warning '{}'.\nNote: If this warning doesn't point " "to an actual problem, you can add it to the " "whitelist at the top of {}.".format(warning, sys.argv[0]), 100) + "\n") # Write the merged configuration and the C header kconf.write_config(args.dotconfig) print("Configuration written to '{}'".format(args.dotconfig)) kconf.write_autoconf(args.autoconf)
sys.exit("usage: merge_config.py Kconfig merged_config config1 [config2 ...]") kconf = Kconfig(sys.argv[1]) # Enable warnings for assignments to undefined symbols kconf.enable_undef_warnings() # (This script uses alldefconfig as the base. Other starting states could be # set up here as well. The approach in examples/allnoconfig_simpler.py could # provide an allnoconfig starting state for example.) # Disable warnings generated for multiple assignments to the same symbol within # a (set of) configuration files. Assigning a symbol multiple times might be # done intentionally when merging configuration files. kconf.disable_override_warnings() kconf.disable_redun_warnings() # Create a merged configuration by loading the fragments with replace=False for config in sys.argv[3:]: kconf.load_config(config, replace=False) # Write the merged configuration kconf.write_config(sys.argv[2]) # Print warnings for symbols whose actual value doesn't match the assigned # value def name_and_loc(sym): # Helper for printing symbol names and Kconfig file location(s) in warnings if not sym.nodes: