From 0fd9b168833d247af9d95cf0e809875d737b1646 Mon Sep 17 00:00:00 2001 From: Kaushik Iska Date: Thu, 10 Oct 2019 19:41:13 -0700 Subject: [PATCH] Reland dart_aot_runner shims This reverts commit f20c773c5e05a96974d56f230d9edb447f646b98. --- shell/platform/fuchsia/BUILD.gn | 1 + .../fuchsia/dart_runner/embedder/BUILD.gn | 118 ++++++++++++++---- 2 files changed, 92 insertions(+), 27 deletions(-) diff --git a/shell/platform/fuchsia/BUILD.gn b/shell/platform/fuchsia/BUILD.gn index 6989561e9..7f013e11d 100644 --- a/shell/platform/fuchsia/BUILD.gn +++ b/shell/platform/fuchsia/BUILD.gn @@ -20,6 +20,7 @@ if (using_fuchsia_sdk) { deps = [ "dart:kernel_compiler", "dart_runner:$dart_runner_target", + "dart_runner/embedder:dart_aot_product_snapshot_cc", "flutter:flutter_aot_${product_suffix}runner", "flutter:flutter_jit_${product_suffix}runner", "flutter:flutter_runner_tests", diff --git a/shell/platform/fuchsia/dart_runner/embedder/BUILD.gn b/shell/platform/fuchsia/dart_runner/embedder/BUILD.gn index 53ad9b4bc..b21a80a0c 100644 --- a/shell/platform/fuchsia/dart_runner/embedder/BUILD.gn +++ b/shell/platform/fuchsia/dart_runner/embedder/BUILD.gn @@ -2,38 +2,100 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//build/dart/toolchain.gni") -import("//topaz/runtime/dart/dart_component.gni") -import("//topaz/runtime/dart/dart_kernel.gni") +import("//build/compiled_action.gni") +import("//third_party/dart/build/dart/dart_action.gni") +import("$flutter_root/common/fuchsia_config.gni") +import("$flutter_root/tools/fuchsia/dart.gni") -dart_kernel("shim") { - platform_name = "dart_runner" - platform_deps = [ "//topaz/runtime/dart_runner/kernel:kernel_platform_files" ] - platform_path = "$root_out_dir/dart_runner_patched_sdk" +template("dart_shim_kernel") { + prebuilt_dart_action(target_name) { + assert(defined(invoker.main_dart), "main_dart is a required parameter.") - disable_analysis = true + main_dart = rebase_path(invoker.main_dart) - main_dart = "shim.dart" + deps = [ + "../kernel:kernel_platform_files($host_toolchain)", + ] - aot = true - product = false + gen_kernel_script = "//third_party/dart/pkg/vm/bin/gen_kernel.dart" + platform_dill = "$root_out_dir/dart_runner_patched_sdk/platform_strong.dill" - visibility = [ ":*" ] -} + dot_packages = rebase_path("//third_party/dart/.packages") -dart_kernel("shim_product") { - platform_name = "dart_runner" - platform_deps = [ "//topaz/runtime/dart_runner/kernel:kernel_platform_files" ] - platform_path = "$root_out_dir/dart_runner_patched_sdk" + inputs = [ + gen_kernel_script, + main_dart, + dot_packages, + ] - disable_analysis = true + output = "$target_gen_dir/$target_name.dill" + outputs = [ + output, + ] - main_dart = "shim.dart" + depfile = "$output.d" + abs_depfile = rebase_path(depfile) + rebased_output = rebase_path(output, root_build_dir) + vm_args = [ + "--depfile=$abs_depfile", + "--depfile_output_filename=$rebased_output", + ] + + script = gen_kernel_script + + args = [ + "--packages=" + rebase_path(dot_packages), + "--target=dart_runner", + "--platform=" + rebase_path(platform_dill), + "--no-link-platform", + "--output=" + rebase_path(output), + ] + + if (is_debug) { + args += [ "--embed-sources" ] + } else { + args += [ "--no-embed-sources" ] + } + if (defined(invoker.aot) && invoker.aot) { + args += [ + "--aot", + "--tfa", + ] + } + + if (defined(invoker.product) && invoker.product) { + # Setting this flag in a non-product release build for AOT (a "profile" + # build) causes the vm service isolate code to be tree-shaken from an app. + # See the pragma on the entrypoint here: + # + # https://github.com/dart-lang/sdk/blob/master/runtime/bin/vmservice/vmservice_io.dart#L240 + # + # Also, this define excludes debugging and profiling code from Flutter. + args += [ "-Ddart.vm.product=true" ] + } else { + if (!is_debug) { + # The following define excludes debugging code from Flutter. + args += [ "-Ddart.vm.profile=true" ] + } + } + + visibility = [ ":*" ] + + args += [ rebase_path(main_dart) ] + } +} + +dart_shim_kernel("shim_kernel") { + main_dart = "shim.dart" + product = false aot = true - product = true +} - visibility = [ ":*" ] +dart_shim_kernel("shim_product_kernel") { + main_dart = "shim.dart" + product = true + aot = true } template("create_aot_snapshot") { @@ -42,13 +104,13 @@ template("create_aot_snapshot") { if (invoker.product) { product_suffix = "_product" } - action("${target_name}_assembly") { + compiled_action("${target_name}_assembly") { snapshot_assembly = "$target_gen_dir/aot${product_suffix}_vm_snapshot.S" # gen_snapshot only needs this to go through the motions of setting up an isolate. shim_target = ":shim${product_suffix}_kernel" shim_kernel = get_label_info(shim_target, "target_gen_dir") + - "/shim${product_suffix}_kernel.dil" + "/shim${product_suffix}_kernel.dill" inputs = [ shim_kernel, @@ -57,11 +119,13 @@ template("create_aot_snapshot") { snapshot_assembly, ] - deps = gen_snapshot_deps + [ shim_target ] + deps = [ + shim_target, + ] if (invoker.product) { - script = gen_snapshot_product + tool = gen_snapshot_product } else { - script = gen_snapshot + tool = gen_snapshot } args = [ @@ -74,7 +138,7 @@ template("create_aot_snapshot") { # No asserts in debug or release product. # No asserts in release with flutter_profile=true (non-product) # Yes asserts in non-product debug. - if (!invoker.product && (!flutter_profile || is_debug)) { + if (!invoker.product && (!(flutter_runtime_mode == "profile") || is_debug)) { args += [ "--enable_asserts" ] } args += [ rebase_path(shim_kernel) ] -- GitLab