# 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/config.gni")
import("//flutter/shell/gpu/gpu.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")
import("//flutter/vulkan/config.gni")
import("engine_flutter_runner.gni")

# Fuchsia uses its own custom Surface implementation.
shell_gpu_configuration("fuchsia_legacy_gpu_configuration") {
  enable_software = false
  enable_gl = false
  enable_vulkan = false
  enable_metal = false
}

# Things that explicitly being excluded:
# 1. Kernel snapshot framework mode.
# 2. Profiler symbols.

flutter_runner("jit") {
  output_name = "flutter_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",
  ]
}

flutter_runner("jit_product") {
  output_name = "flutter_jit_product_runner"
  product = true

  extra_defines = [ "DART_PRODUCT" ]

  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" ]
  }

  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" ]

  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/shell/platform/fuchsia/runtime/dart/profiler_symbols:flutter_jit_runner",
        observatory_target,
      ]
    }

    binary = "flutter_jit${product_suffix}_runner"

    meta_dir = "//flutter/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/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/shell/platform/fuchsia/runtime/dart/profiler_symbols:flutter_aot_runner",
        observatory_target,
      ]
    }

    meta_dir = "//flutter/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/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",
    "component.cc",
    "component.h",
    "component_unittest.cc",
    "flutter_runner_fakes.h",
    "flutter_runner_product_configuration.cc",
    "flutter_runner_product_configuration.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",
    "runner.cc",
    "runner.h",
    "runner_unittest.cc",
    "surface.cc",
    "surface.h",
    "task_observers.cc",
    "task_observers.h",
    "task_runner_adapter.cc",
    "task_runner_adapter.h",
    "tests/flutter_runner_product_configuration_unittests.cc",
    "tests/vsync_recorder_unittests.cc",
    "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-default",
    "//build/fuchsia/pkg:async-loop-cpp",
    "//build/fuchsia/pkg:async-loop-default",
    "//build/fuchsia/pkg:scenic_cpp",
    "//build/fuchsia/pkg:sys_cpp_testing",
    "//flutter/common",
    "//flutter/flow:flow_fuchsia_legacy",
    "//flutter/lib/ui:ui_fuchsia_legacy",
    "//flutter/runtime:runtime_fuchsia_legacy",
    "//flutter/shell/common:common_fuchsia_legacy",
    "//flutter/shell/platform/fuchsia/runtime/dart/utils",
    "//flutter/testing",
    "//third_party/dart/runtime:libdart_jit",
    "//third_party/dart/runtime/platform:libdart_platform_jit",
  ]
}

executable("flutter_runner_tzdata_unittests") {
  testonly = true

  output_name = "flutter_runner_tzdata_tests"

  sources = [
    "runner.cc",
    "runner.h",
    "runner_tzdata_unittest.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/flow:flow_fuchsia_legacy",
    "//flutter/lib/ui:ui_fuchsia_legacy",
    "//flutter/runtime:runtime_fuchsia_legacy",
    "//flutter/shell/common:common_fuchsia_legacy",
    "//flutter/shell/platform/fuchsia/runtime/dart/utils",
    "//flutter/testing",
    "//third_party/dart/runtime:libdart_jit",
    "//third_party/dart/runtime/platform:libdart_platform_jit",
    "//third_party/icu",
    "//third_party/skia",
  ]
}

executable("flutter_runner_scenic_unittests") {
  testonly = true

  output_name = "flutter_runner_scenic_tests"

  sources = [
    "component.cc",
    "component.h",
    "compositor_context.cc",
    "compositor_context.h",
    "engine.cc",
    "engine.h",
    "fuchsia_intl.cc",
    "fuchsia_intl.h",
    "isolate_configurator.cc",
    "isolate_configurator.h",
    "logging.h",
    "loop.cc",
    "loop.h",
    "platform_view.cc",
    "platform_view.h",
    "runner.cc",
    "runner.h",
    "session_connection.cc",
    "session_connection.h",
    "surface.cc",
    "surface.h",
    "task_observers.cc",
    "task_observers.h",
    "task_runner_adapter.cc",
    "task_runner_adapter.h",
    "tests/session_connection_unittests.cc",
    "thread.cc",
    "thread.h",
    "unique_fdio_ns.h",
    "vsync_recorder.cc",
    "vsync_recorder.h",
    "vsync_waiter.cc",
    "vsync_waiter.h",
    "vsync_waiter_unittests.cc",
    "vulkan_surface.cc",
    "vulkan_surface.h",
    "vulkan_surface_pool.cc",
    "vulkan_surface_pool.h",
    "vulkan_surface_producer.cc",
    "vulkan_surface_producer.h",
  ]

  # This is needed for //third_party/googletest for linking zircon symbols.
  libs = [ "//fuchsia/sdk/$host_os/arch/$target_cpu/sysroot/lib/libzircon.so" ]

  deps = [
    ":flutter_runner_fixtures",
    ":jit",
    "$fuchsia_sdk_root/fidl:fuchsia.ui.policy",
    "$fuchsia_sdk_root/pkg:trace-provider-so",
    "//build/fuchsia/fidl:fuchsia.accessibility.semantics",
    "//build/fuchsia/pkg:async-default",
    "//build/fuchsia/pkg:async-loop-cpp",
    "//build/fuchsia/pkg:async-loop-default",
    "//build/fuchsia/pkg:scenic_cpp",
    "//build/fuchsia/pkg:sys_cpp_testing",
    "//flutter/common",
    "//flutter/flow:flow_fuchsia_legacy",
    "//flutter/lib/ui:ui_fuchsia_legacy",
    "//flutter/runtime:runtime_fuchsia_legacy",
    "//flutter/shell/common:common_fuchsia_legacy",
    "//flutter/shell/platform/fuchsia/dart-pkg/fuchsia",
    "//flutter/shell/platform/fuchsia/dart-pkg/zircon",
    "//flutter/shell/platform/fuchsia/runtime/dart/utils",
    "//flutter/testing",
    "//flutter/vulkan",
    "//third_party/dart/runtime:libdart_jit",
    "//third_party/dart/runtime/platform:libdart_platform_jit",
    "//third_party/icu",
    "//third_party/skia",
  ]

  public_deps = [
    "//third_party/googletest:gtest",
  ]
}

# When adding a new dep here, please also ensure the dep is added to
# testing/fuchsia/run_tests.sh and testing/fuchsia/test_fars
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"
    },
    {
      path = rebase_path(
              "//flutter/shell/platform/fuchsia/flutter/tests/tzdata/2019a/44/le/metaZones.res")
      dest = "tzdata/metaZones.res"
    },
    {
      path = rebase_path(
              "//flutter/shell/platform/fuchsia/flutter/tests/tzdata/2019a/44/le/timezoneTypes.res")
      dest = "tzdata/timezoneTypes.res"
    },
    {
      path = rebase_path(
              "//flutter/shell/platform/fuchsia/flutter/tests/tzdata/2019a/44/le/zoneinfo64.res")
      dest = "tzdata/zoneinfo64.res"
    },
  ]

  meta_dir = "//flutter/shell/platform/fuchsia/flutter/meta"

  libraries = common_libs

  meta = [
    {
      path = rebase_path("meta/$target_name.cmx")
      dest = "$target_name.cmx"
    },
  ]
}

fuchsia_archive("flutter_runner_tzdata_tests") {
  testonly = true

  deps = [
    ":flutter_runner_tzdata_unittests",
  ]

  binary = "$target_name"

  resources = [
    {
      path = rebase_path("//third_party/icu/common/icudtl.dat")
      dest = "icudtl.dat"
    },
  ]

  meta_dir = "//flutter/shell/platform/fuchsia/flutter/meta"

  libraries = common_libs

  meta = [
    {
      path = rebase_path("meta/$target_name.cmx")
      dest = "$target_name.cmx"
    },
  ]
}

fuchsia_archive("flutter_runner_scenic_tests") {
  testonly = true

  deps = [
    ":flutter_runner_scenic_unittests",
  ]

  binary = "$target_name"

  resources = [
    {
      path = rebase_path("//third_party/icu/common/icudtl.dat")
      dest = "icudtl.dat"
    },
  ]

  meta_dir = "//flutter/shell/platform/fuchsia/flutter/meta"

  libraries = common_libs

  meta = [
    {
      path = rebase_path("meta/$target_name.cmx")
      dest = "$target_name.cmx"
    },
  ]
}

fuchsia_test_archive("fml_tests") {
  deps = [
    "//flutter/fml:fml_unittests",
  ]

  binary = "fml_unittests"
}

fuchsia_test_archive("flow_tests") {
  deps = [
    "//flutter/flow:flow_unittests",
  ]

  binary = "flow_unittests"

  resources = [
    {
      path = rebase_path(
              "//flutter/testing/resources/performance_overlay_gold_60fps.png")
      dest = "flutter/testing/resources/performance_overlay_gold_60fps.png"
    },
    {
      path = rebase_path(
              "//flutter/testing/resources/performance_overlay_gold_90fps.png")
      dest = "flutter/testing/resources/performance_overlay_gold_90fps.png"
    },
    {
      path = rebase_path(
              "//flutter/testing/resources/performance_overlay_gold_120fps.png")
      dest = "flutter/testing/resources/performance_overlay_gold_120fps.png"
    },
  ]
}

fuchsia_test_archive("flow_tests_next") {
  deps = [
    "//flutter/flow:flow_unittests_next",
  ]

  binary = "flow_unittests_next"

  resources = [
    {
      path = rebase_path(
              "//flutter/testing/resources/performance_overlay_gold_60fps.png")
      dest = "flutter/testing/resources/performance_overlay_gold_60fps.png"
    },
    {
      path = rebase_path(
              "//flutter/testing/resources/performance_overlay_gold_90fps.png")
      dest = "flutter/testing/resources/performance_overlay_gold_90fps.png"
    },
    {
      path = rebase_path(
              "//flutter/testing/resources/performance_overlay_gold_120fps.png")
      dest = "flutter/testing/resources/performance_overlay_gold_120fps.png"
    },
  ]
}

fuchsia_test_archive("runtime_tests") {
  deps = [
    "//flutter/runtime:runtime_fixtures",
    "//flutter/runtime:runtime_unittests",
  ]

  binary = "runtime_unittests"

  # TODO(gw280): https://github.com/flutter/flutter/issues/50294
  # Right now we need to manually specify all the fixtures that are
  # declared in the test_fixtures() call above.
  resources = [
    {
      path = "$root_gen_dir/flutter/runtime/assets/kernel_blob.bin"
      dest = "assets/kernel_blob.bin"
    },
  ]
}

fuchsia_test_archive("runtime_tests_next") {
  deps = [
    "//flutter/runtime:runtime_fixtures",
    "//flutter/runtime:runtime_unittests_next",
  ]

  binary = "runtime_unittests_next"

  # TODO(gw280): https://github.com/flutter/flutter/issues/50294
  # Right now we need to manually specify all the fixtures that are
  # declared in the test_fixtures() call above.
  resources = [
    {
      path = "$root_gen_dir/flutter/runtime/assets/kernel_blob.bin"
      dest = "assets/kernel_blob.bin"
    },
  ]
}

fuchsia_test_archive("shell_tests") {
  deps = [
    "//flutter/shell/common:shell_unittests",
    "//flutter/shell/common:shell_unittests_fixtures",
  ]

  binary = "shell_unittests"

  # TODO(gw280): https://github.com/flutter/flutter/issues/50294
  # Right now we need to manually specify all the fixtures that are
  # declared in the test_fixtures() call above.
  resources = [
    {
      path = "$root_gen_dir/flutter/shell/common/assets/kernel_blob.bin"
      dest = "assets/kernel_blob.bin"
    },
    {
      path =
          "$root_gen_dir/flutter/shell/common/assets/shelltest_screenshot.png"
      dest = "assets/shelltest_screenshot.png"
    },
  ]

  libraries = vulkan_validation_libs
  resources += vulkan_icds
}

fuchsia_test_archive("shell_tests_next") {
  deps = [
    "//flutter/shell/common:shell_unittests_fixtures",
    "//flutter/shell/common:shell_unittests_next",
  ]

  binary = "shell_unittests_next"

  # TODO(gw280): https://github.com/flutter/flutter/issues/50294
  # Right now we need to manually specify all the fixtures that are
  # declared in the test_fixtures() call above.
  resources = [
    {
      path = "$root_gen_dir/flutter/shell/common/assets/kernel_blob.bin"
      dest = "assets/kernel_blob.bin"
    },
    {
      path =
          "$root_gen_dir/flutter/shell/common/assets/shelltest_screenshot.png"
      dest = "assets/shelltest_screenshot.png"
    },
  ]

  libraries = vulkan_validation_libs
  resources += vulkan_icds
}

fuchsia_test_archive("testing_tests") {
  deps = [
    "//flutter/testing:testing_unittests",
  ]

  binary = "testing_unittests"
}

fuchsia_test_archive("txt_tests") {
  deps = [
    "//flutter/third_party/txt:txt_unittests",
  ]

  binary = "txt_unittests"

  resources = [
    {
      path = rebase_path("//third_party/icu/common/icudtl.dat")
      dest = "icudtl.dat"
    },
    {
      path = rebase_path("//third_party/icu/common/icudtl.dat")
      dest = "icudtl2.dat"
    },
  ]
}

fuchsia_test_archive("ui_tests") {
  deps = [
    "//flutter/lib/ui:ui_unittests",
    "//flutter/lib/ui:ui_unittests_fixtures",
  ]

  binary = "ui_unittests"

  # TODO(gw280): https://github.com/flutter/flutter/issues/50294
  # Right now we need to manually specify all the fixtures that are
  # declared in the test_fixtures() call above.
  resources = [
    {
      path = "$root_gen_dir/flutter/lib/ui/assets/kernel_blob.bin"
      dest = "assets/kernel_blob.bin"
    },
    {
      path = "$root_gen_dir/flutter/lib/ui/assets/DashInNooglerHat.jpg"
      dest = "assets/DashInNooglerHat.jpg"
    },
    {
      path = "$root_gen_dir/flutter/lib/ui/assets/Horizontal.jpg"
      dest = "assets/Horizontal.jpg"
    },
    {
      path = "$root_gen_dir/flutter/lib/ui/assets/Horizontal.png"
      dest = "assets/Horizontal.png"
    },
    {
      path = "$root_gen_dir/flutter/lib/ui/assets/hello_loop_2.gif"
      dest = "assets/hello_loop_2.gif"
    },
    {
      path = "$root_gen_dir/flutter/lib/ui/assets/hello_loop_2.webp"
      dest = "assets/hello_loop_2.webp"
    },
  ]

  libraries = vulkan_validation_libs
  resources += vulkan_icds
}

fuchsia_test_archive("ui_tests_next") {
  deps = [
    "//flutter/lib/ui:ui_unittests_fixtures",
    "//flutter/lib/ui:ui_unittests_next",
  ]

  binary = "ui_unittests_next"

  # TODO(gw280): https://github.com/flutter/flutter/issues/50294
  # Right now we need to manually specify all the fixtures that are
  # declared in the test_fixtures() call above.
  resources = [
    {
      path = "$root_gen_dir/flutter/lib/ui/assets/kernel_blob.bin"
      dest = "assets/kernel_blob.bin"
    },
    {
      path = "$root_gen_dir/flutter/lib/ui/assets/DashInNooglerHat.jpg"
      dest = "assets/DashInNooglerHat.jpg"
    },
    {
      path = "$root_gen_dir/flutter/lib/ui/assets/Horizontal.jpg"
      dest = "assets/Horizontal.jpg"
    },
    {
      path = "$root_gen_dir/flutter/lib/ui/assets/Horizontal.png"
      dest = "assets/Horizontal.png"
    },
    {
      path = "$root_gen_dir/flutter/lib/ui/assets/hello_loop_2.gif"
      dest = "assets/hello_loop_2.gif"
    },
    {
      path = "$root_gen_dir/flutter/lib/ui/assets/hello_loop_2.webp"
      dest = "assets/hello_loop_2.webp"
    },
  ]

  libraries = vulkan_validation_libs
  resources += vulkan_icds
}

group("tests") {
  testonly = true

  deps = [
    ":flow_tests",
    ":flow_tests_next",
    ":flutter_runner_scenic_tests",
    ":flutter_runner_tests",
    ":flutter_runner_tzdata_tests",
    ":fml_tests",
    ":runtime_tests",
    ":runtime_tests_next",
    ":shell_tests",
    ":shell_tests_next",
    ":testing_tests",
    ":txt_tests",
    ":ui_tests",
    ":ui_tests_next",
  ]
}
