diff --git a/doc/build_plugin_docs.py b/doc/build_plugin_docs.py index 9b740dad9..6c640bac1 100755 --- a/doc/build_plugin_docs.py +++ b/doc/build_plugin_docs.py @@ -105,6 +105,7 @@ def generate_target_documentation(outdir): text += get_params_rst(td.platform_params) text += get_params_rst(td.target_params) text += get_params_rst(td.assistant_params) + text += get_params_rst(td.tm_params) wfh.write(text) diff --git a/wa/commands/show.py b/wa/commands/show.py index 45531a4c4..89dde8327 100644 --- a/wa/commands/show.py +++ b/wa/commands/show.py @@ -109,6 +109,7 @@ def get_rst_from_target(target): text += get_params_rst(target.platform_params) text += get_params_rst(target.target_params) text += get_params_rst(target.assistant_params) + text += get_params_rst(target.tm_params) text += '.. Note: For available runtime parameters please see the documentation' return text + '\n' diff --git a/wa/framework/configuration/plugin_cache.py b/wa/framework/configuration/plugin_cache.py index 188d226a4..b81ba6e1d 100644 --- a/wa/framework/configuration/plugin_cache.py +++ b/wa/framework/configuration/plugin_cache.py @@ -175,7 +175,8 @@ def _set_from_global_aliases(self, plugin_name, config): def _get_target_params(self, name): td = self.targets[name] - return get_config_point_map(chain(td.target_params, td.platform_params, td.conn_params, td.assistant_params)) + return get_config_point_map(chain(td.target_params, td.platform_params, + td.conn_params, td.assistant_params, td.tm_params)) # pylint: disable=too-many-nested-blocks, too-many-branches def _merge_using_priority_specificity(self, specific_name, diff --git a/wa/framework/target/descriptor.py b/wa/framework/target/descriptor.py index 8fb138b37..be4959d15 100644 --- a/wa/framework/target/descriptor.py +++ b/wa/framework/target/descriptor.py @@ -14,6 +14,7 @@ # import inspect +from itertools import chain from devlib import (LinuxTarget, AndroidTarget, LocalLinuxTarget, ChromeOsTarget, Platform, Juno, TC2, Gem5SimulationPlatform, @@ -26,6 +27,7 @@ from wa.framework.exception import PluginLoaderError from wa.framework.plugin import Plugin, Parameter from wa.framework.target.assistant import LinuxAssistant, AndroidAssistant, ChromeOsAssistant +from wa.framework.target.manager import TargetManager from wa.utils.types import list_of_strings, list_of_ints, regex, identifier, caseless_string from wa.utils.misc import isiterable @@ -57,6 +59,7 @@ def instantiate_target(tdesc, params, connect=None, extra_platform_params=None): platform_params = get_config_point_map(tdesc.platform_params) conn_params = get_config_point_map(tdesc.conn_params) assistant_params = get_config_point_map(tdesc.assistant_params) + tm_params = get_config_point_map(tdesc.tm_params) tp, pp, cp = {}, {}, {} @@ -75,7 +78,7 @@ def instantiate_target(tdesc, params, connect=None, extra_platform_params=None): elif name in conn_params: if not conn_params[name].deprecated: cp[name] = value - elif name in assistant_params: + elif name in chain(assistant_params, tm_params): pass else: msg = 'Unexpected parameter for {}: {}' @@ -111,7 +114,7 @@ class TargetDescription(object): def __init__(self, name, source, description=None, target=None, platform=None, conn=None, assistant=None, target_params=None, platform_params=None, - conn_params=None, assistant_params=None): + conn_params=None, assistant_params=None, tm_params=None): self.name = name self.source = source self.description = description @@ -123,10 +126,12 @@ def __init__(self, name, source, description=None, target=None, platform=None, self._set('platform_params', platform_params) self._set('conn_params', conn_params) self._set('assistant_params', assistant_params) + self._set('tm_params', tm_params) def get_default_config(self): param_attrs = ['target_params', 'platform_params', - 'conn_params', 'assistant_params'] + 'conn_params', 'assistant_params', + 'tm_params'] config = {} for pattr in param_attrs: for p in getattr(self, pattr): @@ -631,6 +636,7 @@ def get_descriptions(self): td.target_params = target_params td.platform_params = platform_params td.assistant_params = assistant.parameters + td.tm_params = TargetManager.parameters if plat_conn: td.conn = plat_conn diff --git a/wa/framework/target/manager.py b/wa/framework/target/manager.py index 114a5890d..315f6a181 100644 --- a/wa/framework/target/manager.py +++ b/wa/framework/target/manager.py @@ -21,9 +21,6 @@ from wa.framework import signal from wa.framework.exception import ExecutionError, TargetError, TargetNotRespondingError from wa.framework.plugin import Parameter -from wa.framework.target.descriptor import (get_target_description, - instantiate_target, - instantiate_assistant) from wa.framework.target.info import get_target_info, get_target_info_from_cache, cache_target_info from wa.framework.target.runtime_parameter_manager import RuntimeParameterManager from wa.utils.types import module_name_set @@ -135,6 +132,11 @@ def verify_target_responsive(self, context): raise TargetNotRespondingError('Target unresponsive and hard reset not supported; bailing.') def _init_target(self): + # Import here to prevent circular import + # pylint: disable=wrong-import-position,cyclic-import + from wa.framework.target.descriptor import (get_target_description, + instantiate_target, + instantiate_assistant) tdesc = get_target_description(self.target_name) extra_plat_params = {}