xref: /aosp_15_r20/external/angle/build/android/devil_chromium.py (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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