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

import 'dart:async';

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

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

xster's avatar
xster committed
51 52
  AotBuilder aotBuilder;

53 54 55 56
  @override
  final String name = 'aot';

  @override
57
  final String description = "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
    );
80
    return FlutterCommandResult.success();
81 82
  }
}