| # 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) ] | |
| } | |
| } |