OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2016 The Dart project authors. All rights reserved. | 2 # Copyright 2016 The Dart project 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 import argparse | 6 import argparse |
7 import multiprocessing | 7 import multiprocessing |
8 import os | 8 import os |
9 import shutil | 9 import shutil |
10 import subprocess | 10 import subprocess |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 def ToCommandLine(gn_args): | 67 def ToCommandLine(gn_args): |
68 def merge(key, value): | 68 def merge(key, value): |
69 if type(value) is bool: | 69 if type(value) is bool: |
70 return '%s=%s' % (key, 'true' if value else 'false') | 70 return '%s=%s' % (key, 'true' if value else 'false') |
71 elif type(value) is int: | 71 elif type(value) is int: |
72 return '%s=%d' % (key, value) | 72 return '%s=%d' % (key, value) |
73 return '%s="%s"' % (key, value) | 73 return '%s="%s"' % (key, value) |
74 return [merge(x, y) for x, y in gn_args.iteritems()] | 74 return [merge(x, y) for x, y in gn_args.iteritems()] |
75 | 75 |
76 | 76 |
77 def HostCpuForArch(arch): | 77 def host_cpu_for_arch(arch): |
78 if arch in ['ia32', 'arm', 'armv6', 'armv5te', 'mips', | 78 if arch in ['ia32', 'arm', 'armv6', 'armv5te', |
79 'simarm', 'simarmv6', 'simarmv5te', 'simmips', 'simdbc', | 79 'simarm', 'simarmv6', 'simarmv5te', 'simdbc', |
80 'armsimdbc']: | 80 'armsimdbc']: |
81 return 'x86' | 81 return 'x86' |
82 if arch in ['x64', 'arm64', 'simarm64', 'simdbc64', 'armsimdbc64']: | 82 if arch in ['x64', 'arm64', 'simarm64', 'simdbc64', 'armsimdbc64']: |
83 return 'x64' | 83 return 'x64' |
84 | 84 |
85 | 85 |
86 def TargetCpuForArch(arch, target_os): | 86 def target_cpu_for_arch(arch, target_os): |
87 if arch in ['ia32', 'simarm', 'simarmv6', 'simarmv5te', 'simmips']: | 87 if arch in ['ia32', 'simarm', 'simarmv6', 'simarmv5te']: |
88 return 'x86' | 88 return 'x86' |
89 if arch in ['simarm64']: | 89 if arch in ['simarm64']: |
90 return 'x64' | 90 return 'x64' |
91 if arch == 'mips': | |
92 return 'mipsel' | |
93 if arch == 'simdbc': | 91 if arch == 'simdbc': |
94 return 'arm' if target_os == 'android' else 'x86' | 92 return 'arm' if target_os == 'android' else 'x86' |
95 if arch == 'simdbc64': | 93 if arch == 'simdbc64': |
96 return 'arm64' if target_os == 'android' else 'x64' | 94 return 'arm64' if target_os == 'android' else 'x64' |
97 if arch == 'armsimdbc': | 95 if arch == 'armsimdbc': |
98 return 'arm' | 96 return 'arm' |
99 if arch == 'armsimdbc64': | 97 if arch == 'armsimdbc64': |
100 return 'arm64' | 98 return 'arm64' |
101 return arch | 99 return arch |
102 | 100 |
(...skipping 17 matching lines...) Expand all Loading... |
120 | 118 |
121 | 119 |
122 def UseSanitizer(args): | 120 def UseSanitizer(args): |
123 return args.asan or args.msan or args.tsan | 121 return args.asan or args.msan or args.tsan |
124 | 122 |
125 | 123 |
126 def DontUseClang(args, target_os, host_cpu, target_cpu): | 124 def DontUseClang(args, target_os, host_cpu, target_cpu): |
127 # We don't have clang on Windows. | 125 # We don't have clang on Windows. |
128 return (target_os == 'win' | 126 return (target_os == 'win' |
129 # TODO(zra): Experiment with using clang for the arm cross-builds. | 127 # TODO(zra): Experiment with using clang for the arm cross-builds. |
130 or (target_os == 'linux' | 128 or (target_os == 'linux' and target_cpu.startswith('arm')) |
131 and (target_cpu.startswith('arm') or | |
132 target_cpu.startswith('mips')) | |
133 # TODO(zra): Only use clang when a sanitizer build is specified until | 129 # TODO(zra): Only use clang when a sanitizer build is specified until |
134 # clang bugs in tcmalloc inline assembly for ia32 are fixed. | 130 # clang bugs in tcmalloc inline assembly for ia32 are fixed. |
135 or (target_os == 'linux' | 131 or (target_os == 'linux' |
136 and host_cpu == 'x86' | 132 and host_cpu == 'x86' |
137 and not UseSanitizer(args)))) | 133 and not UseSanitizer(args)))) |
138 | 134 |
139 | 135 |
140 def ToGnArgs(args, mode, arch, target_os): | 136 def ToGnArgs(args, mode, arch, target_os): |
141 gn_args = {} | 137 gn_args = {} |
142 | 138 |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 args.os = 'host,android' | 261 args.os = 'host,android' |
266 args.mode = args.mode.split(',') | 262 args.mode = args.mode.split(',') |
267 args.arch = args.arch.split(',') | 263 args.arch = args.arch.split(',') |
268 args.os = args.os.split(',') | 264 args.os = args.os.split(',') |
269 for mode in args.mode: | 265 for mode in args.mode: |
270 if not mode in ['debug', 'release', 'product']: | 266 if not mode in ['debug', 'release', 'product']: |
271 print "Unknown mode %s" % mode | 267 print "Unknown mode %s" % mode |
272 return False | 268 return False |
273 for arch in args.arch: | 269 for arch in args.arch: |
274 archs = ['ia32', 'x64', 'simarm', 'arm', 'simarmv6', 'armv6', | 270 archs = ['ia32', 'x64', 'simarm', 'arm', 'simarmv6', 'armv6', |
275 'simarmv5te', 'armv5te', 'simmips', 'mips', 'simarm64', 'arm64', | 271 'simarmv5te', 'armv5te', 'simarm64', 'arm64', |
276 'simdbc', 'simdbc64', 'armsimdbc', 'armsimdbc64'] | 272 'simdbc', 'simdbc64', 'armsimdbc', 'armsimdbc64'] |
277 if not arch in archs: | 273 if not arch in archs: |
278 print "Unknown arch %s" % arch | 274 print "Unknown arch %s" % arch |
279 return False | 275 return False |
280 oses = [ProcessOsOption(os_name) for os_name in args.os] | 276 oses = [ProcessOsOption(os_name) for os_name in args.os] |
281 for os_name in oses: | 277 for os_name in oses: |
282 if not os_name in ['android', 'freebsd', 'linux', 'macos', 'win32']: | 278 if not os_name in ['android', 'freebsd', 'linux', 'macos', 'win32']: |
283 print "Unknown os %s" % os_name | 279 print "Unknown os %s" % os_name |
284 return False | 280 return False |
285 if os_name != HOST_OS: | 281 if os_name != HOST_OS: |
286 if os_name != 'android': | 282 if os_name != 'android': |
287 print "Unsupported target os %s" % os_name | 283 print "Unsupported target os %s" % os_name |
288 return False | 284 return False |
289 if not HOST_OS in ['linux', 'macos']: | 285 if not HOST_OS in ['linux', 'macos']: |
290 print ("Cross-compilation to %s is not supported on host os %s." | 286 print ("Cross-compilation to %s is not supported on host os %s." |
291 % (os_name, HOST_OS)) | 287 % (os_name, HOST_OS)) |
292 return False | 288 return False |
293 if not arch in ['ia32', 'x64', 'arm', 'armv6', 'armv5te', 'arm64', 'mips', | 289 if not arch in ['ia32', 'x64', 'arm', 'armv6', 'armv5te', 'arm64', |
294 'simdbc', 'simdbc64']: | 290 'simdbc', 'simdbc64']: |
295 print ("Cross-compilation to %s is not supported for architecture %s." | 291 print ("Cross-compilation to %s is not supported for architecture %s." |
296 % (os_name, arch)) | 292 % (os_name, arch)) |
297 return False | 293 return False |
298 return True | 294 return True |
299 | 295 |
300 | 296 |
301 def os_has_ide(host_os): | 297 def os_has_ide(host_os): |
302 return host_os.startswith('win') or host_os.startswith('mac') | 298 return host_os.startswith('win') or host_os.startswith('mac') |
303 | 299 |
(...skipping 12 matching lines...) Expand all Loading... |
316 parser = argparse.ArgumentParser( | 312 parser = argparse.ArgumentParser( |
317 description='A script to run `gn gen`.', | 313 description='A script to run `gn gen`.', |
318 formatter_class=argparse.ArgumentDefaultsHelpFormatter) | 314 formatter_class=argparse.ArgumentDefaultsHelpFormatter) |
319 common_group = parser.add_argument_group('Common Arguments') | 315 common_group = parser.add_argument_group('Common Arguments') |
320 other_group = parser.add_argument_group('Other Arguments') | 316 other_group = parser.add_argument_group('Other Arguments') |
321 | 317 |
322 common_group.add_argument('--arch', '-a', | 318 common_group.add_argument('--arch', '-a', |
323 type=str, | 319 type=str, |
324 help='Target architectures (comma-separated).', | 320 help='Target architectures (comma-separated).', |
325 metavar='[all,ia32,x64,simarm,arm,simarmv6,armv6,simarmv5te,armv5te,' | 321 metavar='[all,ia32,x64,simarm,arm,simarmv6,armv6,simarmv5te,armv5te,' |
326 'simmips,mips,simarm64,arm64,simdbc,armsimdbc]', | 322 'simarm64,arm64,simdbc,armsimdbc]', |
327 default='x64') | 323 default='x64') |
328 common_group.add_argument('--mode', '-m', | 324 common_group.add_argument('--mode', '-m', |
329 type=str, | 325 type=str, |
330 help='Build variants (comma-separated).', | 326 help='Build variants (comma-separated).', |
331 metavar='[all,debug,release,product]', | 327 metavar='[all,debug,release,product]', |
332 default='debug') | 328 default='debug') |
333 common_group.add_argument('--os', | 329 common_group.add_argument('--os', |
334 type=str, | 330 type=str, |
335 help='Target OSs (comma-separated).', | 331 help='Target OSs (comma-separated).', |
336 metavar='[all,host,android]', | 332 metavar='[all,host,android]', |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
473 return 1 | 469 return 1 |
474 | 470 |
475 endtime = time.time() | 471 endtime = time.time() |
476 if args.verbose: | 472 if args.verbose: |
477 print ("GN Time: %.3f seconds" % (endtime - starttime)) | 473 print ("GN Time: %.3f seconds" % (endtime - starttime)) |
478 return 0 | 474 return 0 |
479 | 475 |
480 | 476 |
481 if __name__ == '__main__': | 477 if __name__ == '__main__': |
482 sys.exit(Main(sys.argv)) | 478 sys.exit(Main(sys.argv)) |
OLD | NEW |