# 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/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" ]
  pkg_deps = [
    "libbrillo-${libbase_ver}",
    "libchrome-${libbase_ver}",

    # 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",
  ]
}

proto_library("hardware_verifier-protos") {
  configs = [ ":target_defaults" ]
  proto_in_dir = "./"
  proto_out_dir = "include/hardware_verifier"
  proto_lib_dirs = [ "${sysroot}/usr/include/chromeos/dbus/runtime_probe" ]
  sources = [
    "${proto_in_dir}/hardware_verifier.proto",
  ]
}

static_library("libhardware_verifier") {
  configs += [ ":target_defaults" ]
  deps = [
    ":hardware_verifier-protos",
  ]
  sources = [
    "cli.cc",
    "hw_verification_spec_getter_impl.cc",
    "probe_result_getter_impl.cc",
    "verifier_impl.cc",
  ]
}

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

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

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