# 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_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/hps_daemon.cc",
    "daemon/main.cc",
  ]
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "system_api",
  ]
  deps = [
    ":fakedev",
    ":hpsd-adaptors",
    ":hpslib",
  ]
}

static_library("hpslib") {
  sources = [
    "hps.cc",
    "hps_metrics.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" ]
  }
}
