# Copyright 2018 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 = [ ":ippusb_manager" ]
  if (use.test) {
    deps += [ ":ippusb_manager_testrunner" ]
  }
  if (use.fuzzer) {
    deps += [ ":ippusb_manager_usb_fuzzer" ]
  }
}

pkg_config("target_defaults") {
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "libminijail",
    "libusb-1.0",
  ]
}

executable("ippusb_manager") {
  sources = [
    "ippusb_manager.cc",
    "socket_manager.cc",
    "usb.cc",
  ]
  configs += [ ":target_defaults" ]
}

if (use.test) {
  pkg_config("test_config") {
    pkg_deps = [ "libchrome-test" ]
  }
  executable("ippusb_manager_testrunner") {
    sources = [
      "usb.cc",
      "usb_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":test_config",
    ]
    deps = [ "//common-mk/testrunner" ]
  }
}

if (use.fuzzer) {
  pkg_config("ippusb_manager_usb_fuzzer_config") {
    pkg_deps = [ "libchrome-test" ]
  }

  executable("ippusb_manager_usb_fuzzer") {
    sources = [
      "fuzzers/ippusb_manager_usb_fuzzer.cc",
      "usb.cc",
    ]
    configs += [
      "//common-mk/common_fuzzer",
      ":ippusb_manager_usb_fuzzer_config",
      ":target_defaults",
    ]
  }
}
