Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(700)

Side by Side Diff: pkg/front_end/lib/src/fasta/compiler_command_line.dart

Issue 3003743002: Move tools to tool folder. (Closed)
Patch Set: Fix two problems that show up elsewhere. Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
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.
4
5 library fasta.compiler_command_line;
6
7 import 'dart:io' show exit;
8
9 import 'package:kernel/target/targets.dart'
10 show Target, getTarget, TargetFlags, targets;
11
12 import '../../compiler_options.dart';
13 import '../base/processed_options.dart';
14 import 'command_line.dart' show CommandLine, deprecated_argumentError;
15
16 import 'compiler_context.dart' show CompilerContext;
17
18 import 'fasta_codes.dart'
19 show
20 Message,
21 messageFastaUsageLong,
22 messageFastaUsageShort,
23 templateUnspecified;
24
25 const Map<String, dynamic> optionSpecification = const <String, dynamic>{
26 "--compile-sdk": Uri,
27 "--fatal": ",",
28 "--output": Uri,
29 "-o": Uri,
30 "--packages": Uri,
31 "--platform": Uri,
32 "--sdk": Uri,
33 "--target": String,
34 "-t": String,
35 };
36
37 /// Parser for options accepted by the `fasta` command-line tools.
38 // TODO(ahe,sigmund): move this and other tools under pkg/front_end/tool/
39 class CompilerCommandLine extends CommandLine {
40 final String programName;
41
42 CompilerCommandLine(String programName, List<String> arguments)
43 : programName = programName,
44 super(arguments,
45 specification: optionSpecification,
46 usage: computeUsage(programName, false));
47
48 bool get verify => options.containsKey("--verify");
49
50 bool get dumpIr => options.containsKey("--dump-ir");
51
52 bool get excludeSource => options.containsKey("--exclude-source");
53
54 bool get help {
55 return options.containsKey("--help") ||
56 options.containsKey("-h") ||
57 options.containsKey("/h") ||
58 options.containsKey("/?");
59 }
60
61 void validate() {
62 if (help) {
63 print(computeUsage(programName, verbose).message);
64 exit(0);
65 }
66
67 if (options.containsKey("-o") && options.containsKey("--output")) {
68 return deprecated_argumentError(
69 usage, "Can't specify both '-o' and '--output'.");
70 }
71 if (options.containsKey("-t") && options.containsKey("--target")) {
72 return deprecated_argumentError(
73 usage, "Can't specify both '-t' and '--target'.");
74 }
75 if (options.containsKey("--compile-sdk") &&
76 options.containsKey("--platform")) {
77 return deprecated_argumentError(
78 usage, "Can't specify both '--compile-sdk' and '--platform'.");
79 }
80 if (programName == "compile_platform") {
81 if (arguments.length != 3) {
82 return deprecated_argumentError(usage, "Expected three arguments.");
83 }
84 if (options.containsKey("--compile-sdk")) {
85 return deprecated_argumentError(usage,
86 "Cannot specify '--compile-sdk' option to compile_platform.");
87 }
88 options['--compile-sdk'] =
89 Uri.base.resolveUri(new Uri.file(arguments[0]));
90 } else if (arguments.isEmpty) {
91 return deprecated_argumentError(usage, "No Dart file specified.");
92 }
93
94 Target target =
95 getTarget(targetName, new TargetFlags(strongMode: strongMode));
96 if (target == null) {
97 return deprecated_argumentError(
98 usage,
99 "Target '${targetName}' not recognized. "
100 "Valid targets are:\n ${targets.keys.join("\n ")}");
101 }
102 options["target"] = target;
103 }
104
105 Uri get output {
106 return options["-o"] ?? options["--output"] ?? defaultOutput;
107 }
108
109 Uri get defaultOutput => Uri.base.resolve("${arguments.first}.dill");
110
111 Uri get platform {
112 return options.containsKey("--compile-sdk")
113 ? null
114 : options["--platform"] ?? Uri.base.resolve("platform.dill");
115 }
116
117 Uri get packages => options["--packages"];
118
119 Uri get sdk => options["--sdk"] ?? options["--compile-sdk"];
120
121 Set<String> get fatal {
122 return new Set<String>.from(options["--fatal"] ?? <String>[]);
123 }
124
125 bool get errorsAreFatal => fatal.contains("errors");
126
127 bool get warningsAreFatal => fatal.contains("warnings");
128
129 bool get nitsAreFatal => fatal.contains("nits");
130
131 bool get strongMode => options.containsKey("--strong-mode");
132
133 String get targetName {
134 return options["-t"] ?? options["--target"] ?? "vm_fasta";
135 }
136
137 Target get target => options["target"];
138
139 static dynamic withGlobalOptions(
140 String programName,
141 List<String> arguments,
142 bool areRestArgumentsInputs,
143 dynamic f(CompilerContext context, List<String> restArguments)) {
144 // TODO(sigmund,ahe): delete this wrapper by moving validation into the
145 // callback. Note that this requires some subtle changes because validate
146 // sets some implicit options (like --compile-sdk in compile_platform).
147 var cl = CompilerContext.runWithDefaultOptions(
148 (_) => new CompilerCommandLine(programName, arguments));
149 var options = new CompilerOptions()
150 ..compileSdk = cl.options.containsKey("--compile-sdk")
151 ..sdkRoot = cl.sdk
152 ..sdkSummary = cl.platform
153 ..packagesFileUri = cl.packages
154 ..strongMode = cl.strongMode
155 ..target = cl.target
156 ..throwOnErrors = cl.errorsAreFatal
157 ..throwOnWarnings = cl.warningsAreFatal
158 ..throwOnNits = cl.nitsAreFatal
159 ..embedSourceText = !cl.excludeSource
160 // All command-line tools take only a single entry point and chase
161 // dependencies, and provide a non-zero exit code when errors are found.
162 ..chaseDependencies = true
163 ..setExitCodeOnProblem = true
164 ..debugDump = cl.dumpIr
165 ..verbose = cl.verbose
166 ..verify = cl.verify;
167
168 var inputs = <Uri>[];
169 if (areRestArgumentsInputs) {
170 inputs = cl.arguments.map(Uri.base.resolve).toList();
171 }
172 var pOptions = new ProcessedOptions(options, false, inputs, cl.output);
173 return CompilerContext.runWithOptions(pOptions, (c) => f(c, cl.arguments));
174 }
175 }
176
177 Message computeUsage(String programName, bool verbose) {
178 String basicUsage = "Usage: $programName [options] dartfile\n";
179 String summary;
180 String options =
181 (verbose ? messageFastaUsageLong.message : messageFastaUsageShort.message)
182 .trim();
183 switch (programName) {
184 case "outline":
185 summary =
186 "Creates an outline of a Dart program in the Dill/Kernel IR format.";
187 break;
188
189 case "compile":
190 summary = "Compiles a Dart program to the Dill/Kernel IR format.";
191 break;
192
193 case "run":
194 summary = "Runs a Dart program.";
195 break;
196
197 case "compile_platform":
198 summary = "Compiles Dart SDK platform to the Dill/Kernel IR format.";
199 basicUsage = "Usage: $programName [options] patched_sdk fullOutput "
200 "outlineOutput\n";
201 }
202 StringBuffer sb = new StringBuffer(basicUsage);
203 if (summary != null) {
204 sb.writeln();
205 sb.writeln(summary);
206 sb.writeln();
207 }
208 sb.write(options);
209 // TODO(ahe): Don't use [templateUnspecified].
210 return templateUnspecified.withArguments("$sb");
211 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698