# 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") {
  # NOSORT
  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",
    ]
  }
}
