# Copyright 2019 The Fuchsia Authors
#
# Use of this source code is governed by a MIT-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/MIT

import("//build/zircon/migrated_targets.gni")

zx_library("pc") {
  kernel = true
  sources = [
    "acpi.cc",
    "cmos_bootbyte.cc",
    "console.cc",
    "debug.cc",
    "efi.cc",
    "hpet.cc",
    "interrupts.cc",
    "keyboard.cc",
    "memory.cc",
    "pcie_quirks.cc",
    "pic.cc",
    "platform.cc",
    "platform_pcie.cc",
    "power.cc",
    "smbios.cc",
    "timer.cc",
  ]
  deps = [
    ":tests",
    "//zircon/kernel/arch/x86:headers",
    "//zircon/kernel/dev/interrupt",
    "//zircon/kernel/dev/pcie",
    "//zircon/kernel/lib/acpi_lite",
    "//zircon/kernel/lib/arch",
    "//zircon/kernel/lib/boot-options",
    "//zircon/kernel/lib/cbuf",
    "//zircon/kernel/lib/cmdline",
    "//zircon/kernel/lib/console",
    "//zircon/kernel/lib/counters",
    "//zircon/kernel/lib/debuglog",
    "//zircon/kernel/lib/efi",
    "//zircon/kernel/lib/fbl",
    "//zircon/kernel/lib/fixed_point",
    "//zircon/kernel/lib/gfxconsole",
    "//zircon/kernel/lib/init",
    "//zircon/kernel/lib/ktl",
    "//zircon/kernel/lib/lockdep",
    "//zircon/kernel/lib/memory_limit",
    "//zircon/kernel/lib/pow2_range_allocator",
    "//zircon/kernel/lib/topology",
    "//zircon/kernel/lib/unittest",
    "//zircon/system/ulib/explicit-memory",
    "//zircon/system/ulib/smbios",
    "//zircon/system/ulib/zbitl",
    "//zircon/third_party/ulib/cksum",
  ]
  public_deps = [
    # <platform/pc/smbios.h> has #include <lib/smbios/smbios.h>.
    "//zircon/system/ulib/smbios:headers",

    # <platform/pc/efi.h> has #include <efi/runtime_services.h>
    "//zircon/kernel/lib/efi:headers",
  ]

  if (toolchain.environment == "kernel") {
    public_deps += [
      # <platform/pc/timer.h> has #include <lib/affine/ratio.h>.
      "//zircon/system/ulib/affine",
    ]
  }
}

source_set("tests") {
  # TODO: testonly = true
  sources = [
    "debug_test.cc",
    "efi_test.cc",
    "interrupts_test.cc",
  ]
  deps = [
    ":headers",
    "//zircon/kernel/dev/interrupt",
    "//zircon/kernel/lib/console",
    "//zircon/kernel/lib/pow2_range_allocator",
    "//zircon/kernel/lib/unittest",
  ]
}
