// 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'; class Compiler { Compiler(this._path); String _path; Future compile({ String mainPath, String snapshotPath, String depfilePath, String buildOutputPath }) { final List args = [ _path, mainPath, '--package-root=${ArtifactStore.packageRoot}', '--snapshot=$snapshotPath' ]; if (depfilePath != null) { args.add('--depfile=$depfilePath'); } if (buildOutputPath != null) { args.add('--build-output=$buildOutputPath'); } return runCommandAndStreamOutput(args); } } Future _getCompilerPath(BuildConfiguration config) async { 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 await ArtifactStore.getPath(artifact); } class Toolchain { Toolchain({ this.compiler }); final Compiler compiler; static Future forConfigs(List configs) async { for (BuildConfiguration config in configs) { String compilerPath = await _getCompilerPath(config); if (compilerPath != null) return new Toolchain(compiler: new Compiler(compilerPath)); } return null; } }