blob: b406184475ded223423d119d17e513cb845acd44 [file] [log] [blame]
#!/usr/bin/env dart
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:io';
import 'package:args/args.dart';
import 'package:path/path.dart';
const clearLine = '\r\x1b[2K';
void aot(String sourceFile, String snapshotFile, bool enableAsserts,
bool buildElf, bool tfa, bool noTfa, String packages, List<String> ds) {
if (!FileSystemEntity.isFileSync(sourceFile)) {
print('Error: $sourceFile is not a file');
return;
}
String genSnapshotOption = buildElf
? '--snapshot-kind=app-aot-assembly'
: '--snapshot-kind=app-aot-blobs';
String genSnapshotFilename = buildElf
? '--assembly=$snapshotFile.S'
: '--blobs_container_filename=$snapshotFile';
String snapDir = dirname(Platform.script.path);
String binDir = canonicalize(join(snapDir, '..'));
String sdkDir = canonicalize(join(binDir, '..'));
String dartCommand = join(binDir, 'dart');
String snapshot = join(snapDir, 'gen_kernel.dart.snapshot');
stdout.write('${clearLine}Generating AOT snapshot');
List<String> dartArgs = <String>[
snapshot,
'--platform',
'${sdkDir}//lib/_internal/vm_platform_strong.dill',
'--aot',
'-Ddart.vm.product=true',
if (tfa) '--tfa',
if (noTfa) '--no-tfa',
...ds,
if (packages != null) ...['--packages', packages],
'-o',
'$snapshotFile.dill',
sourceFile
];
var cmdResult = Process.runSync(dartCommand, dartArgs);
if (cmdResult.exitCode != 0) {
print('\nGenerating AOT snapshot failed\n');
print(cmdResult.stdout);
print(cmdResult.stderr);
return;
}
stdout.write("${clearLine}Generating AOT .dill");
String genSnapshotCommand = join(binDir, 'utils', 'gen_snapshot');
List<String> genSnapshotArgs = [
genSnapshotOption,
genSnapshotFilename,
if (enableAsserts) '--enable-asserts',
'$snapshotFile.dill'
];
cmdResult = Process.runSync(genSnapshotCommand, genSnapshotArgs);
if (cmdResult.exitCode != 0) {
print('\nGenerating AOT .dill failed\n');
print(cmdResult.stdout);
print(cmdResult.stderr);
return;
}
stdout.write("${clearLine}Done.\n");
stdout.flush();
}
void setupAOTArgs(ArgParser parser) {
parser.addFlag('build-elf');
parser.addFlag('enable-asserts');
parser.addFlag('tfa');
parser.addFlag('no-tfa');
parser.addOption('packages');
}