# Copyright 2018 The Fuchsia 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("//topaz/runtime/dart_runner/dart_app.gni")

dart_app("echo_dart") {
  components = [
    {
      component_name = "echo_client_dart"
      component_type = "dart"
      package_root = "echo_client_dart"
      main_dart = "echo_client_dart/lib/main.dart"
      sources = []
      deps = [
        "//garnet/examples/fidl/services:echo",
        "//sdk/fidl/fuchsia.sys",
        "//topaz/public/dart/fidl",
        "//topaz/public/lib/app/dart",
      ]
    },
    {
      component_name = "echo_server_dart"
      component_type = "dart"
      package_root = "echo_server_dart"
      main_dart = "echo_server_dart/lib/main.dart"
      sources = []
      deps = [
        "//garnet/examples/fidl/services:echo",
        "//topaz/public/dart/fidl",
        "//topaz/public/lib/app/dart",
      ]
    },
  ]

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