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

Unified Diff: tools/testing/dart/compiler_configuration.dart

Issue 2451623006: Reland "Merge more Kernel infrastructure from kernel_sdk SDK fork." (Closed)
Patch Set: Fix Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/testing/dart/co19_test_config.dart ('k') | tools/testing/dart/test_configurations.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/testing/dart/compiler_configuration.dart
diff --git a/tools/testing/dart/compiler_configuration.dart b/tools/testing/dart/compiler_configuration.dart
index 49368ce1cc60234084f1e0b2310966c7de4bd1df..3613dcd166ccb71b17f48800a3be4a7566db507f 100644
--- a/tools/testing/dart/compiler_configuration.dart
+++ b/tools/testing/dart/compiler_configuration.dart
@@ -89,6 +89,17 @@ abstract class CompilerConfiguration {
arch: configuration['arch'],
useBlobs: useBlobs,
isAndroid: configuration['system'] == 'android');
+ case 'dartk':
+ return ComposedCompilerConfiguration.createDartKConfiguration(
+ isHostChecked: isHostChecked,
+ useSdk: useSdk);
+ case 'dartkp':
+ return ComposedCompilerConfiguration.createDartKPConfiguration(
+ isHostChecked: isHostChecked,
+ arch: configuration['arch'],
+ useBlobs: useBlobs,
+ isAndroid: configuration['system'] == 'android',
+ useSdk: useSdk);
case 'none':
return new NoneCompilerConfiguration(
isDebug: isDebug,
@@ -199,6 +210,184 @@ class NoneCompilerConfiguration extends CompilerConfiguration {
}
}
+/// The "dartk" compiler.
+class DartKCompilerConfiguration extends CompilerConfiguration {
+ DartKCompilerConfiguration({bool isHostChecked, bool useSdk})
+ : super._subclass(isHostChecked: isHostChecked, useSdk: useSdk);
+
+ @override
+ String computeCompilerPath(String buildDir) {
+ return 'third_party/pkg/kernel/bin/dartk.dart';
+ }
+
+ CompilationCommand computeCompilationCommand(
+ String outputFileName,
+ String buildDir,
+ CommandBuilder commandBuilder,
+ List arguments,
+ Map<String, String> environmentOverrides) {
+ var extraArguments = [
+ '--sdk',
+ '$buildDir/obj/gen/patched_sdk',
+ '--link',
+ '--target=vm',
+ '--out',
+ outputFileName
+ ];
+ return commandBuilder.getKernelCompilationCommand(
+ 'dartk',
+ outputFileName,
+ true,
+ bootstrapDependencies(buildDir),
+ computeCompilerPath(buildDir),
+ []..addAll(arguments)..addAll(extraArguments),
+ environmentOverrides);
+ }
+
+ CommandArtifact computeCompilationArtifact(
+ String buildDir,
+ String tempDir,
+ CommandBuilder commandBuilder,
+ List arguments,
+ Map<String, String> environmentOverrides) {
+ return new CommandArtifact(<Command>[
+ this.computeCompilationCommand('$tempDir/out.dill', buildDir,
+ CommandBuilder.instance, arguments, environmentOverrides)
+ ], '$tempDir/out.dill', 'application/dart');
+ }
+}
+
+typedef List<String> CompilerArgumentsFunction(
+ List<String> globalArguments,
+ String previousCompilerOutput);
+
+class PipelineCommand {
+ final CompilerConfiguration compilerConfiguration;
+ final CompilerArgumentsFunction _argumentsFunction;
+
+ PipelineCommand._(this.compilerConfiguration, this._argumentsFunction);
+
+ factory PipelineCommand.runWithGlobalArguments(CompilerConfiguration conf) {
+ return new PipelineCommand._(conf, (List<String> globalArguments,
+ String previousOutput) {
+ assert(previousOutput == null);
+ return globalArguments;
+ });
+ }
+
+ factory PipelineCommand.runWithDartOrKernelFile(CompilerConfiguration conf) {
+ return new PipelineCommand._(conf, (List<String> globalArguments,
+ String previousOutput) {
+ var filtered = globalArguments
+ .where((String name) => name.endsWith('.dart') ||
+ name.endsWith('.dill'))
+ .toList();
+ assert(filtered.length == 1);
+ return filtered;
+ });
+ }
+
+ factory PipelineCommand.runWithPreviousKernelOutput(
+ CompilerConfiguration conf) {
+ return new PipelineCommand._(conf, (List<String> globalArguments,
+ String previousOutput) {
+ assert(previousOutput.endsWith('.dill'));
+ return [previousOutput];
+ });
+ }
+
+ List<String> extractArguments(List<String> globalArguments,
+ String previousOutput) {
+ return _argumentsFunction(globalArguments, previousOutput);
+ }
+}
+
+class ComposedCompilerConfiguration extends CompilerConfiguration {
+ final List<PipelineCommand> pipelineCommands;
+
+ ComposedCompilerConfiguration(this.pipelineCommands)
+ : super._subclass();
+
+ CommandArtifact computeCompilationArtifact(
+ String buildDir,
+ String tempDir,
+ CommandBuilder commandBuilder,
+ List globalArguments,
+ Map<String, String> environmentOverrides) {
+
+ List<Command> allCommands = [];
+
+ // The first compilation command is as usual.
+ var arguments = pipelineCommands[0].extractArguments(globalArguments, null);
+ CommandArtifact artifact =
+ pipelineCommands[0].compilerConfiguration.computeCompilationArtifact(
+ buildDir, tempDir, commandBuilder, arguments, environmentOverrides);
+ allCommands.addAll(artifact.commands);
+
+ // The following compilation commands are based on the output of the
+ // previous one.
+ for (int i = 1; i < pipelineCommands.length; i++) {
+ PipelineCommand pc = pipelineCommands[i];
+
+ arguments = pc.extractArguments(globalArguments, artifact.filename);
+ artifact = pc.compilerConfiguration.computeCompilationArtifact(
+ buildDir, tempDir, commandBuilder, arguments, environmentOverrides);
+
+ allCommands.addAll(artifact.commands);
+ }
+
+ return new CommandArtifact(
+ allCommands, artifact.filename, artifact.mimeType);
+ }
+
+ List<String> computeCompilerArguments(vmOptions, sharedOptions, args) {
+ // The result will be passed as an input to [extractArguments]
+ // (i.e. the arguments to the [PipelineCommand]).
+ return new List<String>.from(sharedOptions)..addAll(args);
+ }
+
+ List<String> computeRuntimeArguments(
+ RuntimeConfiguration runtimeConfiguration,
+ String buildDir,
+ TestInformation info,
+ List<String> vmOptions,
+ List<String> sharedOptions,
+ List<String> originalArguments,
+ CommandArtifact artifact) {
+ return <String>[artifact.filename];
+ }
+
+ static ComposedCompilerConfiguration createDartKPConfiguration(
+ {bool isHostChecked, String arch, bool useBlobs, bool isAndroid,
+ bool useSdk}) {
+ var nested = [];
+
+ // Compile with dartk.
+ nested.add(new PipelineCommand.runWithGlobalArguments(
+ new DartKCompilerConfiguration(isHostChecked: isHostChecked,
+ useSdk: useSdk)));
+
+ // Run the normal precompiler.
+ nested.add(new PipelineCommand.runWithPreviousKernelOutput(
+ new PrecompilerCompilerConfiguration(
+ arch: arch, useBlobs: useBlobs, isAndroid: isAndroid)));
+
+ return new ComposedCompilerConfiguration(nested);
+ }
+
+ static ComposedCompilerConfiguration createDartKConfiguration(
+ {bool isHostChecked, bool useSdk}) {
+ var nested = [];
+
+ // Compile with dartk.
+ nested.add(new PipelineCommand.runWithGlobalArguments(
+ new DartKCompilerConfiguration(isHostChecked: isHostChecked,
+ useSdk: useSdk)));
+
+ return new ComposedCompilerConfiguration(nested);
+ }
+}
+
/// Common configuration for dart2js-based tools, such as, dart2js
class Dart2xCompilerConfiguration extends CompilerConfiguration {
final String moniker;
« no previous file with comments | « tools/testing/dart/co19_test_config.dart ('k') | tools/testing/dart/test_configurations.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698