# Copyright 2020 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("//src/sys/build/components.gni")

group("driver2") {
  public_deps = [ ":lib" ]
}

group("tests") {
  testonly = true
  deps = [ ":driver2-tests" ]
}

source_set("lib") {
  sources = [ "record.h" ]

  public_deps = [ "//zircon/public/lib/async" ]
}

source_set("llcpp") {
  sources = [
    "logger.cc",
    "logger.h",
    "namespace.cc",
    "namespace.h",
    "promise.h",
    "start_args.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.component.runner:fuchsia.component.runner_llcpp",
    "//sdk/fidl/fuchsia.data:fuchsia.data_llcpp",
    "//sdk/fidl/fuchsia.driver.framework:fuchsia.driver.framework_llcpp",
    "//sdk/fidl/fuchsia.logger:fuchsia.logger_llcpp",
    "//sdk/lib/fdio",
    "//zircon/public/lib/zxc",
    "//zircon/system/ulib/syslog",
  ]
}

executable("llcpp_test") {
  testonly = true
  sources = [
    "logger_test.cc",
    "namespace_test.cc",
    "promise_test.cc",
    "start_args_test.cc",
    "test_base.h",
  ]

  deps = [
    ":llcpp",
    "//sdk/fidl/fuchsia.io",
    "//sdk/fidl/fuchsia.logger",
    "//sdk/lib/fidl/cpp",
    "//src/lib/fxl/test:gtest_main",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

fuchsia_unittest_component("driver2-llcpp-test") {
  manifest = "meta/llcpp_test.cml"

  deps = [ ":llcpp_test" ]
}

fuchsia_test_package("driver2-tests") {
  test_components = [ ":driver2-llcpp-test" ]
}
