// 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; } } }