# 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.

##########################################
# Though under //zircon, this build file #
# is meant to be used in the Fuchsia GN  #
# build.                                 #
# See fxb/36139.                         #
##########################################

assert(!defined(zx) || zx != "/",
       "This file can only be used in the Fuchsia GN build.")

import("//build/config/fuchsia/rules.gni")
import("//build/test.gni")
import("//build/unification/images/migrated_manifest.gni")

assert(current_cpu == "x64")

declare_args() {
  # Setting this config to true only makes sense if the zircon enable_user_pci config is also true.
  # We define a separate config here for the moment due to not quite unified builds and the
  # difficulty of sharing configs between builds.
  platform_enable_user_pci = false
}

group("x86") {
  deps = [ ":platform-bus-x86" ]
}

config("config") {
  visibility = [ ":*" ]

  include_dirs = [ "include" ]

  if (platform_enable_user_pci) {
    defines = [ "ENABLE_USER_PCI" ]
  }

  cflags = [ "-Wno-null-pointer-arithmetic" ]
  cflags_c = [ "-fno-strict-aliasing" ]
}

source_set("smbios") {
  visibility = [ ":*" ]

  sources = [ "smbios.cc" ]

  configs += [ ":config" ]

  deps = [
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fzl",
    "//zircon/public/lib/smbios",
    "//zircon/public/lib/zx",
  ]
}

source_set("iommu") {
  visibility = [ ":*" ]

  sources = [ "iommu.cc" ]

  configs += [ ":config" ]

  deps = [
    "//third_party/acpica",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fzl",
    "//zircon/public/lib/zx",
  ]
}

driver_module("platform-bus-x86") {
  defines = [ "_ALL_SOURCE" ]
  configs += [ "//build/config/fuchsia:enable_zircon_asserts" ]
  configs -= [ "//build/config/fuchsia:no_cpp_standard_library" ]
  configs += [ "//build/config/fuchsia:static_cpp_standard_library" ]
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  sources = [
    "acpi-dev/dev-battery.cc",
    "acpi-dev/dev-cros-ec/acpi.cc",
    "acpi-dev/dev-cros-ec/dev.cc",
    "acpi-dev/dev-cros-ec/motion.cc",
    "acpi-dev/dev-ec.cc",
    "acpi-dev/dev-lid.cc",
    "acpi-dev/dev-lid.h",
    "acpi-dev/dev-pwrbtn.cc",
    "acpi-dev/dev-pwrsrc.cc",
    "acpi-dev/dev-tbmc.cc",
    "acpi-dev/dev-thermal.cc",
    "acpi-nswalk.cc",
    "debug.cc",
    "init.cc",
    "iommu-driver-tests.cc",
    "methods.cc",
    "nhlt.cc",
    "pciroot.cc",
    "power.cc",
    "resources.cc",
    "sysmem.cc",
    "util.cc",
    "x86-driver-tests.cc",
    "x86.cc",
    "x86.h",
  ]

  # Userspace PCI feature flag.  The scaffolding for the userspace pci bus
  # driver is in pci.cpp.  If not enabled then the kernel pci bus driver
  # initialization code in ACPI (kpci.cc) will be built instead.
  if (platform_enable_user_pci) {
    sources += [ "pci.cc" ]
  } else {
    sources += [ "kpci.cc" ]
  }
  configs += [ ":config" ]
  deps = [
    ":iommu",
    ":smbios",
    "//sdk/banjo/ddk.protocol.acpi",
    "//sdk/banjo/ddk.protocol.pciroot",
    "//sdk/fidl/fuchsia.hardware.power:fuchsia.hardware.power_c",
    "//sdk/fidl/fuchsia.hardware.thermal:fuchsia.hardware.thermal_c",
    "//src/devices/lib/driver",
    "//third_party/acpica",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/hid",
    "//zircon/public/lib/lazy_init",
    "//zircon/public/lib/pci",
    "//zircon/public/lib/region-alloc",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zxtest",
    "//zircon/system/banjo/ddk.protocol.hidbus",
    "//zircon/system/banjo/ddk.protocol.platform.bus",
    "//zircon/system/banjo/ddk.protocol.platform.device",
    "//zircon/system/banjo/ddk.protocol.scpi",
    "//zircon/system/banjo/ddk.protocol.sysmem",
    "//zircon/system/fidl/fuchsia-hardware-acpi:llcpp",
    "//zircon/system/fidl/fuchsia-sysinfo:c",
    "//zircon/system/fidl/fuchsia-sysmem:c",
    "//zircon/system/ulib/driver-unit-test",
    "//zircon/third_party/ulib/chromiumos-platform-ec",
  ]
  public_configs = [ "$zx_build/public/gn/config:default_warnings" ]
}

test("x86-battery-test") {
  # Dependent manifests unfortunately cannot be marked as `testonly`.
  # TODO(44278): Remove when converting this file to proper GN build idioms.
  if (is_fuchsia) {
    testonly = false
  }
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  if (is_fuchsia) {
    fdio_config = [ "//build/config/fuchsia:fdio_config" ]
    if (configs + fdio_config - fdio_config != configs) {
      configs -= fdio_config
    }
  }
  output_name = "x86-battery-test"
  test_group = "ddk"
  sources = [
    "acpi-dev/dev-battery-test.cc",
    "acpi-dev/dev-battery.cc",
  ]
  configs += [ ":config" ]
  deps = [
    "//sdk/banjo/ddk.protocol.acpi",
    "//sdk/banjo/ddk.protocol.pciroot",
    "//sdk/fidl/fuchsia.hardware.power:fuchsia.hardware.power_c",
    "//sdk/fidl/fuchsia.hardware.thermal:fuchsia.hardware.thermal_c",
    "//src/devices/lib/driver",
    "//third_party/acpica",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/hid",
    "//zircon/public/lib/pci",
    "//zircon/public/lib/region-alloc",
    "//zircon/public/lib/zxtest",
    "//zircon/system/banjo/ddk.protocol.hidbus",
    "//zircon/system/banjo/ddk.protocol.platform.bus",
    "//zircon/system/banjo/ddk.protocol.platform.device",
    "//zircon/system/banjo/ddk.protocol.scpi",
    "//zircon/system/banjo/ddk.protocol.sysmem",
    "//zircon/third_party/ulib/chromiumos-platform-ec",
  ]
}

test("x86-lid-test") {
  # Dependent manifests unfortunately cannot be marked as `testonly`.
  # TODO(44278): Remove when converting this file to proper GN build idioms.
  if (is_fuchsia) {
    testonly = false
  }
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  if (is_fuchsia) {
    fdio_config = [ "//build/config/fuchsia:fdio_config" ]
    if (configs + fdio_config - fdio_config != configs) {
      configs -= fdio_config
    }
  }
  output_name = "x86-lid-test"
  test_group = "ddk"
  sources = [
    "acpi-dev/dev-lid-test.cc",
    "acpi-dev/dev-lid.cc",
    "acpi-dev/dev-lid.h",
  ]
  configs += [ ":config" ]
  deps = [
    "//sdk/banjo/ddk.protocol.acpi",
    "//third_party/acpica",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/ddktl",
    "//zircon/public/lib/fake_ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/hid",
    "//zircon/public/lib/sync",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zxtest",
    "//zircon/system/banjo/ddk.protocol.hidbus",
    "//zircon/system/dev/lib/mock-hidbus-ifc",
  ]
}

test("x86-pwrsrc-test") {
  # Dependent manifests unfortunately cannot be marked as `testonly`.
  # TODO(44278): Remove when converting this file to proper GN build idioms.
  if (is_fuchsia) {
    testonly = false
  }
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  if (is_fuchsia) {
    fdio_config = [ "//build/config/fuchsia:fdio_config" ]
    if (configs + fdio_config - fdio_config != configs) {
      configs -= fdio_config
    }
  }
  output_name = "x86-pwrsrc-test"
  test_group = "ddk"
  sources = [
    "acpi-dev/dev-pwrsrc-test.cc",
    "acpi-dev/dev-pwrsrc.cc",
  ]
  configs += [ ":config" ]
  deps = [
    "//sdk/banjo/ddk.protocol.acpi",
    "//sdk/fidl/fuchsia.hardware.power:fuchsia.hardware.power_c",
    "//third_party/acpica",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/ddktl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/hid",
    "//zircon/public/lib/zxtest",
    "//zircon/system/banjo/ddk.protocol.hidbus",
    "//zircon/system/banjo/ddk.protocol.platform.bus",
    "//zircon/system/banjo/ddk.protocol.platform.device",
    "//zircon/system/banjo/ddk.protocol.scpi",
    "//zircon/system/banjo/ddk.protocol.sysmem",
  ]
}

test("x86-board-test") {
  # Dependent manifests unfortunately cannot be marked as `testonly`.
  # TODO(44278): Remove when converting this file to proper GN build idioms.
  if (is_fuchsia) {
    testonly = false
  }
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  if (is_fuchsia) {
    fdio_config = [ "//build/config/fuchsia:fdio_config" ]
    if (configs + fdio_config - fdio_config != configs) {
      configs -= fdio_config
    }
  }
  test_group = "ddk"
  sources = [
    "iommu-test.cc",
    "smbios-test.cc",
  ]
  configs += [ ":config" ]
  deps = [
    ":iommu",
    ":smbios",
    "//third_party/acpica",
    "//zircon/public/lib/fake_ddk",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/zxtest",
  ]
}

test("x86-thermal-test") {
  # Dependent manifests unfortunately cannot be marked as `testonly`.
  # TODO(44278): Remove when converting this file to proper GN build idioms.
  if (is_fuchsia) {
    testonly = false
  }
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  if (is_fuchsia) {
    fdio_config = [ "//build/config/fuchsia:fdio_config" ]
    if (configs + fdio_config - fdio_config != configs) {
      configs -= fdio_config
    }
  }
  output_name = "x86-thermal-test"
  test_group = "ddk"
  sources = [
    "acpi-dev/dev-thermal-test.cc",
    "acpi-dev/dev-thermal.cc",
    "acpi-dev/dev-thermal.h",
  ]
  configs += [ ":config" ]
  deps = [
    "//sdk/banjo/ddk.protocol.acpi",
    "//sdk/fidl/fuchsia.hardware.thermal:fuchsia.hardware.thermal_c",
    "//third_party/acpica",
    "//zircon/public/lib/async-loop",
    "//zircon/public/lib/async-loop-default",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/ddktl",
    "//zircon/public/lib/fake_ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/fidl-async",
    "//zircon/public/lib/zxtest",
  ]
}

test("x86-cros-ec-test") {
  # Dependent manifests unfortunately cannot be marked as `testonly`.
  # TODO(44278): Remove when converting this file to proper GN build idioms.
  if (is_fuchsia) {
    testonly = false
  }
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  if (is_fuchsia) {
    fdio_config = [ "//build/config/fuchsia:fdio_config" ]
    if (configs + fdio_config - fdio_config != configs) {
      configs -= fdio_config
    }
  }
  output_name = "x86-cros-ec-test"
  test_group = "ddk"
  sources = [
    "acpi-dev/dev-cros-ec/acpi.cc",
    "acpi-dev/dev-cros-ec/acpi.h",
    "acpi-dev/dev-cros-ec/dev.cc",
    "acpi-dev/dev-cros-ec/dev.h",
    "acpi-dev/dev-cros-ec/motion-test.cc",
    "acpi-dev/dev-cros-ec/motion.cc",
  ]
  configs += [ ":config" ]
  deps = [
    "//sdk/banjo/ddk.protocol.acpi",
    "//third_party/acpica",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/ddktl",
    "//zircon/public/lib/fake_ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/hid",
    "//zircon/public/lib/hid-parser",
    "//zircon/public/lib/sync",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zxtest",
    "//zircon/system/banjo/ddk.protocol.hidbus",
    "//zircon/system/dev/lib/mock-hidbus-ifc",
    "//zircon/third_party/ulib/chromiumos-platform-ec",
  ]
}

migrated_manifest("platform-bus-x86-manifest") {
  deps = [ ":platform-bus-x86" ]
}

migrated_manifest("x86-battery-test-manifest") {
  deps = [ ":x86-battery-test" ]
}

migrated_manifest("x86-lid-test-manifest") {
  deps = [ ":x86-lid-test" ]
}

migrated_manifest("x86-pwrsrc-test-manifest") {
  deps = [ ":x86-pwrsrc-test" ]
}

migrated_manifest("x86-board-test-manifest") {
  deps = [ ":x86-board-test" ]
}

migrated_manifest("x86-thermal-test-manifest") {
  deps = [ ":x86-thermal-test" ]
}

migrated_manifest("x86-cros-ec-test-manifest") {
  deps = [ ":x86-cros-ec-test" ]
}
