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

Unified Diff: packages/flutter_tools/lib/src/commands/build_aot.dart

Issue 2541483002: github.com/flutter/flutter changes required to use kernel
Patch Set: Created 4 years, 1 month 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 | « no previous file | packages/flutter_tools/lib/src/commands/build_apk.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: packages/flutter_tools/lib/src/commands/build_aot.dart
diff --git a/packages/flutter_tools/lib/src/commands/build_aot.dart b/packages/flutter_tools/lib/src/commands/build_aot.dart
index e5b31a908051ac3e60af5c3a5b785cb90bf52b0e..8389a4b4b545d8b4deab16aa15137826e7f612fc 100644
--- a/packages/flutter_tools/lib/src/commands/build_aot.dart
+++ b/packages/flutter_tools/lib/src/commands/build_aot.dart
@@ -15,6 +15,7 @@ import '../build_info.dart';
import '../dart/package_map.dart';
import '../globals.dart';
import '../resident_runner.dart';
+import '../toolchain.dart';
import 'build.dart';
// Files generated by the ahead-of-time snapshot builder.
@@ -52,8 +53,10 @@ class BuildAotCommand extends BuildSubCommand {
String typeName = path.basename(tools.getEngineArtifactsDirectory(platform, getBuildMode()).path);
Status status = logger.startProgress('Building AOT snapshot in ${getModeName(getBuildMode())} mode ($typeName)...');
- String outputPath = await buildAotSnapshot(
- findMainDartFile(targetFile),
+ String dartFile = findMainDartFile(targetFile);
+ String dillFile = await buildDilFile(dartFile);
+ String outputPath = await buildAotSnapshot(
+ dillFile != null ? dillFile : dartFile,
platform,
getBuildMode(),
outputPath: argResults['output-dir'],
@@ -72,6 +75,87 @@ String _getSdkExtensionPath(PackageMap packageMap, String package) {
return path.dirname(packageMap.map[package].toFilePath());
}
+
+Future<String> buildDilFile(String dartFile) async {
+ String engineSourcePath = ToolConfiguration.instance.engineSrcPath;
+ String engineBuildPath = ToolConfiguration.instance.engineBuildPath;
+ if (engineSourcePath == null) {
+ throw new Exception('Engine source path not found!');
+ }
+ if (engineBuildPath == null) {
+ throw new Exception('Engine build path path not found!');
+ }
+ String buildScript = path.join(
+ engineSourcePath, 'dart/pkg/kernel/bin/dartk.dart');
+ String transformScript = path.join(
+ engineSourcePath, 'dart/pkg/kernel/bin/transform.dart');
+ String patchedSdk = path.join(
+ engineBuildPath, 'patched_sdk');
+
+ PackageMap packageMap = new PackageMap(PackageMap.globalPackagesPath);
+ String packageMapError = packageMap.checkValid();
+ if (packageMapError != null) {
+ printError(packageMapError);
+ return null;
+ }
+
+ String skyEnginePkg = _getSdkExtensionPath(packageMap, 'sky_engine');
+ String uiPath = path.join(skyEnginePkg, 'dart_ui', 'ui.dart');
+ String jniPath = path.join(skyEnginePkg, 'dart_jni', 'jni.dart');
+ String vmServicePath = path.join(skyEnginePkg, 'sdk_ext', 'vmservice_io.dart');
+
+ String dillFile = dartFile.replaceAll('.dart', '.dill');
+ String transformedDillFile = dartFile.replaceAll('.dart', '.transformed.dill');
+ String inferredDillFile = dartFile.replaceAll('.dart', '.transformed.inferred.dill');
+ RunResult results = await runAsync(<String>[
+ 'dart',
+ '-c',
+ buildScript,
+ dartFile,
+ '--target=flutter',
+ '--link',
+ '--sdk=$patchedSdk',
+ '-o',
+ dillFile,
+ '--url-mapping=dart:ui::$uiPath',
+ '--url-mapping=dart:jni::$jniPath',
+ '--url-mapping=dart:vmservice_sky::$vmServicePath',
+ ]);
+ if (results.exitCode != 0) {
+ printStatus(results.toString());
+ return null;
+ }
+ results = await runAsync(<String>[
+ transformScript,
+ '-o',
+ transformedDillFile,
+ dillFile,
+ ]);
+ if (results.exitCode != 0) {
+ printStatus(results.toString());
+ return null;
+ }
+
+ bool disableInference = false;
+ //bool disableInference = true;
+ if (disableInference) return transformedDillFile;
+
+ results = await runAsync(<String>[
+ transformScript,
+ '-t',
+ 'infervalues',
+ '-o',
+ inferredDillFile,
+ transformedDillFile,
+ ]);
+ if (results.exitCode != 0) {
+ printStatus(results.toString());
+ return null;
+ }
+
+ return inferredDillFile;
+}
+
/// Build an AOT snapshot. Return `null` (and log to `printError`) if the method
/// fails.
Future<String> buildAotSnapshot(
« no previous file with comments | « no previous file | packages/flutter_tools/lib/src/commands/build_apk.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698