Merge pull request #324717 from ExpidusOS/fix/flutter-engine

flutterPackages-source: disable old version sources, fix update hashes
This commit is contained in:
Tristan Ross 2024-08-16 09:04:15 -07:00 committed by GitHub
commit bc927415b4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 255 additions and 120 deletions

View File

@ -1,41 +1,48 @@
{ lib, targetPlatform }:
rec {
os =
if targetPlatform.isLinux then
"linux"
else if targetPlatform.isDarwin then
"macos"
else if targetPlatform.isWindows then
"windows"
else
throw "Unsupported OS \"${targetPlatform.parsed.kernel.name}\"";
{ lib, platform }:
let
self = {
os =
if platform.isLinux then
"linux"
else if platform.isDarwin then
"macos"
else if platform.isWindows then
"windows"
else
throw "Unsupported OS \"${platform.parsed.kernel.name}\"";
arch =
if targetPlatform.isx86_64 then
"amd64"
else if targetPlatform.isx86 && targetPlatform.is32bit then
"386"
else if targetPlatform.isAarch64 then
"arm64"
else if targetPlatform.isMips && targetPlatform.parsed.cpu.significantByte == "littleEndian" then
"mipsle"
else if targetPlatform.isMips64 then
"mips64${lib.optionalString (targetPlatform.parsed.cpu.significantByte == "littleEndian") "le"}"
else if targetPlatform.isPower64 then
"ppc64${lib.optionalString (targetPlatform.parsed.cpu.significantByte == "littleEndian") "le"}"
else if targetPlatform.isS390x then
"s390x"
else
throw "Unsupported CPU \"${targetPlatform.parsed.cpu.name}\"";
alt-os = if platform.isDarwin then "mac" else self.os;
alt-arch =
if targetPlatform.isx86_64 then
"x64"
else if targetPlatform.isAarch64 then
"arm64"
else
targetPlatform.parsed.cpu.name;
arch =
if platform.isx86_64 then
"amd64"
else if platform.isx86 && platform.is32bit then
"386"
else if platform.isAarch64 then
"arm64"
else if platform.isMips && platform.parsed.cpu.significantByte == "littleEndian" then
"mipsle"
else if platform.isMips64 then
"mips64${lib.optionalString (platform.parsed.cpu.significantByte == "littleEndian") "le"}"
else if platform.isPower64 then
"ppc64${lib.optionalString (platform.parsed.cpu.significantByte == "littleEndian") "le"}"
else if platform.isS390x then
"s390x"
else if platform.isRiscV64 then
"riscv64"
else
throw "Unsupported CPU \"${platform.parsed.cpu.name}\"";
platform = "${os}-${arch}";
alt-platform = "${os}-${alt-arch}";
}
alt-arch =
if platform.isx86_64 then
"x64"
else if platform.isAarch64 then
"arm64"
else
platform.parsed.cpu.name;
platform = "${self.os}-${self.arch}";
alt-platform = "${self.os}-${self.alt-arch}";
};
in
self

View File

@ -9,7 +9,7 @@
url,
patches,
runtimeModes,
isOptimized ? true,
isOptimized ? null,
lib,
stdenv,
dart,
@ -33,8 +33,8 @@ let
url
patches
runtimeMode
isOptimized
;
isOptimized = args.isOptimized or runtimeMode != "debug";
}
);
in

View File

@ -4,11 +4,11 @@
writeText,
symlinkJoin,
targetPlatform,
hostPlatform,
buildPlatform,
darwin,
clang,
llvm,
tools ? callPackage ./tools.nix { inherit hostPlatform; },
tools ? callPackage ./tools.nix { inherit buildPlatform; },
stdenv,
stdenvNoCC,
dart,
@ -33,7 +33,8 @@
gtk3,
pkg-config,
ninja,
python3,
python312,
python39,
git,
version,
flutterVersion,
@ -44,7 +45,7 @@
patches,
url,
runtimeMode ? "release",
isOptimized ? true,
isOptimized ? runtimeMode != "debug",
}:
let
expandSingleDep =
@ -52,14 +53,19 @@ let
expandDeps = deps: lib.flatten (map expandSingleDep deps);
constants = callPackage ./constants.nix { inherit targetPlatform; };
constants = callPackage ./constants.nix { platform = targetPlatform; };
python3 = if lib.versionAtLeast flutterVersion "3.20" then python312 else python39;
src = callPackage ./source.nix {
inherit
tools
flutterVersion
version
hashes
url
targetPlatform
buildPlatform
;
};
@ -81,9 +87,11 @@ let
];
};
outName = "host_${runtimeMode}${lib.optionalString (!isOptimized) "_unopt --unoptimized"}";
outName = "host_${runtimeMode}${lib.optionalString (!isOptimized) "_unopt"}";
dartPath = "${if (lib.versionAtLeast flutterVersion "3.23") then "flutter/third_party" else "third_party"}/dart";
dartPath = "${
if (lib.versionAtLeast flutterVersion "3.23") then "flutter/third_party" else "third_party"
}/dart";
in
stdenv.mkDerivation (finalAttrs: {
pname = "flutter-engine-${runtimeMode}${lib.optionalString (!isOptimized) "-unopt"}";
@ -95,7 +103,11 @@ stdenv.mkDerivation (finalAttrs: {
dartSdkVersion
src
outName
swiftshader;
swiftshader
;
setOutputFlags = false;
doStrip = isOptimized;
toolchain = symlinkJoin {
name = "flutter-engine-toolchain-${version}";
@ -145,9 +157,14 @@ stdenv.mkDerivation (finalAttrs: {
'';
};
NIX_CFLAGS_COMPILE = "-I${finalAttrs.toolchain}/include";
NIX_CFLAGS_COMPILE = [
"-I${finalAttrs.toolchain}/include"
] ++ lib.optional (!isOptimized) "-U_FORTIFY_SOURCE";
nativeCheckInputs = lib.optionals stdenv.isLinux [ xorg.xorgserver openbox ];
nativeCheckInputs = lib.optionals stdenv.isLinux [
xorg.xorgserver
openbox
];
nativeBuildInputs =
[
@ -168,10 +185,7 @@ stdenv.mkDerivation (finalAttrs: {
buildInputs = [ gtk3 ];
patchtools = [
"${dartPath}/tools/sdks/dart-sdk/bin/dart"
"flutter/third_party/gn/gn"
];
patchtools = [ "flutter/third_party/gn/gn" ];
dontPatch = true;
@ -194,6 +208,10 @@ stdenv.mkDerivation (finalAttrs: {
mkdir -p src/flutter/buildtools/${constants.alt-platform}
ln -s ${llvm} src/flutter/buildtools/${constants.alt-platform}/clang
mkdir -p src/buildtools/${constants.alt-platform}
ln -s ${llvm} src/buildtools/${constants.alt-platform}/clang
mkdir -p src/${dartPath}/tools/sdks
ln -s ${dart} src/${dartPath}/tools/sdks/dart-sdk
${lib.optionalString (stdenv.isLinux) ''
@ -204,13 +222,12 @@ stdenv.mkDerivation (finalAttrs: {
for dir in ''${patchgit[@]}; do
pushd src/$dir
rev=$(cat .git/HEAD)
rm -rf .git
git init
git add .
git config user.name "nobody"
git config user.email "nobody@local.host"
git commit -a -m "$rev" --quiet
git commit -a -m "$dir" --quiet
popd
done
@ -239,7 +256,9 @@ stdenv.mkDerivation (finalAttrs: {
++ lib.optionals (targetPlatform.isx86_64 == false) [
"--linux"
"--linux-cpu ${constants.alt-arch}"
];
]
++ lib.optional (!isOptimized) "--unoptimized"
++ lib.optional (runtimeMode == "debug") "--no-stripped";
# NOTE: Once https://github.com/flutter/flutter/issues/127606 is fixed, use "--no-prebuilt-dart-sdk"
configurePhase =
@ -267,22 +286,9 @@ stdenv.mkDerivation (finalAttrs: {
runHook preBuild
export TERM=dumb
for tool in flatc scenec gen_snapshot dart impellerc shader_archiver gen_snapshot_product; do
ninja -C $out/out/$outName -j$NIX_BUILD_CORES $tool
${lib.optionalString (stdenv.isLinux) ''
patchelf $out/out/$outName/$tool --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker)
''}
done
ninja -C $out/out/$outName -j$NIX_BUILD_CORES
${lib.optionalString (stdenv.isLinux) ''
patchelf $out/out/$outName/dart-sdk/bin/dartaotruntime \
--set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker)
find $out/out/$outName/exe.unstripped -executable -type f -exec patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) {} \;
''}
runHook postBuild
'';
@ -323,5 +329,5 @@ stdenv.mkDerivation (finalAttrs: {
"x86_64-darwin"
"aarch64-darwin"
];
};
} // lib.optionalAttrs (lib.versionOlder flutterVersion "3.22") { hydraPlatforms = [ ]; };
})

View File

@ -1,9 +1,11 @@
{
lib,
callPackage,
hostPlatform,
buildPlatform,
targetPlatform,
hostPlatform,
fetchgit,
tools ? callPackage ./tools.nix { inherit hostPlatform; },
tools ? null,
curl,
pkg-config,
git,
@ -11,15 +13,19 @@
runCommand,
writeText,
cacert,
flutterVersion,
version,
hashes,
url,
}:
}@pkgs:
let
constants = callPackage ./constants.nix { inherit targetPlatform; };
target-constants = callPackage ./constants.nix { platform = targetPlatform; };
build-constants = callPackage ./constants.nix { platform = buildPlatform; };
tools = pkgs.tools or (callPackage ./tools.nix { inherit hostPlatform buildPlatform; });
boolOption = value: if value then "True" else "False";
in
runCommand "flutter-engine-source-${version}-${targetPlatform.system}"
runCommand "flutter-engine-source-${version}-${buildPlatform.system}-${targetPlatform.system}"
{
pname = "flutter-engine-source";
inherit version;
@ -51,8 +57,20 @@ runCommand "flutter-engine-source-${version}-${targetPlatform.system}"
"setup_githooks": False,
"download_esbuild": False,
"download_dart_sdk": False,
"host_cpu": "${build-constants.alt-arch}",
"host_os": "${build-constants.alt-os}",
},
}]
target_os_only = True
target_os = [
"${target-constants.alt-os}"
]
target_cpu_only = True
target_cpu = [
"${target-constants.alt-arch}"
]
'';
NIX_SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
@ -64,7 +82,9 @@ runCommand "flutter-engine-source-${version}-${targetPlatform.system}"
outputHashAlgo = "sha256";
outputHashMode = "recursive";
outputHash = hashes.${targetPlatform.system} or (throw "Hash not set for ${targetPlatform.system}");
outputHash =
(hashes."${buildPlatform.system}" or { })."${targetPlatform.system}"
or (throw "Hash not set for ${targetPlatform.system} on ${buildPlatform.system}");
}
''
source ${../../../../build-support/fetchgit/deterministic-git}
@ -76,13 +96,13 @@ runCommand "flutter-engine-source-${version}-${targetPlatform.system}"
cd $out
export PATH=$PATH:$depot_tools
python3 $depot_tools/gclient.py sync --no-history --shallow --nohooks 2>&1 >/dev/null
find $out -name '.git' -exec dirname {} \; | xargs bash -c 'make_deterministic_repo $@' _
find $out -path '*/.git/*' ! -name 'HEAD' -prune -exec rm -rf {} \;
find $out -name '.git' -exec mkdir {}/logs \;
find $out -name '.git' -exec cp {}/HEAD {}/logs/HEAD \;
python3 $depot_tools/gclient.py sync --no-history --shallow --nohooks -j $NIX_BUILD_CORES
find $out -name '.git' -exec rm -rf {} \; || true
rm -rf $out/src/flutter/{buildtools,prebuilts,third_party/swiftshader}
rm -rf $out/src/buildtools/
rm -rf $out/src/flutter/{buildtools,prebuilts,third_party/swiftshader,third_party/gn/.versions}
rm -rf $out/src/flutter/{third_party/dart/tools/sdks/dart-sdk,third_party/ninja/ninja}
rm -rf $out/src/third_party/{dart/tools/sdks/dart-sdk,libcxx/test}
rm -rf $out/.cipd $out/.gclient $out/.gclient_entries $out/.gclient_previous_custom_vars $out/.gclient_previous_sync_commits
''

View File

@ -1,9 +1,11 @@
{
stdenv,
callPackage,
fetchgit,
fetchurl,
writeText,
runCommand,
buildPlatform,
hostPlatform,
darwin,
writeShellScriptBin,
@ -29,7 +31,9 @@
},
}:
let
constants = callPackage ./constants.nix { targetPlatform = hostPlatform; };
constants = callPackage ./constants.nix { platform = buildPlatform; };
host-constants = callPackage ./constants.nix { platform = hostPlatform; };
stdenv-constants = callPackage ./constants.nix { platform = stdenv.hostPlatform; };
in
{
depot_tools = fetchgit {
@ -39,18 +43,45 @@ in
};
cipd =
runCommand "cipd-${cipdCommit}"
{
unwrapped = fetchurl {
name = "cipd-${cipdCommit}-unwrapped";
url = "https://chrome-infra-packages.appspot.com/client?platform=${constants.platform}&version=git_revision:${cipdCommit}";
sha256 = cipdHashes.${constants.platform};
};
}
''
mkdir -p $out/bin
install -m755 $unwrapped $out/bin/cipd
'';
let
unwrapped =
runCommand "cipd-${cipdCommit}"
{
src = fetchurl {
name = "cipd-${cipdCommit}-unwrapped";
url = "https://chrome-infra-packages.appspot.com/client?platform=${stdenv-constants.platform}&version=git_revision:${cipdCommit}";
sha256 = cipdHashes.${stdenv-constants.platform};
};
}
''
mkdir -p $out/bin
install -m755 $src $out/bin/cipd
'';
in
writeShellScriptBin "cipd" ''
params=$@
if [[ "$1" == "ensure" ]]; then
shift 1
params="ensure"
while [ "$#" -ne 0 ]; do
if [[ "$1" == "-ensure-file" ]]; then
ensureFile="$2"
shift 2
params="$params -ensure-file $ensureFile"
sed -i 's/''${platform}/${host-constants.platform}/g' "$ensureFile"
sed -i 's/gn\/gn\/${stdenv-constants.platform}/gn\/gn\/${constants.platform}/g' "$ensureFile"
else
params="$params $1"
shift 1
fi
done
fi
exec ${unwrapped}/bin/cipd $params
'';
vpython =
pythonPkg:

View File

@ -158,7 +158,7 @@ let
# When other derivations wrap this one, any unmodified files
# found here should be included as-is, for tooling compatibility.
sdk = unwrapped;
} // lib.optionalAttrs (engine != null && engine.meta.available) {
} // lib.optionalAttrs (engine != null) {
inherit engine;
};

View File

@ -1,6 +1,7 @@
{ callPackage, symlinkJoin, lib }:
let
nixpkgsRoot = "@nixpkgs_root@";
version = "@flutter_version@";
engineVersion = "@engine_version@";
systemPlatforms = [
@ -8,14 +9,26 @@ let
"aarch64-linux"
];
derivations = builtins.map
(systemPlatform: callPackage "${nixpkgsRoot}/pkgs/development/compilers/flutter/engine/source.nix" {
targetPlatform = lib.systems.elaborate systemPlatform;
version = engineVersion;
url = "https://github.com/flutter/engine.git@${engineVersion}";
hashes."${systemPlatform}" = lib.fakeSha256;
})
systemPlatforms;
derivations =
lib.foldl'
(
acc: buildPlatform:
acc
++ (map
(targetPlatform:
callPackage "${nixpkgsRoot}/pkgs/development/compilers/flutter/engine/source.nix" {
targetPlatform = lib.systems.elaborate targetPlatform;
hostPlatform = lib.systems.elaborate buildPlatform;
buildPlatform = lib.systems.elaborate buildPlatform;
flutterVersion = version;
version = engineVersion;
url = "https://github.com/flutter/engine.git@${engineVersion}";
hashes."${buildPlatform}"."${targetPlatform}" = lib.fakeSha256;
})
systemPlatforms)
) [ ]
systemPlatforms;
in
symlinkJoin {
name = "evaluate-derivations";

View File

@ -86,21 +86,22 @@ def nix_build_to_fail(code):
return stderr
def get_engine_hashes(engine_version):
def get_engine_hashes(engine_version, flutter_version):
code = load_code("get-engine-hashes.nix",
nixpkgs_root=NIXPKGS_ROOT,
flutter_version=flutter_version,
engine_version=engine_version)
stderr = nix_build_to_fail(code)
pattern = re.compile(
r"/nix/store/.*-flutter-engine-source-(.+?)-(.+?).drv':\n\s+specified: .*\n\s+got:\s+(.+?)\n")
rf"/nix/store/.*-flutter-engine-source-{engine_version}-(.+?-.+?)-(.+?-.+?).drv':\n\s+specified: .*\n\s+got:\s+(.+?)\n")
matches = pattern.findall(stderr)
result_dict = {}
for match in matches:
_, system, got = match
result_dict[system] = got
flutter_platform, architecture, got = match
result_dict.setdefault(flutter_platform, {})[architecture] = got
def sort_dict_recursive(d):
return {
@ -405,7 +406,7 @@ def main():
engine_swiftshader_rev='0',
**common_data_args)
engine_hashes = get_engine_hashes(engine_hash)
engine_hashes = get_engine_hashes(engine_hash, flutter_version)
write_data(
pubspec_lock=pubspec_lock,

View File

@ -5,8 +5,14 @@
"engineSwiftShaderRev": "5f9ed9b16931c7155171d31f75004f73f0a3abc8",
"channel": "stable",
"engineHashes": {
"aarch64-linux": "sha256-+MIGPmKHkcn3TlFYu6jXv8KBRqdECgtGSqAKQE33iAM=",
"x86_64-linux": "sha256-+MIGPmKHkcn3TlFYu6jXv8KBRqdECgtGSqAKQE33iAM="
"aarch64-linux": {
"aarch64-linux": "sha256-bl71v+BSadKXOczo8TjkqatzKDmAZf7xyHAk8bVMN1Y=",
"x86_64-linux": "sha256-bl71v+BSadKXOczo8TjkqatzKDmAZf7xyHAk8bVMN1Y="
},
"x86_64-linux": {
"aarch64-linux": "sha256-kW5f7+w8Uo+ndq/lvhz/r7cAyCQY2848kTU1OqhqTnQ=",
"x86_64-linux": "sha256-kW5f7+w8Uo+ndq/lvhz/r7cAyCQY2848kTU1OqhqTnQ="
}
},
"dartVersion": "3.1.4",
"dartHash": {

View File

@ -0,0 +1,27 @@
From 41bb032ef3e8332115ed9ebdaeed5d47b9c56098 Mon Sep 17 00:00:00 2001
From: Robert Ancell <robert.ancell@canonical.com>
Date: Fri, 25 Aug 2023 16:46:52 +1200
Subject: [PATCH] Fix building on Pango 1.49.4
This version added the autoptr macros which we no longer need to define.
https://github.com/flutter/flutter/issues/132881
---
shell/platform/linux/fl_accessible_text_field.cc | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/shell/platform/linux/fl_accessible_text_field.cc b/shell/platform/linux/fl_accessible_text_field.cc
index 9a6052d4777ec..9dcc7f64fb820 100644
--- a/shell/platform/linux/fl_accessible_text_field.cc
+++ b/shell/platform/linux/fl_accessible_text_field.cc
@@ -7,7 +7,11 @@
#include "flutter/shell/platform/linux/public/flutter_linux/fl_value.h"
G_DEFINE_AUTOPTR_CLEANUP_FUNC(PangoContext, g_object_unref)
+// PangoLayout g_autoptr macro weren't added until 1.49.4. Add them manually.
+// https://gitlab.gnome.org/GNOME/pango/-/commit/0b84e14
+#if !PANGO_VERSION_CHECK(1, 49, 4)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(PangoLayout, g_object_unref)
+#endif
typedef bool (*FlTextBoundaryCallback)(const PangoLogAttr* attr);

View File

@ -5,8 +5,14 @@
"engineSwiftShaderRev": "5f9ed9b16931c7155171d31f75004f73f0a3abc8",
"channel": "stable",
"engineHashes": {
"aarch64-linux": "sha256-irrfyKvTHqaBgcKg3jJzEDs1B4Q91u/e6Ui01MDI+oU=",
"x86_64-linux": "sha256-irrfyKvTHqaBgcKg3jJzEDs1B4Q91u/e6Ui01MDI+oU="
"aarch64-linux": {
"aarch64-linux": "sha256-eRTh/I0SW6Kg1cZAzj+ZqsolG6anbqMNMdW6sxIlJaA=",
"x86_64-linux": "sha256-eRTh/I0SW6Kg1cZAzj+ZqsolG6anbqMNMdW6sxIlJaA="
},
"x86_64-linux": {
"aarch64-linux": "sha256-FXCgpj1H46amXmDQ998uAGHRUp/CAzZI/Yn4Btr9XsA=",
"x86_64-linux": "sha256-FXCgpj1H46amXmDQ998uAGHRUp/CAzZI/Yn4Btr9XsA="
}
},
"dartVersion": "3.2.4",
"dartHash": {

View File

@ -5,8 +5,14 @@
"engineSwiftShaderRev": "2fa7e9b99ae4e70ea5ae2cc9c8d3afb43391384f",
"channel": "stable",
"engineHashes": {
"aarch64-linux": "sha256-YTG46ZYCOu0OJGIILV6NGvIEhQU0yHNFSMR38Xvqa9E=",
"x86_64-linux": "sha256-YTG46ZYCOu0OJGIILV6NGvIEhQU0yHNFSMR38Xvqa9E="
"aarch64-linux": {
"aarch64-linux": "sha256-UBiHps5QoTAtSBuh3HBoAlztWZ/TpqvJI9JaIF2tLWs=",
"x86_64-linux": "sha256-UBiHps5QoTAtSBuh3HBoAlztWZ/TpqvJI9JaIF2tLWs="
},
"x86_64-linux": {
"aarch64-linux": "sha256-j7hvd/166zZXTVE46jULE+PzVLqHXhBnaZpYCS9TwpI=",
"x86_64-linux": "sha256-j7hvd/166zZXTVE46jULE+PzVLqHXhBnaZpYCS9TwpI="
}
},
"dartVersion": "3.3.2",
"dartHash": {

View File

@ -5,8 +5,14 @@
"engineSwiftShaderRev": "2fa7e9b99ae4e70ea5ae2cc9c8d3afb43391384f",
"channel": "stable",
"engineHashes": {
"aarch64-linux": "sha256-OPgevqdMwKhXml+PS5Z1DW0wg843NVN57CiLbXve8kE=",
"x86_64-linux": "sha256-OPgevqdMwKhXml+PS5Z1DW0wg843NVN57CiLbXve8kE="
"aarch64-linux": {
"aarch64-linux": "sha256-MiokUhxz23/HANUv8pD4jrJuj3/EAZNbJVpovM9upKI=",
"x86_64-linux": "sha256-MiokUhxz23/HANUv8pD4jrJuj3/EAZNbJVpovM9upKI="
},
"x86_64-linux": {
"aarch64-linux": "sha256-UWVjNgF94dYG7nSX+Gu6B9500RAHw1EOxE0+QJhS+Ao=",
"x86_64-linux": "sha256-UWVjNgF94dYG7nSX+Gu6B9500RAHw1EOxE0+QJhS+Ao="
}
},
"dartVersion": "3.4.3",
"dartHash": {

View File

@ -5,8 +5,14 @@
"engineSwiftShaderRev": "2fa7e9b99ae4e70ea5ae2cc9c8d3afb43391384f",
"channel": "beta",
"engineHashes": {
"aarch64-linux": "sha256-g169BDV6NtiyriMSgK3GOwhkVi9X23SqB9HOxxtGPK4=",
"x86_64-linux": "sha256-g169BDV6NtiyriMSgK3GOwhkVi9X23SqB9HOxxtGPK4="
"aarch64-linux": {
"aarch64-linux": "sha256-H+UEIEY3UwBBJePSuwsFWQIGuuYzPuX543Me3YplD14=",
"x86_64-linux": "sha256-H+UEIEY3UwBBJePSuwsFWQIGuuYzPuX543Me3YplD14="
},
"x86_64-linux": {
"aarch64-linux": "sha256-KJbjRfxC2S8JWeo1eTHObvumOjAVc/24jEvOu4znnAY=",
"x86_64-linux": "sha256-KJbjRfxC2S8JWeo1eTHObvumOjAVc/24jEvOu4znnAY="
}
},
"dartVersion": "3.5.0-180.3.beta",
"dartHash": {