From 5a1848a5a64f8ab37221eb4b0b683c17c1fb5f23 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Thu, 16 Apr 2020 13:59:16 +1000 Subject: [PATCH] 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 --- tools/kconfig_new/confgen.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/tools/kconfig_new/confgen.py b/tools/kconfig_new/confgen.py index 72b102672..bf6c505be 100755 --- a/tools/kconfig_new/confgen.py +++ b/tools/kconfig_new/confgen.py @@ -346,14 +346,24 @@ def write_makefile(deprecated_options, config, filename): def get_makefile_config_string(name, value, orig_type): if orig_type in (kconfiglib.BOOL, kconfiglib.TRISTATE): - return "{}{}={}\n".format(config.config_prefix, name, '' if value == 'n' else value) - elif orig_type in (kconfiglib.INT, kconfiglib.HEX): - return "{}{}={}\n".format(config.config_prefix, name, value) + value = '' if value == 'n' else value + elif orig_type == kconfiglib.INT: + 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: - return '{}{}="{}"\n'.format(config.config_prefix, name, kconfiglib.escape(value)) + value = '"{}"'.format(kconfiglib.escape(value)) else: raise RuntimeError('{}{}: unknown type {}'.format(config.config_prefix, name, orig_type)) + return '{}{}={}\n'.format(config.config_prefix, name, value) + def write_makefile_node(node): item = node.item 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 elif sym.orig_type == kconfiglib.STRING: val = kconfiglib.escape(val) - write("set({}{} \"{}\")\n".format( - prefix, sym.name, val)) + elif sym.orig_type == kconfiglib.HEX: + val = hex(int(val, 16)) # ensure 0x prefix + write('set({}{} "{}")\n'.format(prefix, sym.name, val)) configs_list.append(prefix + sym.name) dep_opt = deprecated_options.get_deprecated_option(sym.name) 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) for n in config.node_iter():