# 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("libcros_healthd_mojo_adapter_pkg_deps") {
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "libmojo",
  ]
}

# Library that provides a mojo connection to cros_healthd.
source_set("libcros_healthd_mojo_adapter") {
  configs += [ ":libcros_healthd_mojo_adapter_pkg_deps" ]
  deps = [ "//diagnostics/mojom/public:cros_healthd_mojo_bindings" ]
  sources = [
    "cros_healthd_mojo_adapter.cc",
    "cros_healthd_mojo_adapter_delegate_impl.cc",
  ]
}

if (use.test) {
  source_set("cros_healthd_mojo_adapter_test") {
    sources = [ "cros_healthd_mojo_adapter_test.cc" ]
    configs += [ "//common-mk:test" ]
    deps = [
      ":libcros_healthd_mojo_adapter",
      "//common-mk/testrunner:testrunner",
      "//diagnostics/cros_healthd/fake:libfake_cros_healthd",
    ]
  }
}
