# Copyright 2016 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/bind/bind.gni")
import("//build/drivers.gni")
import("//src/graphics/lib/magma/gnbuild/magma.gni")

# The gpu device
fuchsia_driver("msd_intel-driver") {
  output_name = "libmsd_intel"

  deps = [
    ":msd_intel_entry",
    "src",
    "//src/graphics/magma/lib/magma/platform:logger_for_system_drivers",
  ]

  assert_no_deps = [ "//zircon/system/ulib/trace-engine:trace-engine-static" ]
}

fuchsia_driver_component("msd_intel") {
  component_name = "libmsd_intel"
  deps = [ ":msd_intel-driver" ]
  info = "msd_intel-info.json"
  manifest = "meta/msd_intel.cml"
}

# The gpu device; runs gtests at startup
fuchsia_driver("msd_intel_test-driver") {
  testonly = true

  output_name = "libmsd_intel_test"

  deps = [
    ":msd_intel_test_entry",
    "src",
    "//src/graphics/magma/lib/magma/platform:logger_for_system_drivers",
  ]

  assert_no_deps = [ "//zircon/system/ulib/trace-engine:trace-engine-static" ]
}

fuchsia_driver_component("msd_intel_test") {
  testonly = true
  component_name = "libmsd_intel_test"
  deps = [ ":msd_intel_test-driver" ]
  info = "msd_intel_test-info.json"
  manifest = "meta/msd_intel_test.cml"
}

driver_bind_rules("msd_intel_bind") {
  rules = "msd_intel.bind"
  tests = "tests/bind_tests.json"
  deps = [ "//src/devices/bind/fuchsia.intel.platform.gpucore" ]
}

driver_bind_rules("msd_intel_test_bind") {
  rules = "msd_intel_test.bind"
  disable_autobind = true
  deps = [ "//src/devices/bind/fuchsia.intel.platform.gpucore" ]
}

source_set("msd_intel_entry") {
  public_configs =
      [ "//src/graphics/drivers/msd-intel-gen:msd_src_include_config" ]
  sources = [ "src/driver_entry.cc" ]

  deps = [
    ":msd_intel_bind",
    "src",
    "//sdk/fidl/fuchsia.gpu.magma:fuchsia.gpu.magma_cpp",
    "//src/devices/lib/driver",
    "//src/graphics/magma/lib/magma/platform:trace",
    "//src/graphics/magma/lib/magma/platform/zircon:status",
    "//src/graphics/magma/lib/magma/util:macros",
    "//src/graphics/magma/lib/magma_service/sys_driver",
    "//src/graphics/magma/lib/magma_service/sys_driver/dfv1:device_impl",
    "//src/lib/ddk",
    "//src/zircon/lib/zircon",
    "//zircon/system/ulib/trace",
    "//zircon/system/ulib/trace-vthread",
    "//zircon/system/ulib/zx",
  ]
}

source_set("msd_intel_test_entry") {
  testonly = true

  public_configs =
      [ "//src/graphics/drivers/msd-intel-gen:msd_src_include_config" ]
  sources = [ "src/driver_entry.cc" ]
  defines = [ "MAGMA_TEST_DRIVER=1" ]

  deps = [
    ":msd_intel_test_bind",
    "src",
    "//sdk/fidl/fuchsia.gpu.magma:fuchsia.gpu.magma_cpp",
    "//src/devices/lib/driver",
    "//src/graphics/magma/lib/magma/platform:trace",
    "//src/graphics/magma/lib/magma/platform/zircon:status",
    "//src/graphics/magma/lib/magma/util:macros",
    "//src/graphics/magma/lib/magma_service/sys_driver",
    "//src/graphics/magma/lib/magma_service/sys_driver/dfv1:device_impl",
    "//src/lib/ddk",
    "//src/zircon/lib/zircon",
    "//zircon/system/ulib/trace",
    "//zircon/system/ulib/trace-vthread",
    "//zircon/system/ulib/zx",
  ]
  deps += [
    "tests/unit_tests:hardware_tests",
    "//src/graphics/magma/lib/magma_service/test_util:pci_driver_gtest",
    "//src/graphics/magma/tests/msd_conformance_tests",
    "//src/graphics/magma/tests/unit_tests:magma_platform_pci_device_tests",
  ]
}

# This config allows inclusion of headers via relative paths
config("msd_tests_include_config") {
  include_dirs = [ "tests" ]
}

# This config allows inclusion of headers via relative paths
config("msd_src_include_config") {
  include_dirs = [ "src" ]
}

group("tests") {
  testonly = true
  public_deps = [
    ":msd_intel_bind_test",
    "tests",
  ]
}

fuchsia_driver_package("msd-intel-gen") {
  driver_components = [ ":msd_intel" ]
}

fuchsia_driver_package("msd-intel-gen-test") {
  testonly = true
  driver_components = [ ":msd_intel_test" ]
  deps = [ "//src/graphics/magma/tests/unit_tests:test_firmware" ]
}

group("test-driver") {
  testonly = true
  deps = [ ":msd-intel-gen-test" ]
}
