Ian Hickson | 449f4a6 | 2019-11-27 15:04:02 -0800 | [diff] [blame] | 1 | // Copyright 2014 The Flutter Authors. All rights reserved. |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 5 | import 'package:meta/meta.dart'; |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 6 | import 'package:platform/platform.dart'; |
| 7 | import 'package:process/process.dart'; |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 8 | |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 9 | import 'base/file_system.dart'; |
Stanislav Baranov | 393f927 | 2018-08-16 08:43:41 -0700 | [diff] [blame] | 10 | import 'base/utils.dart'; |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 11 | import 'build_info.dart'; |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 12 | import 'cache.dart'; |
Alexander Aprelev | fe00598 | 2018-02-16 09:20:23 -0800 | [diff] [blame] | 13 | import 'dart/sdk.dart'; |
Jonah Williams | ee7a37f | 2020-01-06 11:04:20 -0800 | [diff] [blame] | 14 | import 'globals.dart' as globals; |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 15 | |
| 16 | enum Artifact { |
Jonah Williams | e91b98a | 2019-07-11 16:53:17 -0700 | [diff] [blame] | 17 | /// The tool which compiles a dart kernel file into native code. |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 18 | genSnapshot, |
Jonah Williams | e91b98a | 2019-07-11 16:53:17 -0700 | [diff] [blame] | 19 | /// The flutter tester binary. |
Jason Simmons | e7f1361 | 2017-03-29 16:30:41 -0700 | [diff] [blame] | 20 | flutterTester, |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 21 | snapshotDart, |
| 22 | flutterFramework, |
Jonah Williams | e91b98a | 2019-07-11 16:53:17 -0700 | [diff] [blame] | 23 | /// The framework directory of the macOS desktop. |
Jonah Williams | 7f959d8 | 2019-04-22 13:51:00 -0700 | [diff] [blame] | 24 | flutterMacOSFramework, |
Michael Goderbauer | d579d58 | 2017-03-02 10:57:27 -0800 | [diff] [blame] | 25 | vmSnapshotData, |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 26 | isolateSnapshotData, |
| 27 | platformKernelDill, |
| 28 | platformLibrariesJson, |
| 29 | flutterPatchedSdkPath, |
| 30 | frontendServerSnapshotForEngineDartSdk, |
Jonah Williams | cc51ad5 | 2019-11-07 20:13:02 -0800 | [diff] [blame] | 31 | /// The root directory of the dart SDK. |
Alexander Aprelev | fe00598 | 2018-02-16 09:20:23 -0800 | [diff] [blame] | 32 | engineDartSdkPath, |
Jonah Williams | e91b98a | 2019-07-11 16:53:17 -0700 | [diff] [blame] | 33 | /// The dart binary used to execute any of the required snapshots. |
Keerti Parthasarathy | 0263394 | 2018-03-06 14:41:50 -0800 | [diff] [blame] | 34 | engineDartBinary, |
Jonah Williams | e91b98a | 2019-07-11 16:53:17 -0700 | [diff] [blame] | 35 | /// The dart snapshot of the dart2js compiler. |
Jonah Williams | 9bc5656 | 2019-02-14 22:42:30 -0800 | [diff] [blame] | 36 | dart2jsSnapshot, |
Jonah Williams | e91b98a | 2019-07-11 16:53:17 -0700 | [diff] [blame] | 37 | /// The dart snapshot of the dartdev compiler. |
Jonah Williams | da600ba | 2019-05-29 22:46:28 -0700 | [diff] [blame] | 38 | dartdevcSnapshot, |
Jonah Williams | e91b98a | 2019-07-11 16:53:17 -0700 | [diff] [blame] | 39 | /// The dart snpashot of the kernel worker compiler. |
Jonah Williams | 9bc5656 | 2019-02-14 22:42:30 -0800 | [diff] [blame] | 40 | kernelWorkerSnapshot, |
Jonah Williams | e91b98a | 2019-07-11 16:53:17 -0700 | [diff] [blame] | 41 | /// The root of the web implementation of the dart SDK. |
Jonah Williams | 44b22c7 | 2019-03-25 18:47:37 -0700 | [diff] [blame] | 42 | flutterWebSdk, |
Jonah Williams | 79a985f | 2019-10-22 20:35:05 -0700 | [diff] [blame] | 43 | /// The summary dill for the dartdevc target. |
| 44 | webPlatformKernelDill, |
Christopher Fujino | 102ab1e | 2019-07-15 09:22:29 -0700 | [diff] [blame] | 45 | iosDeploy, |
Christopher Fujino | 102ab1e | 2019-07-15 09:22:29 -0700 | [diff] [blame] | 46 | idevicesyslog, |
| 47 | idevicescreenshot, |
| 48 | ideviceinstaller, |
| 49 | iproxy, |
Jonah Williams | e91b98a | 2019-07-11 16:53:17 -0700 | [diff] [blame] | 50 | /// The root of the Linux desktop sources. |
| 51 | linuxDesktopPath, |
| 52 | /// The root of the Windows desktop sources. |
| 53 | windowsDesktopPath, |
| 54 | /// The root of the sky_engine package |
| 55 | skyEnginePath, |
Jonah Williams | 2ab4699 | 2019-07-31 16:19:22 -0700 | [diff] [blame] | 56 | /// The location of the macOS engine podspec file. |
| 57 | flutterMacOSPodspec, |
Zachary Anderson | 0dfabb2 | 2019-10-28 09:38:08 -0700 | [diff] [blame] | 58 | |
| 59 | // Fuchsia artifacts from the engine prebuilts. |
| 60 | fuchsiaKernelCompiler, |
Zachary Anderson | 05226d2 | 2019-11-21 12:55:39 -0800 | [diff] [blame] | 61 | fuchsiaFlutterRunner, |
Dan Field | 525855d | 2020-01-21 16:53:02 -0800 | [diff] [blame] | 62 | |
| 63 | /// Tools related to subsetting or icon font files. |
| 64 | fontSubset, |
| 65 | constFinder, |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 66 | } |
| 67 | |
Alexandre Ardhuin | 5169ab5 | 2019-02-21 09:27:07 +0100 | [diff] [blame] | 68 | String _artifactToFileName(Artifact artifact, [ TargetPlatform platform, BuildMode mode ]) { |
Dan Field | 525855d | 2020-01-21 16:53:02 -0800 | [diff] [blame] | 69 | final String exe = platform == TargetPlatform.windows_x64 ? '.exe' : ''; |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 70 | switch (artifact) { |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 71 | case Artifact.genSnapshot: |
Alexander Aprelev | 70b32e8 | 2017-12-22 14:58:53 -0800 | [diff] [blame] | 72 | return 'gen_snapshot'; |
Jason Simmons | e7f1361 | 2017-03-29 16:30:41 -0700 | [diff] [blame] | 73 | case Artifact.flutterTester: |
Dan Field | 525855d | 2020-01-21 16:53:02 -0800 | [diff] [blame] | 74 | return 'flutter_tester$exe'; |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 75 | case Artifact.snapshotDart: |
| 76 | return 'snapshot.dart'; |
| 77 | case Artifact.flutterFramework: |
| 78 | return 'Flutter.framework'; |
Jonah Williams | 7f959d8 | 2019-04-22 13:51:00 -0700 | [diff] [blame] | 79 | case Artifact.flutterMacOSFramework: |
| 80 | return 'FlutterMacOS.framework'; |
Michael Goderbauer | d579d58 | 2017-03-02 10:57:27 -0800 | [diff] [blame] | 81 | case Artifact.vmSnapshotData: |
| 82 | return 'vm_isolate_snapshot.bin'; |
| 83 | case Artifact.isolateSnapshotData: |
| 84 | return 'isolate_snapshot.bin'; |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 85 | case Artifact.platformKernelDill: |
Siva | 426d6b0 | 2018-01-04 10:39:02 -0800 | [diff] [blame] | 86 | return 'platform_strong.dill'; |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 87 | case Artifact.platformLibrariesJson: |
| 88 | return 'libraries.json'; |
| 89 | case Artifact.flutterPatchedSdkPath: |
| 90 | assert(false, 'No filename for sdk path, should not be invoked'); |
| 91 | return null; |
Jonah Williams | 44b22c7 | 2019-03-25 18:47:37 -0700 | [diff] [blame] | 92 | case Artifact.flutterWebSdk: |
| 93 | assert(false, 'No filename for web sdk path, should not be invoked'); |
| 94 | return null; |
Alexander Aprelev | fe00598 | 2018-02-16 09:20:23 -0800 | [diff] [blame] | 95 | case Artifact.engineDartSdkPath: |
| 96 | return 'dart-sdk'; |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 97 | case Artifact.frontendServerSnapshotForEngineDartSdk: |
| 98 | return 'frontend_server.dart.snapshot'; |
Keerti Parthasarathy | 0263394 | 2018-03-06 14:41:50 -0800 | [diff] [blame] | 99 | case Artifact.engineDartBinary: |
Dan Field | 525855d | 2020-01-21 16:53:02 -0800 | [diff] [blame] | 100 | return 'dart$exe'; |
Jonah Williams | 9bc5656 | 2019-02-14 22:42:30 -0800 | [diff] [blame] | 101 | case Artifact.dart2jsSnapshot: |
Jonah Williams | 44b22c7 | 2019-03-25 18:47:37 -0700 | [diff] [blame] | 102 | return 'dart2js.dart.snapshot'; |
Jonah Williams | da600ba | 2019-05-29 22:46:28 -0700 | [diff] [blame] | 103 | case Artifact.dartdevcSnapshot: |
| 104 | return 'dartdevc.dart.snapshot'; |
Jonah Williams | 9bc5656 | 2019-02-14 22:42:30 -0800 | [diff] [blame] | 105 | case Artifact.kernelWorkerSnapshot: |
Jonah Williams | 44b22c7 | 2019-03-25 18:47:37 -0700 | [diff] [blame] | 106 | return 'kernel_worker.dart.snapshot'; |
Christopher Fujino | 102ab1e | 2019-07-15 09:22:29 -0700 | [diff] [blame] | 107 | case Artifact.iosDeploy: |
| 108 | return 'ios-deploy'; |
Christopher Fujino | 102ab1e | 2019-07-15 09:22:29 -0700 | [diff] [blame] | 109 | case Artifact.idevicesyslog: |
| 110 | return 'idevicesyslog'; |
| 111 | case Artifact.idevicescreenshot: |
| 112 | return 'idevicescreenshot'; |
| 113 | case Artifact.ideviceinstaller: |
| 114 | return 'ideviceinstaller'; |
| 115 | case Artifact.iproxy: |
| 116 | return 'iproxy'; |
Jonah Williams | e91b98a | 2019-07-11 16:53:17 -0700 | [diff] [blame] | 117 | case Artifact.linuxDesktopPath: |
Jonah Williams | e91b98a | 2019-07-11 16:53:17 -0700 | [diff] [blame] | 118 | return ''; |
| 119 | case Artifact.windowsDesktopPath: |
Jonah Williams | e91b98a | 2019-07-11 16:53:17 -0700 | [diff] [blame] | 120 | return ''; |
| 121 | case Artifact.skyEnginePath: |
| 122 | return 'sky_engine'; |
Jonah Williams | 2ab4699 | 2019-07-31 16:19:22 -0700 | [diff] [blame] | 123 | case Artifact.flutterMacOSPodspec: |
| 124 | return 'FlutterMacOS.podspec'; |
Jonah Williams | 79a985f | 2019-10-22 20:35:05 -0700 | [diff] [blame] | 125 | case Artifact.webPlatformKernelDill: |
| 126 | return 'flutter_ddc_sdk.dill'; |
Zachary Anderson | 0dfabb2 | 2019-10-28 09:38:08 -0700 | [diff] [blame] | 127 | case Artifact.fuchsiaKernelCompiler: |
| 128 | return 'kernel_compiler.snapshot'; |
Zachary Anderson | 05226d2 | 2019-11-21 12:55:39 -0800 | [diff] [blame] | 129 | case Artifact.fuchsiaFlutterRunner: |
| 130 | final String jitOrAot = mode.isJit ? '_jit' : '_aot'; |
| 131 | final String productOrNo = mode.isRelease ? '_product' : ''; |
| 132 | return 'flutter$jitOrAot${productOrNo}_runner-0.far'; |
Dan Field | 525855d | 2020-01-21 16:53:02 -0800 | [diff] [blame] | 133 | case Artifact.fontSubset: |
| 134 | return 'font-subset$exe'; |
| 135 | case Artifact.constFinder: |
| 136 | return 'const_finder.dart.snapshot'; |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 137 | } |
| 138 | assert(false, 'Invalid artifact $artifact.'); |
| 139 | return null; |
| 140 | } |
| 141 | |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 142 | class EngineBuildPaths { |
Alexandre Ardhuin | ef276ff | 2019-01-29 21:47:16 +0100 | [diff] [blame] | 143 | const EngineBuildPaths({ |
| 144 | @required this.targetEngine, |
| 145 | @required this.hostEngine, |
| 146 | }) : assert(targetEngine != null), |
| 147 | assert(hostEngine != null); |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 148 | |
| 149 | final String targetEngine; |
| 150 | final String hostEngine; |
| 151 | } |
| 152 | |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 153 | // Manages the engine artifacts of Flutter. |
| 154 | abstract class Artifacts { |
Todd Volkert | 8d11f5c | 2018-03-28 10:58:28 -0700 | [diff] [blame] | 155 | static LocalEngineArtifacts getLocalEngine(String engineSrcPath, EngineBuildPaths engineBuildPaths) { |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 156 | return LocalEngineArtifacts( |
| 157 | engineSrcPath, |
| 158 | engineBuildPaths.targetEngine, |
| 159 | engineBuildPaths.hostEngine, |
| 160 | cache: globals.cache, |
| 161 | fileSystem: globals.fs, |
| 162 | processManager: globals.processManager, |
| 163 | platform: globals.platform, |
| 164 | ); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 165 | } |
| 166 | |
| 167 | // Returns the requested [artifact] for the [platform] and [mode] combination. |
Alexander Aprelev | d775908 | 2019-04-15 21:02:20 -0700 | [diff] [blame] | 168 | String getArtifactPath(Artifact artifact, { TargetPlatform platform, BuildMode mode }); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 169 | |
| 170 | // Returns which set of engine artifacts is currently used for the [platform] |
| 171 | // and [mode] combination. |
Alexandre Ardhuin | 5169ab5 | 2019-02-21 09:27:07 +0100 | [diff] [blame] | 172 | String getEngineType(TargetPlatform platform, [ BuildMode mode ]); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 173 | } |
| 174 | |
Jonah Williams | 7a487b2 | 2019-09-27 18:54:24 -0700 | [diff] [blame] | 175 | |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 176 | /// Manages the engine artifacts downloaded to the local cache. |
| 177 | class CachedArtifacts extends Artifacts { |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 178 | CachedArtifacts({ |
| 179 | @required FileSystem fileSystem, |
| 180 | @required Platform platform, |
| 181 | @required Cache cache, |
| 182 | }) : _fileSystem = fileSystem, |
| 183 | _platform = platform, |
| 184 | _cache = cache; |
| 185 | |
| 186 | final FileSystem _fileSystem; |
| 187 | final Platform _platform; |
| 188 | final Cache _cache; |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 189 | |
| 190 | @override |
Alexander Aprelev | d775908 | 2019-04-15 21:02:20 -0700 | [diff] [blame] | 191 | String getArtifactPath(Artifact artifact, { TargetPlatform platform, BuildMode mode }) { |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 192 | switch (platform) { |
| 193 | case TargetPlatform.android_arm: |
Jason Simmons | d5149d4 | 2018-02-01 15:14:48 -0800 | [diff] [blame] | 194 | case TargetPlatform.android_arm64: |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 195 | case TargetPlatform.android_x64: |
| 196 | case TargetPlatform.android_x86: |
| 197 | return _getAndroidArtifactPath(artifact, platform, mode); |
| 198 | case TargetPlatform.ios: |
| 199 | return _getIosArtifactPath(artifact, platform, mode); |
| 200 | case TargetPlatform.darwin_x64: |
Jonah Williams | b2d19d2 | 2019-08-23 08:46:24 -0700 | [diff] [blame] | 201 | return _getDarwinArtifactPath(artifact, platform, mode); |
Zachary Anderson | 0dfabb2 | 2019-10-28 09:38:08 -0700 | [diff] [blame] | 202 | case TargetPlatform.fuchsia_arm64: |
| 203 | case TargetPlatform.fuchsia_x64: |
| 204 | return _getFuchsiaArtifactPath(artifact, platform, mode); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 205 | case TargetPlatform.linux_x64: |
Jonah Williams | b2d19d2 | 2019-08-23 08:46:24 -0700 | [diff] [blame] | 206 | case TargetPlatform.windows_x64: |
Konstantin Scheglov | 38970f5 | 2018-04-10 09:37:16 -0700 | [diff] [blame] | 207 | case TargetPlatform.tester: |
Jonah Williams | 83986ac | 2019-06-03 23:19:42 -0700 | [diff] [blame] | 208 | case TargetPlatform.web_javascript: |
Jonah Williams | b2d19d2 | 2019-08-23 08:46:24 -0700 | [diff] [blame] | 209 | default: // could be null, but that can't be specified as a case. |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 210 | return _getHostArtifactPath(artifact, platform ?? _currentHostPlatform(_platform), mode); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 211 | } |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 212 | } |
| 213 | |
| 214 | @override |
Alexandre Ardhuin | 5169ab5 | 2019-02-21 09:27:07 +0100 | [diff] [blame] | 215 | String getEngineType(TargetPlatform platform, [ BuildMode mode ]) { |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 216 | return _fileSystem.path.basename(_getEngineArtifactsPath(platform, mode)); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 217 | } |
| 218 | |
Jonah Williams | b2d19d2 | 2019-08-23 08:46:24 -0700 | [diff] [blame] | 219 | String _getDarwinArtifactPath(Artifact artifact, TargetPlatform platform, BuildMode mode) { |
| 220 | // When platform is null, a generic host platform artifact is being requested |
| 221 | // and not the gen_snapshot for darwin as a target platform. |
| 222 | if (platform != null && artifact == Artifact.genSnapshot) { |
| 223 | final String engineDir = _getEngineArtifactsPath(platform, mode); |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 224 | return _fileSystem.path.join(engineDir, _artifactToFileName(artifact)); |
Jonah Williams | b2d19d2 | 2019-08-23 08:46:24 -0700 | [diff] [blame] | 225 | } |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 226 | return _getHostArtifactPath(artifact, platform ?? _currentHostPlatform(_platform), mode); |
Jonah Williams | b2d19d2 | 2019-08-23 08:46:24 -0700 | [diff] [blame] | 227 | } |
| 228 | |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 229 | String _getAndroidArtifactPath(Artifact artifact, TargetPlatform platform, BuildMode mode) { |
Chris Bracken | 7a09316 | 2017-03-03 17:50:46 -0800 | [diff] [blame] | 230 | final String engineDir = _getEngineArtifactsPath(platform, mode); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 231 | switch (artifact) { |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 232 | case Artifact.frontendServerSnapshotForEngineDartSdk: |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 233 | assert(mode != BuildMode.debug, 'Artifact $artifact only available in non-debug mode.'); |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 234 | return _fileSystem.path.join(engineDir, _artifactToFileName(artifact)); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 235 | case Artifact.genSnapshot: |
| 236 | assert(mode != BuildMode.debug, 'Artifact $artifact only available in non-debug mode.'); |
Chris Bracken | 7a09316 | 2017-03-03 17:50:46 -0800 | [diff] [blame] | 237 | final String hostPlatform = getNameForHostPlatform(getCurrentHostPlatform()); |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 238 | return _fileSystem.path.join(engineDir, hostPlatform, _artifactToFileName(artifact)); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 239 | default: |
Zachary Anderson | d0d8e6e | 2019-10-30 14:11:18 -0700 | [diff] [blame] | 240 | return _getHostArtifactPath(artifact, platform, mode); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 241 | } |
| 242 | } |
| 243 | |
| 244 | String _getIosArtifactPath(Artifact artifact, TargetPlatform platform, BuildMode mode) { |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 245 | switch (artifact) { |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 246 | case Artifact.genSnapshot: |
| 247 | case Artifact.snapshotDart: |
| 248 | case Artifact.flutterFramework: |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 249 | case Artifact.frontendServerSnapshotForEngineDartSdk: |
Zachary Anderson | d0d8e6e | 2019-10-30 14:11:18 -0700 | [diff] [blame] | 250 | final String artifactFileName = _artifactToFileName(artifact); |
Christopher Fujino | 102ab1e | 2019-07-15 09:22:29 -0700 | [diff] [blame] | 251 | final String engineDir = _getEngineArtifactsPath(platform, mode); |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 252 | return _fileSystem.path.join(engineDir, artifactFileName); |
Christopher Fujino | 102ab1e | 2019-07-15 09:22:29 -0700 | [diff] [blame] | 253 | case Artifact.idevicescreenshot: |
| 254 | case Artifact.idevicesyslog: |
Zachary Anderson | d0d8e6e | 2019-10-30 14:11:18 -0700 | [diff] [blame] | 255 | final String artifactFileName = _artifactToFileName(artifact); |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 256 | return _cache.getArtifactDirectory('libimobiledevice').childFile(artifactFileName).path; |
Christopher Fujino | 102ab1e | 2019-07-15 09:22:29 -0700 | [diff] [blame] | 257 | case Artifact.iosDeploy: |
Zachary Anderson | d0d8e6e | 2019-10-30 14:11:18 -0700 | [diff] [blame] | 258 | final String artifactFileName = _artifactToFileName(artifact); |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 259 | return _cache.getArtifactDirectory('ios-deploy').childFile(artifactFileName).path; |
Christopher Fujino | 102ab1e | 2019-07-15 09:22:29 -0700 | [diff] [blame] | 260 | case Artifact.ideviceinstaller: |
Zachary Anderson | d0d8e6e | 2019-10-30 14:11:18 -0700 | [diff] [blame] | 261 | final String artifactFileName = _artifactToFileName(artifact); |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 262 | return _cache.getArtifactDirectory('ideviceinstaller').childFile(artifactFileName).path; |
Christopher Fujino | 102ab1e | 2019-07-15 09:22:29 -0700 | [diff] [blame] | 263 | case Artifact.iproxy: |
Zachary Anderson | d0d8e6e | 2019-10-30 14:11:18 -0700 | [diff] [blame] | 264 | final String artifactFileName = _artifactToFileName(artifact); |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 265 | return _cache.getArtifactDirectory('usbmuxd').childFile(artifactFileName).path; |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 266 | default: |
Zachary Anderson | d0d8e6e | 2019-10-30 14:11:18 -0700 | [diff] [blame] | 267 | return _getHostArtifactPath(artifact, platform, mode); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 268 | } |
| 269 | } |
| 270 | |
Zachary Anderson | 0dfabb2 | 2019-10-28 09:38:08 -0700 | [diff] [blame] | 271 | String _getFuchsiaArtifactPath(Artifact artifact, TargetPlatform platform, BuildMode mode) { |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 272 | final String root = _fileSystem.path.join( |
| 273 | _cache.getArtifactDirectory('flutter_runner').path, |
Zachary Anderson | 0dfabb2 | 2019-10-28 09:38:08 -0700 | [diff] [blame] | 274 | 'flutter', |
| 275 | fuchsiaArchForTargetPlatform(platform), |
Zachary Anderson | 05226d2 | 2019-11-21 12:55:39 -0800 | [diff] [blame] | 276 | mode.isRelease ? 'release' : mode.toString(), |
Zachary Anderson | 0dfabb2 | 2019-10-28 09:38:08 -0700 | [diff] [blame] | 277 | ); |
Zachary Anderson | 05226d2 | 2019-11-21 12:55:39 -0800 | [diff] [blame] | 278 | final String runtime = mode.isJit ? 'jit' : 'aot'; |
Zachary Anderson | 0dfabb2 | 2019-10-28 09:38:08 -0700 | [diff] [blame] | 279 | switch (artifact) { |
Zachary Anderson | 05226d2 | 2019-11-21 12:55:39 -0800 | [diff] [blame] | 280 | case Artifact.genSnapshot: |
| 281 | final String genSnapshot = mode.isRelease ? 'gen_snapshot_product' : 'gen_snapshot'; |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 282 | return _fileSystem.path.join(root, runtime, 'dart_binaries', genSnapshot); |
Zachary Anderson | d0d8e6e | 2019-10-30 14:11:18 -0700 | [diff] [blame] | 283 | case Artifact.flutterPatchedSdkPath: |
| 284 | const String artifactFileName = 'flutter_runner_patched_sdk'; |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 285 | return _fileSystem.path.join(root, runtime, artifactFileName); |
Zachary Anderson | d0d8e6e | 2019-10-30 14:11:18 -0700 | [diff] [blame] | 286 | case Artifact.platformKernelDill: |
| 287 | final String artifactFileName = _artifactToFileName(artifact, platform, mode); |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 288 | return _fileSystem.path.join(root, runtime, 'flutter_runner_patched_sdk', artifactFileName); |
Zachary Anderson | d0d8e6e | 2019-10-30 14:11:18 -0700 | [diff] [blame] | 289 | case Artifact.fuchsiaKernelCompiler: |
| 290 | final String artifactFileName = _artifactToFileName(artifact, platform, mode); |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 291 | return _fileSystem.path.join(root, runtime, 'dart_binaries', artifactFileName); |
Zachary Anderson | 05226d2 | 2019-11-21 12:55:39 -0800 | [diff] [blame] | 292 | case Artifact.fuchsiaFlutterRunner: |
Zachary Anderson | d0d8e6e | 2019-10-30 14:11:18 -0700 | [diff] [blame] | 293 | final String artifactFileName = _artifactToFileName(artifact, platform, mode); |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 294 | return _fileSystem.path.join(root, runtime, artifactFileName); |
Zachary Anderson | 0dfabb2 | 2019-10-28 09:38:08 -0700 | [diff] [blame] | 295 | default: |
Zachary Anderson | d0d8e6e | 2019-10-30 14:11:18 -0700 | [diff] [blame] | 296 | return _getHostArtifactPath(artifact, platform, mode); |
Zachary Anderson | 0dfabb2 | 2019-10-28 09:38:08 -0700 | [diff] [blame] | 297 | } |
| 298 | } |
| 299 | |
Alexander Aprelev | d775908 | 2019-04-15 21:02:20 -0700 | [diff] [blame] | 300 | String _getFlutterPatchedSdkPath(BuildMode mode) { |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 301 | final String engineArtifactsPath = _cache.getArtifactDirectory('engine').path; |
| 302 | return _fileSystem.path.join(engineArtifactsPath, 'common', |
Alexander Aprelev | d775908 | 2019-04-15 21:02:20 -0700 | [diff] [blame] | 303 | mode == BuildMode.release ? 'flutter_patched_sdk_product' : 'flutter_patched_sdk'); |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 304 | } |
| 305 | |
Jonah Williams | 44b22c7 | 2019-03-25 18:47:37 -0700 | [diff] [blame] | 306 | String _getFlutterWebSdkPath() { |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 307 | return _cache.getWebSdkDirectory().path; |
Jonah Williams | 44b22c7 | 2019-03-25 18:47:37 -0700 | [diff] [blame] | 308 | } |
| 309 | |
Stanislav Baranov | c799c2f | 2018-09-20 13:12:38 -0700 | [diff] [blame] | 310 | String _getHostArtifactPath(Artifact artifact, TargetPlatform platform, BuildMode mode) { |
Jonah Williams | b2d19d2 | 2019-08-23 08:46:24 -0700 | [diff] [blame] | 311 | assert(platform != null); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 312 | switch (artifact) { |
Michael Goderbauer | 906103d | 2017-03-08 13:33:06 -0800 | [diff] [blame] | 313 | case Artifact.genSnapshot: |
| 314 | // For script snapshots any gen_snapshot binary will do. Returning gen_snapshot for |
| 315 | // android_arm in profile mode because it is available on all supported host platforms. |
| 316 | return _getAndroidArtifactPath(artifact, TargetPlatform.android_arm, BuildMode.profile); |
Jason Simmons | e7f1361 | 2017-03-29 16:30:41 -0700 | [diff] [blame] | 317 | case Artifact.flutterTester: |
Michael Goderbauer | d579d58 | 2017-03-02 10:57:27 -0800 | [diff] [blame] | 318 | case Artifact.vmSnapshotData: |
| 319 | case Artifact.isolateSnapshotData: |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 320 | case Artifact.frontendServerSnapshotForEngineDartSdk: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 321 | final String engineArtifactsPath = _cache.getArtifactDirectory('engine').path; |
Chris Bracken | 7a09316 | 2017-03-03 17:50:46 -0800 | [diff] [blame] | 322 | final String platformDirName = getNameForTargetPlatform(platform); |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 323 | return _fileSystem.path.join(engineArtifactsPath, platformDirName, _artifactToFileName(artifact, platform, mode)); |
Alexander Aprelev | fe00598 | 2018-02-16 09:20:23 -0800 | [diff] [blame] | 324 | case Artifact.engineDartSdkPath: |
| 325 | return dartSdkPath; |
Keerti Parthasarathy | 0263394 | 2018-03-06 14:41:50 -0800 | [diff] [blame] | 326 | case Artifact.engineDartBinary: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 327 | return _fileSystem.path.join(dartSdkPath, 'bin', _artifactToFileName(artifact, platform)); |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 328 | case Artifact.platformKernelDill: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 329 | return _fileSystem.path.join(_getFlutterPatchedSdkPath(mode), _artifactToFileName(artifact)); |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 330 | case Artifact.platformLibrariesJson: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 331 | return _fileSystem.path.join(_getFlutterPatchedSdkPath(mode), 'lib', _artifactToFileName(artifact)); |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 332 | case Artifact.flutterPatchedSdkPath: |
Alexander Aprelev | d775908 | 2019-04-15 21:02:20 -0700 | [diff] [blame] | 333 | return _getFlutterPatchedSdkPath(mode); |
Jonah Williams | 44b22c7 | 2019-03-25 18:47:37 -0700 | [diff] [blame] | 334 | case Artifact.flutterWebSdk: |
| 335 | return _getFlutterWebSdkPath(); |
Jonah Williams | 79a985f | 2019-10-22 20:35:05 -0700 | [diff] [blame] | 336 | case Artifact.webPlatformKernelDill: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 337 | return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', _artifactToFileName(artifact)); |
Jonah Williams | 9bc5656 | 2019-02-14 22:42:30 -0800 | [diff] [blame] | 338 | case Artifact.dart2jsSnapshot: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 339 | return _fileSystem.path.join(dartSdkPath, 'bin', 'snapshots', _artifactToFileName(artifact)); |
Jonah Williams | da600ba | 2019-05-29 22:46:28 -0700 | [diff] [blame] | 340 | case Artifact.dartdevcSnapshot: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 341 | return _fileSystem.path.join(dartSdkPath, 'bin', 'snapshots', _artifactToFileName(artifact)); |
Jonah Williams | 9bc5656 | 2019-02-14 22:42:30 -0800 | [diff] [blame] | 342 | case Artifact.kernelWorkerSnapshot: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 343 | return _fileSystem.path.join(dartSdkPath, 'bin', 'snapshots', _artifactToFileName(artifact)); |
Jonah Williams | 7f959d8 | 2019-04-22 13:51:00 -0700 | [diff] [blame] | 344 | case Artifact.flutterMacOSFramework: |
Jonah Williams | e91b98a | 2019-07-11 16:53:17 -0700 | [diff] [blame] | 345 | case Artifact.linuxDesktopPath: |
| 346 | case Artifact.windowsDesktopPath: |
Jonah Williams | 2ab4699 | 2019-07-31 16:19:22 -0700 | [diff] [blame] | 347 | case Artifact.flutterMacOSPodspec: |
Jonah Williams | b2d19d2 | 2019-08-23 08:46:24 -0700 | [diff] [blame] | 348 | // TODO(jonahwilliams): remove once debug desktop artifacts are uploaded |
| 349 | // under a separate directory from the host artifacts. |
| 350 | // https://github.com/flutter/flutter/issues/38935 |
| 351 | String platformDirName = getNameForTargetPlatform(platform); |
| 352 | if (mode == BuildMode.profile || mode == BuildMode.release) { |
| 353 | platformDirName = '$platformDirName-${getNameForBuildMode(mode)}'; |
| 354 | } |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 355 | final String engineArtifactsPath = _cache.getArtifactDirectory('engine').path; |
| 356 | return _fileSystem.path.join(engineArtifactsPath, platformDirName, _artifactToFileName(artifact, platform, mode)); |
Jonah Williams | e91b98a | 2019-07-11 16:53:17 -0700 | [diff] [blame] | 357 | case Artifact.skyEnginePath: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 358 | final Directory dartPackageDirectory = _cache.getCacheDir('pkg'); |
| 359 | return _fileSystem.path.join(dartPackageDirectory.path, _artifactToFileName(artifact)); |
Dan Field | 525855d | 2020-01-21 16:53:02 -0800 | [diff] [blame] | 360 | case Artifact.fontSubset: |
| 361 | case Artifact.constFinder: |
Dan Field | 4b8efad | 2020-02-04 20:34:24 -0800 | [diff] [blame] | 362 | return _cache.getArtifactDirectory('engine') |
| 363 | .childDirectory(getNameForTargetPlatform(platform)) |
| 364 | .childFile(_artifactToFileName(artifact, platform, mode)) |
| 365 | .path; |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 366 | default: |
| 367 | assert(false, 'Artifact $artifact not available for platform $platform.'); |
| 368 | return null; |
| 369 | } |
| 370 | } |
| 371 | |
Alexandre Ardhuin | 5169ab5 | 2019-02-21 09:27:07 +0100 | [diff] [blame] | 372 | String _getEngineArtifactsPath(TargetPlatform platform, [ BuildMode mode ]) { |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 373 | final String engineDir = _cache.getArtifactDirectory('engine').path; |
Chris Bracken | 7a09316 | 2017-03-03 17:50:46 -0800 | [diff] [blame] | 374 | final String platformName = getNameForTargetPlatform(platform); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 375 | switch (platform) { |
| 376 | case TargetPlatform.linux_x64: |
| 377 | case TargetPlatform.darwin_x64: |
Michael Goderbauer | d579d58 | 2017-03-02 10:57:27 -0800 | [diff] [blame] | 378 | case TargetPlatform.windows_x64: |
Jonah Williams | b2d19d2 | 2019-08-23 08:46:24 -0700 | [diff] [blame] | 379 | // TODO(jonahwilliams): remove once debug desktop artifacts are uploaded |
| 380 | // under a separate directory from the host artifacts. |
| 381 | // https://github.com/flutter/flutter/issues/38935 |
| 382 | if (mode == BuildMode.debug || mode == null) { |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 383 | return _fileSystem.path.join(engineDir, platformName); |
Jonah Williams | b2d19d2 | 2019-08-23 08:46:24 -0700 | [diff] [blame] | 384 | } |
| 385 | final String suffix = mode != BuildMode.debug ? '-${snakeCase(getModeName(mode), '-')}' : ''; |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 386 | return _fileSystem.path.join(engineDir, platformName + suffix); |
Zachary Anderson | 0dfabb2 | 2019-10-28 09:38:08 -0700 | [diff] [blame] | 387 | case TargetPlatform.fuchsia_arm64: |
| 388 | case TargetPlatform.fuchsia_x64: |
Konstantin Scheglov | 38970f5 | 2018-04-10 09:37:16 -0700 | [diff] [blame] | 389 | case TargetPlatform.tester: |
Jonah Williams | 83986ac | 2019-06-03 23:19:42 -0700 | [diff] [blame] | 390 | case TargetPlatform.web_javascript: |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 391 | assert(mode == null, 'Platform $platform does not support different build modes.'); |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 392 | return _fileSystem.path.join(engineDir, platformName); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 393 | case TargetPlatform.ios: |
| 394 | case TargetPlatform.android_arm: |
Jason Simmons | d5149d4 | 2018-02-01 15:14:48 -0800 | [diff] [blame] | 395 | case TargetPlatform.android_arm64: |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 396 | case TargetPlatform.android_x64: |
| 397 | case TargetPlatform.android_x86: |
| 398 | assert(mode != null, 'Need to specify a build mode for platform $platform.'); |
Stanislav Baranov | 393f927 | 2018-08-16 08:43:41 -0700 | [diff] [blame] | 399 | final String suffix = mode != BuildMode.debug ? '-${snakeCase(getModeName(mode), '-')}' : ''; |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 400 | return _fileSystem.path.join(engineDir, platformName + suffix); |
Jonah Williams | df3505c | 2019-11-19 11:26:07 -0800 | [diff] [blame] | 401 | case TargetPlatform.android: |
| 402 | assert(false, 'cannot use TargetPlatform.android to look up artifacts'); |
| 403 | return null; |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 404 | } |
| 405 | assert(false, 'Invalid platform $platform.'); |
| 406 | return null; |
| 407 | } |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 408 | } |
| 409 | |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 410 | TargetPlatform _currentHostPlatform(Platform platform) { |
| 411 | if (platform.isMacOS) { |
| 412 | return TargetPlatform.darwin_x64; |
| 413 | } |
| 414 | if (platform.isLinux) { |
| 415 | return TargetPlatform.linux_x64; |
| 416 | } |
| 417 | if (platform.isWindows) { |
| 418 | return TargetPlatform.windows_x64; |
| 419 | } |
| 420 | throw UnimplementedError('Host OS not supported.'); |
| 421 | } |
| 422 | |
| 423 | HostPlatform _currentHostPlatformAsHost(Platform platform) { |
| 424 | if (platform.isMacOS) { |
| 425 | return HostPlatform.darwin_x64; |
| 426 | } |
| 427 | if (platform.isLinux) { |
| 428 | return HostPlatform.linux_x64; |
| 429 | } |
| 430 | if (platform.isWindows) { |
| 431 | return HostPlatform.windows_x64; |
| 432 | } |
| 433 | throw UnimplementedError('Host OS not supported.'); |
| 434 | } |
| 435 | |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 436 | /// Manages the artifacts of a locally built engine. |
| 437 | class LocalEngineArtifacts extends Artifacts { |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 438 | LocalEngineArtifacts( |
| 439 | this._engineSrcPath, |
| 440 | this.engineOutPath, |
| 441 | this._hostEngineOutPath, { |
| 442 | @required FileSystem fileSystem, |
| 443 | @required Cache cache, |
| 444 | @required ProcessManager processManager, |
| 445 | @required Platform platform, |
| 446 | }) : _fileSystem = fileSystem, |
| 447 | _cache = cache, |
| 448 | _processManager = processManager, |
| 449 | _platform = platform; |
Alexandre Ardhuin | 2ea1d81 | 2018-10-04 07:28:07 +0200 | [diff] [blame] | 450 | |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 451 | final String _engineSrcPath; |
| 452 | final String engineOutPath; // TODO(goderbauer): This should be private. |
Alexandre Ardhuin | c7408be | 2019-06-25 19:39:34 +0200 | [diff] [blame] | 453 | final String _hostEngineOutPath; |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 454 | final FileSystem _fileSystem; |
| 455 | final Cache _cache; |
| 456 | final ProcessManager _processManager; |
| 457 | final Platform _platform; |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 458 | |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 459 | @override |
Alexander Aprelev | d775908 | 2019-04-15 21:02:20 -0700 | [diff] [blame] | 460 | String getArtifactPath(Artifact artifact, { TargetPlatform platform, BuildMode mode }) { |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 461 | platform ??= _currentHostPlatform(_platform); |
Zachary Anderson | 05226d2 | 2019-11-21 12:55:39 -0800 | [diff] [blame] | 462 | final String artifactFileName = _artifactToFileName(artifact, platform, mode); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 463 | switch (artifact) { |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 464 | case Artifact.snapshotDart: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 465 | return _fileSystem.path.join(_engineSrcPath, 'flutter', 'lib', 'snapshot', artifactFileName); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 466 | case Artifact.genSnapshot: |
Jason Simmons | 22ccb74 | 2017-07-27 14:22:21 -0700 | [diff] [blame] | 467 | return _genSnapshotPath(); |
Jason Simmons | e7f1361 | 2017-03-29 16:30:41 -0700 | [diff] [blame] | 468 | case Artifact.flutterTester: |
| 469 | return _flutterTesterPath(platform); |
Michael Goderbauer | d579d58 | 2017-03-02 10:57:27 -0800 | [diff] [blame] | 470 | case Artifact.isolateSnapshotData: |
| 471 | case Artifact.vmSnapshotData: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 472 | return _fileSystem.path.join(engineOutPath, 'gen', 'flutter', 'lib', 'snapshot', artifactFileName); |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 473 | case Artifact.platformKernelDill: |
Zachary Anderson | d0d8e6e | 2019-10-30 14:11:18 -0700 | [diff] [blame] | 474 | if (platform == TargetPlatform.fuchsia_x64 || platform == TargetPlatform.fuchsia_arm64) { |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 475 | return _fileSystem.path.join(engineOutPath, 'flutter_runner_patched_sdk', artifactFileName); |
Zachary Anderson | d0d8e6e | 2019-10-30 14:11:18 -0700 | [diff] [blame] | 476 | } |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 477 | return _fileSystem.path.join(_getFlutterPatchedSdkPath(mode), artifactFileName); |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 478 | case Artifact.platformLibrariesJson: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 479 | return _fileSystem.path.join(_getFlutterPatchedSdkPath(mode), 'lib', artifactFileName); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 480 | case Artifact.flutterFramework: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 481 | return _fileSystem.path.join(engineOutPath, artifactFileName); |
Jonah Williams | 7f959d8 | 2019-04-22 13:51:00 -0700 | [diff] [blame] | 482 | case Artifact.flutterMacOSFramework: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 483 | return _fileSystem.path.join(engineOutPath, artifactFileName); |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 484 | case Artifact.flutterPatchedSdkPath: |
Alexander Aprelev | d775908 | 2019-04-15 21:02:20 -0700 | [diff] [blame] | 485 | // When using local engine always use [BuildMode.debug] regardless of |
| 486 | // what was specified in [mode] argument because local engine will |
| 487 | // have only one flutter_patched_sdk in standard location, that |
| 488 | // is happen to be what debug(non-release) mode is using. |
Zachary Anderson | d0d8e6e | 2019-10-30 14:11:18 -0700 | [diff] [blame] | 489 | if (platform == TargetPlatform.fuchsia_x64 || platform == TargetPlatform.fuchsia_arm64) { |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 490 | return _fileSystem.path.join(engineOutPath, 'flutter_runner_patched_sdk'); |
Zachary Anderson | d0d8e6e | 2019-10-30 14:11:18 -0700 | [diff] [blame] | 491 | } |
Alexander Aprelev | d775908 | 2019-04-15 21:02:20 -0700 | [diff] [blame] | 492 | return _getFlutterPatchedSdkPath(BuildMode.debug); |
Jonah Williams | 44b22c7 | 2019-03-25 18:47:37 -0700 | [diff] [blame] | 493 | case Artifact.flutterWebSdk: |
| 494 | return _getFlutterWebSdkPath(); |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 495 | case Artifact.frontendServerSnapshotForEngineDartSdk: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 496 | return _fileSystem.path.join(_hostEngineOutPath, 'gen', artifactFileName); |
Alexander Aprelev | fe00598 | 2018-02-16 09:20:23 -0800 | [diff] [blame] | 497 | case Artifact.engineDartSdkPath: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 498 | return _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk'); |
Keerti Parthasarathy | 0263394 | 2018-03-06 14:41:50 -0800 | [diff] [blame] | 499 | case Artifact.engineDartBinary: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 500 | return _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', artifactFileName); |
Jonah Williams | 9bc5656 | 2019-02-14 22:42:30 -0800 | [diff] [blame] | 501 | case Artifact.dart2jsSnapshot: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 502 | return _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', artifactFileName); |
Jonah Williams | da600ba | 2019-05-29 22:46:28 -0700 | [diff] [blame] | 503 | case Artifact.dartdevcSnapshot: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 504 | return _fileSystem.path.join(dartSdkPath, 'bin', 'snapshots', artifactFileName); |
Jonah Williams | 9bc5656 | 2019-02-14 22:42:30 -0800 | [diff] [blame] | 505 | case Artifact.kernelWorkerSnapshot: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 506 | return _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', artifactFileName); |
Christopher Fujino | 102ab1e | 2019-07-15 09:22:29 -0700 | [diff] [blame] | 507 | case Artifact.idevicescreenshot: |
| 508 | case Artifact.idevicesyslog: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 509 | return _cache.getArtifactDirectory('libimobiledevice').childFile(artifactFileName).path; |
Christopher Fujino | 102ab1e | 2019-07-15 09:22:29 -0700 | [diff] [blame] | 510 | case Artifact.ideviceinstaller: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 511 | return _cache.getArtifactDirectory('ideviceinstaller').childFile(artifactFileName).path; |
Christopher Fujino | 102ab1e | 2019-07-15 09:22:29 -0700 | [diff] [blame] | 512 | case Artifact.iosDeploy: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 513 | return _cache.getArtifactDirectory('ios-deploy').childFile(artifactFileName).path; |
Christopher Fujino | 102ab1e | 2019-07-15 09:22:29 -0700 | [diff] [blame] | 514 | case Artifact.iproxy: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 515 | return _cache.getArtifactDirectory('usbmuxd').childFile(artifactFileName).path; |
Jonah Williams | e91b98a | 2019-07-11 16:53:17 -0700 | [diff] [blame] | 516 | case Artifact.linuxDesktopPath: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 517 | return _fileSystem.path.join(_hostEngineOutPath, artifactFileName); |
Jonah Williams | e91b98a | 2019-07-11 16:53:17 -0700 | [diff] [blame] | 518 | case Artifact.windowsDesktopPath: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 519 | return _fileSystem.path.join(_hostEngineOutPath, artifactFileName); |
Jonah Williams | e91b98a | 2019-07-11 16:53:17 -0700 | [diff] [blame] | 520 | case Artifact.skyEnginePath: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 521 | return _fileSystem.path.join(_hostEngineOutPath, 'gen', 'dart-pkg', artifactFileName); |
Jonah Williams | 2ab4699 | 2019-07-31 16:19:22 -0700 | [diff] [blame] | 522 | case Artifact.flutterMacOSPodspec: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 523 | return _fileSystem.path.join(_hostEngineOutPath, _artifactToFileName(artifact)); |
Jonah Williams | 79a985f | 2019-10-22 20:35:05 -0700 | [diff] [blame] | 524 | case Artifact.webPlatformKernelDill: |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 525 | return _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel', _artifactToFileName(artifact)); |
Zachary Anderson | 0dfabb2 | 2019-10-28 09:38:08 -0700 | [diff] [blame] | 526 | case Artifact.fuchsiaKernelCompiler: |
Zachary Anderson | d0d8e6e | 2019-10-30 14:11:18 -0700 | [diff] [blame] | 527 | final String hostPlatform = getNameForHostPlatform(getCurrentHostPlatform()); |
Zachary Anderson | 05226d2 | 2019-11-21 12:55:39 -0800 | [diff] [blame] | 528 | final String modeName = mode.isRelease ? 'release' : mode.toString(); |
| 529 | final String dartBinaries = 'dart_binaries-$modeName-$hostPlatform'; |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 530 | return _fileSystem.path.join(engineOutPath, 'host_bundle', dartBinaries, 'kernel_compiler.dart.snapshot'); |
Zachary Anderson | 05226d2 | 2019-11-21 12:55:39 -0800 | [diff] [blame] | 531 | case Artifact.fuchsiaFlutterRunner: |
| 532 | final String jitOrAot = mode.isJit ? '_jit' : '_aot'; |
| 533 | final String productOrNo = mode.isRelease ? '_product' : ''; |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 534 | return _fileSystem.path.join(engineOutPath, 'flutter$jitOrAot${productOrNo}_runner-0.far'); |
Dan Field | 525855d | 2020-01-21 16:53:02 -0800 | [diff] [blame] | 535 | case Artifact.fontSubset: |
| 536 | return _fileSystem.path.join(_hostEngineOutPath, artifactFileName); |
| 537 | case Artifact.constFinder: |
| 538 | return _fileSystem.path.join(_hostEngineOutPath, 'gen', artifactFileName); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 539 | } |
| 540 | assert(false, 'Invalid artifact $artifact.'); |
| 541 | return null; |
| 542 | } |
| 543 | |
| 544 | @override |
Alexandre Ardhuin | 5169ab5 | 2019-02-21 09:27:07 +0100 | [diff] [blame] | 545 | String getEngineType(TargetPlatform platform, [ BuildMode mode ]) { |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 546 | return _fileSystem.path.basename(engineOutPath); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 547 | } |
| 548 | |
Alexander Aprelev | d775908 | 2019-04-15 21:02:20 -0700 | [diff] [blame] | 549 | String _getFlutterPatchedSdkPath(BuildMode buildMode) { |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 550 | return _fileSystem.path.join(engineOutPath, |
Alexander Aprelev | d775908 | 2019-04-15 21:02:20 -0700 | [diff] [blame] | 551 | buildMode == BuildMode.release ? 'flutter_patched_sdk_product' : 'flutter_patched_sdk'); |
Alexander Aprelev | c5750cd | 2017-08-31 13:35:55 -0700 | [diff] [blame] | 552 | } |
| 553 | |
Jonah Williams | 44b22c7 | 2019-03-25 18:47:37 -0700 | [diff] [blame] | 554 | String _getFlutterWebSdkPath() { |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 555 | return _fileSystem.path.join(engineOutPath, 'flutter_web_sdk'); |
Jonah Williams | 44b22c7 | 2019-03-25 18:47:37 -0700 | [diff] [blame] | 556 | } |
| 557 | |
Jason Simmons | 22ccb74 | 2017-07-27 14:22:21 -0700 | [diff] [blame] | 558 | String _genSnapshotPath() { |
Liam Appelbe | 0cd0c66 | 2019-08-06 08:45:08 -0700 | [diff] [blame] | 559 | const List<String> clangDirs = <String>['.', 'clang_x64', 'clang_x86', 'clang_i386']; |
Jason Simmons | 22ccb74 | 2017-07-27 14:22:21 -0700 | [diff] [blame] | 560 | final String genSnapshotName = _artifactToFileName(Artifact.genSnapshot); |
Alexandre Ardhuin | 4f9b6cf | 2020-01-07 16:32:04 +0100 | [diff] [blame] | 561 | for (final String clangDir in clangDirs) { |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 562 | final String genSnapshotPath = _fileSystem.path.join(engineOutPath, clangDir, genSnapshotName); |
| 563 | if (_processManager.canRun(genSnapshotPath)) { |
Jason Simmons | 22ccb74 | 2017-07-27 14:22:21 -0700 | [diff] [blame] | 564 | return genSnapshotPath; |
Zachary Anderson | e2340c6 | 2019-09-13 14:51:35 -0700 | [diff] [blame] | 565 | } |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 566 | } |
Alexandre Ardhuin | d927c93 | 2018-09-12 08:29:29 +0200 | [diff] [blame] | 567 | throw Exception('Unable to find $genSnapshotName'); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 568 | } |
| 569 | |
Jason Simmons | e7f1361 | 2017-03-29 16:30:41 -0700 | [diff] [blame] | 570 | String _flutterTesterPath(TargetPlatform platform) { |
Jonah Williams | ad9476d | 2020-01-14 16:47:34 -0800 | [diff] [blame] | 571 | final HostPlatform hostPlatform = _currentHostPlatformAsHost(_platform); |
| 572 | if (hostPlatform == HostPlatform.linux_x64) { |
| 573 | return _fileSystem.path.join(engineOutPath, _artifactToFileName(Artifact.flutterTester)); |
| 574 | } else if (hostPlatform == HostPlatform.darwin_x64) { |
| 575 | return _fileSystem.path.join(engineOutPath, 'flutter_tester'); |
| 576 | } else if (hostPlatform == HostPlatform.windows_x64) { |
| 577 | return _fileSystem.path.join(engineOutPath, 'flutter_tester.exe'); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 578 | } |
Alexandre Ardhuin | d927c93 | 2018-09-12 08:29:29 +0200 | [diff] [blame] | 579 | throw Exception('Unsupported platform $platform.'); |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 580 | } |
Michael Goderbauer | cd8434d | 2017-02-16 23:10:11 -0800 | [diff] [blame] | 581 | } |
Jonah Williams | c9ca7c4 | 2018-10-16 14:27:22 -0700 | [diff] [blame] | 582 | |
| 583 | /// An implementation of [Artifacts] that provides individual overrides. |
| 584 | /// |
| 585 | /// If an artifact is not provided, the lookup delegates to the parent. |
Jonah Williams | c9ca7c4 | 2018-10-16 14:27:22 -0700 | [diff] [blame] | 586 | class OverrideArtifacts implements Artifacts { |
| 587 | /// Creates a new [OverrideArtifacts]. |
| 588 | /// |
| 589 | /// [parent] must be provided. |
| 590 | OverrideArtifacts({ |
| 591 | @required this.parent, |
| 592 | this.frontendServer, |
Jonah Williams | 81c7af3 | 2018-11-06 14:36:35 -0800 | [diff] [blame] | 593 | this.engineDartBinary, |
Jonah Williams | a226c0f | 2018-11-30 16:18:18 -0800 | [diff] [blame] | 594 | this.platformKernelDill, |
| 595 | this.flutterPatchedSdk, |
Jonah Williams | c9ca7c4 | 2018-10-16 14:27:22 -0700 | [diff] [blame] | 596 | }) : assert(parent != null); |
| 597 | |
| 598 | final Artifacts parent; |
| 599 | final File frontendServer; |
Jonah Williams | 81c7af3 | 2018-11-06 14:36:35 -0800 | [diff] [blame] | 600 | final File engineDartBinary; |
Jonah Williams | a226c0f | 2018-11-30 16:18:18 -0800 | [diff] [blame] | 601 | final File platformKernelDill; |
| 602 | final File flutterPatchedSdk; |
Jonah Williams | c9ca7c4 | 2018-10-16 14:27:22 -0700 | [diff] [blame] | 603 | |
| 604 | @override |
Alexander Aprelev | d775908 | 2019-04-15 21:02:20 -0700 | [diff] [blame] | 605 | String getArtifactPath(Artifact artifact, { TargetPlatform platform, BuildMode mode }) { |
Jonah Williams | c9ca7c4 | 2018-10-16 14:27:22 -0700 | [diff] [blame] | 606 | if (artifact == Artifact.frontendServerSnapshotForEngineDartSdk && frontendServer != null) { |
| 607 | return frontendServer.path; |
| 608 | } |
Jonah Williams | 81c7af3 | 2018-11-06 14:36:35 -0800 | [diff] [blame] | 609 | if (artifact == Artifact.engineDartBinary && engineDartBinary != null) { |
| 610 | return engineDartBinary.path; |
| 611 | } |
Jonah Williams | a226c0f | 2018-11-30 16:18:18 -0800 | [diff] [blame] | 612 | if (artifact == Artifact.platformKernelDill && platformKernelDill != null) { |
| 613 | return platformKernelDill.path; |
| 614 | } |
| 615 | if (artifact == Artifact.flutterPatchedSdkPath && flutterPatchedSdk != null) { |
| 616 | return flutterPatchedSdk.path; |
| 617 | } |
Alexander Aprelev | d775908 | 2019-04-15 21:02:20 -0700 | [diff] [blame] | 618 | return parent.getArtifactPath(artifact, platform: platform, mode: mode); |
Jonah Williams | c9ca7c4 | 2018-10-16 14:27:22 -0700 | [diff] [blame] | 619 | } |
| 620 | |
| 621 | @override |
Alexandre Ardhuin | 5169ab5 | 2019-02-21 09:27:07 +0100 | [diff] [blame] | 622 | String getEngineType(TargetPlatform platform, [ BuildMode mode ]) => parent.getEngineType(platform, mode); |
Jonah Williams | c9ca7c4 | 2018-10-16 14:27:22 -0700 | [diff] [blame] | 623 | } |