# Copyright 2019 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/components.gni")
import("//build/test.gni")

fuchsia_component_manifest("manifest") {
  component_name = "console"
  manifest = "meta/console.cml"
}

fuchsia_structured_config_cpp_elf_lib("console_config") {
  cm_label = ":manifest"
}

source_set("common") {
  visibility = [ ":*" ]
  sources = [
    "args.cc",
    "args.h",
    "console.cc",
    "console.h",
    "fifo.cc",
    "fifo.h",
  ]
  public_deps = [
    ":console_config",
    "//sdk/fidl/fuchsia.boot:fuchsia.boot_llcpp",
    "//sdk/fidl/fuchsia.hardware.pty:fuchsia.hardware.pty_llcpp",
    "//sdk/fidl/fuchsia.kernel:fuchsia.kernel_llcpp",
    "//sdk/fidl/fuchsia.logger:fuchsia.logger_llcpp",
    "//sdk/lib/fit",
    "//src/lib/storage/vfs/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/syslog:syslog-headers",
    "//zircon/system/ulib/zircon-internal",
    "//zircon/system/ulib/zx",
  ]

  deps = [
    "//sdk/fidl/fuchsia.device:fuchsia.device_llcpp",
    "//sdk/lib/fdio",
    "//src/lib/fxl",
    "//zircon/system/ulib/cmdline",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
    "//zircon/system/ulib/service:service-llcpp",
  ]
}

executable("console") {
  sources = [ "main.cc" ]
  deps = [
    ":common",
    "//sdk/lib/fdio",
    "//src/sys/lib/stdout-to-debuglog/cpp",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
    "//zircon/system/ulib/fs-pty",
    "//zircon/system/ulib/service:service-llcpp",
    "//zircon/system/ulib/svc",
  ]
}

fuchsia_structured_config_values("default_config") {
  cm_label = ":manifest"
  values_source = "configs/default_console_config.json5"
}

group("bootfs") {
  deps = [
    ":console",
    ":default_config",
    ":manifest",
  ]
}

test("console-test") {
  sources = [
    "args-test.cc",
    "console-test.cc",
    "fifo-test.cc",
  ]
  deps = [
    ":common",
    "//sdk/fidl/fuchsia.io:fuchsia.io_llcpp",
    "//zircon/system/ulib/mock-boot-arguments",
    "//zircon/system/ulib/sync",
    "//zircon/system/ulib/zxtest",
  ]
}

fuchsia_unittest_package("console-test-pkg") {
  package_name = "console-test"
  deps = [ ":console-test" ]
}

group("tests") {
  testonly = true
  deps = [ ":console-test-pkg" ]
}
