• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2015 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Configures devil for use in chromium."""
6
7import os
8import sys
9
10from pylib.constants import host_paths
11
12if host_paths.DEVIL_PATH not in sys.path:
13  sys.path.append(host_paths.DEVIL_PATH)
14
15from devil import devil_env
16
17_DEVIL_CONFIG = os.path.abspath(
18    os.path.join(os.path.dirname(__file__), 'devil_chromium.json'))
19
20_DEVIL_BUILD_PRODUCT_DEPS = {
21  'forwarder_device': [
22    {
23      'platform': 'android',
24      'arch': 'armeabi-v7a',
25      'name': 'forwarder_dist',
26    },
27    {
28      'platform': 'android',
29      'arch': 'arm64-v8a',
30      'name': 'forwarder_dist',
31    },
32    {
33      'platform': 'android',
34      'arch': 'mips',
35      'name': 'forwarder_dist',
36    },
37    {
38      'platform': 'android',
39      'arch': 'mips64',
40      'name': 'forwarder_dist',
41    },
42    {
43      'platform': 'android',
44      'arch': 'x86',
45      'name': 'forwarder_dist',
46    },
47    {
48      'platform': 'android',
49      'arch': 'x86_64',
50      'name': 'forwarder_dist',
51    },
52  ],
53  'forwarder_host': [
54    {
55      'platform': 'linux2',
56      'arch': 'x86_64',
57      'name': 'host_forwarder',
58    },
59  ],
60  'md5sum_device': [
61    {
62      'platform': 'android',
63      'arch': 'armeabi-v7a',
64      'name': 'md5sum_dist',
65    },
66    {
67      'platform': 'android',
68      'arch': 'arm64-v8a',
69      'name': 'md5sum_dist',
70    },
71    {
72      'platform': 'android',
73      'arch': 'mips',
74      'name': 'md5sum_dist',
75    },
76    {
77      'platform': 'android',
78      'arch': 'mips64',
79      'name': 'md5sum_dist',
80    },
81    {
82      'platform': 'android',
83      'arch': 'x86',
84      'name': 'md5sum_dist',
85    },
86    {
87      'platform': 'android',
88      'arch': 'x86_64',
89      'name': 'md5sum_dist',
90    },
91  ],
92  'md5sum_host': [
93    {
94      'platform': 'linux2',
95      'arch': 'x86_64',
96      'name': 'md5sum_bin_host',
97    },
98  ],
99}
100
101
102def Initialize(output_directory=None, custom_deps=None):
103  """Initializes devil with chromium's binaries and third-party libraries.
104
105  This includes:
106    - Libraries:
107      - the android SDK ("android_sdk")
108      - pymock ("pymock")
109    - Build products:
110      - host & device forwarder binaries
111          ("forwarder_device" and "forwarder_host")
112      - host & device md5sum binaries ("md5sum_device" and "md5sum_host")
113
114  Args:
115    output_directory: An optional path to the output directory. If not set,
116      no built dependencies are configured.
117    custom_deps: An optional dictionary specifying custom dependencies.
118      This should be of the form:
119
120        {
121          'dependency_name': {
122            'platform': 'path',
123            ...
124          },
125          ...
126        }
127  """
128
129  devil_dynamic_config = {
130    'config_type': 'BaseConfig',
131    'dependencies': {},
132  }
133  if output_directory:
134    output_directory = os.path.abspath(output_directory)
135    devil_dynamic_config['dependencies'] = {
136      dep_name: {
137        'file_info': {
138          '%s_%s' % (dep_config['platform'], dep_config['arch']): {
139            'local_paths': [
140              os.path.join(output_directory, dep_config['name']),
141            ],
142          }
143          for dep_config in dep_configs
144        }
145      }
146      for dep_name, dep_configs in _DEVIL_BUILD_PRODUCT_DEPS.iteritems()
147    }
148  if custom_deps:
149    devil_dynamic_config['dependencies'].update(custom_deps)
150
151  devil_env.config.Initialize(
152      configs=[devil_dynamic_config], config_files=[_DEVIL_CONFIG])
153
154