OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2014 The Chromium Authors. All rights reserved. | 2 # Copyright 2014 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 # This a simple script to make building/testing Mojo components easier. | 6 # This a simple script to make building/testing Mojo components easier. |
7 | 7 |
8 import argparse | 8 import argparse |
9 from copy import deepcopy | 9 from copy import deepcopy |
10 import os | 10 import os |
11 import platform | 11 import platform |
12 import re | 12 import re |
13 import subprocess | 13 import subprocess |
14 import sys | 14 import sys |
15 | 15 |
16 from get_test_list import GetTestList | 16 from get_test_list import GetTestList |
17 from mopy.config import Config | 17 from mopy.config import Config |
18 from mopy.paths import Paths | 18 from mopy.paths import Paths |
19 | 19 |
20 | 20 |
21 def _args_to_config(args): | 21 def _args_to_config(args): |
22 # Default to host OS. | 22 # Default to host OS. |
23 target_os = None | 23 target_os = None |
24 if args.android: | 24 if args.android: |
25 target_os = Config.OS_ANDROID | 25 target_os = Config.OS_ANDROID |
26 elif args.chromeos: | 26 elif args.chromeos: |
27 target_os = Config.OS_CHROMEOS | 27 target_os = Config.OS_CHROMEOS |
28 | 28 |
| 29 if args.cpu_arch is None and args.android: |
| 30 args.cpu_arch = 'arm' |
| 31 target_arch = args.cpu_arch |
| 32 |
29 additional_args = {} | 33 additional_args = {} |
30 | 34 |
31 if 'clang' in args: | 35 if 'clang' in args: |
32 additional_args['is_clang'] = args.clang | 36 additional_args['is_clang'] = args.clang |
33 | 37 |
34 if 'asan' in args and args.asan: | 38 if 'asan' in args and args.asan: |
35 additional_args['sanitizer'] = Config.SANITIZER_ASAN | 39 additional_args['sanitizer'] = Config.SANITIZER_ASAN |
36 | 40 |
37 # Additional non-standard config entries: | 41 # Additional non-standard config entries: |
38 | 42 |
39 if 'goma' in args: | 43 if 'goma' in args: |
40 goma_dir = os.environ.get('GOMA_DIR') | 44 goma_dir = os.environ.get('GOMA_DIR') |
41 goma_home_dir = os.path.join(os.getenv('HOME', ''), 'goma') | 45 goma_home_dir = os.path.join(os.getenv('HOME', ''), 'goma') |
42 if args.goma and goma_dir: | 46 if args.goma and goma_dir: |
43 additional_args['use_goma'] = True | 47 additional_args['use_goma'] = True |
44 additional_args['goma_dir'] = goma_dir | 48 additional_args['goma_dir'] = goma_dir |
45 elif args.goma and os.path.exists(goma_home_dir): | 49 elif args.goma and os.path.exists(goma_home_dir): |
46 additional_args['use_goma'] = True | 50 additional_args['use_goma'] = True |
47 additional_args['goma_dir'] = goma_home_dir | 51 additional_args['goma_dir'] = goma_home_dir |
48 else: | 52 else: |
49 additional_args['use_goma'] = False | 53 additional_args['use_goma'] = False |
50 additional_args['goma_dir'] = None | 54 additional_args['goma_dir'] = None |
51 | 55 |
52 if 'with_dart' in args: | 56 if 'with_dart' in args: |
53 additional_args['with_dart'] = args.with_dart | 57 additional_args['with_dart'] = args.with_dart |
54 | 58 |
55 if 'nacl' in args: | 59 additional_args['use_nacl'] = args.nacl |
56 additional_args['use_nacl'] = args.nacl | |
57 | 60 |
58 if 'dry_run' in args: | 61 if 'dry_run' in args: |
59 additional_args['dry_run'] = args.dry_run | 62 additional_args['dry_run'] = args.dry_run |
60 | 63 |
61 if 'builder_name' in args: | 64 if 'builder_name' in args: |
62 additional_args['builder_name'] = args.builder_name | 65 additional_args['builder_name'] = args.builder_name |
63 if 'build_number' in args: | 66 if 'build_number' in args: |
64 additional_args['build_number'] = args.build_number | 67 additional_args['build_number'] = args.build_number |
65 if 'master_name' in args: | 68 if 'master_name' in args: |
66 additional_args['master_name'] = args.master_name | 69 additional_args['master_name'] = args.master_name |
67 if 'test_results_server' in args: | 70 if 'test_results_server' in args: |
68 additional_args['test_results_server'] = args.test_results_server | 71 additional_args['test_results_server'] = args.test_results_server |
69 | 72 |
70 return Config(target_os=target_os, is_debug=args.debug, **additional_args) | 73 return Config(target_os=target_os, target_arch=target_arch, |
| 74 is_debug=args.debug, **additional_args) |
71 | 75 |
72 | 76 |
73 def _get_out_dir(config): | 77 def _get_out_dir(config): |
74 paths = Paths(config) | 78 paths = Paths(config) |
75 return paths.SrcRelPath(paths.build_dir) | 79 return paths.SrcRelPath(paths.build_dir) |
76 | 80 |
77 | 81 |
78 def sync(config): | 82 def sync(config): |
79 # pylint: disable=W0613 | 83 # pylint: disable=W0613 |
80 return subprocess.call(['gclient', 'sync']) | 84 return subprocess.call(['gclient', 'sync']) |
(...skipping 19 matching lines...) Expand all Loading... |
100 else: | 104 else: |
101 gn_args.append('use_goma=false') | 105 gn_args.append('use_goma=false') |
102 | 106 |
103 if config.values['with_dart']: | 107 if config.values['with_dart']: |
104 gn_args.append('mojo_use_dart=true') | 108 gn_args.append('mojo_use_dart=true') |
105 | 109 |
106 if config.values['use_nacl']: | 110 if config.values['use_nacl']: |
107 gn_args.append('mojo_use_nacl=true') | 111 gn_args.append('mojo_use_nacl=true') |
108 | 112 |
109 if config.target_os == Config.OS_ANDROID: | 113 if config.target_os == Config.OS_ANDROID: |
110 gn_args.append(r'''os=\"android\" cpu_arch=\"arm\"''') | 114 gn_args.append(r'''os=\"android\"''') |
111 elif config.target_os == Config.OS_CHROMEOS: | 115 elif config.target_os == Config.OS_CHROMEOS: |
112 gn_args.append(r'''os=\"chromeos\" ui_base_build_ime=false | 116 gn_args.append(r'''os=\"chromeos\" ui_base_build_ime=false |
113 use_system_harfbuzz=false''') | 117 use_system_harfbuzz=false''') |
114 | 118 |
| 119 gn_args.append(r'''cpu_arch=\"%s\"''' % config.target_arch) |
| 120 |
115 out_dir = _get_out_dir(config) | 121 out_dir = _get_out_dir(config) |
116 command.append(out_dir) | 122 command.append(out_dir) |
117 command.append('--args="%s"' % ' '.join(gn_args)) | 123 command.append('--args="%s"' % ' '.join(gn_args)) |
118 | 124 |
119 print 'Running %s ...' % ' '.join(command) | 125 print 'Running %s ...' % ' '.join(command) |
120 return subprocess.call(' '.join(command), shell=True) | 126 return subprocess.call(' '.join(command), shell=True) |
121 | 127 |
122 | 128 |
123 def _get_gn_arg_value(out_dir, arg): | 129 def _get_gn_arg_value(out_dir, arg): |
124 args_file_path = os.path.join(out_dir, 'args.gn') | 130 args_file_path = os.path.join(out_dir, 'args.gn') |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 default=True, action='store_true') | 210 default=True, action='store_true') |
205 debug_group.add_argument('--release', help='Release build', default=False, | 211 debug_group.add_argument('--release', help='Release build', default=False, |
206 dest='debug', action='store_false') | 212 dest='debug', action='store_false') |
207 | 213 |
208 os_group = parent_parser.add_mutually_exclusive_group() | 214 os_group = parent_parser.add_mutually_exclusive_group() |
209 os_group.add_argument('--android', help='Build for Android', | 215 os_group.add_argument('--android', help='Build for Android', |
210 action='store_true') | 216 action='store_true') |
211 os_group.add_argument('--chromeos', help='Build for ChromeOS', | 217 os_group.add_argument('--chromeos', help='Build for ChromeOS', |
212 action='store_true') | 218 action='store_true') |
213 | 219 |
| 220 parent_parser.add_argument('--cpu-arch', |
| 221 help='CPU architecture to build for.', |
| 222 choices=['x64', 'x86', 'arm']) |
| 223 |
| 224 parent_parser.add_argument('--nacl', help='Add in NaCl', default=False, |
| 225 action='store_true') |
| 226 |
214 subparsers = parser.add_subparsers() | 227 subparsers = parser.add_subparsers() |
215 | 228 |
216 sync_parser = subparsers.add_parser('sync', parents=[parent_parser], | 229 sync_parser = subparsers.add_parser('sync', parents=[parent_parser], |
217 help='Sync using gclient (does not run gn).') | 230 help='Sync using gclient (does not run gn).') |
218 sync_parser.set_defaults(func=sync) | 231 sync_parser.set_defaults(func=sync) |
219 | 232 |
220 gn_parser = subparsers.add_parser('gn', parents=[parent_parser], | 233 gn_parser = subparsers.add_parser('gn', parents=[parent_parser], |
221 help='Run gn for mojo (does not sync).') | 234 help='Run gn for mojo (does not sync).') |
222 gn_parser.set_defaults(func=gn) | 235 gn_parser.set_defaults(func=gn) |
223 gn_parser.add_argument('--with-dart', help='Configure the Dart bindings', | 236 gn_parser.add_argument('--with-dart', help='Configure the Dart bindings', |
224 action='store_true') | 237 action='store_true') |
225 gn_parser.add_argument('--nacl', help='Add in NaCl', action='store_true') | |
226 clang_group = gn_parser.add_mutually_exclusive_group() | 238 clang_group = gn_parser.add_mutually_exclusive_group() |
227 clang_group.add_argument('--clang', help='Use Clang (default)', default=None, | 239 clang_group.add_argument('--clang', help='Use Clang (default)', default=None, |
228 action='store_true') | 240 action='store_true') |
229 clang_group.add_argument('--gcc', help='Use GCC', | 241 clang_group.add_argument('--gcc', help='Use GCC', |
230 dest='clang', action='store_false') | 242 dest='clang', action='store_false') |
231 goma_group = gn_parser.add_mutually_exclusive_group() | 243 goma_group = gn_parser.add_mutually_exclusive_group() |
232 goma_group.add_argument('--goma', | 244 goma_group.add_argument('--goma', |
233 help='Use Goma (if $GOMA_DIR is set or $HOME/goma ' | 245 help='Use Goma (if $GOMA_DIR is set or $HOME/goma ' |
234 'exists; default)', | 246 'exists; default)', |
235 default=True, | 247 default=True, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 help='Run Dart unit tests (does not build).') | 283 help='Run Dart unit tests (does not build).') |
272 darttest_parser.set_defaults(func=darttest) | 284 darttest_parser.set_defaults(func=darttest) |
273 | 285 |
274 args = parser.parse_args() | 286 args = parser.parse_args() |
275 config = _args_to_config(args) | 287 config = _args_to_config(args) |
276 return args.func(config) | 288 return args.func(config) |
277 | 289 |
278 | 290 |
279 if __name__ == '__main__': | 291 if __name__ == '__main__': |
280 sys.exit(main()) | 292 sys.exit(main()) |
OLD | NEW |