194 lines
5.1 KiB
Dart
194 lines
5.1 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 'build_configuration.dart';
|
|
import 'globals.dart';
|
|
|
|
enum ArtifactType {
|
|
snapshot,
|
|
shell,
|
|
mojo,
|
|
androidClassesJar,
|
|
androidIcuData,
|
|
androidKeystore,
|
|
androidLibSkyShell,
|
|
}
|
|
|
|
class Artifact {
|
|
const Artifact._({
|
|
this.name,
|
|
this.fileName,
|
|
this.type,
|
|
this.hostPlatform,
|
|
this.targetPlatform
|
|
});
|
|
|
|
final String name;
|
|
final String fileName;
|
|
final ArtifactType type;
|
|
final HostPlatform hostPlatform;
|
|
final TargetPlatform targetPlatform;
|
|
|
|
String get platform {
|
|
if (targetPlatform != null)
|
|
return getNameForTargetPlatform(targetPlatform);
|
|
if (hostPlatform != null)
|
|
return getNameForHostPlatform(hostPlatform);
|
|
assert(false);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
class ArtifactStore {
|
|
static const List<Artifact> knownArtifacts = const <Artifact>[
|
|
// tester
|
|
const Artifact._(
|
|
name: 'Flutter Tester',
|
|
fileName: 'sky_shell',
|
|
type: ArtifactType.shell,
|
|
targetPlatform: TargetPlatform.linux_x64
|
|
),
|
|
|
|
// snapshotters
|
|
const Artifact._(
|
|
name: 'Sky Snapshot',
|
|
fileName: 'sky_snapshot',
|
|
type: ArtifactType.snapshot,
|
|
hostPlatform: HostPlatform.linux_x64
|
|
),
|
|
const Artifact._(
|
|
name: 'Sky Snapshot',
|
|
fileName: 'sky_snapshot',
|
|
type: ArtifactType.snapshot,
|
|
hostPlatform: HostPlatform.darwin_x64
|
|
),
|
|
|
|
// mojo
|
|
const Artifact._(
|
|
name: 'Flutter for Mojo',
|
|
fileName: 'flutter.mojo',
|
|
type: ArtifactType.mojo,
|
|
targetPlatform: TargetPlatform.android_arm
|
|
),
|
|
const Artifact._(
|
|
name: 'Flutter for Mojo',
|
|
fileName: 'flutter.mojo',
|
|
type: ArtifactType.mojo,
|
|
targetPlatform: TargetPlatform.linux_x64
|
|
),
|
|
|
|
// android-arm
|
|
const Artifact._(
|
|
name: 'Compiled Java code',
|
|
fileName: 'classes.dex.jar',
|
|
type: ArtifactType.androidClassesJar,
|
|
targetPlatform: TargetPlatform.android_arm
|
|
),
|
|
const Artifact._(
|
|
name: 'ICU data table',
|
|
fileName: 'icudtl.dat',
|
|
type: ArtifactType.androidIcuData,
|
|
targetPlatform: TargetPlatform.android_arm
|
|
),
|
|
const Artifact._(
|
|
name: 'Key Store',
|
|
fileName: 'chromium-debug.keystore',
|
|
type: ArtifactType.androidKeystore,
|
|
targetPlatform: TargetPlatform.android_arm
|
|
),
|
|
const Artifact._(
|
|
name: 'Compiled C++ code',
|
|
fileName: 'libsky_shell.so',
|
|
type: ArtifactType.androidLibSkyShell,
|
|
targetPlatform: TargetPlatform.android_arm
|
|
),
|
|
|
|
// android-x86
|
|
const Artifact._(
|
|
name: 'Compiled Java code',
|
|
fileName: 'classes.dex.jar',
|
|
type: ArtifactType.androidClassesJar,
|
|
targetPlatform: TargetPlatform.android_x64
|
|
),
|
|
const Artifact._(
|
|
name: 'ICU data table',
|
|
fileName: 'icudtl.dat',
|
|
type: ArtifactType.androidIcuData,
|
|
targetPlatform: TargetPlatform.android_x64
|
|
),
|
|
const Artifact._(
|
|
name: 'Key Store',
|
|
fileName: 'chromium-debug.keystore',
|
|
type: ArtifactType.androidKeystore,
|
|
targetPlatform: TargetPlatform.android_x64
|
|
),
|
|
const Artifact._(
|
|
name: 'Compiled C++ code',
|
|
fileName: 'libsky_shell.so',
|
|
type: ArtifactType.androidLibSkyShell,
|
|
targetPlatform: TargetPlatform.android_x64
|
|
),
|
|
];
|
|
|
|
static Artifact getArtifact({
|
|
ArtifactType type,
|
|
HostPlatform hostPlatform,
|
|
TargetPlatform targetPlatform
|
|
}) {
|
|
for (Artifact artifact in ArtifactStore.knownArtifacts) {
|
|
if (type != null &&
|
|
type != artifact.type)
|
|
continue;
|
|
if (hostPlatform != null &&
|
|
artifact.hostPlatform != null &&
|
|
hostPlatform != artifact.hostPlatform)
|
|
continue;
|
|
if (targetPlatform != null &&
|
|
artifact.targetPlatform != null &&
|
|
targetPlatform != artifact.targetPlatform)
|
|
continue;
|
|
return artifact;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// Initialized by FlutterCommandRunner on startup.
|
|
static String flutterRoot;
|
|
|
|
static String _engineRevision;
|
|
|
|
static String get engineRevision {
|
|
if (_engineRevision == null) {
|
|
File revisionFile = new File(path.join(flutterRoot, 'bin', 'cache', 'engine.version'));
|
|
if (revisionFile.existsSync())
|
|
_engineRevision = revisionFile.readAsStringSync().trim();
|
|
}
|
|
return _engineRevision;
|
|
}
|
|
|
|
static Directory _getBaseCacheDir() {
|
|
return new Directory(path.join(flutterRoot, 'bin', 'cache', 'artifacts'));
|
|
}
|
|
|
|
// TODO(devoncarew): There are 5 call-sites of this (run_mojo, build_apk, the
|
|
// test command, toolchain, setup_xcodeproj); move them over to using
|
|
// something from `cache.dart`.
|
|
static String getPath(Artifact artifact) {
|
|
File cachedFile = new File(
|
|
path.join(_getBaseCacheDir().path, 'engine', artifact.platform, artifact.fileName)
|
|
);
|
|
|
|
if (!cachedFile.existsSync()) {
|
|
printError('File not found in the platform artifacts: ${cachedFile.path}');
|
|
return null;
|
|
} else {
|
|
return cachedFile.path;
|
|
}
|
|
}
|
|
}
|