diff --git a/wa/framework/configuration/plugin_cache.py b/wa/framework/configuration/plugin_cache.py index 6fe1e801..2ac8cfc9 100644 --- a/wa/framework/configuration/plugin_cache.py +++ b/wa/framework/configuration/plugin_cache.py @@ -152,7 +152,7 @@ class PluginCache(object): def _get_target_params(self, name): td = self.targets[name] - params = {p.name: p for p in chain(td.target_params, td.platform_params)} + params = {p.name: p for p in chain(td.target_params, td.platform_params, td.conn_params)} #params['connection_settings'] = {p.name: p for p in td.conn_params} return params diff --git a/wa/framework/target/descriptor.py b/wa/framework/target/descriptor.py index 194b305e..7170e433 100644 --- a/wa/framework/target/descriptor.py +++ b/wa/framework/target/descriptor.py @@ -2,7 +2,8 @@ from collections import OrderedDict from copy import copy from devlib import (LinuxTarget, AndroidTarget, LocalLinuxTarget, - Platform, Juno, TC2, Gem5SimulationPlatform) + Platform, Juno, TC2, Gem5SimulationPlatform, + AdbConnection, SshConnection, LocalConnection) from wa.framework import pluginloader from wa.framework.exception import PluginLoaderError @@ -248,16 +249,90 @@ GEM5_PLATFORM_PARAMS = [ '''), ] -# name --> (target_class, params_list, defaults, assistant_class) + +CONNECTION_PARAMS = { + AdbConnection: [ + Parameter('device', kind=str, + description=""" + ADB device name + """), + Parameter('adb_server', kind=str, + description=""" + ADB server to connect to. + """), + ], + SshConnection: [ + Parameter('host', kind=str, mandatory=True, + description=""" + Host name or IP address of the target. + """), + Parameter('username', kind=str, mandatory=True, + description=""" + User name to connect with + """), + Parameter('password', kind=str, + description=""" + Password to use. + """), + Parameter('keyfile', kind=str, + description=""" + Key file to use + """), + Parameter('port', kind=int, + description=""" + The port SSH server is listening on on the target. + """), + Parameter('telent', kind=bool, default=False, + description=""" + If set to ``True``, a Telent connection, rather than + SSH will be used. + """), + Parameter('password_prompt', kind=str, + description=""" + Password prompt to expect + """), + Parameter('original_prompt', kind=str, + description=""" + Original shell prompt to expect. + """), + Parameter('sudo_cmd', kind=str, + default="sudo -- sh -c '{}'", + description=""" + Sudo command to use. Must have ``"{}"``` specified + somewher in the string it indicate where the command + to be run via sudo is to go. + """), + ], + LocalConnection: [ + Parameter('password', kind=str, + description=""" + Password to use for sudo. if not specified, the user will + be prompted during intialization. + """), + Parameter('keep_password', kind=bool, default=True, + description=""" + If ``True`` (the default), the password will be cached in + memory after it is first obtained from the user, so that the + user would not be prompted for it again. + """), + Parameter('unrooted', kind=bool, default=False, + description=""" + Indicate that the target should be considered unrooted; do not + attempt sudo or ask the user for their password. + """), + ], +} + +# name --> ((target_class, conn_class), params_list, defaults, assistant_class) TARGETS = { - 'linux': (LinuxTarget, COMMON_TARGET_PARAMS, None), - 'android': (AndroidTarget, COMMON_TARGET_PARAMS + + 'linux': ((LinuxTarget, SshConnection), COMMON_TARGET_PARAMS, None), + 'android': ((AndroidTarget, AdbConnection), COMMON_TARGET_PARAMS + [Parameter('package_data_directory', kind=str, default='/data/data', description=''' Directory containing Android data '''), ], None), - 'local': (LocalLinuxTarget, COMMON_TARGET_PARAMS, None), + 'local': ((LocalLinuxTarget, LocalConnection), COMMON_TARGET_PARAMS, None), } # name --> assistant @@ -303,17 +378,19 @@ class DefaultTargetDescriptor(TargetDescriptor): def get_descriptions(self): result = [] for target_name, target_tuple in TARGETS.iteritems(): - target, target_params = self._get_item(target_tuple) + (target, conn), target_params = self._get_item(target_tuple) assistant = ASSISTANTS[target_name] + conn_params = CONNECTION_PARAMS[conn] for platform_name, platform_tuple in PLATFORMS.iteritems(): platform, platform_params = self._get_item(platform_tuple) - name = '{}_{}'.format(platform_name, target_name) td = TargetDescription(name, self) td.target = target + td.conn = conn td.platform = platform td.assistant = assistant td.target_params = target_params + td.conn_params = conn_params td.platform_params = platform_params td.assistant_params = assistant.parameters result.append(td)