# Copyright 2021 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/testing/zbi_test.gni")
import("//zircon/kernel/phys/qemu.gni")
import("//zircon/kernel/phys/zbi_executable.gni")

group("boot-shim") {
  deps = [ ":zbi-boot-shim" ]
  if (current_cpu == "x64") {
    deps += [ "//zircon/kernel/arch/x86/phys/boot-shim" ]
  }
}

zbi_executable("zbi-boot-shim") {
  deps = [ ":noop-boot-shim" ]
}

if (toolchain_environment == "kernel.phys") {
  source_set("noop-boot-shim") {
    sources = [ "zbi-boot-shim.cc" ]
    include_dirs = [ "//zircon/kernel/phys" ]
    deps = [
      "//zircon/kernel/phys:allocation",
      "//zircon/kernel/phys:boot-zbi",
      "//zircon/kernel/phys:main",
      "//zircon/kernel/phys:symbolize",
      "//zircon/kernel/phys:zbi-memory",
      "//zircon/system/ulib/zbitl",
    ]
  }
}

group("tests") {
  testonly = true

  deps = []

  if (current_cpu == "x64") {
    deps += [ "//zircon/kernel/arch/x86/phys/boot-shim:tests" ]
  }

  # TODO(mcgrathr): not compatible with legacy fixed-address ZBI booting
  if (current_cpu != "x64") {
    deps += [
      ":zbi-boot-shim-core-tests",
      ":zbi-boot-shim-phys-unittests",
    ]
  }
}

zbi_test("zbi-boot-shim-phys-unittests") {
  deps = [
    ":zbi-boot-shim",
    "//zircon/kernel/phys/test:zbi-phys-unittests.zbi(//zircon/kernel/phys:kernel.phys_$current_cpu)",
  ]

  # Set a short timeout since the tests don't reliably reboot the machine.
  timeout = qemu_short_timeout
}

zbi_test("zbi-boot-shim-core-tests") {
  deps = [
    ":zbi-boot-shim",
    "//zircon/system/utest/core:core-tests.zbi($default_toolchain)",
  ]
}
