# 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.

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

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

# Core is the group that is required for any Bluetooth functionality
# This group includes all of the non-system components.
# System package components are defined in "core-system"
group("core") {
  public_deps = [
    "core/bt-gap",
    "core/bt-init",
    "profiles/bt-rfcomm",
    "tools/bt-snoop",
  ]
}

# This is the part of core group which must go into the system package.
group("core-system") {
  public_deps = [
    "core/bt-host",
    "profiles/bt-hog",
  ]
}

# Includes hci and transport drivers for broadcom controllers which communicate over a uart
# transport.
group("broadcom_uart") {
  public_deps = []
}

group("tests") {
  testonly = true
  deps = [
    "core/bt-gap:tests",
    "core/bt-host:fuzzers",
    "hci:tests",
    "lib/async-helpers:tests",
    "lib/bt-a2dp:tests",
    "lib/bt-avctp:tests",
    "lib/bt-avdtp:tests",
    "lib/bt-fidl-mocks:tests",
    "lib/fuchsia-audio-device-output:tests",
    "lib/fuchsia-bluetooth:tests",
    "lib/test-harness-tests:test-harness-crate-tests",
    "profiles/bt-a2dp:tests",
    "profiles/bt-a2dp-manager:bt-a2dp-manager-tests",
    "profiles/bt-a2dp-sink:tests",
    "profiles/bt-a2dp-source:tests",
    "profiles/bt-avrcp:tests",
    "profiles/bt-avrcp-target:tests",
    "profiles/bt-hfp-audio-gateway:tests",
    "profiles/bt-rfcomm:tests",
    "profiles/tests:tests",
    "tests",
    "tests/bt-profile-test-server",
    "tests/bt-profile-test-server:tests",
    "tools:tests",
  ]
}
