# Copyright 2018 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("//src/virtualization/packages/guest_package.gni")

declare_args() {
  # Package the rootfs as a QCOW image (as opposed to a flat file).
  debian_guest_qcow = true
  debian_guest_earlycon = false
}

initrd_image = "initrd.img"
rootfs_image = "rootfs.qcow2"
tests_image = "tests.img"
linux_image = "vmlinuz"

guest_prebuilt("initrd") {
  source = "//prebuilt/virtualization/packages/debian_guest/images/${target_cpu}/${initrd_image}"
  output = "${target_out_dir}/debian/${initrd_image}"
}

guest_prebuilt("rootfs") {
  source = "//prebuilt/virtualization/packages/debian_guest/images/${target_cpu}/${rootfs_image}"
  output = "${target_out_dir}/debian/${rootfs_image}"
}

guest_prebuilt("tests") {
  source = "//prebuilt/virtualization/packages/debian_guest/images/${target_cpu}/${tests_image}"
  output = "${target_out_dir}/debian/${tests_image}"
}

guest_prebuilt("kernel") {
  source = "//prebuilt/virtualization/packages/debian_guest/images/${target_cpu}/${linux_image}"
  output = "${target_out_dir}/debian/${linux_image}"
}

guest_package("debian_guest") {
  deps = [
    ":initrd",
    ":kernel",
    ":tests",
  ]

  cmdline = "root=/dev/vda rw"
  if (debian_guest_earlycon) {
    if (target_cpu == "x64") {
      cmdline += " earlycon=uart,io,0x3f8"
    } else if (target_cpu == "arm64") {
      cmdline += " earlycon=pl011,0x808300000"
    } else {
      panic("Unsupported architecture ${target_cpu}")
    }
  }

  linux = "${target_out_dir}/debian/${linux_image}"
  ramdisk = "${target_out_dir}/debian/${initrd_image}"

  disk_name = "filesystem.img"
  if (debian_guest_qcow) {
    deps += [ ":rootfs" ]
    disk_path = rebase_path("${target_out_dir}/debian/${rootfs_image}")
    disk_options = "ro,qcow,volatile"
  } else {
    disk_path = rebase_path("${target_out_dir}/debian/rootfs.img")
    disk_options = "ro,volatile"
  }
  resources = [
    {
      path = disk_path
      dest = disk_name
    },
  ]
  block_devices = [ "data/${disk_name},${disk_options}" ]

  tests_filename = "tests.img"
  resources += [
    {
      path = rebase_path("${target_out_dir}/debian/${tests_image}")
      dest = "${tests_filename}"
    },
  ]
  block_devices += [ "data/${tests_filename},ro" ]

  deps += [ "//src/virtualization/lib/guest_interaction:extras" ]
  gis_out_dir =
      get_label_info("//src/virtualization/lib/guest_interaction:extras",
                     "target_out_dir")
  resources += [
    {
      path = rebase_path("$gis_out_dir/linux/extras.img")
      dest = "extras.img"
    },
  ]
  block_devices += [ "data/extras.img,ro" ]
}
