# Copyright 2019 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/mojom_bindings_generator.gni")
import("//common-mk/pkg_config.gni")

group("all") {
  deps = [
    ":cros_healthd",
    ":telem",
    ":wilco_dtc_supportd",
    "//diagnostics/diag:diag",
    "//diagnostics/routines:floating-point-accuracy",
    "//diagnostics/routines:prime-search",
    "//diagnostics/routines:smartctl-check",
    "//diagnostics/routines:urandom",
  ]
  if (use.test) {
    deps += [
      ":cros_healthd_test",
      ":libcros_healthd_utils_test",
      ":wilco_dtc_supportd_test",
      "//diagnostics/common:libcommon_test",
      "//diagnostics/grpc_async_adapter:libgrpc_async_adapter_test",
      "//diagnostics/routines:routine_test",
    ]
  }
  if (use.fuzzer) {
    deps += [
      ":fetch_block_device_fuzzer",
      ":fetch_cached_vpd_fuzzer",
    ]
  }
}

# Library with generated Mojo API definitions.
pkg_config("diagnostics_mojo_bindings_pkg_deps") {
  pkg_deps = [
    "libchrome-${libbase_ver}",
    "libmojo-${libbase_ver}",
  ]
}

generate_mojom_bindings("diagnostics_mojo_bindings") {
  public_configs = [ ":diagnostics_mojo_bindings_pkg_deps" ]
  sources = [
    "mojo/cros_healthd.mojom",
    "mojo/cros_healthd_diagnostics.mojom",
    "mojo/cros_healthd_probe.mojom",
    "mojo/wilco_dtc_supportd.mojom",
  ]
}

# Library that provides a mojo connection to cros_healthd.
pkg_config("libcros_healthd_mojo_adapter_pkg_deps") {
  pkg_deps = [
    "dbus-1",
    "libbrillo",
    "libchrome-${libbase_ver}",
    "libmojo-${libbase_ver}",
    "system_api",
  ]
}

source_set("libcros_healthd_mojo_adapter") {
  deps = [
    ":diagnostics_mojo_bindings",
  ]
  all_dependent_configs = [ ":libcros_healthd_mojo_adapter_pkg_deps" ]
  sources = [
    "cros_healthd_mojo_adapter/cros_healthd_mojo_adapter.cc",
  ]
}

# Library that provides utilities used by cros_healthd.
pkg_config("libcros_healthd_utils_pkg_deps") {
  pkg_deps = [
    "dbus-1",
    "libbrillo",
    "libchrome-${libbase_ver}",
    "libcros_config",
    "libmojo-${libbase_ver}",
    "libdebugd-client",
    "libudev",
    "protobuf",
    "re2",
    "system_api",
  ]
}

source_set("libcros_healthd_utils") {
  deps = [
    ":diagnostics_mojo_bindings",
    "//diagnostics/common:libcommon",
  ]
  libs = [ "tzif_parser" ]
  all_dependent_configs = [ ":libcros_healthd_utils_pkg_deps" ]
  sources = [
    "cros_healthd/utils/backlight_utils.cc",
    "cros_healthd/utils/battery_utils.cc",
    "cros_healthd/utils/cpu_utils.cc",
    "cros_healthd/utils/disk_utils.cc",
    "cros_healthd/utils/fan_utils.cc",
    "cros_healthd/utils/memory_utils.cc",
    "cros_healthd/utils/timezone_utils.cc",
    "cros_healthd/utils/vpd_utils.cc",
  ]
}

# Library that provides core functionality for the cros_healthd daemon.
pkg_config("libcros_healthd_pkg_deps") {
  pkg_deps = [
    "dbus-1",
    "libbrillo",
    "libchrome-${libbase_ver}",
    "libmojo-${libbase_ver}",
    "libdebugd-client",
  ]
}

source_set("libcros_healthd") {
  deps = [
    ":diagnostics_mojo_bindings",
    ":libcros_healthd_utils",
    "//diagnostics/routines:libdiag_routine",
  ]
  all_dependent_configs = [ ":libcros_healthd_pkg_deps" ]
  sources = [
    "cros_healthd/cros_healthd.cc",
    "cros_healthd/cros_healthd_mojo_service.cc",
    "cros_healthd/cros_healthd_routine_factory_impl.cc",
    "cros_healthd/cros_healthd_routine_service_impl.cc",
  ]
}

# Library that provides core functionality for the wilco_dtc_supportd daemon.
pkg_config("libwilco_dtc_supportd_pkg_deps") {
  pkg_deps = [
    "dbus-1",
    "libbrillo",
    "libchrome-${libbase_ver}",
    "libmojo-${libbase_ver}",
    "system_api",
  ]
}

source_set("libwilco_dtc_supportd") {
  deps = [
    ":diagnostics_mojo_bindings",
    "//diagnostics/common:libcommon",
    "//diagnostics/constants:libconstants",
    "//diagnostics/grpc:wilco_dtc_grpc_protos",
    "//diagnostics/grpc_async_adapter:libgrpc_async_adapter",
    "//diagnostics/routines:libdiag_routine",
  ]
  all_dependent_configs = [ ":libwilco_dtc_supportd_pkg_deps" ]
  sources = [
    "wilco_dtc_supportd/core.cc",
    "wilco_dtc_supportd/core_delegate_impl.cc",
    "wilco_dtc_supportd/daemon.cc",
    "wilco_dtc_supportd/dbus_service.cc",
    "wilco_dtc_supportd/ec_constants.cc",
    "wilco_dtc_supportd/grpc_service.cc",
    "wilco_dtc_supportd/json_utils.cc",
    "wilco_dtc_supportd/mojo_service.cc",
    "wilco_dtc_supportd/routine_service.cc",
    "wilco_dtc_supportd/system/bluetooth_client.cc",
    "wilco_dtc_supportd/system/bluetooth_client_impl.cc",
    "wilco_dtc_supportd/system/powerd_adapter_impl.cc",
    "wilco_dtc_supportd/telemetry/bluetooth_event_service.cc",
    "wilco_dtc_supportd/telemetry/bluetooth_event_service_impl.cc",
    "wilco_dtc_supportd/telemetry/ec_event_service.cc",
    "wilco_dtc_supportd/telemetry/powerd_event_service_impl.cc",
    "wilco_dtc_supportd/telemetry/system_files_service.cc",
    "wilco_dtc_supportd/telemetry/system_files_service_impl.cc",
    "wilco_dtc_supportd/vpd_constants.cc",
  ]
}

# The cros_healthd daemon executable.
pkg_config("cros_healthd_pkg_deps") {
  pkg_deps = [ "libbrillo" ]
}

executable("cros_healthd") {
  deps = [
    ":libcros_healthd",
  ]
  sources = [
    "cros_healthd/main.cc",
  ]
}

# The wilco_dtc_supportd daemon executable.
pkg_config("wilco_dtc_supportd_pkg_deps") {
  pkg_deps = [ "libbrillo" ]
}

executable("wilco_dtc_supportd") {
  deps = [
    ":libwilco_dtc_supportd",
  ]
  sources = [
    "wilco_dtc_supportd/main.cc",
  ]
}

# The telemetry tool executable.
pkg_config("telem_pkg_deps") {
  pkg_deps = [
    "libbrillo",
    "libchrome-${libbase_ver}",
  ]
}

executable("telem") {
  deps = [
    ":libcros_healthd_mojo_adapter",
  ]
  configs += [ ":telem_pkg_deps" ]
  sources = [
    "telem/main.cc",
  ]
}

if (use.test) {
  # Libraries for unit tests.

  # Unit tests.
  pkg_config("cros_healthd_test_pkg_deps") {
    pkg_deps = [
      "libchrome-${libbase_ver}",
      "libchrome-test-${libbase_ver}",
      "libdebugd-client-test",
    ]
  }

  executable("cros_healthd_test") {
    configs += [
      ":cros_healthd_test_pkg_deps",
      "//common-mk:test",
    ]
    deps = [
      ":libcros_healthd",
      "../common-mk/testrunner:testrunner",
      "//diagnostics/common:libcommon_test_utils",
      "//diagnostics/routines:libroutine_test_utils",
    ]
    sources = [
      "cros_healthd/cros_healthd_mojo_service_test.cc",
      "cros_healthd/cros_healthd_routine_service_impl_test.cc",
      "cros_healthd/fake_cros_healthd_routine_factory.cc",
    ]
  }

  pkg_config("libcros_healthd_utils_test_pkg_deps") {
    pkg_deps = [
      "libchrome-${libbase_ver}",
      "libchrome-test-${libbase_ver}",
      "libcros_config",
      "libdebugd-client-test",
      "system_api",
    ]
  }

  executable("libcros_healthd_utils_test") {
    configs += [
      ":libcros_healthd_utils_test_pkg_deps",
      "//common-mk:test",
    ]
    deps = [
      ":libcros_healthd_utils",
      "../common-mk/testrunner:testrunner",
      "//diagnostics/common:libcommon_test_utils",
    ]
    sources = [
      "cros_healthd/utils/backlight_utils_test.cc",
      "cros_healthd/utils/battery_utils_test.cc",
      "cros_healthd/utils/cpu_utils_test.cc",
      "cros_healthd/utils/fan_utils_test.cc",
      "cros_healthd/utils/memory_utils_test.cc",
      "cros_healthd/utils/timezone_utils_test.cc",
      "cros_healthd/utils/vpd_utils_test.cc",
    ]
  }

  pkg_config("wilco_dtc_supportd_test_pkg_deps") {
    pkg_deps = [
      "libchrome-${libbase_ver}",
      "libchrome-test-${libbase_ver}",
    ]
  }

  executable("wilco_dtc_supportd_test") {
    configs += [
      ":wilco_dtc_supportd_test_pkg_deps",
      "//common-mk:test",
    ]
    deps = [
      ":libwilco_dtc_supportd",
      "../common-mk/testrunner:testrunner",
      "//diagnostics/common:libcommon",
      "//diagnostics/common:libcommon_test_utils",
    ]
    sources = [
      "wilco_dtc_supportd/core_test.cc",
      "wilco_dtc_supportd/dbus_service_test.cc",
      "wilco_dtc_supportd/ec_constants_test.cc",
      "wilco_dtc_supportd/fake_browser.cc",
      "wilco_dtc_supportd/fake_diagnostics_service.cc",
      "wilco_dtc_supportd/fake_wilco_dtc.cc",
      "wilco_dtc_supportd/grpc_service_test.cc",
      "wilco_dtc_supportd/mock_mojo_client.cc",
      "wilco_dtc_supportd/mojo_service_test.cc",
      "wilco_dtc_supportd/routine_service_test.cc",
      "wilco_dtc_supportd/system/bluetooth_client_impl_test.cc",
      "wilco_dtc_supportd/system/fake_bluetooth_client.cc",
      "wilco_dtc_supportd/system/fake_powerd_adapter.cc",
      "wilco_dtc_supportd/system/powerd_adapter_impl_test.cc",
      "wilco_dtc_supportd/telemetry/bluetooth_event_service_impl_test.cc",
      "wilco_dtc_supportd/telemetry/ec_event_service_test.cc",
      "wilco_dtc_supportd/telemetry/ec_event_test_utils.cc",
      "wilco_dtc_supportd/telemetry/ec_event_test_utils_test.cc",
      "wilco_dtc_supportd/telemetry/fake_bluetooth_event_service.cc",
      "wilco_dtc_supportd/telemetry/fake_ec_event_service.cc",
      "wilco_dtc_supportd/telemetry/fake_powerd_event_service.cc",
      "wilco_dtc_supportd/telemetry/fake_system_files_service.cc",
      "wilco_dtc_supportd/telemetry/powerd_event_service_impl_test.cc",
      "wilco_dtc_supportd/telemetry/system_files_service_impl_test.cc",
    ]
  }
}

if (use.fuzzer) {
  executable("fetch_block_device_fuzzer") {
    configs += [ "//common-mk/common_fuzzer:common_fuzzer" ]
    deps = [
      ":libcros_healthd_utils",
    ]
    sources = [
      "cros_healthd/utils/fetch_block_device_fuzzer.cc",
    ]
  }

  pkg_config("fetch_cached_vpd_fuzzer_pkg_deps") {
    pkg_deps = [ "libcros_config" ]
  }

  executable("fetch_cached_vpd_fuzzer") {
    configs += [
      ":fetch_cached_vpd_fuzzer_pkg_deps",
      "//common-mk/common_fuzzer:common_fuzzer",
    ]
    deps = [
      ":libcros_healthd_utils",
    ]
    sources = [
      "cros_healthd/utils/fetch_cached_vpd_fuzzer.cc",
    ]
  }
}
