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

load(
    "@fuchsia_sdk//fuchsia:defs.bzl",
    "fuchsia_cc_driver",
    "fuchsia_cc_test",
    "fuchsia_component_manifest",
    "fuchsia_driver_bind_bytecode",
    "fuchsia_driver_component",
    "fuchsia_package",
    "fuchsia_package_resource",
    "fuchsia_package_resource_collection",
    "fuchsia_test_component",
    "fuchsia_test_package",
)

fuchsia_driver_bind_bytecode(
    name = "vim3-devicetree-bind",
    output = "vim3-devicetree-bind.bindbc",
    rules = "vim3-devicetree.bind",
    deps = [
        "@fuchsia_sdk//bind/fuchsia.devicetree",
        "@fuchsia_sdk//bind/fuchsia.khadas.platform",
        "@internal_sdk//fidl/fuchsia.hardware.platform.bus:fuchsia.hardware.platform.bus_bindlib",
    ],
)

fuchsia_package_resource_collection(
    name = "vim3-devicetree-visitors",
    resources = [
        "@internal_sdk//pkg/devicetree-aml-usb-phy-visitor",
        "@internal_sdk//pkg/devicetree-amlogic-canvas-visitor",
        "@internal_sdk//pkg/devicetree-arm-gicv2",
        "@internal_sdk//pkg/devicetree-clockimpl-visitor",
        "@internal_sdk//pkg/devicetree-display-detect-visitor",
        "@internal_sdk//pkg/devicetree-display-panel-visitor",
        "@internal_sdk//pkg/devicetree-dwc2-visitor",
        "@internal_sdk//pkg/devicetree-ethernet-phy-visitor",
        "@internal_sdk//pkg/devicetree-focaltech-visitor",
        "@internal_sdk//pkg/devicetree-gpioimpl-visitor",
        "@internal_sdk//pkg/devicetree-i2c-bus-visitor",
        "@internal_sdk//pkg/devicetree-mali-gpu-visitor",
        "@internal_sdk//pkg/devicetree-performance-domain-visitor",
        "@internal_sdk//pkg/devicetree-power-domain-visitor",
        "@internal_sdk//pkg/devicetree-power-element-visitor",
        "@internal_sdk//pkg/devicetree-pwm-init-visitor",
        "@internal_sdk//pkg/devicetree-pwm-visitor",
        "@internal_sdk//pkg/devicetree-registers-visitor",
        "@internal_sdk//pkg/devicetree-regulator-visitor",
        "@internal_sdk//pkg/devicetree-sdmmc-visitor",
        "@internal_sdk//pkg/devicetree-serial-port-visitor",
        "@internal_sdk//pkg/devicetree-sysmem-visitor",
        "@internal_sdk//pkg/devicetree-thermal-zones-visitor",
        "@internal_sdk//pkg/devicetree-usb-phy-visitor",
    ],
)

fuchsia_cc_driver(
    name = "vim3-devicetree-driver",
    srcs = [
        "vim3-devicetree.cc",
        "vim3-devicetree.h",
        "visitors/vim3-adc-buttons.cc",
        "visitors/vim3-adc-buttons.h",
        "visitors/vim3-gpio-buttons.cc",
        "visitors/vim3-gpio-buttons.h",
        "visitors/vim3-nna.cc",
        "visitors/vim3-nna.h",
        "visitors/vim3-wifi.cc",
        "visitors/vim3-wifi.h",
    ],
    linkshared = True,
    output_name = "vim3-devicetree",
    deps = [
        "//src/devices/lib/broadcom",
        "//src/lib/ddk:ddk_buttons_metadata",
        "//src/lib/ddk:ddk_metadata",
        "@fuchsia_sdk//bind/fuchsia.adc:fuchsia.adc_cc",
        "@fuchsia_sdk//bind/fuchsia.broadcom.platform.sdio:fuchsia.broadcom.platform.sdio_cc",
        "@fuchsia_sdk//bind/fuchsia.sdio:fuchsia.sdio_cc",
        "@fuchsia_sdk//fidl/fuchsia.driver.framework:fuchsia.driver.framework_cpp",
        "@fuchsia_sdk//fidl/fuchsia.hardware.adc:fuchsia.hardware.adc_bindlib_cc",
        "@fuchsia_sdk//pkg/driver_component_cpp",
        "@fuchsia_sdk//pkg/driver_runtime",
        "@fuchsia_sdk//pkg/driver_runtime_cpp",
        "@internal_sdk//fidl/fuchsia.buttons:fuchsia.buttons_cpp",
        "@internal_sdk//fidl/fuchsia.hardware.adcimpl:fuchsia.hardware.adcimpl_cpp",
        "@internal_sdk//fidl/fuchsia.hardware.gpio:fuchsia.hardware.gpio_cpp",
        "@internal_sdk//fidl/fuchsia.hardware.platform.bus:fuchsia.hardware.platform.bus_cpp",
        "@internal_sdk//fidl/fuchsia.hardware.sdio:fuchsia.hardware.sdio_bindlib_cc",
        "@internal_sdk//pkg/devicetree-driver-visitors",
        "@internal_sdk//pkg/devicetree-load-visitors",
        "@internal_sdk//pkg/devicetree-manager",
    ],
)

fuchsia_component_manifest(
    name = "manifest",
    src = "meta/vim3-devicetree.cml",
)

fuchsia_driver_component(
    name = "component",
    bind_bytecode = ":vim3-devicetree-bind",
    driver_lib = ":vim3-devicetree-driver",
    manifest = ":manifest",
)

fuchsia_package(
    name = "vim3-devicetree",
    package_name = "vim3-devicetree",
    components = [":component"],
    fuchsia_api_level = "HEAD",
    package_repository_name = "fuchsia.com",
    resources = [
        ":vim3-devicetree-visitors",
    ],
    visibility = ["//visibility:public"],
)

# For testing
fuchsia_package_resource(
    name = "vim3-dtb",
    src = "@gn_targets//src/devices/board/drivers/vim3-devicetree:vim3-dtb",
    dest = "test-data/khadas-vim3.dtb",
)

fuchsia_cc_test(
    name = "vim3-devicetree-test-bin",
    size = "small",
    srcs = [
        "vim3-devicetree-test.cc",
    ],
    copts = [
        "-Wno-vla-cxx-extension",
    ],
    deps = [
        "//zircon/system/ulib/ddk-platform-defs",
        "@com_google_googletest//:gtest",
        "@com_google_googletest//:gtest_main",
        "@fuchsia_sdk//pkg/async-loop-cpp",
        "@fuchsia_sdk//pkg/async-loop-default",
        "@internal_sdk//pkg/board-test-helper",
    ],
)

fuchsia_component_manifest(
    name = "test-manifest",
    src = "meta/vim3-devicetree-test.cml",
    includes = [
        "@fuchsia_sdk//pkg/sys/component:realm_builder_absolute",
    ],
)

fuchsia_test_component(
    name = "vim3-devicetree-test-component",
    manifest = ":test-manifest",
    deps = [":vim3-devicetree-test-bin"],
)

fuchsia_test_package(
    name = "vim3-devicetree-test-package",
    package_name = "vim3-devicetree-test",
    components = [
        ":component",
    ],
    fuchsia_api_level = "HEAD",
    resources = [
        ":vim3-devicetree-visitors",
        ":vim3-dtb",
    ],
    subpackages_to_flatten = [
        "//sdk/lib/driver/devicetree/testing:platform-bus-driver",
        "//sdk/lib/driver/devicetree/testing:driver_test_realm",
    ],
    test_components = [
        ":vim3-devicetree-test-component",
    ],
    visibility = ["//visibility:public"],
)
