# Copyright 2015 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Configures devil for use in chromium.""" import os import sys from pylib.constants import host_paths if host_paths.DEVIL_PATH not in sys.path: sys.path.append(host_paths.DEVIL_PATH) from devil import devil_env _DEVIL_CONFIG = os.path.abspath( os.path.join(os.path.dirname(__file__), 'devil_chromium.json')) _DEVIL_BUILD_PRODUCT_DEPS = { 'forwarder_device': [ { 'platform': 'android', 'arch': 'armeabi-v7a', 'name': 'forwarder_dist', }, { 'platform': 'android', 'arch': 'arm64-v8a', 'name': 'forwarder_dist', }, { 'platform': 'android', 'arch': 'mips', 'name': 'forwarder_dist', }, { 'platform': 'android', 'arch': 'mips64', 'name': 'forwarder_dist', }, { 'platform': 'android', 'arch': 'x86', 'name': 'forwarder_dist', }, { 'platform': 'android', 'arch': 'x86_64', 'name': 'forwarder_dist', }, ], 'forwarder_host': [ { 'platform': 'linux2', 'arch': 'x86_64', 'name': 'host_forwarder', }, ], 'md5sum_device': [ { 'platform': 'android', 'arch': 'armeabi-v7a', 'name': 'md5sum_dist', }, { 'platform': 'android', 'arch': 'arm64-v8a', 'name': 'md5sum_dist', }, { 'platform': 'android', 'arch': 'mips', 'name': 'md5sum_dist', }, { 'platform': 'android', 'arch': 'mips64', 'name': 'md5sum_dist', }, { 'platform': 'android', 'arch': 'x86', 'name': 'md5sum_dist', }, { 'platform': 'android', 'arch': 'x86_64', 'name': 'md5sum_dist', }, ], 'md5sum_host': [ { 'platform': 'linux2', 'arch': 'x86_64', 'name': 'md5sum_bin_host', }, ], } def Initialize(output_directory=None, custom_deps=None, adb_path=None): """Initializes devil with chromium's binaries and third-party libraries. This includes: - Libraries: - the android SDK ("android_sdk") - pymock ("pymock") - Build products: - host & device forwarder binaries ("forwarder_device" and "forwarder_host") - host & device md5sum binaries ("md5sum_device" and "md5sum_host") Args: output_directory: An optional path to the output directory. If not set, no built dependencies are configured. custom_deps: An optional dictionary specifying custom dependencies. This should be of the form: { 'dependency_name': { 'platform': 'path', ... }, ... } """ devil_dynamic_config = { 'config_type': 'BaseConfig', 'dependencies': {}, } if output_directory: output_directory = os.path.abspath(output_directory) devil_dynamic_config['dependencies'] = { dep_name: { 'file_info': { '%s_%s' % (dep_config['platform'], dep_config['arch']): { 'local_paths': [ os.path.join(output_directory, dep_config['name']), ], } for dep_config in dep_configs } } for dep_name, dep_configs in _DEVIL_BUILD_PRODUCT_DEPS.iteritems() } if custom_deps: devil_dynamic_config['dependencies'].update(custom_deps) if adb_path: devil_dynamic_config['dependencies'].update({ 'adb': { 'file_info': { devil_env.GetPlatform(): { 'local_paths': [adb_path] } } } }) devil_env.config.Initialize( configs=[devil_dynamic_config], config_files=[_DEVIL_CONFIG])