# 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",
    "libsession_manager-client",
    "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",
    "session_manager_proxy.cc",
    "udev_monitor.cc",
    "utils.cc",
  ]
}

if (use.test) {
  pkg_config("test_defaults") {
    pkg_deps = [
      "libbrillo-test",
      "libchrome-test",
      "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_manager_test.cc",
      "port_test.cc",
      "test_utils.cc",
      "udev_monitor_test.cc",
    ]
  }
}
