123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- # 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.items()
- }
- 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)
|