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

  # 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",
    "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 = [ ":libhardware_verifier" ]
}

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

  executable("unittest_runner") {
    sources = [
      "cli_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",
    ]
  }
}
