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

source_set("sys_driver") {
  public_deps = [
    "$magma_build_root/include:magma_abi",
    "$magma_build_root/include:msd_abi",
    "$magma_build_root/src/magma_util",
    "$magma_build_root/src/magma_util/platform:buffer",
    "//zircon/public/lib/fit",
  ]

  sources = [
    "magma_driver.h",
    "magma_system_buffer.cc",
    "magma_system_buffer.h",
    "magma_system_connection.cc",
    "magma_system_connection.h",
    "magma_system_context.cc",
    "magma_system_context.h",
    "magma_system_device.cc",
    "magma_system_device.h",
    "magma_system_semaphore.cc",
    "magma_system_semaphore.h",
  ]

  deps = [
    "$magma_build_root/src/magma_util:command_buffer",
    "$magma_build_root/src/magma_util/platform:connection",
    "$magma_build_root/src/magma_util/platform:device",
    "$magma_build_root/src/magma_util/platform:semaphore",
    "$magma_build_root/src/magma_util/platform:thread",
  ]
}

source_set("entry") {
  sources = [
    "magma_entry.cc",
  ]

  deps = [
    "//garnet/lib/magma/fidl",
    "//garnet/lib/magma/src/magma_util",
    "//garnet/lib/magma/src/magma_util:command_buffer",
    "//garnet/lib/magma/src/magma_util/platform:trace",
    "//garnet/lib/magma/src/sys_driver",
    "//zircon/public/banjo/ddk-protocol-platform-device",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/driver",
    "//zircon/public/lib/zx",
  ]

  libs = [ "zircon" ]
}

source_set("pci_driver_gtest") {
  testonly = true

  configs += [ "$magma_build_root:magma_tests_include_config" ]
  sources = [
    "pci_driver_test_gtest.cc",
  ]

  deps = [
    "$magma_build_root/src/magma_util/platform:device",
    "$magma_build_root/tests/helper:platform_device_helper",
    "//third_party/googletest:gtest",
    "//zircon/public/lib/ddk",
  ]
}

source_set("test_entry_pci") {
  testonly = true

  configs += [ "$magma_build_root:magma_tests_include_config" ]
  sources = [
    "magma_entry.cc",
    "pci_driver_test_gtest.cc",
  ]

  deps = [
    "//garnet/lib/magma/fidl",
    "//garnet/lib/magma/src/magma_util",
    "//garnet/lib/magma/src/magma_util:command_buffer",
    "//garnet/lib/magma/src/magma_util/platform:trace",
    "//garnet/lib/magma/src/sys_driver",
    "//garnet/lib/magma/tests/helper:platform_device_helper",
    "//zircon/public/lib/zx",
  ]

  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",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/driver",
  ]

  libs = [ "zircon" ]
}

source_set("test_entry_pdev") {
  testonly = true

  configs += [ "$magma_build_root:magma_tests_include_config" ]
  sources = [
    "magma_entry.cc",
    "pdev_driver_test_gtest.cc",
  ]

  deps = [
    "//garnet/lib/magma/fidl",
    "//garnet/lib/magma/src/magma_util",
    "//garnet/lib/magma/src/magma_util:command_buffer",
    "//garnet/lib/magma/src/magma_util/platform:trace",
    "//garnet/lib/magma/src/sys_driver",
    "//garnet/lib/magma/tests/helper:platform_device_helper",
    "//zircon/public/banjo/ddk-protocol-platform-device",
    "//zircon/public/lib/zx",
  ]

  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",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/driver",
  ]

  libs = [ "zircon" ]
}
