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

group("all") {
  deps = [ ":hpsd" ]
  if (use.test) {
    deps += [
      ":dev_test",
      ":hps_daemon_test",
      ":hps_metrics_test",
      ":hps_test",
    ]
  }
}

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

executable("hpsd") {
  sources = [
    "daemon/dbus_adaptor.cc",
    "daemon/hps_daemon.cc",
    "daemon/main.cc",
  ]
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "system_api",
  ]
  deps = [
    ":fakedev",
    ":hpsd-adaptors",
    ":hpslib",
  ]
}

static_library("hpslib") {
  sources = [
    "hps_impl.cc",
    "hps_metrics.cc",
    "utils.cc",
  ]
  pkg_deps = [
    "libchrome",
    "libmetrics",
  ]

  deps = [
    ":dev",
    ":hal",
  ]
}

static_library("hal") {
  sources = [
    "hal/ftdi.cc",
    "hal/ftdi.h",
    "hal/i2c.cc",
    "hal/i2c.h",
    "hal/mcp.cc",
    "hal/mcp.h",
    "hal/retry.cc",
    "hal/retry.h",
    "hal/uart.cc",
    "hal/uart.h",
  ]
  pkg_deps = [
    "libchrome",
    "libftdi1",
    "libusb-1.0",
  ]

  deps = [ ":dev" ]
}

static_library("fakedev") {
  sources = [
    "hal/fake_dev.cc",
    "hal/fake_dev.h",
  ]
  pkg_deps = [ "libchrome" ]

  deps = [ ":dev" ]
}

static_library("dev") {
  sources = [
    "dev.cc",
    "dev.h",
    "hps_reg.h",
  ]
}

if (use.test) {
  executable("dev_test") {
    sources = [ "dev_test.cc" ]
    configs += [ "//common-mk:test" ]
    pkg_deps = [ "libchrome" ]
    deps = [
      ":dev",
      "//common-mk/testrunner:testrunner",
    ]
  }

  executable("hps_test") {
    sources = [ "hps_test.cc" ]
    configs += [ "//common-mk:test" ]
    pkg_deps = [ "libchrome" ]
    deps = [
      ":fakedev",
      ":hpslib",
      "//common-mk/testrunner:testrunner",
    ]
  }

  executable("hps_metrics_test") {
    sources = [
      "hps_metrics.cc",
      "hps_metrics_test.cc",
    ]
    configs += [ "//common-mk:test" ]
    pkg_deps = [ "libmetrics" ]
    deps = [ "//common-mk/testrunner:testrunner" ]
  }

  executable("hps_daemon_test") {
    sources = [
      "daemon/dbus_adaptor.cc",
      "daemon/hps_daemon.cc",
      "daemon/hps_daemon_test.cc",
    ]
    configs += [ "//common-mk:test" ]
    pkg_deps = [
      "libbrillo",
      "libchrome",
    ]
    deps = [
      ":dev",
      ":hpslib",
      "//common-mk/testrunner:testrunner",
    ]
  }
}
