# 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 = [ ":arc-adbd" ]

  if (use.fuzzer) {
    deps += [
      ":arc-adbd-create-pipe-fuzzer",
      ":arc-adbd-setup-config-fs-fuzzer",
      ":arc-adbd-setup-function-fs-fuzzer",
    ]
  }
  if (use.test) {
    deps += [
      ":arcvm_sock_to_usb_test",
      ":arcvm_usb_to_sock_test",
    ]
  }
}

pkg_config("config") {
  pkg_deps = [
    "libbrillo",
    "libchrome",
  ]
}

static_library("libarcadbd") {
  sources = [
    "adbd.cc",
    "adbd.h",
    "arcvm_sock_to_usb.cc",
    "arcvm_sock_to_usb.h",
    "arcvm_usb_to_sock.cc",
    "arcvm_usb_to_sock.h",
  ]
  configs += [ ":config" ]
}

executable("arc-adbd") {
  sources = [ "adbd_main.cc" ]

  deps = [ ":libarcadbd" ]
  configs += [ ":config" ]
}

# Fuzzer only.
if (use.fuzzer) {
  pkg_config("arc_adbd_fuzzer_config") {
    pkg_deps = [ "libchrome-test" ]
  }

  executable("arc-adbd-setup-config-fs-fuzzer") {
    sources = [ "fuzzers/adbd_setup_config_fs_fuzzer.cc" ]

    configs += [
      "//common-mk/common_fuzzer",
      ":arc_adbd_fuzzer_config",
    ]

    deps = [ ":libarcadbd" ]
  }

  executable("arc-adbd-setup-function-fs-fuzzer") {
    sources = [ "fuzzers/adbd_setup_function_fs_fuzzer.cc" ]

    configs += [
      "//common-mk/common_fuzzer",
      ":arc_adbd_fuzzer_config",
    ]

    deps = [ ":libarcadbd" ]
  }

  executable("arc-adbd-create-pipe-fuzzer") {
    sources = [ "fuzzers/adbd_create_pipe_fuzzer.cc" ]

    configs += [
      "//common-mk/common_fuzzer",
      ":arc_adbd_fuzzer_config",
    ]

    deps = [ ":libarcadbd" ]
  }
}

if (use.test) {
  executable("arcvm_sock_to_usb_test") {
    configs += [
      "//common-mk:test",
      ":config",
    ]
    deps = [
      ":libarcadbd",
      "//common-mk/testrunner:testrunner",
    ]
    sources = [ "arcvm_sock_to_usb_test.cc" ]
    run_test = true
  }
  executable("arcvm_usb_to_sock_test") {
    configs += [
      "//common-mk:test",
      ":config",
    ]
    deps = [
      ":libarcadbd",
      "//common-mk/testrunner:testrunner",
    ]
    sources = [ "arcvm_usb_to_sock_test.cc" ]
    run_test = true
  }
}
