# 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/generate-dbus-adaptors.gni")
import("//common-mk/pkg_config.gni")
import("//common-mk/proto_library.gni")

group("all") {
  deps = [ ":hardware_verifier" ]
  if (use.test) {
    deps += [ ":unittest_runner" ]
  }
}

pkg_config("target_defaults") {
  # Manually add the include path so that the generated .pb.h files can
  # include runtime_probe.pb.h properly.
  cflags = [ "-I${sysroot}/usr/include/runtime_probe/proto_bindings" ]

  # NOSORT
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "libcros_config",
    "libmetrics",

    # system_api depends on protobuf (or protobuf-lite). It must appear
    # before protobuf here or the linker flags won't be in the right
    # order.
    "system_api",
    "protobuf",
    "vboot_host",
  ]
}

static_library("libhardware_verifier") {
  sources = [
    "cli.cc",
    "daemon.cc",
    "dbus_adaptor.cc",
    "hw_verification_report_getter_impl.cc",
    "hw_verification_spec_getter_impl.cc",
    "observer.cc",
    "probe_result_getter_impl.cc",
    "verifier_impl.cc",
  ]
  configs += [ ":target_defaults" ]
  deps = [
    "//hardware_verifier/proto:hardware_verifier-protos",
    "//metrics/structured:libstructuredmetrics",
  ]
}

executable("hardware_verifier") {
  sources = [ "main.cc" ]
  configs += [ ":target_defaults" ]
  deps = [
    ":dbus-adaptors",
    ":libhardware_verifier",
  ]
}

if (use.test) {
  static_library("libhardware_verifier_test") {
    sources = [ "test_utils.cc" ]
    configs += [ ":target_defaults" ]
    deps = [ "//hardware_verifier/proto:hardware_verifier-protos" ]
  }

  executable("unittest_runner") {
    sources = [
      "cli_test.cc",
      "dbus_adaptor_test.cc",
      "hw_verification_report_getter_impl_test.cc",
      "hw_verification_spec_getter_impl_test.cc",
      "probe_result_getter_impl_test.cc",
      "verifier_impl_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    data = [ "testdata/" ]
    deps = [
      ":libhardware_verifier",
      ":libhardware_verifier_test",
      "//common-mk/testrunner",
    ]
  }
}

generate_dbus_adaptors("dbus-adaptors") {
  sources = [ "dbus_bindings/org.chromium.HardwareVerifier.xml" ]
  dbus_adaptors_out_dir = "include/hardware_verifier/dbus_adaptors"
  dbus_service_config = "dbus_bindings/dbus-service-config.json"
}
