# Copyright 2020 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

if (current_toolchain != default_toolchain) {
  import("//build/dist/generated_resource.gni")
  import("//src/bringup/lib/mexec/testing/zbi_test.gni")
  import("//zircon/kernel/phys/phys_executable.gni")
  import("//zircon/kernel/phys/qemu.gni")
  import("//zircon/kernel/phys/zbi_executable.gni")

  assert(toolchain.environment == "kernel.phys" ||
         toolchain_variant.base == qemu_environment)

  # This provides a PhysMain function appropriate for zbi_test() targets.
  source_set("qemu-test-main") {
    testonly = true
    sources = [ "qemu-test-main.cc" ]
    defines = [ "ZBI_TEST_SUCCESS_STRING=\"$zbi_test_success_string\"" ]
    deps = [
      "//zircon/kernel/lib/arch",
      "//zircon/kernel/lib/libc",
      "//zircon/system/ulib/uart",
    ]
    public_deps = [
      # This is public to propagate its public_deps so dependents
      # of qemu-test-main can use #include "test-main.h".
      ":test-main",
    ]
  }

  source_set("zbi-test-main") {
    testonly = true
    sources = [ "zbi-test-main.cc" ]
    defines = [ "ZBI_TEST_SUCCESS_STRING=\"$zbi_test_success_string\"" ]
    public_deps = [ ":test-main" ]
    deps = [ "//zircon/kernel/lib/libc" ]
  }

  source_set("test-main") {
    testonly = true
    public = [ "test-main.h" ]
    public_deps = [
      "..:main",
      "..:symbolize",
      "//zircon/kernel/lib/arch:headers",
    ]
  }

  # Build a test that runs directly as a QEMU kernel.  This is wired up as a
  # zbi_test() for infrastructure purposes though there is nothing in the ZBI.
  template("phys_qemu_test") {
    main_target = target_name
    executable_target = "_qemu_phys_test.$target_name.executable"
    zbi_target = "_qemu_phys_test.$target_name.zbi_test"

    phys_executable(executable_target) {
      testonly = true
      visibility = [ ":*" ]
      deps = []
      forward_variables_from(invoker,
                             "*",
                             [
                               "output_dir",
                               "output_extension",
                               "output_name",
                               "tags",
                               "testonly",
                               "target_name",
                               "timeout",
                             ])
      deps += qemu_deps + [ ":qemu-test-main" ]
    }

    zbi_test(zbi_target) {
      visibility = [ ":*" ]

      # Ensure the file, and its images.json entry, is not named
      # _qemu_phys_test.xxxx.zbi_test, which is pretty unreadable and
      # an implementation detail anyway.
      output_name = main_target

      # The ZBI is empty other than the boilerplate cmdline, and does not
      # contain a ZBI-bootable kernel.
      args = []
      cpu = ""
      deps = []
      tags = [ "incomplete" ]
      if (defined(invoker.tags)) {
        tags += invoker.tags
      }

      # The special kernel is all that really matters for this test.
      device_types = [ "QEMU" ]
      qemu_kernel = ":$executable_target"

      # Set a short timeout since the tests don't necessarily shut down QEMU
      # after printing the success string.
      timeout = qemu_short_timeout
    }

    group(main_target) {
      testonly = true
      forward_variables_from(invoker, [ "visibility" ])
      public_deps = [ ":$zbi_target($qemu_environment)" ]
    }
  }

  # TODO(fxbug.dev/57245): We provide a dummy resource to contrive 'completeness'
  # in the following ZBI tests, which is a requirement for bootability under the
  # current policy of zedboot, gigaboot, and the boot-shims using the old
  # `zbi_check`. Once that is no longer a requirement, remove this target.
  generated_resource("dummy.txt") {
    testonly = true
    visibility = [ "./*" ]
    contents = "This space is intentionally left blank."
    outputs = [ "$target_gen_dir/dummy.txt" ]
  }

  # Build a ZBI test that uses the physboot framework.
  template("phys_zbi_test") {
    if (defined(invoker.test_deps)) {
      test_deps = invoker.test_deps
    } else {
      test_deps = [ ":$target_name.executable" ]
      zbi_executable("$target_name.executable") {
        visibility = [ ":*" ]
        testonly = true
        deps = []
        forward_variables_from(invoker,
                               "*",
                               [
                                 "target_name",
                                 "test_deps",
                                 "timeout",
                               ])
        deps += [ ":zbi-test-main" ]
      }
    }

    zbi_test(target_name) {
      args = []
      deps = test_deps + [ ":dummy.txt" ]

      # TODO(mcgrathr): enable on hardware too
      device_types = [
        "AEMU",
        "QEMU",
      ]

      if (defined(invoker.timeout)) {
        if (invoker.timeout != false) {
          timeout = invoker.timeout
        }
      } else {
        # Set a short timeout since the tests don't reliably reboot the machine.
        timeout = qemu_short_timeout
      }
    }
  }

  # Build both a phys_qemu_test() and zbi_executable()/zbi_test() from the
  # same sources.
  #
  # Generates a target with a name of the form "qemu-xxx" for the QEMU test,
  # and "zbi-xxx" for the ZBI test.
  template("common_test") {
    phys_qemu_test("qemu-$target_name") {
      visibility = [ ":*" ]
      forward_variables_from(invoker, "*", [ "target_name" ])
    }

    phys_zbi_test("zbi-$target_name") {
      visibility = [ ":*" ]
      forward_variables_from(invoker, "*", [ "target_name" ])
    }

    group(target_name) {
      testonly = true
      deps = [
        ":qemu-$target_name",
        ":zbi-$target_name",
      ]
    }
  }

  common_test("hello-world-test") {
    sources = [ "hello-world-test.cc" ]
    deps = [
      ":test-main",
      "//zircon/kernel/lib/libc",
    ]
  }

  common_test("backtrace-test") {
    sources = [ "backtrace-test.cc" ]
    deps = [
      ":test-main",
      "//zircon/kernel/lib/arch",
      "//zircon/kernel/lib/libc",
    ]
  }

  # Ideally we'd test all four combinations on arm64 and both combinations on
  # x86.  But the common library code is always compiled with shadow-call-stack
  # on arm64 so we can't disable the ABI support for it and with safe-stack on
  # x86 so we can't disable the ABI support for it there.  The start.S code only
  # enables extra stack support conditionally so as not to waste space, so there
  # isn't a good way to test non-default configurations.
  common_test("phys-unittests") {
    sources = [
      "phys-unittests.cc",
      "stack-tests.cc",
    ]
    deps = [
      ":test-main",
      "//zircon/kernel/lib/arch/test:kernel-tests",
      "//zircon/kernel/lib/libc",
      "//zircon/kernel/lib/unittest",
      "//zircon/kernel/tests",
    ]
  }

  common_test("memory-test") {
    sources = [ "phys-memory-test.cc" ]
    deps = [
      ":test-main",
      "..:allocation",
      "//zircon/kernel/lib/ktl",
      "//zircon/kernel/lib/libc",
    ]
  }

  zbi_input("decompress-test-data") {
    visibility = [ ":*" ]
    testonly = true
    type = "ramdisk"
    args = [
      "--compressed=zstd.max",
      "--entry=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
    ]
  }

  # Test the zbitl decompression code.
  #
  # This requires a zbi_input, so we only run it as a ZBI test.
  phys_zbi_test("zbi-decompress-test") {
    sources = [ "decompress-test.cc" ]
    deps = [
      ":test-main",
      "..:allocation",
      "..:zbi-memory",
      "..:zbitl-allocation",
      "//zircon/kernel/lib/ktl",
      "//zircon/kernel/lib/libc",
      "//zircon/system/ulib/zbitl",
      "//zircon/system/ulib/zxc",
    ]
    data_deps = [ ":decompress-test-data" ]
  }

  zbi_executable("chain-load-test") {
    visibility = [ ":*" ]
    testonly = true
    sources = [ "chain-load-test.cc" ]
    deps = [
      ":zbi-test-main",
      "..:allocation",
      "..:boot-zbi",
      "..:zbi-memory",
      "..:zbitl-allocation",
      "//zircon/kernel/lib/ktl",
      "//zircon/kernel/lib/libc",
      "//zircon/system/ulib/zbitl",
      "//zircon/system/ulib/zxc",
    ]
  }

  phys_zbi_test("zbi-chain-load-hello-world-test") {
    test_deps = [
      ":chain-load-hello-world-test-data",
      ":chain-load-test",
    ]
  }

  zbi_input("chain-load-hello-world-test-data") {
    visibility = [ ":*" ]
    testonly = true
    type = "ramdisk"
    args = [ "--compressed=zstd.max" ]
    deps = [ ":zbi-hello-world-test.executable" ]
    sources = get_target_outputs(deps[0])
  }

  phys_zbi_test("zbi-chain-load-core-tests") {
    test_deps = [
      ":chain-load-core-tests-data",
      ":chain-load-test",
    ]

    # Once it chain-loads Zircon, it will shut down by itself, but not
    # necessarily really quickly since the tests take a little while to run.
    timeout = false
  }

  zbi_input("chain-load-core-tests-data") {
    visibility = [ ":*" ]
    testonly = true
    type = "ramdisk"
    args = [ "--compressed=zstd.max" ]
    deps = [ "//zircon/system/utest/core:core-tests.zbi($default_toolchain)" ]
    sources = [ get_label_info(deps[0], "target_out_dir") + "/core-tests.zbi" ]
  }

  group("test") {
    testonly = true
    deps = [
      ":backtrace-test",
      ":hello-world-test",
      ":phys-unittests",
      ":zbi-decompress-test",
      ":zbi-memory-test",
      "code-patching",
    ]
    if (current_cpu == "arm64") {
      deps += [
        ":zbi-chain-load-core-tests",
        ":zbi-chain-load-hello-world-test",
      ]
    }
    if (current_cpu == "x64") {
      deps += [ ":qemu-memory-test" ]
    }
  }
} else {  # current_toolchain == default_toolchain
  import("//src/bringup/lib/mexec/testing/zbi_test.gni")

  # We create mexec-chainloading variations of all of the phys ZBI tests.
  test_deps = []
  foreach(test,
          [
            "zbi-backtrace-test",
            "zbi-hello-world-test",
            "zbi-memory-test",
            "zbi-phys-unittests",
            "zbi-decompress-test",
          ]) {
    mexec_zbi_test("mexec-$test") {
      child_zbi = ":$test(//zircon/kernel/phys:kernel.phys_$current_cpu)"
      child_zbi_file =
          get_label_info(child_zbi, "target_out_dir") + "/$test.zbi"
    }

    test_deps += [ ":mexec-$test" ]
  }

  group("test") {
    testonly = true
    deps =
        [ ":test(//zircon/kernel/phys:kernel.phys_$current_cpu)" ] + test_deps
  }
}
