# Copyright 2020 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/drivers/check_included_drivers.gni")
import("//build/drivers/create_all_drivers_doc.gni")

# Group including all drivers in the fuchsia repo except for templates.
group("drivers-not-templates") {
  testonly = true
  deps = [
    "//examples/drivers",
    "//examples/drivers/template:bazel_package",
    "//sdk/lib/driver/devicetree/examples/example-board:bazel_package",
    "//sdk/lib/driver/metadata/cpp:drivers",
    "//sdk/lib/driver_test_realm/fake_driver:component",
    "//src/camera:drivers",
    "//src/connectivity/bundles:drivers",
    "//src/connectivity/ethernet/drivers/third_party/igc",
    "//src/connectivity/overnet/usb:overnet-usb",
    "//src/developer/adb:drivers",
    "//src/devices/bundles:drivers",
    "//src/diagnostics/validator/logs/ddk/log-test-driver",
    "//src/graphics/bundles:drivers",
    "//src/media/bundles:drivers",
    "//src/power:drivers",
    "//src/storage/fvm/driver:driver",
    "//src/sys/component_manager/tests/structured_config/client_integration/cpp_driver:receiver_component",
    "//src/ui/bundles:drivers",
    "//zircon/third_party/dev/ethernet/e1000:e1000",
  ]
}

# Group including all drivers in the fuchsia repo. Useful for ensuring
# all driver continue to build without needing to build every board.
check_included_drivers("drivers-build-only") {
  testonly = true
  contains_all_drivers = true
  deps = [
    ":drivers-not-templates",
    "//tools/create/goldens/my-driver-cpp:component",
  ]
}

# Group including all drivers to extract documentation from.
create_all_drivers_doc("create_all_drivers_doc") {
  testonly = true
  deps = [ ":drivers-not-templates" ]
}
