From 7da0c5421ce2374ca5cf48d259186b792d3128ea Mon Sep 17 00:00:00 2001 From: godofredoc Date: Fri, 4 Feb 2022 09:30:02 -0800 Subject: [PATCH] Archives for dart-sdk and flutter_patched_sdk. (flutter/engine#30888) --- engine/src/flutter/BUILD.gn | 10 +------ engine/src/flutter/build/archives/BUILD.gn | 26 +++++++++++++++--- engine/src/flutter/common/config.gni | 31 ++++++++++++++++++++-- 3 files changed, 53 insertions(+), 14 deletions(-) diff --git a/engine/src/flutter/BUILD.gn b/engine/src/flutter/BUILD.gn index 108ef8328af..65a46f1d50a 100644 --- a/engine/src/flutter/BUILD.gn +++ b/engine/src/flutter/BUILD.gn @@ -33,14 +33,6 @@ config("export_dynamic_symbols") { if (flutter_prebuilt_dart_sdk) { copy_trees("_copy_trees") { - # There is no prebuilt Dart SDK targeting Fuchsia, but we also don't need - # one, so even when the build is targeting Fuchsia, use the prebuilt - # Dart SDK for the host. - if (current_toolchain == host_toolchain || is_fuchsia) { - prebuilt_dart_sdk = host_prebuilt_dart_sdk - } else { - prebuilt_dart_sdk = target_prebuilt_dart_sdk - } sources = [ { target = "copy_dart_sdk" @@ -62,7 +54,7 @@ _build_engine_artifacts = (is_linux && !is_chromeos && current_cpu != "arm") || is_mac group("dart_sdk") { - if (_build_engine_artifacts) { + if (build_engine_artifacts) { if (flutter_prebuilt_dart_sdk) { public_deps = [ ":copy_dart_sdk" ] } else { diff --git a/engine/src/flutter/build/archives/BUILD.gn b/engine/src/flutter/build/archives/BUILD.gn index b7ffa219cdb..b5fda380180 100644 --- a/engine/src/flutter/build/archives/BUILD.gn +++ b/engine/src/flutter/build/archives/BUILD.gn @@ -48,17 +48,37 @@ if (host_os == "linux") { } } +# Generates flutter_patched_sdk.zip for debug and profile runtime modes +# and saves it in the zips_archive folder. For release runtime mode it +# generates flutter_patched_sdk_product.zip and saves it to +# zips_archive/flutter_patched_sdk_product/ folder. zip_bundle("flutter_patched_sdk") { - output = "flutter_patched_sdk.zip" + file_suffix = "" + path_prefix = "" + if (flutter_runtime_mode == "release") { + file_suffix = "_product" + path_prefix = "flutter_patched_sdk_product/" + } + output = "flutter_patched_sdk${file_suffix}.zip" deps = [ "//flutter/lib/snapshot:strong_platform" ] files = [ { source = "$root_out_dir/flutter_patched_sdk/vm_outline_strong.dill" - destination = "vm_outline_strong.dill" + destination = "${path_prefix}vm_outline_strong.dill" }, { source = "$root_out_dir/flutter_patched_sdk/platform_strong.dill" - destination = "platform_strong.dill" + destination = "${path_prefix}platform_strong.dill" }, ] } + +# Flutter consumes the dart sdk as a prebuilt. Rather than regenerating +# the zip file we are just copying the original file to the artifacts location. +if (build_engine_artifacts && flutter_prebuilt_dart_sdk) { + copy("dart_sdk_archive") { + sources = [ prebuilt_dart_sdk_archive ] + outputs = + [ "$root_out_dir/zip_archives/dart-sdk-$prebuilt_dart_sdk_config" ] + } +} diff --git a/engine/src/flutter/common/config.gni b/engine/src/flutter/common/config.gni index 57292c750d9..dd4c2a60da4 100644 --- a/engine/src/flutter/common/config.gni +++ b/engine/src/flutter/common/config.gni @@ -83,8 +83,35 @@ if (flutter_prebuilt_dart_sdk) { _host_os_name = "windows" } + _target_prebuilt_dart_sdk_config = "$_target_os_name-$target_cpu" + _host_prebuilt_dart_sdk_config = "$_host_os_name-$host_cpu" + _target_prebuilt_dart_sdk_archive = "//flutter/prebuilts/dartsdk-$_target_prebuilt_dart_sdk_config-release.zip" + _host_prebuilt_dart_sdk_archive = + "//flutter/prebuilts/dartsdk-$_host_prebuilt_dart_sdk_config-release.zip" + target_prebuilt_dart_sdk = - "//flutter/prebuilts/$_target_os_name-$target_cpu/dart-sdk" + "//flutter/prebuilts/$_target_prebuilt_dart_sdk_config/dart-sdk" host_prebuilt_dart_sdk = - "//flutter/prebuilts/$_host_os_name-$host_cpu/dart-sdk" + "//flutter/prebuilts/$_host_prebuilt_dart_sdk_config/dart-sdk" + + # There is no prebuilt Dart SDK targeting Fuchsia, but we also don't need + # one, so even when the build is targeting Fuchsia, use the prebuilt + # Dart SDK for the host. + if (current_toolchain == host_toolchain || is_fuchsia) { + prebuilt_dart_sdk = host_prebuilt_dart_sdk + prebuilt_dart_sdk_config = _host_prebuilt_dart_sdk_config + prebuilt_dart_sdk_archive = _host_prebuilt_dart_sdk_archive + } else { + prebuilt_dart_sdk = target_prebuilt_dart_sdk + prebuilt_dart_sdk_config = _target_prebuilt_dart_sdk_config + prebuilt_dart_sdk_archive = _target_prebuilt_dart_sdk_archive + } } + +# Flutter SDK artifacts should only be built when either doing host builds, or +# for cross-compiled desktop targets. +# TODO: We can't build the engine artifacts for arm (32-bit) right now; +# see https://github.com/flutter/flutter/issues/74322 +build_engine_artifacts = + current_toolchain == host_toolchain || + (is_linux && !is_chromeos && current_cpu != "arm") || is_mac