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...');