| // Copyright 2014 The Flutter 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 'package:convert/convert.dart'; | |
| import 'package:crypto/crypto.dart'; | |
| import 'base/config.dart'; | |
| import 'base/file_system.dart'; | |
| import 'build_info.dart'; | |
| import 'compile.dart'; | |
| import 'convert.dart'; | |
| import 'globals.dart' as globals; | |
| String get defaultMainPath => globals.fs.path.join('lib', 'main.dart'); | |
| const defaultManifestPath = 'pubspec.yaml'; | |
| String get defaultDepfilePath => globals.fs.path.join(getBuildDirectory(), 'snapshot_blob.bin.d'); | |
| String getDefaultCachedKernelPath({ | |
| required bool trackWidgetCreation, | |
| required List<String> dartDefines, | |
| required Config config, | |
| required FileSystem fileSystem, | |
| TargetModel? targetModel, | |
| List<String> extraFrontEndOptions = const <String>[], | |
| }) { | |
| final buffer = StringBuffer(); | |
| final List<String> cacheFrontEndOptions = extraFrontEndOptions.toList() | |
| ..removeWhere((String arg) => arg.startsWith('--enable-experiment=')); | |
| if (targetModel != null) { | |
| buffer.write('$targetModel;'); | |
| } | |
| buffer.writeAll(dartDefines); | |
| buffer.writeAll(cacheFrontEndOptions); | |
| var buildPrefix = ''; | |
| if (buffer.isNotEmpty) { | |
| final output = buffer.toString(); | |
| final Digest digest = md5.convert(utf8.encode(output)); | |
| buildPrefix = '${hex.encode(digest.bytes)}.'; | |
| } | |
| return getKernelPathForTransformerOptions( | |
| fileSystem.path.join(getBuildDirectory(config, fileSystem), '${buildPrefix}cache.dill'), | |
| trackWidgetCreation: trackWidgetCreation, | |
| ); | |
| } | |
| String getKernelPathForTransformerOptions(String path, {required bool trackWidgetCreation}) { | |
| if (trackWidgetCreation) { | |
| path += '.track.dill'; | |
| } | |
| return path; | |
| } |