# Copyright 2019 The Fuchsia 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("//build/zbi/kernel_cmdline.gni")

group("bluetooth") {
  testonly = true
  deps = [
    ":tests",
    "core",
    "examples",
    "hci",
    "lib",
    "profiles",
    "testing",
    "tests",
    "tools",
  ]
}

# This is a list of all drivers.
group("drivers") {
  testonly = true
  deps = [
    "hci/passthrough:driver",
    "hci/transport/uart:bt-transport-uart",
    "hci/transport/usb:bt-transport-usb",
    "hci/vendor/broadcom:bt-hci-broadcom",
    "hci/vendor/intel:driver",
    "hci/virtual:driver",
  ]
}

# Core is the group that is required for any Bluetooth functionality
# This group includes all of the non-driver components.
group("core") {
  deps = [
    "core/bt-gap",
    "core/bt-init",
    "tools/bt-snoop",
  ]
}

# Core is the group that is required for any Bluetooth functionality. This group is used for
# testing scenarios in which testonly capabilities are exposed to the system.
# This group includes all of the non-driver components.
group("core-testonly") {
  deps = [
    "core/bt-gap",
    "core/bt-init:bt-init-testonly",
    "profiles/bt-rfcomm:bt-rfcomm-testonly",
    "tools/bt-snoop",
  ]
}

# TODO(https://fxbug.dev/42148904): Remove core-system once it is not longer referenced.
# This is the part of core group which must go into the system package.
group("core-system") {
  deps = [ "core/bt-host" ]
}

group("tests") {
  testonly = true
  deps = [
    "core:tests",
    "examples:tests",
    "hci:tests",
    "lib:tests",
    "profiles:tests",
    "testing:tests",
    "tests",
    "tools:tests",
  ]
}

# Kernel cmdline options.

kernel_cmdline("driver-debug-logging") {
  args = [
    "driver.bcm_hci.log=debug",
    "driver.bt_hci_atheros.log=debug",
    "driver.bt_hci_broadcom.log=debug",
    "driver.bt_hci_virtual.log=debug",
    "driver.bt_hci_intel.log=debug",
    "driver.bt_hci_passthrough.log=debug",
    "driver.bt_intel.log=debug",
    "driver.bt_transport_uart.log=debug",
    "driver.bt_transport_usb.log=debug",
    "driver.tracing.enable=1",
  ]
}
