kconfig: Fix generation of hex outputs for Make & CMake

And add tests for hex output formatting in all output formats.

Previously, Make & CMake outputs only formatted hex values with the 0x prefix
if they had the 0x prefix in the sdkconfig file. Now this prefix is always
applied.

Closes https://github.com/espressif/vscode-esp-idf-extension/issues/83
This commit is contained in:
Angus Gratton 2020-04-16 13:59:16 +10:00 committed by Angus Gratton
parent e9d4659175
commit 5a1848a5a6

View file

@ -346,14 +346,24 @@ def write_makefile(deprecated_options, config, filename):
def get_makefile_config_string(name, value, orig_type): def get_makefile_config_string(name, value, orig_type):
if orig_type in (kconfiglib.BOOL, kconfiglib.TRISTATE): if orig_type in (kconfiglib.BOOL, kconfiglib.TRISTATE):
return "{}{}={}\n".format(config.config_prefix, name, '' if value == 'n' else value) value = '' if value == 'n' else value
elif orig_type in (kconfiglib.INT, kconfiglib.HEX): elif orig_type == kconfiglib.INT:
return "{}{}={}\n".format(config.config_prefix, name, value) try:
value = int(value)
except ValueError:
value = ""
elif orig_type == kconfiglib.HEX:
try:
value = hex(int(value, 16)) # ensure 0x prefix
except ValueError:
value = ""
elif orig_type == kconfiglib.STRING: elif orig_type == kconfiglib.STRING:
return '{}{}="{}"\n'.format(config.config_prefix, name, kconfiglib.escape(value)) value = '"{}"'.format(kconfiglib.escape(value))
else: else:
raise RuntimeError('{}{}: unknown type {}'.format(config.config_prefix, name, orig_type)) raise RuntimeError('{}{}: unknown type {}'.format(config.config_prefix, name, orig_type))
return '{}{}={}\n'.format(config.config_prefix, name, value)
def write_makefile_node(node): def write_makefile_node(node):
item = node.item item = node.item
if isinstance(item, kconfiglib.Symbol) and item.env_var is None: if isinstance(item, kconfiglib.Symbol) and item.env_var is None:
@ -410,13 +420,14 @@ def write_cmake(deprecated_options, config, filename):
val = "" # write unset values as empty variables val = "" # write unset values as empty variables
elif sym.orig_type == kconfiglib.STRING: elif sym.orig_type == kconfiglib.STRING:
val = kconfiglib.escape(val) val = kconfiglib.escape(val)
write("set({}{} \"{}\")\n".format( elif sym.orig_type == kconfiglib.HEX:
prefix, sym.name, val)) val = hex(int(val, 16)) # ensure 0x prefix
write('set({}{} "{}")\n'.format(prefix, sym.name, val))
configs_list.append(prefix + sym.name) configs_list.append(prefix + sym.name)
dep_opt = deprecated_options.get_deprecated_option(sym.name) dep_opt = deprecated_options.get_deprecated_option(sym.name)
if dep_opt: if dep_opt:
tmp_dep_list.append("set({}{} \"{}\")\n".format(prefix, dep_opt, val)) tmp_dep_list.append('set({}{} "{}")\n'.format(prefix, dep_opt, val))
configs_list.append(prefix + dep_opt) configs_list.append(prefix + dep_opt)
for n in config.node_iter(): for n in config.node_iter():