Index: pkg/front_end/lib/compiler_options.dart |
diff --git a/pkg/front_end/lib/compiler_options.dart b/pkg/front_end/lib/compiler_options.dart |
index c360ee152c69c78286e090761366641a933a77b4..7d8a76d2294200d3f18f995e7909639ca595f2bc 100644 |
--- a/pkg/front_end/lib/compiler_options.dart |
+++ b/pkg/front_end/lib/compiler_options.dart |
@@ -6,6 +6,7 @@ library front_end.compiler_options; |
import 'package:front_end/src/base/performace_logger.dart'; |
import 'package:front_end/src/incremental/byte_store.dart'; |
+import 'package:kernel/target/targets.dart' show Target; |
import 'compilation_error.dart'; |
import 'file_system.dart'; |
@@ -25,13 +26,20 @@ class CompilerOptions { |
/// |
/// If `null`, the SDK will be searched for using |
/// [Platform.resolvedExecutable] as a starting point. |
- /// |
- /// This option is mutually exclusive with [sdkSummary]. |
Uri sdkRoot; |
- /// Map of `dart.xyz` libraries to URIs in the [fileSystem]. |
- /// E.g. {'core': 'file:///sdk/lib/core/core.dart'} (no `dart:` prefix). |
- Map<String, Uri> dartLibraries = {}; |
+ /// Map of `dart:*` libraries to URIs in the [fileSystem]. |
+ /// |
+ /// Keys in the map are the name of the library with no `dart:` prefix, for |
+ /// example: |
+ /// |
+ /// {'core': 'file:///sdk/lib/core/core.dart'} |
+ /// |
+ /// If `null`, the default set of libraries will be loaded from |
+ /// `sdkRoot/lib/libraries.json`. |
+ // TODO(sigmund): also provide an option to specify the .json file, then |
+ // consider dropping this option. |
+ Map<String, Uri> dartLibraries; |
/// Callback to which compilation errors should be delivered. |
/// |
@@ -49,41 +57,42 @@ class CompilerOptions { |
Uri packagesFileUri; |
/// URIs of input summary files (excluding the SDK summary; typically these |
- /// will be "file:" URIs). These files should all be linked summaries. They |
- /// should also be closed, in the sense that any libraries they reference |
- /// should also appear in [inputSummaries] or [sdkSummary]. |
+ /// will be "file:" URIs). |
+ /// |
+ /// These files should be summary files generated by this package (and not the |
+ /// similarly named summary files from `package:analyzer`.) |
+ /// |
+ /// Summaries may be provided in any order, but they should be acyclic and |
+ /// closed: any libraries that they reference should be defined in either one |
+ /// of [inputSummaries] or [sdkSummary]. |
List<Uri> inputSummaries = []; |
- /// URI of the SDK summary file (typically a "file:" URI). |
+ /// URIs of other kernel programs to link. |
/// |
- /// This should be a linked summary. If `null`, the SDK summary will be |
- /// searched for at a default location within [sdkRoot]. |
+ /// Commonly used to link the code for the SDK libraries that was compiled |
+ /// separately. For example, dart2js needs to link the SDK so it can |
+ /// optimize and tree-shake the code for the application, whereas the VM |
+ /// always embeds the SDK internally and doesn't need it as part of the |
+ /// program. |
/// |
- /// This option is mutually exclusive with [sdkRoot]. TODO(paulberry): if the |
- /// VM does not contain a pickled copy of the SDK, we might need to change |
- /// this. |
- Uri sdkSummary; |
+ /// The programs provided here should be closed and acyclic: any libraries |
+ /// that they reference should be defined in a program in [linkedDependencies] |
+ /// or any of the [inputSummaries] or [sdkSummary]. |
+ List<Uri> linkedDependencies = []; |
- /// URI override map. |
- /// |
- /// This is a map from URIs that might appear in import/export/part statements |
- /// to URIs that should be used to locate the corresponding files in the |
- /// [fileSystem]. Any URI override listed in this map takes precedence over |
- /// the URI resolution that would be implied by the packages file (see |
- /// [packagesFileUri]) and/or [multiRoots]. |
+ /// URI of the SDK summary file (typically a "file:" URI). |
/// |
- /// If a URI is not listed in this map, then the normal URI resolution |
- /// algorithm will be used. |
+ /// This should should be a summary previosly generated by this package (and |
+ /// not the similarly named summary files from `package:analyzer`.) |
/// |
- /// TODO(paulberry): transition analyzer and dev_compiler to use the |
- /// "multi-root:" mechanism, and then remove this. |
- @deprecated |
- Map<Uri, Uri> uriOverride = {}; |
+ /// If `null` and [compileSdk] is false, the SDK summary will be searched for |
+ /// at a default location within [sdkRoot]. |
+ Uri sdkSummary; |
/// Multi-roots. |
/// |
- /// Any Uri that resolves to "multi-root:///$rest" will be searched for |
- /// at "$root/$rest", where "$root" is drawn from this list. |
+ /// Any Uri that resolves to "multi-root:///$absolute_path" will be searched |
+ /// for at "$root/$absolute_path", where "$root" is drawn from this list. |
/// |
/// Intended use: if the user has a Bazel workspace located at path |
/// "$workspace", this could be set to the file URIs corresponding to the |
@@ -104,46 +113,84 @@ class CompilerOptions { |
/// file system. TODO(paulberry): fix this. |
FileSystem fileSystem = PhysicalFileSystem.instance; |
- /// The byte storage to get and put serialized data. |
+ /// The byte storage to access serialized data. |
ByteStore byteStore = new NullByteStore(); |
/// The logger to report compilation progress. |
PerformanceLog logger = new PerformanceLog(new StringBuffer()); |
- /// Whether to generate code for the SDK when compiling a whole-program. |
+ /// Whether to generate code for the SDK. |
+ /// |
+ /// By default the front end resolves programs using a prebuilt SDK summary. |
+ /// When this option is `true`, [sdkSummary] must be null. |
bool compileSdk = false; |
- /// Whether a modular build compiles only the files listed explicitly or if it |
- /// compiles dependencies as well. |
+ /// Whether the compiler should read files that are discovered as |
+ /// dependencies, or only access the files listed explicitly. |
+ /// |
+ /// This option has different defaults depending on the API. |
/// |
- /// This option is intended only for modular APIs like `kernelForBuildUnit`. |
- /// These APIs by default ensure that builds are hermetic, where all files |
- /// that will be compiled are listed explicitly and all other dependencies |
- /// are covered by summary files. |
+ /// For modular APIs like `kernelForBuildUnit` and `summaryFor` the default |
+ /// behavior is `false`. These APIs want to ensure that builds are hermetic, |
+ /// where all files that will be compiled are listed explicitly and all other |
+ /// dependencies are covered by summary files. |
/// |
- /// When this option is true, these APIs will treat any dependency that is |
- /// not described in a summary as if it was explicitly listed as an input. |
- bool chaseDependencies = false; |
+ /// For whole-program APIs like `kernelForProgram`, this option is true by |
+ /// default, so they can treat any dependency that is not described in a |
+ /// summary as if it was explicitly listed as an input. |
+ bool chaseDependencies; |
/// Whether to interpret Dart sources in strong-mode. |
bool strongMode = true; |
- // All options below are target-specific options. |
- // |
- // TODO(sigmund): revisit the right layout for these options. We might want to |
- // split them out into a separate bag of options or provide factories for |
- // common combinations of these options. |
- |
/// Patch files to apply on the core libraries for a specific target platform. |
/// |
- /// Keys on this map are expected to be `dart:*` URIs. The values can be |
- /// either absolute or relative URIs. Absolute URIs are read directly, while |
- /// relative URIs are resolved from the [sdkRoot]. |
- Map<Uri, List<Uri>> targetPatches = {}; |
+ /// Keys in the map are the name of the library with no `dart:` prefix, for |
+ /// example: |
+ /// |
+ /// {'core': [ |
+ /// 'file:///location/of/core/patch_file1.dart', |
+ /// 'file:///location/of/core/patch_file2.dart', |
+ /// ]} |
+ /// |
+ /// The values can be either absolute or relative URIs. Absolute URIs are read |
+ /// directly, while relative URIs are resolved from the [sdkRoot]. |
+ // TODO(sigmund): provide also a flag to load this data from a file (like |
+ // libraries.json) |
+ Map<String, List<Uri>> targetPatches = {}; |
- /// Additional core libraries to be loaded when building a program. |
- // TODO(sigmund): delete. Ideally building a program only needs what's |
- // reachable and we can use kernelForBuildUnit when creating a snapshot of the |
- // SDK itself. |
- List<Uri> additionalLibraries = []; |
+ /// The target platform that will consume the compiled code. |
+ /// |
+ /// Used to provide platform-specific details to the compiler like: |
+ /// * the set of libraries are part of a platform's SDK (e.g. dart:html for |
+ /// dart2js, dart:ui for flutter). |
+ /// |
+ /// * what kernel transformations should be applied to the program |
+ /// (async/await, mixin inlining, etc). |
+ /// |
+ /// * how to deal with non-standard features like `native` extensions. |
+ /// |
+ /// If not specified, the default target is the VM. |
+ Target target; |
+ |
+ /// Whether to show verbose messages (mainly for debugging and performance |
+ /// tracking). |
+ /// |
+ /// Messages are printed on stdout. |
+ // TODO(sigmund): improve the diagnotics API to provide mechanism to intercept |
+ // verbose data (Issue #30056) |
+ bool verbose = false; |
+ |
+ /// Whether to run extra verification steps to validate that compiled programs |
+ /// are well formed. |
+ /// |
+ /// Errors are reported via the [onError] callback. |
+ // TODO(sigmund): ensure we don't print errors to stdout (Issue #30056) |
+ bool verify = false; |
+ |
+ /// Whether to dump generated programs in a text format (also mainly for |
+ /// debugging). |
+ /// |
+ /// Dumped data is printed in stdout. |
+ bool debugDump = false; |
} |