// Copyright 2015 The Chromium 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 'dart:async'; import 'dart:io'; import 'package:path/path.dart' as path; import 'artifacts.dart'; import 'base/process.dart'; import 'build_configuration.dart'; import 'package_map.dart'; class SnapshotCompiler { SnapshotCompiler(this._path); final String _path; Future<int> createSnapshot({ String mainPath, String snapshotPath, String depfilePath, String buildOutputPath }) { final List<String> args = [ _path, mainPath, '--packages=${PackageMap.instance.packagesPath}', '--snapshot=$snapshotPath' ]; if (depfilePath != null) args.add('--depfile=$depfilePath'); if (buildOutputPath != null) args.add('--build-output=$buildOutputPath'); return runCommandAndStreamOutput(args); } } String _getCompilerPath(BuildConfiguration config) { if (config.type != BuildType.prebuilt) { String compilerPath = path.join(config.buildDir, 'clang_x64', 'sky_snapshot'); if (FileSystemEntity.isFileSync(compilerPath)) return compilerPath; compilerPath = path.join(config.buildDir, 'sky_snapshot'); if (FileSystemEntity.isFileSync(compilerPath)) return compilerPath; return null; } Artifact artifact = ArtifactStore.getArtifact( type: ArtifactType.snapshot, hostPlatform: config.hostPlatform); return ArtifactStore.getPath(artifact); } class Toolchain { Toolchain({ this.compiler }); final SnapshotCompiler compiler; static Future<Toolchain> forConfigs(List<BuildConfiguration> configs) async { for (BuildConfiguration config in configs) { String compilerPath = _getCompilerPath(config); if (compilerPath != null) return new Toolchain(compiler: new SnapshotCompiler(compilerPath)); } return null; } }