# Copyright 2013 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("//flutter/build/zip_bundle.gni") import("//flutter/common/config.gni") generated_file("artifacts_entitlement_config") { outputs = [ "$target_gen_dir/entitlements.txt" ] data_keys = [ "entitlement_file_path" ] deps = [ "//flutter/lib/snapshot:generate_snapshot_bin" ] if (flutter_runtime_mode == "debug") { deps += [ "//flutter/impeller/compiler:impellerc", "//flutter/impeller/tessellator:tessellator_shared", "//flutter/shell/testing:testing", "//flutter/tools/path_ops:path_ops", ] } } # This target is used to build a zip archive (artifacts.zip) of host tools such # as flutter_tester, the Dart kernel compiler, the impellerc shader compiler, # and other tooling that is bundled in debug-mode host builds. # # For historical reasons, this bundle also includes gen_snapshot (which is a # target-platform-specific binary) for desktop platforms, though the # un-suffixed gen_snapshot is unused on macOS (gen_snapshot_arm64 and # gen_snapshot_x64 are used in its place). # # Target-specific iOS artifacts.zip are produced in: # //flutter/sky/tools/create_ios_framework.py # # Target-specific Android archives are produced in: # //flutter/shell/platform/android:gen_snapshot # # macOS-specific gen_snapshot_arm64 and gen_snapshot_x64 are produced in: # //flutter/sky/tools/create_macos_gen_snapshots.py # # TODO: https://github.com/flutter/flutter/issues/38935 # Target-specific binaries such as gen_snapshot should be separated into a # separate archive target from host binaries such as flutter_tester. if (build_engine_artifacts) { zip_bundle("artifacts") { deps = [ "$dart_src/runtime/bin:gen_snapshot", "//flutter/flutter_frontend_server:frontend_server", "//flutter/impeller/compiler:impellerc", "//flutter/impeller/tessellator:tessellator_shared", "//flutter/lib/snapshot:generate_snapshot_bin", "//flutter/shell/testing:testing", "//flutter/tools/path_ops:path_ops", ] if (is_mac) { # TODO(godofredoc): Remove after paths are standardized flutter/flutter#105351. # Mac artifacts sometimes use mac and sometimes darwin. Standardizing the # names will require changes in the list of artifacts the tool is downloading. if (flutter_runtime_mode == "debug") { prefix = "darwin-$target_cpu/" } else { prefix = "darwin-$target_cpu-$flutter_runtime_mode/" } } else if (flutter_runtime_mode != "debug") { prefix = "$full_target_platform_name-$flutter_runtime_mode/" } else { prefix = "$full_target_platform_name/" } output = "$prefix/artifacts.zip" exe = "" if (host_os == "win") { exe = ".exe" } # gen_snapshot is bundled for all runtime modes. files = [ { source = "$root_out_dir/gen_snapshot$exe" destination = "gen_snapshot$exe" }, ] # Host tooling/libraries that are used only in debug builds, or which are # identical across all runtime modes. if (flutter_runtime_mode == "debug") { dll = ".so" lib_prefix = "lib" if (host_os == "win") { dll = ".dll" exe = ".exe" lib_prefix = "" } else if (host_os == "mac") { dll = ".dylib" } files += [ { source = "//flutter/third_party/icu/flutter/icudtl.dat" destination = "icudtl.dat" }, { source = "$root_out_dir/flutter_tester$exe" destination = "flutter_tester$exe" }, { source = "$root_out_dir/impellerc$exe" destination = "impellerc$exe" }, { source = "//flutter/impeller/compiler/shader_lib" destination = "shader_lib" }, { source = "$root_out_dir/${lib_prefix}path_ops$dll" destination = "${lib_prefix}path_ops$dll" }, { source = "$root_out_dir/libtessellator$dll" destination = "libtessellator$dll" }, { source = "$root_gen_dir/flutter/lib/snapshot/isolate_snapshot.bin" destination = "isolate_snapshot.bin" }, { source = "$root_gen_dir/flutter/lib/snapshot/vm_isolate_snapshot.bin" destination = "vm_isolate_snapshot.bin" }, { source = "$root_gen_dir/frontend_server_aot.dart.snapshot" destination = "frontend_server_aot.dart.snapshot" }, ] } # On macOS, add entitlements.txt, which contains filenames of binaries that # need to be code-signed by a later CI stage. if (host_os == "mac") { deps += [ ":artifacts_entitlement_config" ] files += [ { source = "$target_gen_dir/entitlements.txt" destination = "entitlements.txt" }, ] } } } if (host_os == "linux" || host_os == "win") { group("embedder") { deps = [ "//flutter/shell/platform/embedder:embedder-archive" ] } } # 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") { file_suffix = "" path_prefix = "flutter_patched_sdk/" 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 = "${path_prefix}vm_outline_strong.dill" }, { source = "$root_out_dir/flutter_patched_sdk/platform_strong.dill" destination = "${path_prefix}platform_strong.dill" }, ] } generated_file("dart_sdk_entitlement_config") { outputs = [ "$target_gen_dir/dart_sdk_entitlements.txt" ] # Dart SDK is a prebuilt archive. The rule for building # Dart SDK is https://github.com/flutter/engine/blob/main/BUILD.gn#L61 contents = [ "dart-sdk/bin/dart", "dart-sdk/bin/dartaotruntime", "dart-sdk/bin/utils/gen_snapshot", "dart-sdk/bin/utils/wasm-opt", ] deps = [] } # 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) { zip_bundle("dart_sdk_archive") { deps = [ ":dart_sdk_entitlement_config" ] output = "dart-sdk-$full_target_platform_name.zip" files = [ { source = prebuilt_dart_sdk destination = "dart-sdk" }, ] if (is_mac) { # Mac artifacts sometimes use mac and sometimes darwin. Standardizing the # names will require changes in the list of artifacts the tool is downloading. output = "dart-sdk-darwin-$target_cpu.zip" files += [ { source = "$target_gen_dir/dart_sdk_entitlements.txt" destination = "entitlements.txt" }, ] } } } # If there is no prebuilt sdk, create the dart sdk archive from the built sdk. if (build_engine_artifacts && !flutter_prebuilt_dart_sdk) { zip_bundle_from_file("dart_sdk_archive") { deps = [ "$dart_src:create_sdk" ] output = "dart-sdk-$full_target_platform_name.zip" files = [ { source = rebase_path("$root_build_dir/dart-sdk") destination = "dart-sdk" }, ] if (is_mac) { output = "dart-sdk-darwin-$target_cpu.zip" deps += [ ":dart_sdk_entitlement_config" ] files += [ { source = "$target_gen_dir/dart_sdk_entitlements.txt" destination = "entitlements.txt" }, ] } } } # Archives Flutter Windows Artifacts if (host_os == "win") { zip_bundle("windows_flutter") { output = "$full_target_platform_name-$flutter_runtime_mode/$full_target_platform_name-flutter.zip" deps = [ "//flutter:gen_snapshot", "//flutter/shell/platform/common:publish_headers", "//flutter/shell/platform/windows:flutter_windows", "//flutter/shell/platform/windows:publish_headers_windows", ] files = [ { source = "$root_out_dir/flutter_export.h" destination = "flutter_export.h" }, { source = "$root_out_dir/flutter_windows.h" destination = "flutter_windows.h" }, { source = "$root_out_dir/flutter_messenger.h" destination = "flutter_messenger.h" }, { source = "$root_out_dir/flutter_plugin_registrar.h" destination = "flutter_plugin_registrar.h" }, { source = "$root_out_dir/flutter_texture_registrar.h" destination = "flutter_texture_registrar.h" }, { source = "$root_out_dir/flutter_windows.dll" destination = "flutter_windows.dll" }, { source = "$root_out_dir/flutter_windows.dll.exp" destination = "flutter_windows.dll.exp" }, { source = "$root_out_dir/flutter_windows.dll.lib" destination = "flutter_windows.dll.lib" }, { source = "$root_out_dir/flutter_windows.dll.pdb" destination = "flutter_windows.dll.pdb" }, { source = "$root_out_dir/gen_snapshot/gen_snapshot.exe" destination = "gen_snapshot.exe" }, ] } } if (is_mac) { group("flutter_embedder_framework") { deps = [ "//flutter/shell/platform/embedder:flutter_embedder_framework_archive", ] } } if (host_os == "win") { zip_bundle("archive_win_gen_snapshot") { deps = [ "//flutter:gen_snapshot" ] output = "$full_target_platform_name-$flutter_runtime_mode/windows-x64.zip" files = [ { source = "$root_out_dir/gen_snapshot/gen_snapshot.exe" destination = "gen_snapshot.exe" }, ] } }