mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
87 lines
3.0 KiB
Dart
87 lines
3.0 KiB
Dart
// 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:io';
|
|
|
|
import 'package:path/path.dart' as path;
|
|
|
|
import 'base/context.dart';
|
|
import 'build_info.dart';
|
|
import 'cache.dart';
|
|
import 'globals.dart';
|
|
|
|
enum HostTool {
|
|
SkySnapshot,
|
|
SkyShell,
|
|
}
|
|
|
|
const Map<HostTool, String> _kHostToolFileName = const <HostTool, String>{
|
|
HostTool.SkySnapshot: 'sky_snapshot',
|
|
HostTool.SkyShell: 'sky_shell',
|
|
};
|
|
|
|
/// A ToolConfiguration can return the tools directory for the current host platform
|
|
/// and the engine artifact directory for a given target platform. It is configurable
|
|
/// via command-line arguments in order to support local engine builds.
|
|
class ToolConfiguration {
|
|
ToolConfiguration();
|
|
|
|
Cache get cache => context[Cache];
|
|
|
|
static ToolConfiguration get instance => context[ToolConfiguration];
|
|
|
|
/// Override using the artifacts from the cache directory (--engine-src-path).
|
|
String engineSrcPath;
|
|
|
|
/// Path to a local engine build acting as a source for artifacts (--local-engine).
|
|
String engineBuildPath;
|
|
|
|
bool get isLocalEngine => engineSrcPath != null;
|
|
|
|
/// Return the directory that contains engine artifacts for the given targets.
|
|
/// This directory might contain artifacts like `libsky_shell.so`.
|
|
Directory getEngineArtifactsDirectory(TargetPlatform platform, BuildMode mode) {
|
|
Directory dir = _getEngineArtifactsDirectory(platform, mode);
|
|
if (dir != null)
|
|
printTrace('Using engine artifacts dir: ${dir.path}');
|
|
return dir;
|
|
}
|
|
|
|
Directory _getEngineArtifactsDirectory(TargetPlatform platform, BuildMode mode) {
|
|
if (engineBuildPath != null) {
|
|
return new Directory(engineBuildPath);
|
|
} else {
|
|
String suffix = mode != BuildMode.debug ? '-${getModeName(mode)}' : '';
|
|
|
|
// Create something like `android-arm` or `android-arm-release`.
|
|
String dirName = getNameForTargetPlatform(platform) + suffix;
|
|
Directory engineDir = cache.getArtifactDirectory('engine');
|
|
return new Directory(path.join(engineDir.path, dirName));
|
|
}
|
|
}
|
|
|
|
String getHostToolPath(HostTool tool) {
|
|
if (engineBuildPath == null) {
|
|
return path.join(cache.getArtifactDirectory('engine').path,
|
|
getNameForHostPlatform(getCurrentHostPlatform()),
|
|
_kHostToolFileName[tool]);
|
|
}
|
|
|
|
if (tool == HostTool.SkySnapshot) {
|
|
String clangPath = path.join(engineBuildPath, 'clang_x64', 'sky_snapshot');
|
|
if (FileSystemEntity.isFileSync(clangPath))
|
|
return clangPath;
|
|
return path.join(engineBuildPath, 'sky_snapshot');
|
|
} else if (tool == HostTool.SkyShell) {
|
|
if (getCurrentHostPlatform() == HostPlatform.linux_x64) {
|
|
return path.join(engineBuildPath, 'sky_shell');
|
|
} else if (getCurrentHostPlatform() == HostPlatform.darwin_x64) {
|
|
return path.join(engineBuildPath, 'SkyShell.app', 'Contents', 'MacOS', 'SkyShell');
|
|
}
|
|
}
|
|
|
|
throw 'Unexpected host tool: $tool';
|
|
}
|
|
}
|