1*6777b538SAndroid Build Coastguard Worker# Copyright 2015 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker"""Configures devil for use in chromium.""" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Workerimport os 8*6777b538SAndroid Build Coastguard Workerimport sys 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Workerfrom pylib import constants 11*6777b538SAndroid Build Coastguard Workerfrom pylib.constants import host_paths 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Workerif host_paths.DEVIL_PATH not in sys.path: 14*6777b538SAndroid Build Coastguard Worker sys.path.insert(1, host_paths.DEVIL_PATH) 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Workerfrom devil import devil_env 17*6777b538SAndroid Build Coastguard Workerfrom devil.android.ndk import abis 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker_BUILD_DIR = os.path.join(constants.DIR_SOURCE_ROOT, 'build') 20*6777b538SAndroid Build Coastguard Workerif _BUILD_DIR not in sys.path: 21*6777b538SAndroid Build Coastguard Worker sys.path.insert(1, _BUILD_DIR) 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Workerimport gn_helpers 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker_DEVIL_CONFIG = os.path.abspath( 26*6777b538SAndroid Build Coastguard Worker os.path.join(os.path.dirname(__file__), 'devil_chromium.json')) 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard Worker_DEVIL_BUILD_PRODUCT_DEPS = { 29*6777b538SAndroid Build Coastguard Worker 'chromium_commands': [ 30*6777b538SAndroid Build Coastguard Worker { 31*6777b538SAndroid Build Coastguard Worker 'platform': 'linux2', 32*6777b538SAndroid Build Coastguard Worker 'arch': 'x86_64', 33*6777b538SAndroid Build Coastguard Worker 'path_components': ['lib.java', 'chromium_commands.dex.jar'], 34*6777b538SAndroid Build Coastguard Worker } 35*6777b538SAndroid Build Coastguard Worker ], 36*6777b538SAndroid Build Coastguard Worker 'forwarder_device': [ 37*6777b538SAndroid Build Coastguard Worker { 38*6777b538SAndroid Build Coastguard Worker 'platform': 'android', 39*6777b538SAndroid Build Coastguard Worker 'arch': abis.ARM, 40*6777b538SAndroid Build Coastguard Worker 'path_components': ['forwarder_dist'], 41*6777b538SAndroid Build Coastguard Worker }, 42*6777b538SAndroid Build Coastguard Worker { 43*6777b538SAndroid Build Coastguard Worker 'platform': 'android', 44*6777b538SAndroid Build Coastguard Worker 'arch': abis.ARM_64, 45*6777b538SAndroid Build Coastguard Worker 'path_components': ['forwarder_dist'], 46*6777b538SAndroid Build Coastguard Worker }, 47*6777b538SAndroid Build Coastguard Worker { 48*6777b538SAndroid Build Coastguard Worker 'platform': 'android', 49*6777b538SAndroid Build Coastguard Worker 'arch': 'mips', 50*6777b538SAndroid Build Coastguard Worker 'path_components': ['forwarder_dist'], 51*6777b538SAndroid Build Coastguard Worker }, 52*6777b538SAndroid Build Coastguard Worker { 53*6777b538SAndroid Build Coastguard Worker 'platform': 'android', 54*6777b538SAndroid Build Coastguard Worker 'arch': 'mips64', 55*6777b538SAndroid Build Coastguard Worker 'path_components': ['forwarder_dist'], 56*6777b538SAndroid Build Coastguard Worker }, 57*6777b538SAndroid Build Coastguard Worker { 58*6777b538SAndroid Build Coastguard Worker 'platform': 'android', 59*6777b538SAndroid Build Coastguard Worker 'arch': abis.X86, 60*6777b538SAndroid Build Coastguard Worker 'path_components': ['forwarder_dist'], 61*6777b538SAndroid Build Coastguard Worker }, 62*6777b538SAndroid Build Coastguard Worker { 63*6777b538SAndroid Build Coastguard Worker 'platform': 'android', 64*6777b538SAndroid Build Coastguard Worker 'arch': abis.X86_64, 65*6777b538SAndroid Build Coastguard Worker 'path_components': ['forwarder_dist'], 66*6777b538SAndroid Build Coastguard Worker }, 67*6777b538SAndroid Build Coastguard Worker ], 68*6777b538SAndroid Build Coastguard Worker 'forwarder_host': [ 69*6777b538SAndroid Build Coastguard Worker { 70*6777b538SAndroid Build Coastguard Worker 'platform': 'linux2', 71*6777b538SAndroid Build Coastguard Worker 'arch': 'x86_64', 72*6777b538SAndroid Build Coastguard Worker 'path_components': ['host_forwarder'], 73*6777b538SAndroid Build Coastguard Worker }, 74*6777b538SAndroid Build Coastguard Worker ], 75*6777b538SAndroid Build Coastguard Worker 'md5sum_device': [ 76*6777b538SAndroid Build Coastguard Worker { 77*6777b538SAndroid Build Coastguard Worker 'platform': 'android', 78*6777b538SAndroid Build Coastguard Worker 'arch': abis.ARM, 79*6777b538SAndroid Build Coastguard Worker 'path_components': ['md5sum_dist'], 80*6777b538SAndroid Build Coastguard Worker }, 81*6777b538SAndroid Build Coastguard Worker { 82*6777b538SAndroid Build Coastguard Worker 'platform': 'android', 83*6777b538SAndroid Build Coastguard Worker 'arch': abis.ARM_64, 84*6777b538SAndroid Build Coastguard Worker 'path_components': ['md5sum_dist'], 85*6777b538SAndroid Build Coastguard Worker }, 86*6777b538SAndroid Build Coastguard Worker { 87*6777b538SAndroid Build Coastguard Worker 'platform': 'android', 88*6777b538SAndroid Build Coastguard Worker 'arch': 'mips', 89*6777b538SAndroid Build Coastguard Worker 'path_components': ['md5sum_dist'], 90*6777b538SAndroid Build Coastguard Worker }, 91*6777b538SAndroid Build Coastguard Worker { 92*6777b538SAndroid Build Coastguard Worker 'platform': 'android', 93*6777b538SAndroid Build Coastguard Worker 'arch': 'mips64', 94*6777b538SAndroid Build Coastguard Worker 'path_components': ['md5sum_dist'], 95*6777b538SAndroid Build Coastguard Worker }, 96*6777b538SAndroid Build Coastguard Worker { 97*6777b538SAndroid Build Coastguard Worker 'platform': 'android', 98*6777b538SAndroid Build Coastguard Worker 'arch': abis.X86, 99*6777b538SAndroid Build Coastguard Worker 'path_components': ['md5sum_dist'], 100*6777b538SAndroid Build Coastguard Worker }, 101*6777b538SAndroid Build Coastguard Worker { 102*6777b538SAndroid Build Coastguard Worker 'platform': 'android', 103*6777b538SAndroid Build Coastguard Worker 'arch': abis.X86_64, 104*6777b538SAndroid Build Coastguard Worker 'path_components': ['md5sum_dist'], 105*6777b538SAndroid Build Coastguard Worker }, 106*6777b538SAndroid Build Coastguard Worker ], 107*6777b538SAndroid Build Coastguard Worker 'md5sum_host': [ 108*6777b538SAndroid Build Coastguard Worker { 109*6777b538SAndroid Build Coastguard Worker 'platform': 'linux2', 110*6777b538SAndroid Build Coastguard Worker 'arch': 'x86_64', 111*6777b538SAndroid Build Coastguard Worker 'path_components': ['md5sum_bin_host'], 112*6777b538SAndroid Build Coastguard Worker }, 113*6777b538SAndroid Build Coastguard Worker ], 114*6777b538SAndroid Build Coastguard Worker} 115*6777b538SAndroid Build Coastguard Worker 116*6777b538SAndroid Build Coastguard Worker 117*6777b538SAndroid Build Coastguard Workerdef _UseLocalBuildProducts(output_directory, devil_dynamic_config): 118*6777b538SAndroid Build Coastguard Worker output_directory = os.path.abspath(output_directory) 119*6777b538SAndroid Build Coastguard Worker devil_dynamic_config['dependencies'] = { 120*6777b538SAndroid Build Coastguard Worker dep_name: { 121*6777b538SAndroid Build Coastguard Worker 'file_info': { 122*6777b538SAndroid Build Coastguard Worker '%s_%s' % (dep_config['platform'], dep_config['arch']): { 123*6777b538SAndroid Build Coastguard Worker 'local_paths': [ 124*6777b538SAndroid Build Coastguard Worker os.path.join(output_directory, 125*6777b538SAndroid Build Coastguard Worker *dep_config['path_components']), 126*6777b538SAndroid Build Coastguard Worker ], 127*6777b538SAndroid Build Coastguard Worker } 128*6777b538SAndroid Build Coastguard Worker for dep_config in dep_configs 129*6777b538SAndroid Build Coastguard Worker } 130*6777b538SAndroid Build Coastguard Worker } 131*6777b538SAndroid Build Coastguard Worker for dep_name, dep_configs in _DEVIL_BUILD_PRODUCT_DEPS.items() 132*6777b538SAndroid Build Coastguard Worker } 133*6777b538SAndroid Build Coastguard Worker 134*6777b538SAndroid Build Coastguard Worker 135*6777b538SAndroid Build Coastguard Workerdef _BuildWithChromium(): 136*6777b538SAndroid Build Coastguard Worker """Returns value of gclient's |build_with_chromium|.""" 137*6777b538SAndroid Build Coastguard Worker gni_path = os.path.join(_BUILD_DIR, 'config', 'gclient_args.gni') 138*6777b538SAndroid Build Coastguard Worker if not os.path.exists(gni_path): 139*6777b538SAndroid Build Coastguard Worker return False 140*6777b538SAndroid Build Coastguard Worker with open(gni_path) as f: 141*6777b538SAndroid Build Coastguard Worker data = f.read() 142*6777b538SAndroid Build Coastguard Worker args = gn_helpers.FromGNArgs(data) 143*6777b538SAndroid Build Coastguard Worker return args.get('build_with_chromium', False) 144*6777b538SAndroid Build Coastguard Worker 145*6777b538SAndroid Build Coastguard Worker 146*6777b538SAndroid Build Coastguard Workerdef Initialize(output_directory=None, 147*6777b538SAndroid Build Coastguard Worker custom_deps=None, 148*6777b538SAndroid Build Coastguard Worker adb_path=None, 149*6777b538SAndroid Build Coastguard Worker use_local_devil_tools=False): 150*6777b538SAndroid Build Coastguard Worker """Initializes devil with chromium's binaries and third-party libraries. 151*6777b538SAndroid Build Coastguard Worker 152*6777b538SAndroid Build Coastguard Worker This includes: 153*6777b538SAndroid Build Coastguard Worker - Libraries: 154*6777b538SAndroid Build Coastguard Worker - the android SDK ("android_sdk") 155*6777b538SAndroid Build Coastguard Worker - Build products: 156*6777b538SAndroid Build Coastguard Worker - host & device forwarder binaries 157*6777b538SAndroid Build Coastguard Worker ("forwarder_device" and "forwarder_host") 158*6777b538SAndroid Build Coastguard Worker - host & device md5sum binaries ("md5sum_device" and "md5sum_host") 159*6777b538SAndroid Build Coastguard Worker 160*6777b538SAndroid Build Coastguard Worker Args: 161*6777b538SAndroid Build Coastguard Worker output_directory: An optional path to the output directory. If not set, 162*6777b538SAndroid Build Coastguard Worker no built dependencies are configured. 163*6777b538SAndroid Build Coastguard Worker custom_deps: An optional dictionary specifying custom dependencies. 164*6777b538SAndroid Build Coastguard Worker This should be of the form: 165*6777b538SAndroid Build Coastguard Worker 166*6777b538SAndroid Build Coastguard Worker { 167*6777b538SAndroid Build Coastguard Worker 'dependency_name': { 168*6777b538SAndroid Build Coastguard Worker 'platform': 'path', 169*6777b538SAndroid Build Coastguard Worker ... 170*6777b538SAndroid Build Coastguard Worker }, 171*6777b538SAndroid Build Coastguard Worker ... 172*6777b538SAndroid Build Coastguard Worker } 173*6777b538SAndroid Build Coastguard Worker adb_path: An optional path to use for the adb binary. If not set, this uses 174*6777b538SAndroid Build Coastguard Worker the adb binary provided by the Android SDK. 175*6777b538SAndroid Build Coastguard Worker use_local_devil_tools: Use locally built versions of md5sum, 176*6777b538SAndroid Build Coastguard Worker forwarder_dist, etc. 177*6777b538SAndroid Build Coastguard Worker """ 178*6777b538SAndroid Build Coastguard Worker build_with_chromium = _BuildWithChromium() 179*6777b538SAndroid Build Coastguard Worker 180*6777b538SAndroid Build Coastguard Worker devil_dynamic_config = { 181*6777b538SAndroid Build Coastguard Worker 'config_type': 'BaseConfig', 182*6777b538SAndroid Build Coastguard Worker 'dependencies': {}, 183*6777b538SAndroid Build Coastguard Worker } 184*6777b538SAndroid Build Coastguard Worker if use_local_devil_tools: 185*6777b538SAndroid Build Coastguard Worker # Non-chromium users of chromium's //build directory fetch build products 186*6777b538SAndroid Build Coastguard Worker # from google storage rather than use locally built copies. Chromium uses 187*6777b538SAndroid Build Coastguard Worker # locally-built copies so that changes to the tools can be easily tested. 188*6777b538SAndroid Build Coastguard Worker _UseLocalBuildProducts(output_directory, devil_dynamic_config) 189*6777b538SAndroid Build Coastguard Worker 190*6777b538SAndroid Build Coastguard Worker if custom_deps: 191*6777b538SAndroid Build Coastguard Worker devil_dynamic_config['dependencies'].update(custom_deps) 192*6777b538SAndroid Build Coastguard Worker if adb_path: 193*6777b538SAndroid Build Coastguard Worker devil_dynamic_config['dependencies'].update({ 194*6777b538SAndroid Build Coastguard Worker 'adb': { 195*6777b538SAndroid Build Coastguard Worker 'file_info': { 196*6777b538SAndroid Build Coastguard Worker devil_env.GetPlatform(): { 197*6777b538SAndroid Build Coastguard Worker 'local_paths': [adb_path] 198*6777b538SAndroid Build Coastguard Worker } 199*6777b538SAndroid Build Coastguard Worker } 200*6777b538SAndroid Build Coastguard Worker } 201*6777b538SAndroid Build Coastguard Worker }) 202*6777b538SAndroid Build Coastguard Worker 203*6777b538SAndroid Build Coastguard Worker config_files = [_DEVIL_CONFIG] if build_with_chromium else None 204*6777b538SAndroid Build Coastguard Worker devil_env.config.Initialize(configs=[devil_dynamic_config], 205*6777b538SAndroid Build Coastguard Worker config_files=config_files) 206