| # 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 import constants | |
| from pylib.constants import host_paths | |
| if host_paths.DEVIL_PATH not in sys.path: | |
| sys.path.insert(1, host_paths.DEVIL_PATH) | |
| from devil import devil_env | |
| from devil.android.ndk import abis | |
| _BUILD_DIR = os.path.join(constants.DIR_SOURCE_ROOT, 'build') | |
| if _BUILD_DIR not in sys.path: | |
| sys.path.insert(1, _BUILD_DIR) | |
| import gn_helpers | |
| _DEVIL_CONFIG = os.path.abspath( | |
| os.path.join(os.path.dirname(__file__), 'devil_chromium.json')) | |
| _DEVIL_BUILD_PRODUCT_DEPS = { | |
| 'chromium_commands': [ | |
| { | |
| 'platform': 'linux2', | |
| 'arch': 'x86_64', | |
| 'path_components': ['lib.java', 'chromium_commands.dex.jar'], | |
| } | |
| ], | |
| 'forwarder_device': [ | |
| { | |
| 'platform': 'android', | |
| 'arch': abis.ARM, | |
| 'path_components': ['forwarder_dist'], | |
| }, | |
| { | |
| 'platform': 'android', | |
| 'arch': abis.ARM_64, | |
| 'path_components': ['forwarder_dist'], | |
| }, | |
| { | |
| 'platform': 'android', | |
| 'arch': 'mips', | |
| 'path_components': ['forwarder_dist'], | |
| }, | |
| { | |
| 'platform': 'android', | |
| 'arch': 'mips64', | |
| 'path_components': ['forwarder_dist'], | |
| }, | |
| { | |
| 'platform': 'android', | |
| 'arch': abis.X86, | |
| 'path_components': ['forwarder_dist'], | |
| }, | |
| { | |
| 'platform': 'android', | |
| 'arch': abis.X86_64, | |
| 'path_components': ['forwarder_dist'], | |
| }, | |
| ], | |
| 'forwarder_host': [ | |
| { | |
| 'platform': 'linux2', | |
| 'arch': 'x86_64', | |
| 'path_components': ['host_forwarder'], | |
| }, | |
| ], | |
| 'md5sum_device': [ | |
| { | |
| 'platform': 'android', | |
| 'arch': abis.ARM, | |
| 'path_components': ['md5sum_dist'], | |
| }, | |
| { | |
| 'platform': 'android', | |
| 'arch': abis.ARM_64, | |
| 'path_components': ['md5sum_dist'], | |
| }, | |
| { | |
| 'platform': 'android', | |
| 'arch': 'mips', | |
| 'path_components': ['md5sum_dist'], | |
| }, | |
| { | |
| 'platform': 'android', | |
| 'arch': 'mips64', | |
| 'path_components': ['md5sum_dist'], | |
| }, | |
| { | |
| 'platform': 'android', | |
| 'arch': abis.X86, | |
| 'path_components': ['md5sum_dist'], | |
| }, | |
| { | |
| 'platform': 'android', | |
| 'arch': abis.X86_64, | |
| 'path_components': ['md5sum_dist'], | |
| }, | |
| ], | |
| 'md5sum_host': [ | |
| { | |
| 'platform': 'linux2', | |
| 'arch': 'x86_64', | |
| 'path_components': ['md5sum_bin_host'], | |
| }, | |
| ], | |
| } | |
| def _UseLocalBuildProducts(output_directory, devil_dynamic_config): | |
| 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['path_components']), | |
| ], | |
| } | |
| for dep_config in dep_configs | |
| } | |
| } | |
| for dep_name, dep_configs in _DEVIL_BUILD_PRODUCT_DEPS.iteritems() | |
| } | |
| def _BuildWithChromium(): | |
| """Returns value of gclient's |build_with_chromium|.""" | |
| gni_path = os.path.join(_BUILD_DIR, 'config', 'gclient_args.gni') | |
| if not os.path.exists(gni_path): | |
| return False | |
| with open(gni_path) as f: | |
| data = f.read() | |
| args = gn_helpers.FromGNArgs(data) | |
| return args.get('build_with_chromium', False) | |
| 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") | |
| - 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', | |
| ... | |
| }, | |
| ... | |
| } | |
| adb_path: An optional path to use for the adb binary. If not set, this uses | |
| the adb binary provided by the Android SDK. | |
| """ | |
| build_with_chromium = _BuildWithChromium() | |
| devil_dynamic_config = { | |
| 'config_type': 'BaseConfig', | |
| 'dependencies': {}, | |
| } | |
| if build_with_chromium and output_directory: | |
| # Non-chromium users of chromium's //build directory fetch build products | |
| # from google storage rather than use locally built copies. Chromium uses | |
| # locally-built copies so that changes to the tools can be easily tested. | |
| _UseLocalBuildProducts(output_directory, devil_dynamic_config) | |
| 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] | |
| } | |
| } | |
| } | |
| }) | |
| config_files = [_DEVIL_CONFIG] if build_with_chromium else None | |
| devil_env.config.Initialize(configs=[devil_dynamic_config], | |
| config_files=config_files) |