xref: /aosp_15_r20/external/cronet/build/android/devil_chromium.py (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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