# Copyright 2023 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/assembly/board_configuration.gni")
import("//build/assembly/board_input_bundle.gni")

assert(current_toolchain == default_toolchain,
       "The x64 board can only be defined in the default toolchain.")
assert(current_cpu == "x64",
       "The x64 board can only be defined in an x64 toolchain.")

board_configuration("x64") {
  hardware_info = {
    name = "default-board"
  }

  provided_features = [
    "fuchsia::wlan_softmac",
    "fuchsia::paravirtualization",
    "fuchsia::paver",
  ]

  input_bundles = [
    ":main_bundle",
    ":x64_common",
    ":paver",
    "//boards/emulation/virtio",
  ]

  filesystems = {
    vbmeta = {
      key = "//third_party/android/platform/external/avb/test/data/testkey_atx_psk.pem"
      key_metadata = "//third_party/android/platform/external/avb/test/data/atx_metadata.bin"
    }
    fvm = {
      blobfs = {
        size_checker_maximum_bytes = 5216665600
      }
      sparse_output = {
      }
      fastboot_output = {
        truncate_to_length = 17179869184
      }
    }
    fxfs = {
      size_checker_maximum_bytes = 5216665600
    }
    gpt_all = true
  }
}

board_input_bundle("main_bundle") {
  drivers = [
    {
      package_target =
          "//src/connectivity/wlan/drivers/third_party/intel/iwlwifi:iwlwifi"
      package_set = "base"
      driver_components = [ "meta/iwlwifi.cm" ]
    },
    {
      package_target = "//src/connectivity/ethernet/drivers/gvnic:gvnic-package"
      package_set = "bootfs"
      driver_components = [ "meta/gvnic.cm" ]
    },
    {
      package_target =
          "//src/connectivity/ethernet/drivers/realtek-8111:package"
      package_set = "bootfs"
      driver_components = [ "meta/realtek-8111.cm" ]
    },
    {
      package_target = "//src/devices/serial/drivers/uart16550:package"
      package_set = "bootfs"
      driver_components = [ "meta/uart16550.cm" ]
    },
    {
      package_target = "//src/connectivity/bluetooth/hci/vendor/intel:intel"
      package_set = "base"
      driver_components = [ "meta/bt-hci-intel.cm" ]
    },
  ]
  base_packages = [
    "//src/graphics/bin/vulkan_loader",
    "//src/graphics/lib/goldfish-vulkan/gnbuild:goldfish",

    # Vulkan ICD for virtio-gpu
    "//src/graphics/drivers/gfxstream-vulkan",
    "//src/graphics/drivers/intel-gen/icd:libvulkan_intel_gen",
  ]
}

board_input_bundle("x64_common") {
  drivers = [
    {
      package_target = "//src/devices/block/drivers/ahci:package"
      package_set = "bootfs"
      driver_components = [ "meta/ahci.cm" ]
    },
    {
      package_target = "//src/devices/block/drivers/mbr:package"
      package_set = "bootfs"
      driver_components = [ "meta/mbr.cm" ]
    },
    {
      package_target = "//src/devices/block/drivers/nvme:package"
      package_set = "bootfs"
      driver_components = [ "meta/nvme.cm" ]
    },
    {
      package_target = "//src/devices/block/drivers/pci-sdhci:package"
      package_set = "bootfs"
      driver_components = [ "meta/pci-sdhci.cm" ]
    },
    {
      package_target = "//src/devices/block/drivers/sdhci:package"
      package_set = "bootfs"
      driver_components = [ "meta/sdhci.cm" ]
    },
    {
      package_target = "//src/devices/block/drivers/ufs:pkg"
      package_set = "bootfs"
      driver_components = [ "meta/ufs.cm" ]
    },
    {
      package_target = "//src/devices/board/drivers/x86:package"
      package_set = "bootfs"
      driver_components = [ "meta/platform-bus-x86.cm" ]
    },
    {
      package_target = "//src/devices/bus/drivers/pci:package"
      package_set = "bootfs"
      driver_components = [ "meta/bus-pci.cm" ]
    },
    {
      package_target = "//src/devices/i2c/drivers/intel-i2c:package"
      package_set = "bootfs"
      driver_components = [ "meta/intel-i2c.cm" ]
    },
    {
      package_target = "//src/devices/rtc/drivers/intel-rtc:package"
      package_set = "bootfs"
      driver_components = [ "meta/intel-rtc.cm" ]
    },
    {
      package_target = "//src/devices/tpm/drivers/tpm:tpm-pkg"
      package_set = "bootfs"
      driver_components = [ "meta/tpm-driver.cm" ]
    },
    {
      package_target = "//src/devices/usb/drivers/xhci:package"
      package_set = "bootfs"
      driver_components = [ "meta/xhci.cm" ]
    },
    {
      package_target = "//src/graphics/display/drivers/intel-i915:package"
      package_set = "bootfs"
      driver_components = [ "meta/intel-i915.cm" ]
    },
    {
      package_target = "//src/media/audio/drivers/codecs/alc5514:package"
      package_set = "bootfs"
      driver_components = [ "meta/alc5514.cm" ]
    },
    {
      package_target = "//src/media/audio/drivers/codecs/alc5663:package"
      package_set = "bootfs"
      driver_components = [ "meta/alc5663.cm" ]
    },
    {
      package_target = "//src/media/audio/drivers/codecs/max98373:package"
      package_set = "bootfs"
      driver_components = [ "meta/max98373.cm" ]
    },
    {
      package_target = "//src/media/audio/drivers/codecs/max98927:package"
      package_set = "bootfs"
      driver_components = [ "meta/max98927.cm" ]
    },
    {
      package_target = "//src/media/audio/drivers/intel-hda/codecs/hdmi:package"
      package_set = "bootfs"
      driver_components = [ "meta/hdmi-audio-codec.cm" ]
    },
    {
      package_target =
          "//src/media/audio/drivers/intel-hda/codecs/realtek:package"
      package_set = "bootfs"
      driver_components = [ "meta/realtek-audio-codec.cm" ]
    },
    {
      package_target = "//src/media/audio/drivers/intel-hda/controller:package"
      package_set = "bootfs"
      driver_components = [ "meta/intel-hda.cm" ]
    },
    {
      package_target = "//src/ui/input/drivers/ctaphid:package"
      package_set = "bootfs"
      driver_components = [ "meta/ctaphid.cm" ]
    },
    {
      package_target = "//src/ui/input/drivers/i2c-hid:package"
      package_set = "bootfs"
      driver_components = [ "meta/i2c-hid.cm" ]
    },
    {
      package_target = "//src/ui/input/drivers/pc-ps2:package"
      package_set = "bootfs"
      driver_components = [ "meta/pc-ps2.cm" ]
    },
    {
      package_target = "//src/power/fake-powersource:fake-battery"
      package_set = "base"
      driver_components = [ "meta/fake_battery.cm" ]
    },
  ]

  # Additional drivers to support running as a virtualization guest.
  drivers += [
    {
      package_target =
          "//src/connectivity/ethernet/drivers/third_party/igc:package"
      package_set = "bootfs"
      driver_components = [ "meta/igc.cm" ]
    },
    {
      package_target =
          "//src/graphics/display/drivers/simple:simple-bochs-package"
      package_set = "bootfs"
      driver_components = [ "meta/simple.bochs.cm" ]
    },
    {
      package_target =
          "//src/graphics/display/drivers/simple:simple-intel-package"
      package_set = "bootfs"
      driver_components = [ "meta/simple.intel.cm" ]
    },
    {
      package_target = "//src/media/audio/drivers/intel-hda/codecs/qemu:package"
      package_set = "bootfs"
      driver_components = [ "meta/qemu-audio-codec.cm" ]
    },
    {
      package_target = "//zircon/third_party/dev/ethernet/e1000:package"
      package_set = "bootfs"
      driver_components = [ "meta/e1000.cm" ]
    },
  ]

  # Flag controlling kernel's uart implementation.
  # TODO(https://fxbug.dev/326669461): Remove when migration is complete.
  kernel_cmdline = [ "kernel.experimental.serial_migration=true" ]
}

board_input_bundle("paver") {
  bootfs_packages = [ "//src/bringup/bin/paver:package-x64" ]
}
