# 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/config/fuchsia/rules.gni")
import("//garnet/lib/magma/gnbuild/magma.gni")

driver_module("msd_img_rgx_mt8167") {
  output_name = "libmsd_img_rgx_mt8167"
  if (magma_enable_developer_build) {
    testonly = true
  }

  if (magma_enable_developer_build) {
    deps = [ ":test_driver_sources" ]
  } else {
    deps = [ ":driver_sources" ]
  }
  deps +=
      [ "//garnet/lib/magma/src/magma_util/platform:logger_for_system_drivers" ]

  configs -= [ "//build/config/fuchsia:no_cpp_standard_library" ]
  configs += [ "//build/config/fuchsia:static_cpp_standard_library" ]
}

template("driver_source_template") {
  source_set(target_name) {
    sources = [
      "mt8167s-gpu.cc",
      "mt8167s-gpu.h",
    ]

    public_deps = [
      "../include",
      "//garnet/lib/magma/src/magma_util:macros",
      "//garnet/lib/magma/src/magma_util/platform:logger",
      "//garnet/lib/magma/src/magma_util/platform:trace",
      "//garnet/lib/magma/src/magma_util/platform:trace_provider",
      "//garnet/lib/magma/src/magma_util/platform:trace_provider_with_fdio",
      "//garnet/lib/magma/src/sys_driver",
      "//garnet/lib/magma/tests/helper:platform_device_helper",
      "//sdk/fidl/fuchsia.gpu.magma:fuchsia.gpu.magma_c",
      "//src/devices:driver",
      "//third_party/imgtec-pvr-rgx-km:src",
      "//zircon/public/lib/ddk",
      "//zircon/public/lib/ddktl",
      "//zircon/public/lib/device-protocol-pdev",
      "//zircon/public/lib/device-protocol-platform-device",
      "//zircon/public/lib/fidl-utils",
      "//zircon/public/lib/mmio",
      "//zircon/system/banjo/ddk.protocol.clock",
      "//zircon/system/banjo/ddk.protocol.composite",
      "//zircon/system/banjo/ddk.protocol.platform.device",
    ]
    if (invoker.developer_build) {
      testonly = true
      defines = [ "MAGMA_TEST_DRIVER=1" ]
      deps = [
        "//garnet/lib/magma/tests/unit_tests:magma_platform_hardware_tests",
        "//garnet/lib/magma/tests/unit_tests:msd_abi_conformance_tests",
        "//third_party/googletest:gtest",
        "//third_party/imgtec-pvr-rgx-km:unit_tests",
      ]
      sources += [ "driver_test_gtest.cc" ]
    }

    configs += [ "//build/config/fuchsia:static_cpp_standard_library" ]
  }
}

driver_source_template("driver_sources") {
  developer_build = false
}

driver_source_template("test_driver_sources") {
  developer_build = true
}
