# 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",
    "cable.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 = [
      "cable_test.cc",
      "partner_test.cc",
      "port_test.cc",
      "test_utils.cc",
      "udev_monitor_test.cc",
    ]
  }
}
