From f2797f0b58f8897b926dad7fa361284c3e5f823c Mon Sep 17 00:00:00 2001 From: zhongmingfeng_huawei Date: Sat, 2 Dec 2023 13:13:29 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3mac=E6=8A=A5Wrong=20full=20sn?= =?UTF-8?q?apshot=20version=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zmf <279822581@qq.com> --- packages/flutter_tools/lib/src/artifacts.dart | 18 ++++++++++++++ packages/flutter_tools/lib/src/base/os.dart | 15 ++++++++++++ .../flutter_tools/lib/src/build_info.dart | 5 +--- packages/flutter_tools/lib/src/compile.dart | 24 ++++++++++++++++--- 4 files changed, 55 insertions(+), 7 deletions(-) diff --git a/packages/flutter_tools/lib/src/artifacts.dart b/packages/flutter_tools/lib/src/artifacts.dart index 574b423462..304b403233 100644 --- a/packages/flutter_tools/lib/src/artifacts.dart +++ b/packages/flutter_tools/lib/src/artifacts.dart @@ -52,6 +52,9 @@ enum Artifact { /// the flutter engine runtime flutterEngineSo, + + /// The dart binary used to execute any of the required snapshots. + engineDartBinary, } /// A subset of [Artifact]s that are platform and build mode independent @@ -215,6 +218,8 @@ String? _artifactToFileName(Artifact artifact, [ TargetPlatform? platform, Build return 'const_finder.dart.snapshot'; case Artifact.flutterEngineSo: return 'libflutter.so'; + case Artifact.engineDartBinary: + return 'dart$exe'; } } @@ -509,6 +514,7 @@ class CachedArtifacts implements Artifacts { case Artifact.windowsCppClientWrapper: case Artifact.windowsDesktopPath: case Artifact.flutterEngineSo: + case Artifact.engineDartBinary: return _getHostArtifactPath(artifact, platform, mode); } } @@ -542,6 +548,7 @@ class CachedArtifacts implements Artifacts { case Artifact.windowsCppClientWrapper: case Artifact.windowsDesktopPath: case Artifact.flutterEngineSo: + case Artifact.engineDartBinary: return _getHostArtifactPath(artifact, platform, mode); } } @@ -587,6 +594,7 @@ class CachedArtifacts implements Artifacts { case Artifact.windowsCppClientWrapper: case Artifact.windowsDesktopPath: case Artifact.flutterEngineSo: + case Artifact.engineDartBinary: return _getHostArtifactPath(artifact, platform, mode); } } @@ -616,6 +624,7 @@ class CachedArtifacts implements Artifacts { case Artifact.windowsCppClientWrapper: case Artifact.windowsDesktopPath: case Artifact.flutterEngineSo: + case Artifact.engineDartBinary: return _getHostArtifactPath(artifact, platform, mode); } } @@ -689,6 +698,10 @@ class CachedArtifacts implements Artifacts { return _cache.getArtifactDirectory('engine') .childFile(_artifactToFileName(artifact)!) .path; + case Artifact.engineDartBinary: + return _fileSystem.path.join( + _dartSdkPath(_cache), 'bin', + _artifactToFileName(artifact),); } } @@ -982,6 +995,11 @@ class CachedLocalEngineArtifacts implements LocalEngineArtifacts { return _fileSystem.path.join( _getDartSdkPath(), 'bin', 'snapshots', artifactFileName, ); + case Artifact.engineDartBinary: + final String clangName = getClangNameForHostPlatform(getCurrentHostPlatform()); + return _fileSystem.path.join( + engineOutPath, clangName, artifactFileName, + ); } } diff --git a/packages/flutter_tools/lib/src/base/os.dart b/packages/flutter_tools/lib/src/base/os.dart index ff437513f1..496a1be5c6 100644 --- a/packages/flutter_tools/lib/src/base/os.dart +++ b/packages/flutter_tools/lib/src/base/os.dart @@ -624,3 +624,18 @@ String getNameForHostPlatform(HostPlatform platform) { return 'windows-x64'; } } + +String getClangNameForHostPlatform(HostPlatform platform) { + switch (platform) { + case HostPlatform.darwin_x64: + return 'clang_x64'; + case HostPlatform.darwin_arm64: + return 'clang_arm64'; + case HostPlatform.linux_x64: + return 'clang_x64'; + case HostPlatform.linux_arm64: + return 'clang_arm64'; + case HostPlatform.windows_x64: + return 'clang_x64'; + } +} diff --git a/packages/flutter_tools/lib/src/build_info.dart b/packages/flutter_tools/lib/src/build_info.dart index 3cda7b9b70..27676b6d99 100644 --- a/packages/flutter_tools/lib/src/build_info.dart +++ b/packages/flutter_tools/lib/src/build_info.dart @@ -916,10 +916,7 @@ String fuchsiaArchForTargetPlatform(TargetPlatform targetPlatform) { } HostPlatform getCurrentHostPlatform() { - if (globals.platform.isMacOS) { - return HostPlatform.darwin_x64; - } - if (globals.platform.isLinux) { + if (globals.platform.isLinux || globals.platform.isMacOS) { // support x64 and arm64 architecture. return globals.os.hostPlatform; } diff --git a/packages/flutter_tools/lib/src/compile.dart b/packages/flutter_tools/lib/src/compile.dart index e072e6b7a4..8d7b7443a3 100644 --- a/packages/flutter_tools/lib/src/compile.dart +++ b/packages/flutter_tools/lib/src/compile.dart @@ -18,6 +18,7 @@ import 'base/logger.dart'; import 'base/platform.dart'; import 'build_info.dart'; import 'convert.dart'; +import 'globals.dart' as globals; /// Opt-in changes to the dart compilers. const List kDartCompilerExperiments = [ @@ -282,9 +283,17 @@ class KernelCompiler { dartPluginRegistrantUri = packageConfig.toPackageUri(dartPluginRegistrantFileUri)?.toString() ?? toMultiRootPath(dartPluginRegistrantFileUri, _fileSystemScheme, _fileSystemRoots, _fileSystem.path.separator == r'\'); } - + String? engineDartBinary; + if (globals.platform.isMacOS) { + final Artifacts? artifacts = globals.artifacts; + if (artifacts is LocalEngineArtifacts) { + final LocalEngineArtifacts localEngineArtifacts = artifacts; + engineDartBinary = localEngineArtifacts.getArtifactPath(Artifact.engineDartBinary); + } + } + engineDartBinary = engineDartBinary ?? _artifacts.getHostArtifact(HostArtifact.engineDartBinary).path; final List command = [ - engineDartPath, + engineDartBinary, '--disable-dart-dev', frontendServer, '--sdk-root', @@ -743,8 +752,17 @@ class DefaultResidentCompiler implements ResidentCompiler { final String frontendServer = _artifacts.getArtifactPath( Artifact.frontendServerSnapshotForEngineDartSdk ); + String? engineDartBinary; + if (globals.platform.isMacOS) { + final Artifacts? artifacts = globals.artifacts; + if (artifacts is LocalEngineArtifacts) { + final LocalEngineArtifacts localEngineArtifacts = artifacts; + engineDartBinary = localEngineArtifacts.getArtifactPath(Artifact.engineDartBinary); + } + } + engineDartBinary = engineDartBinary ?? _artifacts.getHostArtifact(HostArtifact.engineDartBinary).path; final List command = [ - _artifacts.getHostArtifact(HostArtifact.engineDartBinary).path, + engineDartBinary, '--disable-dart-dev', frontendServer, '--sdk-root', -- Gitee