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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 HostCpuForArch(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 TargetCpuForArch(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 |
143 host_os = HostOsForGn(HOST_OS) | 139 host_os = HostOsForGn(HOST_OS) |
144 if target_os == 'host': | 140 if target_os == 'host': |
145 gn_args['target_os'] = host_os | 141 gn_args['target_os'] = host_os |
146 else: | 142 else: |
147 gn_args['target_os'] = target_os | 143 gn_args['target_os'] = target_os |
148 | 144 |
149 if arch.startswith('mips'): | |
150 bold = '\033[1m' | |
151 reset = '\033[0m' | |
152 print(bold + "Warning: MIPS architectures are unlikely to be supported in " | |
153 "upcoming releases. Please consider using another architecture " | |
154 "and/or file an issue explaining your specific use of and need for " | |
155 "MIPS support." + reset) | |
156 | |
157 gn_args['dart_target_arch'] = arch | 145 gn_args['dart_target_arch'] = arch |
158 gn_args['target_cpu'] = TargetCpuForArch(arch, target_os) | 146 gn_args['target_cpu'] = TargetCpuForArch(arch, target_os) |
159 gn_args['host_cpu'] = HostCpuForArch(arch) | 147 gn_args['host_cpu'] = HostCpuForArch(arch) |
160 crossbuild = gn_args['target_cpu'] != gn_args['host_cpu'] | 148 crossbuild = gn_args['target_cpu'] != gn_args['host_cpu'] |
161 | 149 |
162 # See: runtime/observatory/BUILD.gn. | 150 # See: runtime/observatory/BUILD.gn. |
163 # This allows the standalone build of the observatory to fall back on | 151 # This allows the standalone build of the observatory to fall back on |
164 # dart_bootstrap if the prebuilt SDK doesn't work. | 152 # dart_bootstrap if the prebuilt SDK doesn't work. |
165 gn_args['dart_host_pub_exe'] = "" | 153 gn_args['dart_host_pub_exe'] = "" |
166 | 154 |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 args.os = 'host,android' | 253 args.os = 'host,android' |
266 args.mode = args.mode.split(',') | 254 args.mode = args.mode.split(',') |
267 args.arch = args.arch.split(',') | 255 args.arch = args.arch.split(',') |
268 args.os = args.os.split(',') | 256 args.os = args.os.split(',') |
269 for mode in args.mode: | 257 for mode in args.mode: |
270 if not mode in ['debug', 'release', 'product']: | 258 if not mode in ['debug', 'release', 'product']: |
271 print "Unknown mode %s" % mode | 259 print "Unknown mode %s" % mode |
272 return False | 260 return False |
273 for arch in args.arch: | 261 for arch in args.arch: |
274 archs = ['ia32', 'x64', 'simarm', 'arm', 'simarmv6', 'armv6', | 262 archs = ['ia32', 'x64', 'simarm', 'arm', 'simarmv6', 'armv6', |
275 'simarmv5te', 'armv5te', 'simmips', 'mips', 'simarm64', 'arm64', | 263 'simarmv5te', 'armv5te', 'simarm64', 'arm64', |
276 'simdbc', 'simdbc64', 'armsimdbc', 'armsimdbc64'] | 264 'simdbc', 'simdbc64', 'armsimdbc', 'armsimdbc64'] |
277 if not arch in archs: | 265 if not arch in archs: |
278 print "Unknown arch %s" % arch | 266 print "Unknown arch %s" % arch |
279 return False | 267 return False |
280 oses = [ProcessOsOption(os_name) for os_name in args.os] | 268 oses = [ProcessOsOption(os_name) for os_name in args.os] |
281 for os_name in oses: | 269 for os_name in oses: |
282 if not os_name in ['android', 'freebsd', 'linux', 'macos', 'win32']: | 270 if not os_name in ['android', 'freebsd', 'linux', 'macos', 'win32']: |
283 print "Unknown os %s" % os_name | 271 print "Unknown os %s" % os_name |
284 return False | 272 return False |
285 if os_name != HOST_OS: | 273 if os_name != HOST_OS: |
286 if os_name != 'android': | 274 if os_name != 'android': |
287 print "Unsupported target os %s" % os_name | 275 print "Unsupported target os %s" % os_name |
288 return False | 276 return False |
289 if not HOST_OS in ['linux', 'macos']: | 277 if not HOST_OS in ['linux', 'macos']: |
290 print ("Cross-compilation to %s is not supported on host os %s." | 278 print ("Cross-compilation to %s is not supported on host os %s." |
291 % (os_name, HOST_OS)) | 279 % (os_name, HOST_OS)) |
292 return False | 280 return False |
293 if not arch in ['ia32', 'x64', 'arm', 'armv6', 'armv5te', 'arm64', 'mips', | 281 if not arch in ['ia32', 'x64', 'arm', 'armv6', 'armv5te', 'arm64', |
294 'simdbc', 'simdbc64']: | 282 'simdbc', 'simdbc64']: |
295 print ("Cross-compilation to %s is not supported for architecture %s." | 283 print ("Cross-compilation to %s is not supported for architecture %s." |
296 % (os_name, arch)) | 284 % (os_name, arch)) |
297 return False | 285 return False |
298 return True | 286 return True |
299 | 287 |
300 | 288 |
301 def os_has_ide(host_os): | 289 def os_has_ide(host_os): |
302 return host_os.startswith('win') or host_os.startswith('mac') | 290 return host_os.startswith('win') or host_os.startswith('mac') |
303 | 291 |
(...skipping 12 matching lines...) Expand all Loading... |
316 parser = argparse.ArgumentParser( | 304 parser = argparse.ArgumentParser( |
317 description='A script to run `gn gen`.', | 305 description='A script to run `gn gen`.', |
318 formatter_class=argparse.ArgumentDefaultsHelpFormatter) | 306 formatter_class=argparse.ArgumentDefaultsHelpFormatter) |
319 common_group = parser.add_argument_group('Common Arguments') | 307 common_group = parser.add_argument_group('Common Arguments') |
320 other_group = parser.add_argument_group('Other Arguments') | 308 other_group = parser.add_argument_group('Other Arguments') |
321 | 309 |
322 common_group.add_argument('--arch', '-a', | 310 common_group.add_argument('--arch', '-a', |
323 type=str, | 311 type=str, |
324 help='Target architectures (comma-separated).', | 312 help='Target architectures (comma-separated).', |
325 metavar='[all,ia32,x64,simarm,arm,simarmv6,armv6,simarmv5te,armv5te,' | 313 metavar='[all,ia32,x64,simarm,arm,simarmv6,armv6,simarmv5te,armv5te,' |
326 'simmips,mips,simarm64,arm64,simdbc,armsimdbc]', | 314 'simarm64,arm64,simdbc,armsimdbc]', |
327 default='x64') | 315 default='x64') |
328 common_group.add_argument('--mode', '-m', | 316 common_group.add_argument('--mode', '-m', |
329 type=str, | 317 type=str, |
330 help='Build variants (comma-separated).', | 318 help='Build variants (comma-separated).', |
331 metavar='[all,debug,release,product]', | 319 metavar='[all,debug,release,product]', |
332 default='debug') | 320 default='debug') |
333 common_group.add_argument('--os', | 321 common_group.add_argument('--os', |
334 type=str, | 322 type=str, |
335 help='Target OSs (comma-separated).', | 323 help='Target OSs (comma-separated).', |
336 metavar='[all,host,android]', | 324 metavar='[all,host,android]', |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
479 return 1 | 467 return 1 |
480 | 468 |
481 endtime = time.time() | 469 endtime = time.time() |
482 if args.verbose: | 470 if args.verbose: |
483 print ("GN Time: %.3f seconds" % (endtime - starttime)) | 471 print ("GN Time: %.3f seconds" % (endtime - starttime)) |
484 return 0 | 472 return 0 |
485 | 473 |
486 | 474 |
487 if __name__ == '__main__': | 475 if __name__ == '__main__': |
488 sys.exit(Main(sys.argv)) | 476 sys.exit(Main(sys.argv)) |
OLD | NEW |