blob: 366a831be20693f106be68301a4d21c94441bf07 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:engine_build_configs/engine_build_configs.dart';
import '../build_utils.dart';
import 'command.dart';
import 'flags.dart';
/// The root 'build' command.
final class BuildCommand extends CommandBase {
/// Constructs the 'build' command.
BuildCommand({
required super.environment,
required Map<String, BuilderConfig> configs,
}) {
builds = runnableBuilds(environment, configs);
debugCheckBuilds(builds);
argParser.addOption(
configFlag,
abbr: 'c',
defaultsTo: 'host_debug',
help: 'Specify the build config to use',
allowed: <String>[
for (final Build config in runnableBuilds(environment, configs))
config.name,
],
allowedHelp: <String, String>{
for (final Build config in runnableBuilds(environment, configs))
config.name: config.gn.join(' '),
},
);
argParser.addFlag(
rbeFlag,
defaultsTo: true,
help: 'RBE is enabled by default when available. Use --no-rbe to '
'disable it.',
);
}
/// List of compatible builds.
late final List<Build> builds;
@override
String get name => 'build';
@override
String get description => 'Builds the engine';
@override
Future<int> run() async {
final String configName = argResults![configFlag] as String;
final bool useRbe = argResults![rbeFlag] as bool;
final Build? build =
builds.where((Build build) => build.name == configName).firstOrNull;
if (build == null) {
environment.logger.error('Could not find config $configName');
return 1;
}
final List<String> extraGnArgs = <String>[
if (!useRbe) '--no-rbe',
];
// TODO(loic-sharma): Fetch dependencies if needed.
return runBuild(environment, build, extraGnArgs: extraGnArgs);
}
}