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

import("//build/go/go_library.gni")
import("//build/go/go_test.gni")
import("//build/testing/host_test_data.gni")

group("tests") {
  testonly = true
  deps = []
  if (host_os == "linux") {
    deps = [ ":emulator_tests($host_toolchain)" ]
  }
}

# Currently, we only support working with QEMU or FEMU on Linux.
if (is_linux) {
  # The infrastructure does not provide a way for host tests to access
  # qemu, so we need to archive our own copy of qemu from the source
  # tree.
  action("archive-qemu") {
    testonly = true
    visibility = [ ":*" ]

    archive_path = "$root_out_dir/test_data/emulator/qemu.tar.gz"
    outputs = [ archive_path ]

    depfile = "${archive_path}.d"

    script = "archive.py"

    args = [
      "--src",
      rebase_path("//prebuilt/third_party/qemu/${host_platform}"),
      "--dst",
      rebase_path(archive_path, root_build_dir),
      "--depfile",
      rebase_path(depfile, root_build_dir),
    ]
  }

  action("archive-femu") {
    testonly = true
    visibility = [ ":*" ]

    archive_path = "$root_out_dir/test_data/emulator/femu.tar.gz"
    outputs = [ archive_path ]

    depfile = "${archive_path}.d"

    script = "archive.py"

    args = [
      "--src",
      rebase_path("//prebuilt/third_party/aemu/${host_platform}"),
      "--dst",
      rebase_path(archive_path, root_build_dir),
      "--depfile",
      rebase_path(depfile, root_build_dir),
    ]
  }

  host_test_data("kernel") {
    visibility = [ ":*" ]

    if (target_cpu == "arm64") {
      kernel_binary = "qemu-boot-shim.bin"
      deps = [ "//zircon/kernel/target/arm64/boot-shim:qemu" ]
    } else if (target_cpu == "x64") {
      kernel_binary = "multiboot.bin"
      deps = [ "//zircon/kernel/target/pc/multiboot" ]
    } else {
      assert(false, "CPU not supported")
    }

    sources = [ "$root_build_dir/$kernel_binary" ]
  }

  generated_file("buildinfo.ini") {
    testonly = true
    contents = [
      # The path to images.json relative to the test data directory. This must be relative
      # the test data directory specifically, rather than the build directory because the
      # build directory is not guaranteed to exist at runtime, especially on CI.
      "image_manifest_path=" + rebase_path("$root_build_dir/images.json",
                                           "$root_out_dir/test_data/emulator"),
      "target_cpu=$target_cpu",
    ]
    outputs = [ "$root_out_dir/test_data/emulator/buildinfo.ini" ]
  }

  host_test_data("test_data") {
    sources = get_target_outputs(":buildinfo.ini") +
              get_target_outputs(":archive-qemu") +
              get_target_outputs(":archive-femu") +
              [
                # Any files referenced by :buildinfo.ini should be listed here.
                "$root_build_dir/images.json",
              ]

    deps = [
      ":archive-femu",
      ":archive-qemu",
      ":buildinfo.ini",
      ":kernel",
    ]
  }

  go_library("emulator") {
    testonly = true
    non_go_deps = [
      ":archive-femu",
      ":archive-qemu",
      ":test_data",
    ]
    sources = [
      "emulator.go",
      "emulator_test.go",
    ]
    deps = [
      "//tools/qemu",
      "//tools/virtual_device",
      "//tools/virtual_device:proto",
    ]
  }

  go_test("emulator_tests") {
    gopackages = [ "go.fuchsia.dev/fuchsia/tools/emulator" ]
    deps = [ ":emulator" ]
  }
}
