blob: 87520ce524e0c09265c3ae9ffd592d064fadafcd [file] [log] [blame]
# 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.
assert(is_fuchsia)
import("//build/fuchsia/sdk.gni")
import("//flutter/common/fuchsia_config.gni")
import("//flutter/testing/testing.gni")
import("//flutter/tools/fuchsia/dart.gni")
import("//flutter/tools/fuchsia/fuchsia_archive.gni")
import("//flutter/tools/fuchsia/fuchsia_libs.gni")
template("runner_sources") {
assert(defined(invoker.product), "runner_sources must define product")
source_set(target_name) {
forward_variables_from(invoker, [ "defines" ])
sources = [
"builtin_libraries.cc",
"builtin_libraries.h",
"dart_component_controller.cc",
"dart_component_controller.h",
"dart_runner.cc",
"dart_runner.h",
"dart_test_component_controller.cc",
"dart_test_component_controller.h",
"logging.h",
"service_isolate.cc",
"service_isolate.h",
]
dart_public_deps = []
if (!invoker.product) {
dart_public_deps += [
"//flutter/shell/platform/fuchsia/runtime/dart/utils:utils",
"//third_party/dart/runtime/bin:dart_io_api",
]
} else {
dart_public_deps += [
"//flutter/shell/platform/fuchsia/runtime/dart/utils:utils_product",
"//third_party/dart/runtime/bin:dart_io_api_product",
]
}
public_deps = [
"$fuchsia_sdk_root/pkg:sys_cpp",
"//flutter/fml",
] + dart_public_deps
deps = [
"$fuchsia_sdk_root/fidl:fuchsia.component.runner",
"$fuchsia_sdk_root/fidl:fuchsia.logger",
"$fuchsia_sdk_root/fidl:fuchsia.test",
"$fuchsia_sdk_root/pkg:async",
"$fuchsia_sdk_root/pkg:async-cpp",
"$fuchsia_sdk_root/pkg:async-default",
"$fuchsia_sdk_root/pkg:async-loop",
"$fuchsia_sdk_root/pkg:async-loop-cpp",
"$fuchsia_sdk_root/pkg:async-loop-default",
"$fuchsia_sdk_root/pkg:fidl_cpp",
"$fuchsia_sdk_root/pkg:sys_cpp",
"$fuchsia_sdk_root/pkg:sys_cpp_testing",
"$fuchsia_sdk_root/pkg:sys_inspect_cpp",
"$fuchsia_sdk_root/pkg:syslog",
"$fuchsia_sdk_root/pkg:trace",
"$fuchsia_sdk_root/pkg:vfs_cpp",
"$fuchsia_sdk_root/pkg:zx",
"//flutter/common",
"//flutter/shell/platform/fuchsia/dart-pkg/fuchsia",
"//flutter/shell/platform/fuchsia/dart-pkg/zircon",
"//flutter/third_party/tonic",
]
}
}
template("runner") {
assert(defined(invoker.product), "The parameter 'product' must be defined.")
assert(defined(invoker.output_name),
"The parameter 'output_name' must be defined")
invoker_output_name = invoker.output_name
extra_defines = invoker.extra_defines
extra_deps = invoker.extra_deps
if (is_debug) {
extra_defines += [ "DEBUG" ] # Needed due to direct dart dependencies.
}
runner_sources(target_name + "_runner_sources") {
product = invoker.product
defines = extra_defines
}
executable(target_name) {
output_name = invoker_output_name
sources = [ "main.cc" ]
defines = extra_defines
deps = [
":" + target_name + "_runner_sources",
"$fuchsia_sdk_root/pkg:sys_inspect_cpp",
"$fuchsia_sdk_root/pkg:trace-provider-so",
] + extra_deps
}
}
runner("dart_jit_runner_bin") {
output_name = "dart_jit_runner"
product = false
extra_defines = []
if (flutter_runtime_mode == "profile") {
extra_defines += [ "FLUTTER_PROFILE" ]
}
extra_deps = [
"//third_party/dart/runtime:libdart_jit",
"//third_party/dart/runtime/platform:libdart_platform_jit",
]
}
runner("dart_jit_product_runner_bin") {
output_name = "dart_jit_product_runner"
product = true
extra_defines = [ "DART_PRODUCT" ]
extra_deps = [
"//third_party/dart/runtime:libdart_jit",
"//third_party/dart/runtime/platform:libdart_platform_jit",
]
}
runner("dart_aot_runner_bin") {
output_name = "dart_aot_runner"
product = false
extra_defines = [ "AOT_RUNTIME" ]
if (flutter_runtime_mode == "profile") {
extra_defines += [ "FLUTTER_PROFILE" ]
}
extra_deps = [
"embedder:dart_aot_snapshot_cc",
"//third_party/dart/runtime:libdart_precompiled_runtime",
"//third_party/dart/runtime/platform:libdart_platform_precompiled_runtime",
]
}
runner("dart_aot_product_runner_bin") {
output_name = "dart_aot_product_runner"
product = true
extra_defines = [
"AOT_RUNTIME",
"DART_PRODUCT",
]
extra_deps = [
"embedder:dart_aot_product_snapshot_cc",
"//third_party/dart/runtime:libdart_precompiled_runtime",
"//third_party/dart/runtime/platform:libdart_platform_precompiled_runtime",
]
}
template("aot_runner_package") {
assert(defined(invoker.product), "The parameter 'product' must be defined")
product_suffix = ""
if (invoker.product) {
product_suffix = "_product"
}
fuchsia_archive(target_name) {
deps = [ ":dart_aot${product_suffix}_runner_bin" ]
if (!invoker.product) {
deps += [
"vmservice:vmservice_snapshot",
"//flutter/shell/platform/fuchsia/runtime/dart/profiler_symbols:dart_aot_runner",
# TODO(kaushikiska): Figure out how to get the profiler symbols for `libdart_precompiled_runtime`
# "//third_party/dart/runtime:libdart_precompiled_runtime",
observatory_target,
]
}
binary = "dart_aot${product_suffix}_runner"
cml_file = rebase_path("meta/dart_aot${product_suffix}_runner.cml")
libraries = common_libs
resources = []
if (!invoker.product) {
vmservice_snapshot = rebase_path(
get_label_info("vmservice:vmservice_snapshot", "target_gen_dir") +
"/vmservice_snapshot.so")
dart_profiler_symbols = rebase_path(
get_label_info(
"//flutter/shell/platform/fuchsia/runtime/dart/profiler_symbols:dart_aot_runner",
"target_gen_dir") + "/dart_aot_runner.dartprofilersymbols")
inputs = [
vmservice_snapshot,
observatory_archive_file,
dart_profiler_symbols,
]
resources += [
{
path = vmservice_snapshot
dest = "vmservice_snapshot.so"
},
{
path = rebase_path(observatory_archive_file)
dest = "observatory.tar"
},
{
path = dart_profiler_symbols
dest = "dart_aot_runner.dartprofilersymbols"
},
]
}
}
}
template("jit_runner_package") {
assert(defined(invoker.product), "The parameter 'product' must be defined")
product_suffix = ""
if (invoker.product) {
product_suffix = "_product"
}
fuchsia_archive(target_name) {
deps = [
":dart_jit${product_suffix}_runner_bin",
"kernel:kernel_core_snapshot${product_suffix}",
]
if (!invoker.product) {
deps += [
"//flutter/shell/platform/fuchsia/runtime/dart/profiler_symbols:dart_jit_runner",
observatory_target,
]
}
binary = "dart_jit${product_suffix}_runner"
cml_file = rebase_path("meta/dart_jit${product_suffix}_runner.cml")
libraries = common_libs
resources = [
{
path =
rebase_path("$target_gen_dir/kernel/vm_data${product_suffix}.bin")
dest = "vm_snapshot_data.bin"
},
{
path = rebase_path(
"$target_gen_dir/kernel/vm_instructions${product_suffix}.bin")
dest = "vm_snapshot_instructions.bin"
},
{
path = rebase_path(
"$target_gen_dir/kernel/isolate_data${product_suffix}.bin")
dest = "isolate_core_snapshot_data.bin"
},
{
path = rebase_path(
"$target_gen_dir/kernel/isolate_instructions${product_suffix}.bin")
dest = "isolate_core_snapshot_instructions.bin"
},
]
if (!invoker.product) {
resources += [
{
path = rebase_path(observatory_archive_file)
dest = "observatory.tar"
},
{
path = rebase_path(
get_label_info(
"//flutter/shell/platform/fuchsia/runtime/dart/profiler_symbols:dart_jit_runner",
"target_gen_dir") + "/dart_jit_runner.dartprofilersymbols")
dest = "dart_jit_runner.dartprofilersymbols"
},
]
}
}
}
aot_runner_package("dart_aot_runner") {
product = false
}
aot_runner_package("dart_aot_product_runner") {
product = true
}
jit_runner_package("dart_jit_runner") {
product = false
}
jit_runner_package("dart_jit_product_runner") {
product = true
}
# "OOT" copy of the runner used by tests, to avoid conflicting with the runner
# in the base fuchsia image.
# TODO(fxbug.dev/106575): Fix this with subpackages.
aot_runner_package("oot_dart_aot_runner") {
product = false
}
# "OOT" copy of the runner used by tests, to avoid conflicting with the runner
# in the base fuchsia image.
# TODO(fxbug.dev/106575): Fix this with subpackages.
jit_runner_package("oot_dart_jit_runner") {
product = false
}
if (enable_unittests) {
runner_sources("jit_runner_sources_for_test") {
product = false
}
executable("dart_test_runner_unittests") {
testonly = true
output_name = "dart_runner_tests"
sources = [ "tests/suite_impl_unittests.cc" ]
# This is needed for //third_party/googletest for linking zircon symbols.
libs = [ "$fuchsia_sdk_path/arch/$target_cpu/sysroot/lib/libzircon.so" ]
deps = [
":jit_runner_sources_for_test",
"//flutter/fml",
"//third_party/dart/runtime:libdart_jit",
"//third_party/dart/runtime/platform:libdart_platform_jit",
"//third_party/googletest:gtest_main",
]
}
fuchsia_test_archive("dart_runner_tests") {
deps = [ ":dart_test_runner_unittests" ]
binary = "$target_name"
}
# When adding a new dep here, please also ensure the dep is added to
# testing/fuchsia/test_suites.yaml.
group("tests") {
testonly = true
deps = [
":dart_runner_tests",
"tests/startup_integration_test",
]
}
}