build_aot.dart 2.78 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
2 3 4
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

xster's avatar
xster committed
5
import '../aot.dart';
6
import '../base/common.dart';
7
import '../build_info.dart';
xster's avatar
xster committed
8
import '../ios/bitcode.dart';
9
import '../resident_runner.dart';
10
import '../runner/flutter_command.dart';
11
import 'build.dart';
12

xster's avatar
xster committed
13
/// Builds AOT snapshots into platform specific library containers.
14
class BuildAotCommand extends BuildSubCommand with TargetPlatformBasedDevelopmentArtifacts {
15
  BuildAotCommand({this.aotBuilder}) {
16
    addTreeShakeIconsFlag();
17 18 19
    usesTargetOption();
    addBuildModeFlags();
    usesPubOption();
20
    usesDartDefineOption();
21
    usesExtraFrontendOptions();
22
    argParser
23
      ..addOption('output-dir', defaultsTo: getAotBuildDirectory())
24 25
      ..addOption('target-platform',
        defaultsTo: 'android-arm',
26
        allowed: <String>['android-arm', 'android-arm64', 'ios', 'android-x64'],
27
      )
28
      ..addFlag('quiet', defaultsTo: false)
29 30
      ..addMultiOption('ios-arch',
        splitCommas: true,
31 32
        defaultsTo: defaultIOSArchs.map<String>(getNameForDarwinArch),
        allowed: DarwinArch.values.map<String>(getNameForDarwinArch),
33
        help: 'iOS architectures to build.',
34
      )
35 36 37 38
      ..addMultiOption(FlutterOptions.kExtraGenSnapshotOptions,
        splitCommas: true,
        hide: true,
      )
39
      ..addFlag('bitcode',
xster's avatar
xster committed
40
        defaultsTo: kBitcodeEnabledDefault,
41 42
        help: 'Build the AOT bundle with bitcode. Requires a compatible bitcode engine.',
        hide: true,
43 44
      )
      ..addFlag('report-timings', hide: true);
45 46
  }

xster's avatar
xster committed
47 48
  AotBuilder aotBuilder;

49 50 51
  @override
  final String name = 'aot';

52
  // TODO(jonahwilliams): remove after https://github.com/flutter/flutter/issues/49562 is resolved.
53
  @override
54 55 56 57
  bool get deprecated => true;

  @override
  final String description = "(deprecated) Build an ahead-of-time compiled snapshot of your app's Dart code.";
58 59

  @override
60
  Future<FlutterCommandResult> runCommand() async {
61
    final String targetPlatform = stringArg('target-platform');
62
    final TargetPlatform platform = getTargetPlatformForName(targetPlatform);
63
    final String outputPath = stringArg('output-dir') ?? getAotBuildDirectory();
64
    final BuildInfo buildInfo = getBuildInfo();
65
    if (platform == null) {
66
      throwToolExit('Unknown platform: $targetPlatform');
67
    }
68

xster's avatar
xster committed
69 70 71 72 73
    aotBuilder ??= AotBuilder();

    await aotBuilder.build(
      platform: platform,
      outputPath: outputPath,
74
      buildInfo: buildInfo,
xster's avatar
xster committed
75
      mainDartFile: findMainDartFile(targetFile),
76 77 78
      bitcode: boolArg('bitcode'),
      quiet: boolArg('quiet'),
      iosBuildArchs: stringsArg('ios-arch').map<DarwinArch>(getIOSArchForName),
79
      reportTimings: boolArg('report-timings'),
80
    );
81
    return FlutterCommandResult.success();
82 83
  }
}