# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# GYP: //tools/android/forwarder2/forwarder.gyp:forwarder2
group("forwarder2") {
  datadeps = [
    ":host_forwarder($host_toolchain)",
    ":host_forwarder_copy($host_toolchain)",
    ":device_forwarder($default_toolchain)",
    ":device_forwarder_prepare_dist($default_toolchain)",
  ]
}

if (current_toolchain == default_toolchain) {
  import("//build/config/android/rules.gni")

  # GYP: //tools/android/forwarder2/forwarder.gyp:device_forwarder
  executable("device_forwarder") {
    sources = [
      "command.cc",
      "command.h",
      "common.cc",
      "common.h",
      "daemon.cc",
      "daemon.h",
      "device_controller.cc",
      "device_controller.h",
      "device_forwarder_main.cc",
      "device_listener.cc",
      "device_listener.h",
      "forwarder.cc",
      "forwarder.h",
      "forwarders_manager.cc",
      "forwarders_manager.h",
      "pipe_notifier.cc",
      "pipe_notifier.h",
      "self_deleter_helper.h",
      "socket.cc",
      "socket.h",
      "util.h",
    ]
    deps = [
      "//base",
      "//tools/android/common",
    ]
    datadeps = [
      "//build/android/pylib/device/commands",
    ]
  }

  # GYP: //tools/android/forwarder2/forwarder.gyp:forwarder2
  create_native_executable_dist("device_forwarder_prepare_dist") {
    dist_dir = "$root_build_dir/forwarder_dist"
    binary = "$root_build_dir/exe.stripped/device_forwarder"
  }
}

if (current_toolchain != default_toolchain) {
  # GYP: //tools/android/forwarder2/forwarder.gyp:host_forwarder
  executable("host_forwarder") {
    sources = [
      "command.cc",
      "command.h",
      "common.cc",
      "common.h",
      "daemon.cc",
      "daemon.h",
      "forwarder.cc",
      "forwarder.h",
      "forwarders_manager.cc",
      "forwarders_manager.h",
      "host_controller.cc",
      "host_controller.h",
      "host_forwarder_main.cc",
      "pipe_notifier.cc",
      "pipe_notifier.h",
      "self_deleter_helper.h",
      "socket.cc",
      "socket.h",
      "util.h",
    ]
    deps = [
      "//base",
      "//tools/android/common",
    ]
  }

  # GYP: //tools/android/forwarder2/forwarder.gyp:forwarder2
  copy("host_forwarder_copy") {
    sources = [
      "$root_out_dir/host_forwarder",
    ]
    outputs = [
      "$root_build_dir/host_forwarder",
    ]
  }
}
