# 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")
import("//common-mk/proto_library.gni")

group("all") {
  deps = [
    ":bluetooth-protos",
    ":btdispatch",
    ":libcommon",
    ":libdispatcher",
  ]
  if (use.test) {
    deps += [ ":bluetooth_test" ]
  }
}

pkg_config("target_defaults") {
  pkg_deps = [
    "libcros_config",
    "dbus-1",
    "libbrillo",
    "libchrome-${libbase_ver}",

    # system_api depends on protobuf (or protobuf-lite). It must appear
    # before protobuf here or the linker flags won't be in the right
    # order.
    "system_api",
  ]
  if (use.fuzzer) {
    pkg_deps += [ "protobuf" ]
  } else {
    pkg_deps += [ "protobuf-lite" ]
  }
}

proto_library("bluetooth-protos") {
  proto_in_dir = "proto"
  proto_out_dir = "include/bluetooth/proto_bindings"
  sources = [
    "${proto_in_dir}/config.proto",
  ]
}

static_library("libcommon") {
  sources = [
    "common/dbus_client.cc",
    "common/dbus_daemon.cc",
    "common/exported_object_manager_wrapper.cc",
    "common/property.cc",
    "common/runtime_flags.cc",
    "common/util.cc",
  ]
  configs += [ ":target_defaults" ]
  defines =
      [ "USE_BLUETOOTH_SUSPEND_MANAGEMENT=${use.bluetooth_suspend_management}" ]
}

static_library("libdispatcher") {
  sources = [
    "dispatcher/bluez_interface_handler.cc",
    "dispatcher/catch_all_forwarder.cc",
    "dispatcher/client_manager.cc",
    "dispatcher/dbus_connection_factory.cc",
    "dispatcher/dbus_util.cc",
    "dispatcher/dispatcher.cc",
    "dispatcher/dispatcher_client.cc",
    "dispatcher/dispatcher_daemon.cc",
    "dispatcher/dispatcher_debug_manager.cc",
    "dispatcher/impersonation_object_manager_interface.cc",
    "dispatcher/object_manager_interface_multiplexer.cc",
    "dispatcher/service_watcher.cc",
    "dispatcher/suspend_manager.cc",
  ]
  configs += [ ":target_defaults" ]
}

executable("btdispatch") {
  sources = [
    "dispatcher/main.cc",
  ]
  configs += [ ":target_defaults" ]
  deps = [
    ":libcommon",
    ":libdispatcher",
  ]
}

if (use.test) {
  pkg_config("test_config") {
    pkg_deps = [ "libchrome-test-${libbase_ver}" ]
  }
  executable("bluetooth_test") {
    sources = [
      "common/dbus_client_test.cc",
      "common/exported_object_manager_wrapper_test.cc",
      "common/property_test.cc",
      "dispatcher/catch_all_forwarder_test.cc",
      "dispatcher/dispatcher_client_test.cc",
      "dispatcher/dispatcher_test.cc",
      "dispatcher/impersonation_object_manager_interface_test.cc",
      "dispatcher/object_manager_interface_multiplexer_test.cc",
      "dispatcher/suspend_manager_test.cc",
      "dispatcher/test_helper.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":test_config",
    ]
    deps = [
      ":libcommon",
      ":libdispatcher",
      "//common-mk/testrunner",
    ]
  }
}
