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