# Copyright 2020 The Chromium OS 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("//common-mk/pkg_config.gni")

pkg_config("common_pkg_deps") {
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "libdebugd-client",
  ]
}

# Library that provides core functionality for the wilco_dtc_supportd daemon.
source_set("libwilco_dtc_supportd") {
  configs += [ ":common_pkg_deps" ]
  deps = [
    "telemetry:libtelemetry",
    "//diagnostics/common:libcommon",
    "//diagnostics/constants:libconstants",
    "//diagnostics/grpc:wilco_dtc_grpc_protos",
    "//diagnostics/mojo:cros_healthd_mojo_bindings",
    "//diagnostics/mojo:wilco_dtc_supportd_mojo_bindings",
  ]
  sources = [
    "core.cc",
    "core_delegate_impl.cc",
    "dbus_service.cc",
    "ec_constants.cc",
    "grpc_client_manager.cc",
    "grpc_service.cc",
    "json_utils.cc",
    "mojo_grpc_adapter.cc",
    "mojo_service.cc",
    "mojo_service_factory.cc",
    "probe_service_impl.cc",
    "routine_service.cc",
  ]
}

executable("wilco_dtc_supportd") {
  sources = [
    "daemon.cc",
    "main.cc",
  ]
  configs += [ ":common_pkg_deps" ]
  deps = [ ":libwilco_dtc_supportd" ]
}

if (use.test) {
  executable("wilco_dtc_supportd_test") {
    sources = [
      "core_test.cc",
      "dbus_service_test.cc",
      "ec_constants_test.cc",
      "fake_browser.cc",
      "fake_diagnostics_service.cc",
      "fake_probe_service.cc",
      "fake_wilco_dtc.cc",
      "grpc_service_test.cc",
      "mock_mojo_client.cc",
      "mojo_service_test.cc",
      "probe_service_impl_test.cc",
      "routine_service_test.cc",
    ]
    configs += [
      ":common_pkg_deps",
      "//common-mk:test",
    ]
    deps = [
      ":libwilco_dtc_supportd",
      "telemetry:telemetry_test",
      "//diagnostics/common:mojo_testrunner",
    ]
  }
}
