# 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("//build/config.gni")
import("//build/package.gni")
import("//build/rust/rustc_binary.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")

rustc_binary("bin") {
  name = "terminal"
  edition = "2018"

  with_lto = "fat"

  deps = [
    "third_party/term-model",
    "//garnet/bin/terminal/third_party/term-model",
    "//garnet/public/lib/fidl/rust/fidl",
    "//garnet/public/rust/carnelian",
    "//garnet/public/rust/fuchsia-async",
    "//garnet/public/rust/fuchsia-component",
    "//garnet/public/rust/fuchsia-scenic",
    "//garnet/public/rust/fuchsia-zircon",
    "//garnet/public/rust/shared-buffer",
    "//sdk/fidl/fuchsia.images:fuchsia.images-rustc",
    "//sdk/fidl/fuchsia.math:fuchsia.math-rustc",
    "//sdk/fidl/fuchsia.ui.app:fuchsia.ui.app-rustc",
    "//sdk/fidl/fuchsia.ui.gfx:fuchsia.ui.gfx-rustc",
    "//sdk/fidl/fuchsia.ui.input:fuchsia.ui.input-rustc",
    "//sdk/fidl/fuchsia.ui.scenic:fuchsia.ui.scenic-rustc",
    "//sdk/fidl/fuchsia.ui.views:fuchsia.ui.views-rustc",
    "//third_party/rust_crates:failure",
    "//third_party/rust_crates:futures-preview",
    "//third_party/rust_crates:parking_lot",
  ]
}

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

  deps = [
    ":bin",
  ]

  binary = "terminal"
}

config_data("tiles_with_terminal_config") {
  for_pkg = "sysmgr"
  sources = [
    "config/tiles_with_terminal.config",
  ]
}

test_package("terminal_tests") {
  deps = [
    "third_party/term-model",
  ]
  tests = [
    {
      name = "term_model_lib_test"
      environments = basic_envs
    },
  ]
}
