Let flutter build aot select a target platform (#4154)
Currently only android-arm and ios are supported target platforms.
diff --git a/packages/flutter_tools/lib/src/build_info.dart b/packages/flutter_tools/lib/src/build_info.dart
index 78fcbf4..efa53c1 100644
--- a/packages/flutter_tools/lib/src/build_info.dart
+++ b/packages/flutter_tools/lib/src/build_info.dart
@@ -69,6 +69,24 @@
assert(false);
}
+TargetPlatform getTargetPlatformForName(String platform) {
+ switch (platform) {
+ case 'android-arm':
+ return TargetPlatform.android_arm;
+ case 'android-x64':
+ return TargetPlatform.android_x64;
+ case 'android-x86':
+ return TargetPlatform.android_x86;
+ case 'ios':
+ return TargetPlatform.ios;
+ case 'darwin-x64':
+ return TargetPlatform.darwin_x64;
+ case 'linux-x64':
+ return TargetPlatform.linux_x64;
+ }
+ return null;
+}
+
HostPlatform getCurrentHostPlatform() {
if (Platform.isMacOS)
return HostPlatform.darwin_x64;
diff --git a/packages/flutter_tools/lib/src/commands/build_aot.dart b/packages/flutter_tools/lib/src/commands/build_aot.dart
index 408148a..3ebdbbd 100644
--- a/packages/flutter_tools/lib/src/commands/build_aot.dart
+++ b/packages/flutter_tools/lib/src/commands/build_aot.dart
@@ -25,7 +25,12 @@
usesTargetOption();
addBuildModeFlags();
usesPubOption();
- argParser.addOption('output-dir', defaultsTo: _kDefaultAotOutputDir);
+ argParser
+ ..addOption('output-dir', defaultsTo: _kDefaultAotOutputDir)
+ ..addOption('target-platform',
+ defaultsTo: 'android-arm',
+ allowed: <String>['android-arm', 'ios']
+ );
}
@override
@@ -36,9 +41,15 @@
@override
Future<int> runInProject() async {
+ String targetPlatform = argResults['target-platform'];
+ TargetPlatform platform = getTargetPlatformForName(targetPlatform);
+ if (platform == null) {
+ printError('Unknown platform: $targetPlatform');
+ return 1;
+ }
String outputPath = buildAotSnapshot(
findMainDartFile(argResults['target']),
- TargetPlatform.android_arm,
+ platform,
getBuildMode(),
outputPath: argResults['output-dir']
);
@@ -66,6 +77,11 @@
return null;
}
+ if (platform != TargetPlatform.android_arm && platform != TargetPlatform.ios) {
+ printError('${getNameForTargetPlatform(platform)} does not support AOT compilation.');
+ return null;
+ }
+
String entryPointsDir, genSnapshot;
String engineSrc = tools.engineSrcPath;
diff --git a/packages/flutter_tools/lib/src/commands/build_ios.dart b/packages/flutter_tools/lib/src/commands/build_ios.dart
index 80c9547..0b95ff6 100644
--- a/packages/flutter_tools/lib/src/commands/build_ios.dart
+++ b/packages/flutter_tools/lib/src/commands/build_ios.dart
@@ -22,7 +22,7 @@
final String name = 'ios';
@override
- final String description = 'Build an iOS application bundle (Mac OSX host only).';
+ final String description = 'Build an iOS application bundle (Mac OS X host only).';
@override
Future<int> runInProject() async {
@@ -46,7 +46,7 @@
printStatus('You will have to manually codesign before deploying to device.');
}
- String logTarget = forSimulator ? "simulator" : "device";
+ String logTarget = forSimulator ? 'simulator' : 'device';
printStatus('Building $app for $logTarget...');