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

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

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",
  ]
  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/object_manager_interface_multiplexer_test.cc",
      "dispatcher/test_helper.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":test_config",
    ]
    deps = [
      ":libcommon",
      ":libdispatcher",
      "//common-mk/testrunner",
    ]
  }
}
