# Copyright 2017 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/test/test_package.gni")

source_set("machina") {
  sources = [
    "bits.h",
    "dev_mem.h",
    "guest.cc",
    "guest.h",
    "io.cc",
    "io.h",
    "pci.cc",
    "pci.h",
    "platform_device.h",
    "sysinfo.h",
    "vcpu.cc",
    "vcpu.h",
    "virtio_balloon.cc",
    "virtio_balloon.h",
    "virtio_block.cc",
    "virtio_block.h",
    "virtio_console.cc",
    "virtio_console.h",
    "virtio_device.h",
    "virtio_gpu.cc",
    "virtio_gpu.h",
    "virtio_input.cc",
    "virtio_input.h",
    "virtio_net.cc",
    "virtio_net.h",
    "virtio_net_legacy.cc",
    "virtio_net_legacy.h",
    "virtio_pci.cc",
    "virtio_pci.h",
    "virtio_queue_waiter.cc",
    "virtio_queue_waiter.h",
    "virtio_rng.cc",
    "virtio_rng.h",
    "virtio_vsock.cc",
    "virtio_vsock.h",
    "virtio_wl.cc",
    "virtio_wl.h",
  ]

  if (current_cpu == "arm64") {
    sources += [
      "arch/arm64/gic_distributor.cc",
      "arch/arm64/gic_distributor.h",
      "arch/arm64/pl011.cc",
      "arch/arm64/pl011.h",
      "arch/arm64/pl031.cc",
      "arch/arm64/pl031.h",
    ]
  } else if (current_cpu == "x64") {
    sources += [
      "arch/x86/acpi.cc",
      "arch/x86/acpi.h",
      "arch/x86/acpi_priv.h",
      "arch/x86/decode.cc",
      "arch/x86/decode.h",
      "arch/x86/e820.cc",
      "arch/x86/e820.h",
      "arch/x86/i8250.cc",
      "arch/x86/i8250.h",
      "arch/x86/io_apic.cc",
      "arch/x86/io_apic.h",
      "arch/x86/io_port.cc",
      "arch/x86/io_port.h",
      "arch/x86/page_table.cc",
      "arch/x86/page_table.h",
    ]

    include_dirs = [ "//zircon/third_party/lib/acpica/source/include" ]
  }

  defines = [ "_ALL_SOURCE=1" ]

  deps = [
    "//garnet/bin/guest/third_party/fdt",
    "//garnet/lib/machina/device",
    "//garnet/lib/machina/fidl:fuchsia.guest.device",
    "//garnet/public/lib/fsl",
    "//zircon/public/fidl/fuchsia-sysinfo",
    "//zircon/public/fidl/zircon-ethernet:zircon-ethernet_c",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/async-testutils",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/fzl",
    "//zircon/public/lib/libzbi",
    "//zircon/public/lib/zxcpp",
  ]

  public_deps = [
    "//garnet/public/fidl/fuchsia.guest",
    "//garnet/public/lib/component/cpp",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/trace",
    "//zircon/public/lib/trace-engine",
    "//zircon/public/lib/virtio",
    "//zircon/public/lib/zx",
  ]
}

executable("machina_unittests") {
  testonly = true

  sources = [
    "dev_mem_unittest.cc",
    "pci_unittest.cc",
    "phys_mem_fake.h",
    "virtio_device_fake.h",
    "virtio_net_legacy_unittest.cc",
    "virtio_queue_fake.cc",
    "virtio_queue_fake.h",
    "virtio_queue_unittest.cc",
    "virtio_queue_waiter_unittest.cc",
    "virtio_vsock_unittest.cc",
  ]

  if (current_cpu == "x64") {
    sources += [
      "arch/x86/decode_unittest.cc",
      "arch/x86/page_table_unittest.cc",
    ]
  }

  deps = [
    ":machina",
    "//garnet/lib/machina/device",
    "//garnet/public/lib/gtest",
    "//third_party/googletest:gtest_main",
    "//zircon/public/fidl/zircon-ethernet:zircon-ethernet_c",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fit",
  ]
}

test_package("machina_tests") {
  deps = [
    ":machina_unittests",
  ]

  tests = [
    {
      name = "machina_unittests"
    },
  ]
}
