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 Platform; | 7 import 'dart:io' show Platform; |
8 | 8 |
9 import 'runtime_configuration.dart' show RuntimeConfiguration; | 9 import 'runtime_configuration.dart' show RuntimeConfiguration; |
10 import 'runtime_configuration.dart' show DartPrecompiledAdbRuntimeConfiguration; | 10 import 'runtime_configuration.dart' show DartPrecompiledAdbRuntimeConfiguration; |
(...skipping 29 matching lines...) Expand all Loading... |
40 return (path == '' || path.endsWith('/')) ? uri : Uri.parse('$uri/'); | 40 return (path == '' || path.endsWith('/')) ? uri : Uri.parse('$uri/'); |
41 } | 41 } |
42 | 42 |
43 abstract class CompilerConfiguration { | 43 abstract class CompilerConfiguration { |
44 final bool isDebug; | 44 final bool isDebug; |
45 final bool isChecked; | 45 final bool isChecked; |
46 final bool isStrong; | 46 final bool isStrong; |
47 final bool isHostChecked; | 47 final bool isHostChecked; |
48 final bool useSdk; | 48 final bool useSdk; |
49 | 49 |
| 50 /// Only some subclasses support this check, but we statically allow calling |
| 51 /// it on [CompilerConfiguration]. |
| 52 bool get useDfe { |
| 53 throw new UnsupportedError("This compiler does not support DFE."); |
| 54 } |
| 55 |
50 // TODO(ahe): Remove this constructor and move the switch to | 56 // TODO(ahe): Remove this constructor and move the switch to |
51 // test_options.dart. We probably want to store an instance of | 57 // test_options.dart. We probably want to store an instance of |
52 // [CompilerConfiguration] in [configuration] there. | 58 // [CompilerConfiguration] in [configuration] there. |
53 factory CompilerConfiguration(Map configuration) { | 59 factory CompilerConfiguration(Map configuration) { |
54 String compiler = configuration['compiler']; | 60 String compiler = configuration['compiler']; |
55 | 61 |
56 // TODO(ahe): Move these booleans into a struction configuration object | 62 // TODO(ahe): Move these booleans into a struction configuration object |
57 // which can eventually completely replace the Map-based configuration | 63 // which can eventually completely replace the Map-based configuration |
58 // object. | 64 // object. |
59 bool isDebug = configuration['mode'] == 'debug'; | 65 bool isDebug = configuration['mode'] == 'debug'; |
60 bool isChecked = configuration['checked']; | 66 bool isChecked = configuration['checked']; |
61 bool isStrong = configuration['strong']; | 67 bool isStrong = configuration['strong']; |
62 bool isHostChecked = configuration['host_checked']; | 68 bool isHostChecked = configuration['host_checked']; |
63 bool useSdk = configuration['use_sdk']; | 69 bool useSdk = configuration['use_sdk']; |
64 bool isCsp = configuration['csp']; | 70 bool isCsp = configuration['csp']; |
65 bool useCps = configuration['cps_ir']; | |
66 bool useBlobs = configuration['use_blobs']; | 71 bool useBlobs = configuration['use_blobs']; |
67 bool hotReload = configuration['hot_reload']; | 72 bool hotReload = configuration['hot_reload']; |
68 bool hotReloadRollback = configuration['hot_reload_rollback']; | 73 bool hotReloadRollback = configuration['hot_reload_rollback']; |
69 bool useFastStartup = configuration['fast_startup']; | 74 bool useFastStartup = configuration['fast_startup']; |
70 bool useKernelInDart2js = configuration['dart2js_with_kernel']; | 75 bool useKernelInDart2js = configuration['dart2js_with_kernel']; |
71 | 76 |
72 switch (compiler) { | 77 switch (compiler) { |
73 case 'dart2analyzer': | 78 case 'dart2analyzer': |
74 return new AnalyzerCompilerConfiguration( | 79 return new AnalyzerCompilerConfiguration( |
75 isDebug: isDebug, | 80 isDebug: isDebug, |
76 isChecked: isChecked, | 81 isChecked: isChecked, |
77 isStrong: isStrong, | 82 isStrong: isStrong, |
78 isHostChecked: isHostChecked, | 83 isHostChecked: isHostChecked, |
79 useSdk: useSdk); | 84 useSdk: useSdk); |
80 case 'dart2js': | 85 case 'dart2js': |
81 return new Dart2jsCompilerConfiguration( | 86 return new Dart2jsCompilerConfiguration( |
82 isDebug: isDebug, | 87 isDebug: isDebug, |
83 isChecked: isChecked, | 88 isChecked: isChecked, |
84 isHostChecked: isHostChecked, | 89 isHostChecked: isHostChecked, |
85 useCps: useCps, | |
86 useSdk: useSdk, | 90 useSdk: useSdk, |
87 isCsp: isCsp, | 91 isCsp: isCsp, |
88 useFastStartup: useFastStartup, | 92 useFastStartup: useFastStartup, |
89 useKernel: useKernelInDart2js, | 93 useKernel: useKernelInDart2js, |
90 extraDart2jsOptions: | 94 extraDart2jsOptions: |
91 TestUtils.getExtraOptions(configuration, 'dart2js_options')); | 95 TestUtils.getExtraOptions(configuration, 'dart2js_options')); |
92 case 'app_jit': | 96 case 'app_jit': |
93 return new AppJitCompilerConfiguration( | 97 return new AppJitCompilerConfiguration( |
94 isDebug: isDebug, isChecked: isChecked); | 98 isDebug: isDebug, isChecked: isChecked); |
95 case 'precompiler': | 99 case 'precompiler': |
96 return new PrecompilerCompilerConfiguration( | 100 return new PrecompilerCompilerConfiguration( |
97 isDebug: isDebug, | 101 isDebug: isDebug, |
98 isChecked: isChecked, | 102 isChecked: isChecked, |
99 arch: configuration['arch'], | 103 arch: configuration['arch'], |
100 useBlobs: useBlobs, | 104 useBlobs: useBlobs, |
101 isAndroid: configuration['system'] == 'android'); | 105 isAndroid: configuration['system'] == 'android'); |
102 case 'dartk': | 106 case 'dartk': |
103 return new NoneCompilerConfiguration( | 107 return new NoneCompilerConfiguration( |
104 isDebug: isDebug, | 108 isDebug: isDebug, |
105 isChecked: isChecked, | 109 isChecked: isChecked, |
106 isHostChecked: isHostChecked, | 110 isHostChecked: isHostChecked, |
107 useSdk: useSdk, | 111 useSdk: useSdk, |
108 hotReload: hotReload, | 112 hotReload: hotReload, |
109 hotReloadRollback: hotReloadRollback, | 113 hotReloadRollback: hotReloadRollback, |
110 useDFE: true); | 114 useDfe: true); |
111 case 'dartkp': | 115 case 'dartkp': |
112 return new PrecompilerCompilerConfiguration( | 116 return new PrecompilerCompilerConfiguration( |
113 isDebug: isDebug, | 117 isDebug: isDebug, |
114 isChecked: isChecked, | 118 isChecked: isChecked, |
115 arch: configuration['arch'], | 119 arch: configuration['arch'], |
116 useBlobs: useBlobs, | 120 useBlobs: useBlobs, |
117 isAndroid: configuration['system'] == 'android', | 121 isAndroid: configuration['system'] == 'android', |
118 useDFE: true); | 122 useDfe: true); |
119 case 'none': | 123 case 'none': |
120 return new NoneCompilerConfiguration( | 124 return new NoneCompilerConfiguration( |
121 isDebug: isDebug, | 125 isDebug: isDebug, |
122 isChecked: isChecked, | 126 isChecked: isChecked, |
123 isHostChecked: isHostChecked, | 127 isHostChecked: isHostChecked, |
124 useSdk: useSdk, | 128 useSdk: useSdk, |
125 hotReload: hotReload, | 129 hotReload: hotReload, |
126 hotReloadRollback: hotReloadRollback); | 130 hotReloadRollback: hotReloadRollback); |
127 default: | 131 default: |
128 throw "Unknown compiler '$compiler'"; | 132 throw "Unknown compiler '$compiler'"; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 List<String> originalArguments, | 184 List<String> originalArguments, |
181 CommandArtifact artifact) { | 185 CommandArtifact artifact) { |
182 return [artifact.filename]; | 186 return [artifact.filename]; |
183 } | 187 } |
184 } | 188 } |
185 | 189 |
186 /// The "none" compiler. | 190 /// The "none" compiler. |
187 class NoneCompilerConfiguration extends CompilerConfiguration { | 191 class NoneCompilerConfiguration extends CompilerConfiguration { |
188 final bool hotReload; | 192 final bool hotReload; |
189 final bool hotReloadRollback; | 193 final bool hotReloadRollback; |
190 final bool useDFE; | 194 final bool useDfe; |
191 | 195 |
192 NoneCompilerConfiguration( | 196 NoneCompilerConfiguration( |
193 {bool isDebug, | 197 {bool isDebug, |
194 bool isChecked, | 198 bool isChecked, |
195 bool isHostChecked, | 199 bool isHostChecked, |
196 bool useSdk, | 200 bool useSdk, |
197 bool this.hotReload, | 201 bool this.hotReload, |
198 bool this.hotReloadRollback, | 202 bool this.hotReloadRollback, |
199 this.useDFE: false}) | 203 this.useDfe: false}) |
200 : super._subclass( | 204 : super._subclass( |
201 isDebug: isDebug, | 205 isDebug: isDebug, |
202 isChecked: isChecked, | 206 isChecked: isChecked, |
203 isHostChecked: isHostChecked, | 207 isHostChecked: isHostChecked, |
204 useSdk: useSdk); | 208 useSdk: useSdk); |
205 | 209 |
206 bool get hasCompiler => false; | 210 bool get hasCompiler => false; |
207 | 211 |
208 List<String> computeRuntimeArguments( | 212 List<String> computeRuntimeArguments( |
209 RuntimeConfiguration runtimeConfiguration, | 213 RuntimeConfiguration runtimeConfiguration, |
210 String buildDir, | 214 String buildDir, |
211 TestInformation info, | 215 TestInformation info, |
212 List<String> vmOptions, | 216 List<String> vmOptions, |
213 List<String> sharedOptions, | 217 List<String> sharedOptions, |
214 List<String> originalArguments, | 218 List<String> originalArguments, |
215 CommandArtifact artifact) { | 219 CommandArtifact artifact) { |
216 List<String> args = []; | 220 List<String> args = []; |
217 if (useDFE) { | 221 if (useDfe) { |
218 args.add('--dfe=${buildDir}/gen/kernel-service.dart.snapshot'); | 222 args.add('--dfe=${buildDir}/gen/kernel-service.dart.snapshot'); |
219 args.add('--platform=${buildDir}/patched_sdk/platform.dill'); | 223 args.add('--platform=${buildDir}/patched_sdk/platform.dill'); |
220 } | 224 } |
221 if (isChecked) { | 225 if (isChecked) { |
222 args.add('--enable_asserts'); | 226 args.add('--enable_asserts'); |
223 args.add('--enable_type_checks'); | 227 args.add('--enable_type_checks'); |
224 } | 228 } |
225 if (hotReload) { | 229 if (hotReload) { |
226 args.add('--hot-reload-test-mode'); | 230 args.add('--hot-reload-test-mode'); |
227 } else if (hotReloadRollback) { | 231 } else if (hotReloadRollback) { |
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
530 Uri.base | 534 Uri.base |
531 .resolveUri(nativeDirectoryToUri(buildDir)) | 535 .resolveUri(nativeDirectoryToUri(buildDir)) |
532 .resolve('dart-sdk/bin/snapshots/dart2js.dart.snapshot') | 536 .resolve('dart-sdk/bin/snapshots/dart2js.dart.snapshot') |
533 ]); | 537 ]); |
534 } | 538 } |
535 } | 539 } |
536 | 540 |
537 /// Configuration for dart2js compiler. | 541 /// Configuration for dart2js compiler. |
538 class Dart2jsCompilerConfiguration extends Dart2xCompilerConfiguration { | 542 class Dart2jsCompilerConfiguration extends Dart2xCompilerConfiguration { |
539 final bool isCsp; | 543 final bool isCsp; |
540 final bool useCps; | |
541 final bool useFastStartup; | 544 final bool useFastStartup; |
542 final bool useKernel; | 545 final bool useKernel; |
543 final List<String> extraDart2jsOptions; | 546 final List<String> extraDart2jsOptions; |
544 // We cache the extended environment to save memory. | |
545 static Map<String, String> cpsFlagCache; | |
546 static Map<String, String> environmentOverridesCacheObject; | |
547 | 547 |
548 Dart2jsCompilerConfiguration( | 548 Dart2jsCompilerConfiguration( |
549 {bool isDebug, | 549 {bool isDebug, |
550 bool isChecked, | 550 bool isChecked, |
551 bool isHostChecked, | 551 bool isHostChecked, |
552 bool useSdk, | 552 bool useSdk, |
553 bool this.useCps, | |
554 bool this.isCsp, | 553 bool this.isCsp, |
555 bool this.useFastStartup, | 554 bool this.useFastStartup, |
556 this.useKernel, | 555 this.useKernel, |
557 this.extraDart2jsOptions}) | 556 this.extraDart2jsOptions}) |
558 : super('dart2js', | 557 : super('dart2js', |
559 isDebug: isDebug, | 558 isDebug: isDebug, |
560 isChecked: isChecked, | 559 isChecked: isChecked, |
561 isHostChecked: isHostChecked, | 560 isHostChecked: isHostChecked, |
562 useSdk: useSdk); | 561 useSdk: useSdk); |
563 | 562 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
597 Uri preambleDir = sdk.resolve('lib/_internal/js_runtime/lib/preambles/'); | 596 Uri preambleDir = sdk.resolve('lib/_internal/js_runtime/lib/preambles/'); |
598 return runtimeConfiguration.dart2jsPreambles(preambleDir) | 597 return runtimeConfiguration.dart2jsPreambles(preambleDir) |
599 ..add(artifact.filename); | 598 ..add(artifact.filename); |
600 } | 599 } |
601 } | 600 } |
602 | 601 |
603 class PrecompilerCompilerConfiguration extends CompilerConfiguration { | 602 class PrecompilerCompilerConfiguration extends CompilerConfiguration { |
604 final String arch; | 603 final String arch; |
605 final bool useBlobs; | 604 final bool useBlobs; |
606 final bool isAndroid; | 605 final bool isAndroid; |
607 final bool useDFE; | 606 final bool useDfe; |
608 | 607 |
609 PrecompilerCompilerConfiguration( | 608 PrecompilerCompilerConfiguration( |
610 {bool isDebug, | 609 {bool isDebug, |
611 bool isChecked, | 610 bool isChecked, |
612 this.arch, | 611 this.arch, |
613 this.useBlobs, | 612 this.useBlobs, |
614 this.isAndroid, | 613 this.isAndroid, |
615 this.useDFE: false}) | 614 this.useDfe: false}) |
616 : super._subclass(isDebug: isDebug, isChecked: isChecked); | 615 : super._subclass(isDebug: isDebug, isChecked: isChecked); |
617 | 616 |
618 int computeTimeoutMultiplier() { | 617 int computeTimeoutMultiplier() { |
619 int multiplier = 2; | 618 int multiplier = 2; |
620 if (isDebug) multiplier *= 4; | 619 if (isDebug) multiplier *= 4; |
621 if (isChecked) multiplier *= 2; | 620 if (isChecked) multiplier *= 2; |
622 return multiplier; | 621 return multiplier; |
623 } | 622 } |
624 | 623 |
625 CommandArtifact computeCompilationArtifact( | 624 CommandArtifact computeCompilationArtifact( |
(...skipping 25 matching lines...) Expand all Loading... |
651 if (isAndroid) { | 650 if (isAndroid) { |
652 if (arch == "arm") { | 651 if (arch == "arm") { |
653 exec = "$buildDir/clang_x86/dart_bootstrap"; | 652 exec = "$buildDir/clang_x86/dart_bootstrap"; |
654 } else if (arch == "arm64") { | 653 } else if (arch == "arm64") { |
655 exec = "$buildDir/clang_x64/dart_bootstrap"; | 654 exec = "$buildDir/clang_x64/dart_bootstrap"; |
656 } | 655 } |
657 } else { | 656 } else { |
658 exec = "$buildDir/dart_bootstrap"; | 657 exec = "$buildDir/dart_bootstrap"; |
659 } | 658 } |
660 var args = <String>[]; | 659 var args = <String>[]; |
661 if (useDFE) { | 660 if (useDfe) { |
662 args.add('--dfe=utils/kernel-service/kernel-service.dart'); | 661 args.add('--dfe=utils/kernel-service/kernel-service.dart'); |
663 args.add('--platform=${buildDir}/patched_sdk/platform.dill'); | 662 args.add('--platform=${buildDir}/patched_sdk/platform.dill'); |
664 } | 663 } |
665 args.add("--snapshot-kind=app-aot"); | 664 args.add("--snapshot-kind=app-aot"); |
666 if (useBlobs) { | 665 if (useBlobs) { |
667 args.add("--snapshot=$tempDir/out.aotsnapshot"); | 666 args.add("--snapshot=$tempDir/out.aotsnapshot"); |
668 args.add("--use-blobs"); | 667 args.add("--use-blobs"); |
669 } else { | 668 } else { |
670 args.add("--snapshot=$tempDir/out.S"); | 669 args.add("--snapshot=$tempDir/out.S"); |
671 } | 670 } |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
957 RuntimeConfiguration runtimeConfiguration, | 956 RuntimeConfiguration runtimeConfiguration, |
958 String buildDir, | 957 String buildDir, |
959 TestInformation info, | 958 TestInformation info, |
960 List<String> vmOptions, | 959 List<String> vmOptions, |
961 List<String> sharedOptions, | 960 List<String> sharedOptions, |
962 List<String> originalArguments, | 961 List<String> originalArguments, |
963 CommandArtifact artifact) { | 962 CommandArtifact artifact) { |
964 return <String>[]; | 963 return <String>[]; |
965 } | 964 } |
966 } | 965 } |
OLD | NEW |