# 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") {
  configs += [ ":common_pkg_deps" ]
  deps = [ ":libwilco_dtc_supportd" ]
  sources = [
    "daemon.cc",
    "main.cc",
  ]
}

if (use.test) {
  executable("wilco_dtc_supportd_test") {
    configs += [
      ":common_pkg_deps",
      "//common-mk:test",
    ]
    deps = [
      ":libwilco_dtc_supportd",
      "telemetry:telemetry_test",
      "//diagnostics/common:mojo_testrunner",
    ]
    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",
    ]
  }
}
