|  | # 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/common/fuchsia_config.gni") | 
|  | import("//flutter/tools/fuchsia/dart.gni") | 
|  | import("$dart_src/build/dart/dart_action.gni") | 
|  |  | 
|  | template("dart_kernel") { | 
|  | prebuilt_dart_action(target_name) { | 
|  | assert(defined(invoker.main_dart), "main_dart is a required parameter.") | 
|  | assert(defined(invoker.kernel_platform_files), | 
|  | "kernel_platform_files target must be defined.") | 
|  |  | 
|  | main_dart = rebase_path(invoker.main_dart) | 
|  |  | 
|  | deps = [ invoker.kernel_platform_files ] | 
|  |  | 
|  | gen_kernel_script = "$dart_src/pkg/vm/bin/gen_kernel.dart" | 
|  | platform_dill = "$root_out_dir/dart_runner_patched_sdk/platform_strong.dill" | 
|  |  | 
|  | dot_packages = rebase_path("$dart_src/.dart_tool/package_config.json") | 
|  |  | 
|  | inputs = [ | 
|  | platform_dill, | 
|  | gen_kernel_script, | 
|  | main_dart, | 
|  | dot_packages, | 
|  | ] | 
|  |  | 
|  | output = "$target_gen_dir/$target_name.dill" | 
|  | outputs = [ output ] | 
|  |  | 
|  | 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), | 
|  | "--output=" + rebase_path(output), | 
|  | ] | 
|  |  | 
|  | if (flutter_runtime_mode == "debug") { | 
|  | args += [ "--embed-sources" ] | 
|  | } else { | 
|  | args += [ "--no-embed-sources" ] | 
|  | } | 
|  |  | 
|  | if (defined(invoker.aot) && invoker.aot) { | 
|  | args += [ | 
|  | "--aot", | 
|  | "--tfa", | 
|  | ] | 
|  | } else { | 
|  | # --no-link-platform is only valid when --aot isn't specified | 
|  | args += [ "--no-link-platform" ] | 
|  | } | 
|  |  | 
|  | 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/main/sdk/lib/_internal/vm/bin/vmservice_io.dart#L240 | 
|  | # | 
|  | # Also, this define excludes debugging and profiling code from Flutter. | 
|  | args += [ "-Ddart.vm.product=true" ] | 
|  | } else { | 
|  | if (flutter_runtime_mode == "profile") { | 
|  | # The following define excludes debugging code from Flutter. | 
|  | args += [ "-Ddart.vm.profile=true" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | args += [ rebase_path(main_dart) ] | 
|  | } | 
|  | } |