# Copyright 2020 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 = [ ":typecd" ]
  if (use.test) {
    deps += [ ":typecd_testrunner" ]
  }
}

pkg_config("target_defaults") {
  pkg_deps = [
    "libbrillo",
    "libchrome-${libbase_ver}",
    "libudev",
    "re2",
  ]
}

executable("typecd") {
  configs += [ ":target_defaults" ]
  deps = [ ":typecd_common" ]
  sources = [
    "daemon.cc",
    "main.cc",
  ]
}

static_library("typecd_common") {
  all_dependent_configs = [ ":target_defaults" ]
  sources = [
    "alt_mode.cc",
    "partner.cc",
    "peripheral.cc",
    "port.cc",
    "port_manager.cc",
    "udev_monitor.cc",
    "utils.cc",
  ]
}

if (use.test) {
  pkg_config("test_defaults") {
    pkg_deps = [
      "libbrillo-test",
      "libchrome-test-${libbase_ver}",
      "libudev",
      "re2",
    ]
  }

  executable("typecd_testrunner") {
    configs += [
      ":test_defaults",
      "//common-mk:test",
    ]
    deps = [
      ":typecd_common",
      "//common-mk/testrunner:testrunner",
    ]
    sources = [
      "partner_test.cc",
      "port_test.cc",
      "udev_monitor_test.cc",
    ]
  }
}
