OLD | NEW |
---|---|
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # | 2 # |
3 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 3 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
4 # for details. All rights reserved. Use of this source code is governed by a | 4 # for details. All rights reserved. Use of this source code is governed by a |
5 # BSD-style license that can be found in the LICENSE file. | 5 # BSD-style license that can be found in the LICENSE file. |
6 | 6 |
7 """Script to create snapshot bin file.""" | 7 """Script to create snapshot bin file.""" |
8 | 8 |
9 import getopt | 9 import getopt |
10 import optparse | 10 import optparse |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
52 return False | 52 return False |
53 if not options.output_bin: | 53 if not options.output_bin: |
54 sys.stderr.write('--output_bin not specified\n') | 54 sys.stderr.write('--output_bin not specified\n') |
55 return False | 55 return False |
56 if options.abi and not options.target_os == 'android': | 56 if options.abi and not options.target_os == 'android': |
57 sys.stderr.write('--abi requires --target_os android\n') | 57 sys.stderr.write('--abi requires --target_os android\n') |
58 return False | 58 return False |
59 return True | 59 return True |
60 | 60 |
61 | 61 |
62 def RunAdb(device, command): | |
Søren Gjesse
2013/05/29 09:20:42
Nice!
| |
63 """Run a raw adb command.""" | |
64 return utils.RunCommand(["adb", "-s", device] + command) | |
65 | |
66 | |
67 def RunAdbShell(device, command): | |
68 RunAdb(device, ['shell'] + command) | |
69 | |
70 | |
71 def RunOnAndroid(options): | |
72 outputBin = options.output_bin | |
73 | |
74 android_workspace = os.getenv("ANDROID_DART", "/data/local/dart") | |
75 android_outputBin = join(android_workspace, basename(outputBin)) | |
76 | |
77 executable = options.executable | |
78 android_executable = join(android_workspace, basename(executable)) | |
79 | |
80 filesToPush = [] # (src, dest) | |
81 filesToPull = [] # (src, dest) | |
82 | |
83 # Setup arguments to the snapshot generator binary. | |
84 script_args = [android_executable] | |
85 | |
86 # First setup the snapshot output filename. | |
87 filesToPull.append((android_outputBin, outputBin)) | |
88 script_args.append(''.join([ "--snapshot=", android_outputBin])) | |
89 | |
90 # We don't know what source files are needed to fully satisfy a dart script, | |
91 # so we can't support the general case of url mapping or script inclusion. | |
92 if options.url_mapping: | |
93 raise Exception("--url_mapping is not supported when building for Android") | |
94 | |
95 if options.script: | |
96 raise Exception("--script is not supported when building for Android") | |
97 | |
98 filesToPush.append((executable, android_executable)) | |
99 | |
100 abi = options.abi or 'x86' | |
101 # We know we're run in the runtime directory, and we know the relative path | |
102 # to the tools we want to execute: | |
103 command = ["tools/android_finder.py", "--bootstrap", "--abi", abi] | |
104 if VERBOSE: | |
105 command += ['--verbose'] | |
106 device = utils.RunCommand(command, errStream=sys.stderr) | |
107 | |
108 if device == None: | |
109 raise Exception("Could not find Android device for abi %s" % abi) | |
110 | |
111 device = device.strip() | |
112 | |
113 if VERBOSE: | |
114 sys.write.stderr('Using Android device %s for abi %s' % (device, abi)) | |
115 | |
116 RunAdbShell(device, ["mkdir", android_workspace]) | |
117 | |
118 try: | |
119 if VERBOSE: | |
120 sys.write.stderr('pushing files to %s' % device) | |
121 for src, dest in filesToPush: | |
122 RunAdb(device, ["push", src, dest]) | |
123 if VERBOSE: | |
124 sys.write.stderr('running snapshot generator') | |
125 RunAdbShell(device, script_args) | |
126 if VERBOSE: | |
127 sys.write.stderr('retrieving snapshot') | |
128 for src, dest in filesToPull: | |
129 RunAdb(device, ["pull", src, dest]) | |
130 finally: | |
131 if VERBOSE: | |
132 sys.write.stderr('cleaning intermediate files') | |
133 for src, dest in filesToPush: | |
134 RunAdbShell(device, ["rm", dest]) | |
135 for src, dest in filesToPull: | |
136 RunAdbShell(device, ["rm", src]) | |
137 | |
138 | |
139 def Main(): | 62 def Main(): |
140 # Parse options. | 63 # Parse options. |
141 parser = BuildOptions() | 64 parser = BuildOptions() |
142 (options, args) = parser.parse_args() | 65 (options, args) = parser.parse_args() |
143 if not ProcessOptions(options): | 66 if not ProcessOptions(options): |
144 parser.print_help() | 67 parser.print_help() |
145 return 1 | 68 return 1 |
146 | 69 |
147 # If there are additional arguments, report error and exit. | 70 # If there are additional arguments, report error and exit. |
148 if args: | 71 if args: |
149 parser.print_help() | 72 parser.print_help() |
150 return 1 | 73 return 1 |
151 | 74 |
152 # Setup arguments to the snapshot generator binary. | 75 # Setup arguments to the snapshot generator binary. |
153 script_args = ["--error_on_malformed_type"] | 76 script_args = ["--error_on_malformed_type"] |
154 | 77 |
155 # First setup the snapshot output filename. | 78 # First setup the snapshot output filename. |
156 script_args.append(''.join([ "--snapshot=", options.output_bin ])) | 79 script_args.append(''.join([ "--snapshot=", options.output_bin ])) |
157 | 80 |
158 # Next setup all url mapping options specified. | 81 # Next setup all url mapping options specified. |
159 for url_arg in options.url_mapping: | 82 for url_arg in options.url_mapping: |
160 url_mapping_argument = ''.join(["--url_mapping=", url_arg ]) | 83 url_mapping_argument = ''.join(["--url_mapping=", url_arg ]) |
161 script_args.append(url_mapping_argument) | 84 script_args.append(url_mapping_argument) |
162 | 85 |
163 # Finally append the script name if one is specified. | 86 # Finally append the script name if one is specified. |
164 if options.script: | 87 if options.script: |
165 script_args.append(options.script) | 88 script_args.append(options.script) |
166 | 89 |
167 # Construct command line to execute the snapshot generator binary and invoke. | 90 # Construct command line to execute the snapshot generator binary and invoke. |
168 if options.target_os == 'android': | 91 command = [ options.executable ] + script_args |
169 RunOnAndroid(options) | 92 try: |
170 else: | 93 utils.RunCommand(command, outStream=sys.stderr, errStream=sys.stderr, |
171 command = [ options.executable ] + script_args | 94 verbose=options.verbose, printErrorInfo=True) |
172 try: | 95 except Exception as e: |
173 utils.RunCommand(command, outStream=sys.stderr, errStream=sys.stderr, | 96 return -1 |
174 verbose=options.verbose, printErrorInfo=True) | |
175 except Exception as e: | |
176 return -1 | |
177 | 97 |
178 return 0 | 98 return 0 |
179 | 99 |
180 | 100 |
181 if __name__ == '__main__': | 101 if __name__ == '__main__': |
182 sys.exit(Main()) | 102 sys.exit(Main()) |
OLD | NEW |