diff --git a/tools/idf.py b/tools/idf.py index 31c78451a5..78d2fb450a 100755 --- a/tools/idf.py +++ b/tools/idf.py @@ -517,6 +517,10 @@ def init_cli(verbose_output=None): ctx = click.get_current_context() global_args = PropertyDict(kwargs) + def _help_and_exit(): + print(ctx.get_help()) + ctx.exit() + # Show warning if some tasks are present several times in the list dupplicated_tasks = sorted( [item for item, count in Counter(task.name for task in tasks).items() if count > 1]) @@ -527,9 +531,13 @@ def init_cli(verbose_output=None): ("s %s are" % dupes if len(dupplicated_tasks) > 1 else " %s is" % dupes) + "Only first occurence will be executed.") - # Set propagated global options. - # These options may be set on one subcommand, but available in the list of global arguments for task in tasks: + # Show help and exit if help is in the list of commands + if task.name == 'help': + _help_and_exit() + + # Set propagated global options. + # These options may be set on one subcommand, but available in the list of global arguments for key in list(task.action_args): option = next((o for o in ctx.command.params if o.name == key), None) @@ -557,8 +565,7 @@ def init_cli(verbose_output=None): # Always show help when command is not provided if not tasks: - print(ctx.get_help()) - ctx.exit() + _help_and_exit() # Build full list of tasks to and deal with dependencies and order dependencies tasks_to_run = OrderedDict() diff --git a/tools/idf_py_actions/core_ext.py b/tools/idf_py_actions/core_ext.py index 056f652928..54b31efe90 100644 --- a/tools/idf_py_actions/core_ext.py +++ b/tools/idf_py_actions/core_ext.py @@ -13,7 +13,6 @@ from idf_py_actions.tools import ensure_build_directory, idf_version, merge_acti def action_extensions(base_actions, project_path): - def build_target(target_name, ctx, args): """ Execute the target build system to build target 'target_name' @@ -24,6 +23,10 @@ def action_extensions(base_actions, project_path): ensure_build_directory(args, ctx.info_name) run_target(target_name, args) + def list_build_system_targets(target_name, ctx, args): + """Shows list of targets known to build sytem (make/ninja)""" + build_target('help', ctx, args) + def menuconfig(target_name, ctx, args, style): """ Menuconfig target is build_target extended with the style argument for setting the value for the environment @@ -137,8 +140,10 @@ def action_extensions(base_actions, project_path): os.remove(file_to_delete) def set_target(action, ctx, args, idf_target): - if(not args["preview"] and idf_target in PREVIEW_TARGETS): - raise FatalError("%s is still in preview. You have to append '--preview' option after idf.py to use any preview feature." % idf_target) + if (not args["preview"] and idf_target in PREVIEW_TARGETS): + raise FatalError( + "%s is still in preview. You have to append '--preview' option after idf.py to use any preview feature." + % idf_target) args.define_cache_entry.append("IDF_TARGET=" + idf_target) sdkconfig_path = os.path.join(args.project_dir, 'sdkconfig') sdkconfig_old = sdkconfig_path + ".old" @@ -370,10 +375,14 @@ def action_extensions(base_actions, project_path): "help": "Read otadata partition.", "options": global_options, }, + "build-system-targets": { + "callback": list_build_system_targets, + "help": "Print list of build system targets.", + }, "fallback": { "callback": fallback_target, "help": "Handle for targets not known for idf.py.", - "hidden": True + "hidden": True, } } }