# 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_root/common/config.gni") import("$flutter_root/shell/gpu/gpu.gni") import("$flutter_root/testing/testing.gni") import("$flutter_root/tools/fuchsia/dart.gni") import("$flutter_root/tools/fuchsia/fuchsia_archive.gni") import("$flutter_root/tools/fuchsia/fuchsia_libs.gni") import("$flutter_root/vulkan/config.gni") import("engine_flutter_runner.gni") shell_gpu_configuration("fuchsia_gpu_configuration") { enable_software = false enable_gl = false enable_vulkan = true enable_metal = false } # Things that explicitly being excluded: # 1. Kernel snapshot framework mode. # 2. Profiler symbols. # Dependencies for flutter tooling # # While not required to run a flutter mod, these allow interacting # with flutter via the fx tool and need to be built. # # This is only for builds in topaz tree. flutter_tool_deps = [] if (!using_fuchsia_sdk) { flutter_tool_deps += [ "//third_party/dart-pkg/git/flutter/packages/flutter_tools:fuchsia_attach($host_toolchain)" ] } flutter_runner("jit") { output_name = "flutter_jit_runner" product = false extra_defines = [] if (flutter_runtime_mode == "profile") { extra_defines += [ "FLUTTER_PROFILE" ] } if (enable_vulkan_validation_layers) { extra_defines += [ "VULKAN_VALIDATION_LAYERS_ENABLED" ] } extra_deps = [ "//third_party/dart/runtime:libdart_jit", "//third_party/dart/runtime/platform:libdart_platform_jit", ] + flutter_tool_deps } flutter_runner("jit_product") { output_name = "flutter_jit_product_runner" product = true extra_defines = [ "DART_PRODUCT" ] if (enable_vulkan_validation_layers) { extra_defines += [ "VULKAN_VALIDATION_LAYERS_ENABLED" ] } extra_deps = [ "//third_party/dart/runtime:libdart_jit_product", "//third_party/dart/runtime/platform:libdart_platform_jit_product", ] } flutter_runner("aot") { output_name = "flutter_aot_runner" product = false extra_defines = [] if (flutter_runtime_mode == "profile") { extra_defines += [ "FLUTTER_PROFILE" ] } if (enable_vulkan_validation_layers) { extra_defines += [ "VULKAN_VALIDATION_LAYERS_ENABLED" ] } extra_deps = [ "//third_party/dart/runtime:libdart_precompiled_runtime", "//third_party/dart/runtime/platform:libdart_platform_precompiled_runtime", ] } flutter_runner("aot_product") { output_name = "flutter_aot_product_runner" product = true extra_defines = [ "DART_PRODUCT" ] if (enable_vulkan_validation_layers) { extra_defines += [ "VULKAN_VALIDATION_LAYERS_ENABLED" ] } extra_deps = [ "//third_party/dart/runtime:libdart_precompiled_runtime_product", "//third_party/dart/runtime/platform:libdart_platform_precompiled_runtime_product", ] } template("jit_runner") { product = defined(invoker.product) && invoker.product product_suffix = "" if (product) { product_suffix = "_product" } fuchsia_archive(target_name) { snapshot_label = "kernel:kernel_core_snapshot${product_suffix}" snapshot_gen_dir = get_label_info(snapshot_label, "target_gen_dir") deps = [ ":jit${product_suffix}", snapshot_label, ] if (!product) { deps += [ "$flutter_root/shell/platform/fuchsia/runtime/dart/profiler_symbols:flutter_jit_runner", observatory_target, ] } binary = "flutter_jit${product_suffix}_runner" meta_dir = "$flutter_root/shell/platform/fuchsia/flutter/meta" resources = [ { path = rebase_path("//third_party/icu/common/icudtl.dat") dest = "icudtl.dat" }, ] if (!product) { resources += [ { path = rebase_path(observatory_archive_file) dest = "observatory.tar" }, { path = rebase_path( get_label_info( "$flutter_root/shell/platform/fuchsia/runtime/dart/profiler_symbols:flutter_jit_runner", "target_gen_dir") + "/flutter_jit_runner.dartprofilersymbols") dest = "flutter_jit_runner.dartprofilersymbols" }, ] } resources += [ { path = rebase_path( "$snapshot_gen_dir/vm_isolate_snapshot${product_suffix}.bin") dest = "vm_snapshot_data.bin" }, { path = rebase_path( "$snapshot_gen_dir/vm_snapshot_instructions${product_suffix}.bin") dest = "vm_snapshot_instructions.bin" }, { path = rebase_path( "$snapshot_gen_dir/isolate_snapshot${product_suffix}.bin") dest = "isolate_core_snapshot_data.bin" }, { path = rebase_path( "$snapshot_gen_dir/isolate_snapshot_instructions${product_suffix}.bin") dest = "isolate_core_snapshot_instructions.bin" }, ] _vulkan_icds = [] _libs = common_libs if (enable_vulkan_validation_layers) { _libs += vulkan_validation_libs _vulkan_icds += vulkan_icds } resources += _vulkan_icds libraries = _libs meta = [ { path = rebase_path("meta/flutter_jit${product_suffix}_runner.cmx") dest = "flutter_jit${product_suffix}_runner.cmx" }, ] } } template("aot_runner") { product = defined(invoker.product) && invoker.product product_suffix = "" if (product) { product_suffix = "_product" } fuchsia_archive(target_name) { deps = [ ":aot${product_suffix}", ] if (!product) { deps += [ "$flutter_root/shell/platform/fuchsia/runtime/dart/profiler_symbols:flutter_aot_runner", observatory_target, ] } meta_dir = "$flutter_root/shell/platform/fuchsia/flutter/meta" binary = "flutter_aot${product_suffix}_runner" resources = [ { path = rebase_path("//third_party/icu/common/icudtl.dat") dest = "icudtl.dat" }, ] if (!product) { resources += [ { path = rebase_path(observatory_archive_file) dest = "observatory.tar" }, { path = rebase_path( get_label_info( "$flutter_root/shell/platform/fuchsia/runtime/dart/profiler_symbols:flutter_aot_runner", "target_gen_dir") + "/flutter_aot_runner.dartprofilersymbols") dest = "flutter_aot_runner.dartprofilersymbols" }, ] } _vulkan_icds = [] _libs = common_libs if (enable_vulkan_validation_layers) { _libs += vulkan_validation_libs _vulkan_icds += vulkan_icds } resources += _vulkan_icds libraries = _libs meta = [ { path = rebase_path("meta/flutter_aot${product_suffix}_runner.cmx") dest = "flutter_aot${product_suffix}_runner.cmx" }, ] } } aot_runner("flutter_aot_runner") { product = false } aot_runner("flutter_aot_product_runner") { product = true } jit_runner("flutter_jit_runner") { product = false } jit_runner("flutter_jit_product_runner") { product = true } test_fixtures("flutter_runner_fixtures") { fixtures = [] } executable("flutter_runner_unittests") { testonly = true output_name = "flutter_runner_tests" sources = [ "accessibility_bridge.cc", "accessibility_bridge.h", "accessibility_bridge_unittest.cc", "flutter_runner_fakes.h", "fuchsia_intl.cc", "fuchsia_intl.h", "fuchsia_intl_unittest.cc", "logging.h", "loop.cc", "loop.h", "platform_view.cc", "platform_view.h", "platform_view_unittest.cc", "surface.cc", "surface.h", "task_observers.cc", "task_observers.h", "task_runner_adapter.cc", "task_runner_adapter.h", "thread.cc", "thread.h", "vsync_recorder.cc", "vsync_recorder.h", "vsync_waiter.cc", "vsync_waiter.h", "vsync_waiter_unittests.cc", ] # This is needed for //third_party/googletest for linking zircon symbols. libs = [ "//fuchsia/sdk/$host_os/arch/$target_cpu/sysroot/lib/libzircon.so" ] deps = [ ":aot", ":flutter_runner_fixtures", "//build/fuchsia/fidl:fuchsia.accessibility.semantics", "//build/fuchsia/pkg:async-loop-cpp", "//build/fuchsia/pkg:async-loop-default", "//build/fuchsia/pkg:scenic_cpp", "//build/fuchsia/pkg:sys_cpp_testing", "//flutter/lib/ui", "//flutter/shell/common", "//flutter/shell/platform/fuchsia/runtime/dart/utils", "//flutter/testing", "//third_party/dart/runtime:libdart_jit", "//third_party/dart/runtime/platform:libdart_platform_jit", ] } fuchsia_archive("flutter_runner_tests") { testonly = true deps = [ ":flutter_runner_unittests", ] binary = "$target_name" resources = [ { path = rebase_path("//third_party/icu/common/icudtl.dat") dest = "icudtl.dat" }, ] meta_dir = "$flutter_root/shell/platform/fuchsia/flutter/meta" libraries = common_libs meta = [ { path = rebase_path("meta/$target_name.cmx") dest = "$target_name.cmx" }, ] }