# Copyright 2018 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")

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

pkg_config("target_defaults") {
  pkg_deps = [
    "libbrillo-${libbase_ver}",
    "libchrome-${libbase_ver}",
    "libcros_config",
    "libpcrecpp",

    # 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("libruntime_probe") {
  configs += [ ":target_defaults" ]
  sources = [
    "component_category.cc",
    "daemon.cc",
    "functions/all_functions.cc",
    "functions/ectool_i2cread.cc",
    "functions/generic_battery.cc",
    "functions/generic_storage.cc",
    "functions/sequence.cc",
    "functions/sysfs.cc",
    "probe_config.cc",
    "probe_function.cc",
    "probe_function_argument.cc",
    "probe_result_checker.cc",
    "probe_statement.cc",
    "utils/config_utils.cc",
    "utils/file_utils.cc",
  ]
}

executable("runtime_probe") {
  configs += [ ":target_defaults" ]
  sources = [
    "simple_main.cc",
  ]
  deps = [
    ":libruntime_probe",
  ]
}

if (use.test) {
  executable("unittest_runner") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    sources = [
      "functions/sequence_test.cc",
      "functions/sysfs_test.cc",
      "probe_config_test.cc",
      "probe_result_checker_test.cc",
      "probe_statement_test.cc",
      "utils/config_utils_test.cc",
    ]
    deps = [
      ":libruntime_probe",
      "//common-mk/testrunner",
    ]
    data = [
      "testdata/probe_config.json",
      "testdata/test.txt",
    ]
  }
}
