OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library compiler_configuration; | 5 library compiler_configuration; |
6 | 6 |
7 import 'dart:io' show | 7 import 'dart:io' show Platform; |
8 Platform; | |
9 | 8 |
10 import 'runtime_configuration.dart' show | 9 import 'runtime_configuration.dart' show RuntimeConfiguration; |
11 RuntimeConfiguration; | |
12 | 10 |
13 import 'test_runner.dart' show | 11 import 'test_runner.dart' show Command, CommandBuilder, CompilationCommand; |
14 Command, | |
15 CommandBuilder, | |
16 CompilationCommand; | |
17 | 12 |
18 import 'test_suite.dart' show | 13 import 'test_suite.dart' show TestInformation, TestUtils; |
19 TestInformation, | |
20 TestUtils; | |
21 | 14 |
22 /// Grouping of a command with its expected result. | 15 /// Grouping of a command with its expected result. |
23 class CommandArtifact { | 16 class CommandArtifact { |
24 final List<Command> commands; | 17 final List<Command> commands; |
25 | 18 |
26 /// Expected result of running [command]. | 19 /// Expected result of running [command]. |
27 final String filename; | 20 final String filename; |
28 | 21 |
29 /// MIME type of [filename]. | 22 /// MIME type of [filename]. |
30 final String mimeType; | 23 final String mimeType; |
31 | 24 |
32 CommandArtifact(this.commands, this.filename, this.mimeType); | 25 CommandArtifact(this.commands, this.filename, this.mimeType); |
33 } | 26 } |
34 | 27 |
35 Uri nativeDirectoryToUri(String nativePath) { | 28 Uri nativeDirectoryToUri(String nativePath) { |
36 Uri uri = new Uri.file(nativePath); | 29 Uri uri = new Uri.file(nativePath); |
37 String path = uri.path; | 30 String path = uri.path; |
38 return (path == '' || path.endsWith('/')) | 31 return (path == '' || path.endsWith('/')) ? uri : Uri.parse('$uri/'); |
39 ? uri | |
40 : Uri.parse('$uri/'); | |
41 } | 32 } |
42 | 33 |
43 abstract class CompilerConfiguration { | 34 abstract class CompilerConfiguration { |
44 final bool isDebug; | 35 final bool isDebug; |
45 final bool isChecked; | 36 final bool isChecked; |
46 final bool isHostChecked; | 37 final bool isHostChecked; |
47 final bool useSdk; | 38 final bool useSdk; |
48 | 39 |
49 // TODO(ahe): Remove this constructor and move the switch to | 40 // TODO(ahe): Remove this constructor and move the switch to |
50 // test_options.dart. We probably want to store an instance of | 41 // test_options.dart. We probably want to store an instance of |
51 // [CompilerConfiguration] in [configuration] there. | 42 // [CompilerConfiguration] in [configuration] there. |
52 factory CompilerConfiguration(Map configuration) { | 43 factory CompilerConfiguration(Map configuration) { |
53 String compiler = configuration['compiler']; | 44 String compiler = configuration['compiler']; |
54 | 45 |
55 // TODO(ahe): Move these booleans into a struction configuration object | 46 // TODO(ahe): Move these booleans into a struction configuration object |
56 // which can eventually completely replace the Map-based configuration | 47 // which can eventually completely replace the Map-based configuration |
57 // object. | 48 // object. |
58 bool isDebug = configuration['mode'] == 'debug'; | 49 bool isDebug = configuration['mode'] == 'debug'; |
59 bool isChecked = configuration['checked']; | 50 bool isChecked = configuration['checked']; |
60 bool isHostChecked = configuration['host_checked']; | 51 bool isHostChecked = configuration['host_checked']; |
61 bool useSdk = configuration['use_sdk']; | 52 bool useSdk = configuration['use_sdk']; |
62 bool isCsp = configuration['csp']; | 53 bool isCsp = configuration['csp']; |
63 bool useCps = configuration['cps_ir']; | 54 bool useCps = configuration['cps_ir']; |
64 | 55 |
65 switch (compiler) { | 56 switch (compiler) { |
66 case 'dart2analyzer': | 57 case 'dart2analyzer': |
67 return new AnalyzerCompilerConfiguration( | 58 return new AnalyzerCompilerConfiguration( |
68 isDebug: isDebug, isChecked: isChecked, | 59 isDebug: isDebug, |
69 isHostChecked: isHostChecked, useSdk: useSdk); | 60 isChecked: isChecked, |
| 61 isHostChecked: isHostChecked, |
| 62 useSdk: useSdk); |
70 case 'dart2js': | 63 case 'dart2js': |
71 return new Dart2jsCompilerConfiguration( | 64 return new Dart2jsCompilerConfiguration( |
72 isDebug: isDebug, isChecked: isChecked, | 65 isDebug: isDebug, |
73 isHostChecked: isHostChecked, useCps: useCps, useSdk: useSdk, | 66 isChecked: isChecked, |
74 isCsp: isCsp, extraDart2jsOptions: | 67 isHostChecked: isHostChecked, |
| 68 useCps: useCps, |
| 69 useSdk: useSdk, |
| 70 isCsp: isCsp, |
| 71 extraDart2jsOptions: |
75 TestUtils.getExtraOptions(configuration, 'dart2js_options')); | 72 TestUtils.getExtraOptions(configuration, 'dart2js_options')); |
76 case 'dart2app': | 73 case 'dart2app': |
77 return new Dart2AppSnapshotCompilerConfiguration( | 74 return new Dart2AppSnapshotCompilerConfiguration( |
78 isDebug: isDebug, isChecked: isChecked); | 75 isDebug: isDebug, isChecked: isChecked); |
79 case 'precompiler': | 76 case 'precompiler': |
80 return new PrecompilerCompilerConfiguration( | 77 return new PrecompilerCompilerConfiguration( |
81 isDebug: isDebug, isChecked: isChecked, | 78 isDebug: isDebug, |
| 79 isChecked: isChecked, |
82 arch: configuration['arch']); | 80 arch: configuration['arch']); |
83 case 'none': | 81 case 'none': |
84 return new NoneCompilerConfiguration( | 82 return new NoneCompilerConfiguration( |
85 isDebug: isDebug, isChecked: isChecked, | 83 isDebug: isDebug, |
86 isHostChecked: isHostChecked, useSdk: useSdk); | 84 isChecked: isChecked, |
| 85 isHostChecked: isHostChecked, |
| 86 useSdk: useSdk); |
87 default: | 87 default: |
88 throw "Unknown compiler '$compiler'"; | 88 throw "Unknown compiler '$compiler'"; |
89 } | 89 } |
90 } | 90 } |
91 | 91 |
92 CompilerConfiguration._subclass({ | 92 CompilerConfiguration._subclass( |
93 this.isDebug: false, | 93 {this.isDebug: false, |
94 this.isChecked: false, | 94 this.isChecked: false, |
95 this.isHostChecked: false, | 95 this.isHostChecked: false, |
96 this.useSdk: false}); | 96 this.useSdk: false}); |
97 | 97 |
98 /// Return a multiplier used to give tests longer time to run. | 98 /// Return a multiplier used to give tests longer time to run. |
99 // TODO(ahe): Convert to getter! | 99 // TODO(ahe): Convert to getter! |
100 int computeTimeoutMultiplier() { | 100 int computeTimeoutMultiplier() { |
101 return 1; | 101 return 1; |
102 } | 102 } |
103 | 103 |
(...skipping 15 matching lines...) Expand all Loading... |
119 CommandArtifact computeCompilationArtifact( | 119 CommandArtifact computeCompilationArtifact( |
120 String buildDir, | 120 String buildDir, |
121 String tempDir, | 121 String tempDir, |
122 CommandBuilder commandBuilder, | 122 CommandBuilder commandBuilder, |
123 List arguments, | 123 List arguments, |
124 Map<String, String> environmentOverrides) { | 124 Map<String, String> environmentOverrides) { |
125 return new CommandArtifact([], null, null); | 125 return new CommandArtifact([], null, null); |
126 } | 126 } |
127 | 127 |
128 List<String> computeCompilerArguments(vmOptions, sharedOptions, args) { | 128 List<String> computeCompilerArguments(vmOptions, sharedOptions, args) { |
129 return new List<String>() | 129 return new List<String>()..addAll(sharedOptions)..addAll(args); |
130 ..addAll(sharedOptions) | |
131 ..addAll(args); | |
132 } | 130 } |
133 | 131 |
134 List<String> computeRuntimeArguments( | 132 List<String> computeRuntimeArguments( |
135 RuntimeConfiguration runtimeConfiguration, | 133 RuntimeConfiguration runtimeConfiguration, |
136 String buildDir, | 134 String buildDir, |
137 TestInformation info, | 135 TestInformation info, |
138 List<String> vmOptions, | 136 List<String> vmOptions, |
139 List<String> sharedOptions, | 137 List<String> sharedOptions, |
140 List<String> originalArguments, | 138 List<String> originalArguments, |
141 CommandArtifact artifact) { | 139 CommandArtifact artifact) { |
142 return <String>[artifact.filename]; | 140 return <String>[artifact.filename]; |
143 } | 141 } |
144 } | 142 } |
145 | 143 |
146 /// The "none" compiler. | 144 /// The "none" compiler. |
147 class NoneCompilerConfiguration extends CompilerConfiguration { | 145 class NoneCompilerConfiguration extends CompilerConfiguration { |
148 | 146 NoneCompilerConfiguration( |
149 NoneCompilerConfiguration({ | 147 {bool isDebug, bool isChecked, bool isHostChecked, bool useSdk}) |
150 bool isDebug, | |
151 bool isChecked, | |
152 bool isHostChecked, | |
153 bool useSdk}) | |
154 : super._subclass( | 148 : super._subclass( |
155 isDebug: isDebug, isChecked: isChecked, | 149 isDebug: isDebug, |
156 isHostChecked: isHostChecked, useSdk: useSdk); | 150 isChecked: isChecked, |
| 151 isHostChecked: isHostChecked, |
| 152 useSdk: useSdk); |
157 | 153 |
158 bool get hasCompiler => false; | 154 bool get hasCompiler => false; |
159 | 155 |
160 List<String> computeRuntimeArguments( | 156 List<String> computeRuntimeArguments( |
161 RuntimeConfiguration runtimeConfiguration, | 157 RuntimeConfiguration runtimeConfiguration, |
162 String buildDir, | 158 String buildDir, |
163 TestInformation info, | 159 TestInformation info, |
164 List<String> vmOptions, | 160 List<String> vmOptions, |
165 List<String> sharedOptions, | 161 List<String> sharedOptions, |
166 List<String> originalArguments, | 162 List<String> originalArguments, |
167 CommandArtifact artifact) { | 163 CommandArtifact artifact) { |
168 List<String> args = []; | 164 List<String> args = []; |
169 if (isChecked) { | 165 if (isChecked) { |
170 args.add('--enable_asserts'); | 166 args.add('--enable_asserts'); |
171 args.add('--enable_type_checks'); | 167 args.add('--enable_type_checks'); |
172 } | 168 } |
173 return args | 169 return args |
174 ..addAll(vmOptions) | 170 ..addAll(vmOptions) |
175 ..addAll(sharedOptions) | 171 ..addAll(sharedOptions) |
176 ..addAll(originalArguments); | 172 ..addAll(originalArguments); |
177 } | 173 } |
178 } | 174 } |
179 | 175 |
180 /// Common configuration for dart2js-based tools, such as, dart2js | 176 /// Common configuration for dart2js-based tools, such as, dart2js |
181 class Dart2xCompilerConfiguration extends CompilerConfiguration { | 177 class Dart2xCompilerConfiguration extends CompilerConfiguration { |
182 final String moniker; | 178 final String moniker; |
183 static Map<String, List<Uri>> _bootstrapDependenciesCache = | 179 static Map<String, List<Uri>> _bootstrapDependenciesCache = |
184 new Map<String, List<Uri>>(); | 180 new Map<String, List<Uri>>(); |
185 | 181 |
186 Dart2xCompilerConfiguration( | 182 Dart2xCompilerConfiguration(this.moniker, |
187 this.moniker, | 183 {bool isDebug, bool isChecked, bool isHostChecked, bool useSdk}) |
188 {bool isDebug, | |
189 bool isChecked, | |
190 bool isHostChecked, | |
191 bool useSdk}) | |
192 : super._subclass( | 184 : super._subclass( |
193 isDebug: isDebug, isChecked: isChecked, | 185 isDebug: isDebug, |
194 isHostChecked: isHostChecked, useSdk: useSdk); | 186 isChecked: isChecked, |
| 187 isHostChecked: isHostChecked, |
| 188 useSdk: useSdk); |
195 | 189 |
196 String computeCompilerPath(String buildDir) { | 190 String computeCompilerPath(String buildDir) { |
197 var prefix = 'sdk/bin'; | 191 var prefix = 'sdk/bin'; |
198 String suffix = executableScriptSuffix; | 192 String suffix = executableScriptSuffix; |
199 if (isHostChecked) { | 193 if (isHostChecked) { |
200 // The script dart2js_developer is not included in the | 194 // The script dart2js_developer is not included in the |
201 // shipped SDK, that is the script is not installed in | 195 // shipped SDK, that is the script is not installed in |
202 // "$buildDir/dart-sdk/bin/" | 196 // "$buildDir/dart-sdk/bin/" |
203 return '$prefix/dart2js_developer$suffix'; | 197 return '$prefix/dart2js_developer$suffix'; |
204 } else { | 198 } else { |
205 if (useSdk) { | 199 if (useSdk) { |
206 prefix = '$buildDir/dart-sdk/bin'; | 200 prefix = '$buildDir/dart-sdk/bin'; |
207 } | 201 } |
208 return '$prefix/dart2js$suffix'; | 202 return '$prefix/dart2js$suffix'; |
209 } | 203 } |
210 } | 204 } |
211 | 205 |
212 CompilationCommand computeCompilationCommand( | 206 CompilationCommand computeCompilationCommand( |
213 String outputFileName, | 207 String outputFileName, |
214 String buildDir, | 208 String buildDir, |
215 CommandBuilder commandBuilder, | 209 CommandBuilder commandBuilder, |
216 List arguments, | 210 List arguments, |
217 Map<String, String> environmentOverrides) { | 211 Map<String, String> environmentOverrides) { |
218 arguments = new List.from(arguments); | 212 arguments = new List.from(arguments); |
219 arguments.add('--out=$outputFileName'); | 213 arguments.add('--out=$outputFileName'); |
220 | 214 |
221 return commandBuilder.getCompilationCommand( | 215 return commandBuilder.getCompilationCommand( |
222 moniker, outputFileName, !useSdk, | 216 moniker, |
| 217 outputFileName, |
| 218 !useSdk, |
223 bootstrapDependencies(buildDir), | 219 bootstrapDependencies(buildDir), |
224 computeCompilerPath(buildDir), | 220 computeCompilerPath(buildDir), |
225 arguments, environmentOverrides); | 221 arguments, |
| 222 environmentOverrides); |
226 } | 223 } |
227 | 224 |
228 List<Uri> bootstrapDependencies(String buildDir) { | 225 List<Uri> bootstrapDependencies(String buildDir) { |
229 if (!useSdk) return const <Uri>[]; | 226 if (!useSdk) return const <Uri>[]; |
230 return _bootstrapDependenciesCache.putIfAbsent(buildDir, () => | 227 return _bootstrapDependenciesCache.putIfAbsent( |
231 [Uri.base.resolveUri(nativeDirectoryToUri(buildDir)) | 228 buildDir, |
232 .resolve('dart-sdk/bin/snapshots/dart2js.dart.snapshot')]); | 229 () => [ |
| 230 Uri.base |
| 231 .resolveUri(nativeDirectoryToUri(buildDir)) |
| 232 .resolve('dart-sdk/bin/snapshots/dart2js.dart.snapshot') |
| 233 ]); |
233 } | 234 } |
234 } | 235 } |
235 | 236 |
236 /// Configuration for dart2js compiler. | 237 /// Configuration for dart2js compiler. |
237 class Dart2jsCompilerConfiguration extends Dart2xCompilerConfiguration { | 238 class Dart2jsCompilerConfiguration extends Dart2xCompilerConfiguration { |
238 final bool isCsp; | 239 final bool isCsp; |
239 final bool useCps; | 240 final bool useCps; |
240 final List<String> extraDart2jsOptions; | 241 final List<String> extraDart2jsOptions; |
241 // We cache the extended environment to save memory. | 242 // We cache the extended environment to save memory. |
242 static Map<String, String> cpsFlagCache; | 243 static Map<String, String> cpsFlagCache; |
243 static Map<String, String> environmentOverridesCacheObject; | 244 static Map<String, String> environmentOverridesCacheObject; |
244 | 245 |
245 Dart2jsCompilerConfiguration({ | 246 Dart2jsCompilerConfiguration( |
246 bool isDebug, | 247 {bool isDebug, |
247 bool isChecked, | 248 bool isChecked, |
248 bool isHostChecked, | 249 bool isHostChecked, |
249 bool useSdk, | 250 bool useSdk, |
250 bool this.useCps, | 251 bool this.useCps, |
251 bool this.isCsp, | 252 bool this.isCsp, |
252 this.extraDart2jsOptions}) | 253 this.extraDart2jsOptions}) |
253 : super( | 254 : super('dart2js', |
254 'dart2js', | 255 isDebug: isDebug, |
255 isDebug: isDebug, isChecked: isChecked, | 256 isChecked: isChecked, |
256 isHostChecked: isHostChecked, useSdk: useSdk); | 257 isHostChecked: isHostChecked, |
| 258 useSdk: useSdk); |
257 | 259 |
258 int computeTimeoutMultiplier() { | 260 int computeTimeoutMultiplier() { |
259 int multiplier = 1; | 261 int multiplier = 1; |
260 if (isDebug) multiplier *= 4; | 262 if (isDebug) multiplier *= 4; |
261 if (isChecked) multiplier *= 2; | 263 if (isChecked) multiplier *= 2; |
262 if (isHostChecked) multiplier *= 16; | 264 if (isHostChecked) multiplier *= 16; |
263 return multiplier; | 265 return multiplier; |
264 } | 266 } |
265 | 267 |
266 CommandArtifact computeCompilationArtifact( | 268 CommandArtifact computeCompilationArtifact( |
267 String buildDir, | 269 String buildDir, |
268 String tempDir, | 270 String tempDir, |
269 CommandBuilder commandBuilder, | 271 CommandBuilder commandBuilder, |
270 List arguments, | 272 List arguments, |
271 Map<String, String> environmentOverrides) { | 273 Map<String, String> environmentOverrides) { |
272 List compilerArguments = new List.from(arguments) | 274 List compilerArguments = new List.from(arguments) |
273 ..addAll(extraDart2jsOptions); | 275 ..addAll(extraDart2jsOptions); |
274 return new CommandArtifact( | 276 return new CommandArtifact(<Command>[ |
275 <Command>[ | 277 this.computeCompilationCommand('$tempDir/out.js', buildDir, |
276 this.computeCompilationCommand( | 278 CommandBuilder.instance, compilerArguments, environmentOverrides) |
277 '$tempDir/out.js', | 279 ], '$tempDir/out.js', 'application/javascript'); |
278 buildDir, | |
279 CommandBuilder.instance, | |
280 compilerArguments, | |
281 environmentOverrides)], | |
282 '$tempDir/out.js', | |
283 'application/javascript'); | |
284 } | 280 } |
285 | 281 |
286 List<String> computeRuntimeArguments( | 282 List<String> computeRuntimeArguments( |
287 RuntimeConfiguration runtimeConfiguration, | 283 RuntimeConfiguration runtimeConfiguration, |
288 String buildDir, | 284 String buildDir, |
289 TestInformation info, | 285 TestInformation info, |
290 List<String> vmOptions, | 286 List<String> vmOptions, |
291 List<String> sharedOptions, | 287 List<String> sharedOptions, |
292 List<String> originalArguments, | 288 List<String> originalArguments, |
293 CommandArtifact artifact) { | 289 CommandArtifact artifact) { |
294 Uri sdk = useSdk ? | 290 Uri sdk = useSdk |
295 nativeDirectoryToUri(buildDir).resolve('dart-sdk/') : | 291 ? nativeDirectoryToUri(buildDir).resolve('dart-sdk/') |
296 nativeDirectoryToUri(TestUtils.dartDir.toNativePath()).resolve('sdk/'); | 292 : nativeDirectoryToUri(TestUtils.dartDir.toNativePath()) |
297 Uri preambleDir = sdk.resolve( | 293 .resolve('sdk/'); |
298 'lib/_internal/js_runtime/lib/preambles/'); | 294 Uri preambleDir = sdk.resolve('lib/_internal/js_runtime/lib/preambles/'); |
299 return runtimeConfiguration.dart2jsPreambles(preambleDir) | 295 return runtimeConfiguration.dart2jsPreambles(preambleDir) |
300 ..add(artifact.filename); | 296 ..add(artifact.filename); |
301 } | 297 } |
302 } | 298 } |
303 | 299 |
304 | |
305 class PrecompilerCompilerConfiguration extends CompilerConfiguration { | 300 class PrecompilerCompilerConfiguration extends CompilerConfiguration { |
306 final String arch; | 301 final String arch; |
307 | 302 |
308 PrecompilerCompilerConfiguration({ | 303 PrecompilerCompilerConfiguration({bool isDebug, bool isChecked, String arch}) |
309 bool isDebug, | 304 : super._subclass(isDebug: isDebug, isChecked: isChecked), |
310 bool isChecked, | 305 arch = arch; |
311 String arch}) | |
312 : super._subclass(isDebug: isDebug, isChecked: isChecked), arch = arch; | |
313 | 306 |
314 int computeTimeoutMultiplier() { | 307 int computeTimeoutMultiplier() { |
315 int multiplier = 2; | 308 int multiplier = 2; |
316 if (isDebug) multiplier *= 4; | 309 if (isDebug) multiplier *= 4; |
317 if (isChecked) multiplier *= 2; | 310 if (isChecked) multiplier *= 2; |
318 return multiplier; | 311 return multiplier; |
319 } | 312 } |
320 | 313 |
321 CommandArtifact computeCompilationArtifact( | 314 CommandArtifact computeCompilationArtifact( |
322 String buildDir, | 315 String buildDir, |
323 String tempDir, | 316 String tempDir, |
324 CommandBuilder commandBuilder, | 317 CommandBuilder commandBuilder, |
325 List arguments, | 318 List arguments, |
326 Map<String, String> environmentOverrides) { | 319 Map<String, String> environmentOverrides) { |
327 return new CommandArtifact( | 320 return new CommandArtifact(<Command>[ |
328 <Command>[ | 321 this.computeCompilationCommand(tempDir, buildDir, CommandBuilder.instance, |
329 this.computeCompilationCommand( | 322 arguments, environmentOverrides), |
330 tempDir, | 323 this.computeAssembleCommand(tempDir, buildDir, CommandBuilder.instance, |
331 buildDir, | 324 arguments, environmentOverrides), |
332 CommandBuilder.instance, | 325 this.computeRemoveAssemblyCommand(tempDir, buildDir, |
333 arguments, | 326 CommandBuilder.instance, arguments, environmentOverrides) |
334 environmentOverrides), | 327 ], '$tempDir', 'application/dart-precompiled'); |
335 this.computeAssembleCommand( | |
336 tempDir, | |
337 buildDir, | |
338 CommandBuilder.instance, | |
339 arguments, | |
340 environmentOverrides), | |
341 this.computeRemoveAssemblyCommand( | |
342 tempDir, | |
343 buildDir, | |
344 CommandBuilder.instance, | |
345 arguments, | |
346 environmentOverrides)], | |
347 '$tempDir', | |
348 'application/dart-precompiled'); | |
349 } | 328 } |
350 | 329 |
351 CompilationCommand computeCompilationCommand( | 330 CompilationCommand computeCompilationCommand( |
352 String tempDir, | 331 String tempDir, |
353 String buildDir, | 332 String buildDir, |
354 CommandBuilder commandBuilder, | 333 CommandBuilder commandBuilder, |
355 List arguments, | 334 List arguments, |
356 Map<String, String> environmentOverrides) { | 335 Map<String, String> environmentOverrides) { |
357 var exec = "$buildDir/dart_bootstrap"; | 336 var exec = "$buildDir/dart_bootstrap"; |
358 var args = new List(); | 337 var args = new List(); |
359 args.add("--gen-precompiled-snapshot=$tempDir"); | 338 args.add("--gen-precompiled-snapshot=$tempDir"); |
360 args.addAll(arguments); | 339 args.addAll(arguments); |
361 | 340 |
362 return commandBuilder.getCompilationCommand( | 341 return commandBuilder.getCompilationCommand('precompiler', tempDir, !useSdk, |
363 'precompiler', tempDir, !useSdk, | 342 bootstrapDependencies(buildDir), exec, args, environmentOverrides); |
364 bootstrapDependencies(buildDir), | |
365 exec, args, environmentOverrides); | |
366 } | 343 } |
367 | 344 |
368 CompilationCommand computeAssembleCommand( | 345 CompilationCommand computeAssembleCommand( |
369 String tempDir, | 346 String tempDir, |
370 String buildDir, | 347 String buildDir, |
371 CommandBuilder commandBuilder, | 348 CommandBuilder commandBuilder, |
372 List arguments, | 349 List arguments, |
373 Map<String, String> environmentOverrides) { | 350 Map<String, String> environmentOverrides) { |
374 var cc, cc_flags, shared, libname; | 351 var cc, cc_flags, shared, libname; |
375 if (Platform.isLinux) { | 352 if (Platform.isLinux) { |
(...skipping 18 matching lines...) Expand all Loading... |
394 cc_flags = "-m32"; | 371 cc_flags = "-m32"; |
395 } else if (arch == 'arm') { | 372 } else if (arch == 'arm') { |
396 cc_flags = ""; | 373 cc_flags = ""; |
397 } else if (arch == 'mips') { | 374 } else if (arch == 'mips') { |
398 cc_flags = "-EL"; | 375 cc_flags = "-EL"; |
399 } else { | 376 } else { |
400 throw "Architecture not supported: $arch"; | 377 throw "Architecture not supported: $arch"; |
401 } | 378 } |
402 | 379 |
403 var exec = cc; | 380 var exec = cc; |
404 var args = [shared, | 381 var args = [ |
405 cc_flags, | 382 shared, |
406 '-o', | 383 cc_flags, |
407 '$tempDir/$libname', | 384 '-o', |
408 '$tempDir/precompiled.S']; | 385 '$tempDir/$libname', |
| 386 '$tempDir/precompiled.S' |
| 387 ]; |
409 | 388 |
410 return commandBuilder.getCompilationCommand( | 389 return commandBuilder.getCompilationCommand('assemble', tempDir, !useSdk, |
411 'assemble', tempDir, !useSdk, | 390 bootstrapDependencies(buildDir), exec, args, environmentOverrides); |
412 bootstrapDependencies(buildDir), | |
413 exec, args, environmentOverrides); | |
414 } | 391 } |
415 | 392 |
416 // This step reduces the amount of space needed to run the precompilation | 393 // This step reduces the amount of space needed to run the precompilation |
417 // tests by 60%. | 394 // tests by 60%. |
418 CompilationCommand computeRemoveAssemblyCommand( | 395 CompilationCommand computeRemoveAssemblyCommand( |
419 String tempDir, | 396 String tempDir, |
420 String buildDir, | 397 String buildDir, |
421 CommandBuilder commandBuilder, | 398 CommandBuilder commandBuilder, |
422 List arguments, | 399 List arguments, |
423 Map<String, String> environmentOverrides) { | 400 Map<String, String> environmentOverrides) { |
424 var exec = 'rm'; | 401 var exec = 'rm'; |
425 var args = ['$tempDir/precompiled.S']; | 402 var args = ['$tempDir/precompiled.S']; |
426 | 403 |
427 return commandBuilder.getCompilationCommand( | 404 return commandBuilder.getCompilationCommand( |
428 'remove_assembly', tempDir, !useSdk, | 405 'remove_assembly', |
| 406 tempDir, |
| 407 !useSdk, |
429 bootstrapDependencies(buildDir), | 408 bootstrapDependencies(buildDir), |
430 exec, args, environmentOverrides); | 409 exec, |
| 410 args, |
| 411 environmentOverrides); |
431 } | 412 } |
432 | 413 |
433 List<String> filterVmOptions(List<String> vmOptions) { | 414 List<String> filterVmOptions(List<String> vmOptions) { |
434 var filtered = new List.from(vmOptions); | 415 var filtered = new List.from(vmOptions); |
435 filtered.removeWhere( | 416 filtered.removeWhere( |
436 (option) => option.startsWith("--optimization-counter-threshold")); | 417 (option) => option.startsWith("--optimization-counter-threshold")); |
437 filtered.removeWhere( | 418 filtered.removeWhere( |
438 (option) => option.startsWith("--optimization_counter_threshold")); | 419 (option) => option.startsWith("--optimization_counter_threshold")); |
439 return filtered; | 420 return filtered; |
440 } | 421 } |
441 | 422 |
442 List<String> computeCompilerArguments(vmOptions, | 423 List<String> computeCompilerArguments( |
443 sharedOptions, | 424 vmOptions, sharedOptions, originalArguments) { |
444 originalArguments) { | |
445 List<String> args = []; | 425 List<String> args = []; |
446 if (isChecked) { | 426 if (isChecked) { |
447 args.add('--enable_asserts'); | 427 args.add('--enable_asserts'); |
448 args.add('--enable_type_checks'); | 428 args.add('--enable_type_checks'); |
449 } | 429 } |
450 return args | 430 return args |
451 ..addAll(filterVmOptions(vmOptions)) | 431 ..addAll(filterVmOptions(vmOptions)) |
452 ..addAll(sharedOptions) | 432 ..addAll(sharedOptions) |
453 ..addAll(originalArguments); | 433 ..addAll(originalArguments); |
454 } | 434 } |
455 | 435 |
456 List<String> computeRuntimeArguments( | 436 List<String> computeRuntimeArguments( |
457 RuntimeConfiguration runtimeConfiguration, | 437 RuntimeConfiguration runtimeConfiguration, |
458 String buildDir, | 438 String buildDir, |
459 TestInformation info, | 439 TestInformation info, |
460 List<String> vmOptions, | 440 List<String> vmOptions, |
461 List<String> sharedOptions, | 441 List<String> sharedOptions, |
462 List<String> originalArguments, | 442 List<String> originalArguments, |
463 CommandArtifact artifact) { | 443 CommandArtifact artifact) { |
464 List<String> args = []; | 444 List<String> args = []; |
465 if (isChecked) { | 445 if (isChecked) { |
466 args.add('--enable_asserts'); | 446 args.add('--enable_asserts'); |
467 args.add('--enable_type_checks'); | 447 args.add('--enable_type_checks'); |
468 } | 448 } |
469 return args | 449 return args |
470 ..addAll(vmOptions) | 450 ..addAll(vmOptions) |
471 ..addAll(sharedOptions) | 451 ..addAll(sharedOptions) |
472 ..addAll(originalArguments); | 452 ..addAll(originalArguments); |
473 } | 453 } |
474 } | 454 } |
475 | 455 |
476 | |
477 class Dart2AppSnapshotCompilerConfiguration extends CompilerConfiguration { | 456 class Dart2AppSnapshotCompilerConfiguration extends CompilerConfiguration { |
478 Dart2AppSnapshotCompilerConfiguration({ | 457 Dart2AppSnapshotCompilerConfiguration({bool isDebug, bool isChecked}) |
479 bool isDebug, | |
480 bool isChecked}) | |
481 : super._subclass(isDebug: isDebug, isChecked: isChecked); | 458 : super._subclass(isDebug: isDebug, isChecked: isChecked); |
482 | 459 |
483 int computeTimeoutMultiplier() { | 460 int computeTimeoutMultiplier() { |
484 int multiplier = 2; | 461 int multiplier = 2; |
485 if (isDebug) multiplier *= 4; | 462 if (isDebug) multiplier *= 4; |
486 if (isChecked) multiplier *= 2; | 463 if (isChecked) multiplier *= 2; |
487 return multiplier; | 464 return multiplier; |
488 } | 465 } |
489 | 466 |
490 CommandArtifact computeCompilationArtifact( | 467 CommandArtifact computeCompilationArtifact( |
491 String buildDir, | 468 String buildDir, |
492 String tempDir, | 469 String tempDir, |
493 CommandBuilder commandBuilder, | 470 CommandBuilder commandBuilder, |
494 List arguments, | 471 List arguments, |
495 Map<String, String> environmentOverrides) { | 472 Map<String, String> environmentOverrides) { |
496 String outputName = computeOutputName(tempDir); | 473 String outputName = computeOutputName(tempDir); |
497 return new CommandArtifact( | 474 return new CommandArtifact(<Command>[ |
498 <Command>[ | 475 this.computeCompilationCommand(outputName, buildDir, |
499 this.computeCompilationCommand( | 476 CommandBuilder.instance, arguments, environmentOverrides) |
500 outputName, | 477 ], outputName, 'application/dart-snapshot'); |
501 buildDir, | |
502 CommandBuilder.instance, | |
503 arguments, | |
504 environmentOverrides)], | |
505 outputName, | |
506 'application/dart-snapshot'); | |
507 } | 478 } |
508 | 479 |
509 String computeOutputName(String tempDir) { | 480 String computeOutputName(String tempDir) { |
510 var randName = TestUtils.getRandomNumber().toString(); | 481 var randName = TestUtils.getRandomNumber().toString(); |
511 return '$tempDir/test.$randName'; | 482 return '$tempDir/test.$randName'; |
512 } | 483 } |
513 | 484 |
514 CompilationCommand computeCompilationCommand( | 485 CompilationCommand computeCompilationCommand( |
515 String outputName, | 486 String outputName, |
516 String buildDir, | 487 String buildDir, |
517 CommandBuilder commandBuilder, | 488 CommandBuilder commandBuilder, |
518 List arguments, | 489 List arguments, |
519 Map<String, String> environmentOverrides) { | 490 Map<String, String> environmentOverrides) { |
520 var exec = "$buildDir/dart_bootstrap"; | 491 var exec = "$buildDir/dart_bootstrap"; |
521 var args = new List(); | 492 var args = new List(); |
522 args.add("--full-snapshot-after-run=$outputName"); | 493 args.add("--full-snapshot-after-run=$outputName"); |
523 args.addAll(arguments); | 494 args.addAll(arguments); |
524 | 495 |
525 return commandBuilder.getCompilationCommand( | 496 return commandBuilder.getCompilationCommand( |
526 'dart2snapshot', outputName, !useSdk, | 497 'dart2snapshot', |
| 498 outputName, |
| 499 !useSdk, |
527 bootstrapDependencies(buildDir), | 500 bootstrapDependencies(buildDir), |
528 exec, args, environmentOverrides); | 501 exec, |
| 502 args, |
| 503 environmentOverrides); |
529 } | 504 } |
530 | 505 |
531 List<String> computeCompilerArguments(vmOptions, | 506 List<String> computeCompilerArguments( |
532 sharedOptions, | 507 vmOptions, sharedOptions, originalArguments) { |
533 originalArguments) { | |
534 List<String> args = []; | 508 List<String> args = []; |
535 if (isChecked) { | 509 if (isChecked) { |
536 args.add('--enable_asserts'); | 510 args.add('--enable_asserts'); |
537 args.add('--enable_type_checks'); | 511 args.add('--enable_type_checks'); |
538 } | 512 } |
539 return args | 513 return args |
540 ..addAll(vmOptions) | 514 ..addAll(vmOptions) |
541 ..addAll(sharedOptions) | 515 ..addAll(sharedOptions) |
542 ..addAll(originalArguments); | 516 ..addAll(originalArguments); |
543 } | 517 } |
544 | 518 |
545 List<String> computeRuntimeArguments( | 519 List<String> computeRuntimeArguments( |
546 RuntimeConfiguration runtimeConfiguration, | 520 RuntimeConfiguration runtimeConfiguration, |
547 String buildDir, | 521 String buildDir, |
548 TestInformation info, | 522 TestInformation info, |
549 List<String> vmOptions, | 523 List<String> vmOptions, |
550 List<String> sharedOptions, | 524 List<String> sharedOptions, |
551 List<String> originalArguments, | 525 List<String> originalArguments, |
552 CommandArtifact artifact) { | 526 CommandArtifact artifact) { |
553 List<String> args = []; | 527 List<String> args = []; |
554 if (isChecked) { | 528 if (isChecked) { |
555 args.add('--enable_asserts'); | 529 args.add('--enable_asserts'); |
556 args.add('--enable_type_checks'); | 530 args.add('--enable_type_checks'); |
557 } | 531 } |
558 return args | 532 return args |
559 ..addAll(vmOptions) | 533 ..addAll(vmOptions) |
560 ..addAll(sharedOptions) | 534 ..addAll(sharedOptions) |
561 ..addAll(originalArguments); | 535 ..addAll(originalArguments); |
562 } | 536 } |
563 } | 537 } |
564 | 538 |
565 | |
566 class AnalyzerCompilerConfiguration extends CompilerConfiguration { | 539 class AnalyzerCompilerConfiguration extends CompilerConfiguration { |
567 AnalyzerCompilerConfiguration( | 540 AnalyzerCompilerConfiguration( |
568 {bool isDebug, | 541 {bool isDebug, bool isChecked, bool isHostChecked, bool useSdk}) |
569 bool isChecked, | |
570 bool isHostChecked, | |
571 bool useSdk}) | |
572 : super._subclass( | 542 : super._subclass( |
573 isDebug: isDebug, isChecked: isChecked, | 543 isDebug: isDebug, |
574 isHostChecked: isHostChecked, useSdk: useSdk); | 544 isChecked: isChecked, |
| 545 isHostChecked: isHostChecked, |
| 546 useSdk: useSdk); |
575 | 547 |
576 int computeTimeoutMultiplier() { | 548 int computeTimeoutMultiplier() { |
577 return 4; | 549 return 4; |
578 } | 550 } |
579 | 551 |
580 String computeCompilerPath(String buildDir) { | 552 String computeCompilerPath(String buildDir) { |
581 var prefix = 'sdk/bin'; | 553 var prefix = 'sdk/bin'; |
582 String suffix = executableScriptSuffix; | 554 String suffix = executableScriptSuffix; |
583 if (isHostChecked) { | 555 if (isHostChecked) { |
584 if (useSdk) { | 556 if (useSdk) { |
(...skipping 13 matching lines...) Expand all Loading... |
598 CommandArtifact computeCompilationArtifact( | 570 CommandArtifact computeCompilationArtifact( |
599 String buildDir, | 571 String buildDir, |
600 String tempDir, | 572 String tempDir, |
601 CommandBuilder commandBuilder, | 573 CommandBuilder commandBuilder, |
602 List arguments, | 574 List arguments, |
603 Map<String, String> environmentOverrides) { | 575 Map<String, String> environmentOverrides) { |
604 arguments = new List.from(arguments); | 576 arguments = new List.from(arguments); |
605 if (isChecked) { | 577 if (isChecked) { |
606 arguments.add('--enable_type_checks'); | 578 arguments.add('--enable_type_checks'); |
607 } | 579 } |
608 return new CommandArtifact( | 580 return new CommandArtifact(<Command>[ |
609 <Command>[ | 581 commandBuilder.getAnalysisCommand('dart2analyzer', |
610 commandBuilder.getAnalysisCommand( | 582 computeCompilerPath(buildDir), arguments, environmentOverrides, |
611 'dart2analyzer', computeCompilerPath(buildDir), arguments, | 583 flavor: 'dart2analyzer') |
612 environmentOverrides, | 584 ], null, null); // Since this is not a real compilation, no artifacts are |
613 flavor: 'dart2analyzer')], | 585 // produced. |
614 null, null); // Since this is not a real compilation, no artifacts are | |
615 // produced. | |
616 } | 586 } |
617 | 587 |
618 List<String> computeRuntimeArguments( | 588 List<String> computeRuntimeArguments( |
619 RuntimeConfiguration runtimeConfiguration, | 589 RuntimeConfiguration runtimeConfiguration, |
620 String buildDir, | 590 String buildDir, |
621 TestInformation info, | 591 TestInformation info, |
622 List<String> vmOptions, | 592 List<String> vmOptions, |
623 List<String> sharedOptions, | 593 List<String> sharedOptions, |
624 List<String> originalArguments, | 594 List<String> originalArguments, |
625 CommandArtifact artifact) { | 595 CommandArtifact artifact) { |
626 return <String>[]; | 596 return <String>[]; |
627 } | 597 } |
628 } | 598 } |
OLD | NEW |