# 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("//build/components.gni")
import("//src/sys/core/build/core_shard.gni")

group("packages") {
  deps = [
    ":debian_guest_manager",
    ":termina_guest_manager",
    ":zircon_guest_manager",
  ]
}

group("tests") {
  testonly = true
  deps = [ ":guest_manager_test" ]
}

source_set("lib") {
  visibility = [ ":*" ]

  sources = [
    "guest_manager.cc",
    "guest_manager.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.virtualization",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//src/virtualization/lib/guest_config",
  ]
}

executable("bin") {
  output_name = "guest_manager"

  sources = [ "guest_manager_main.cc" ]

  deps = [
    ":lib",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

fuchsia_package("zircon_guest_manager") {
  deps = [ ":zircon_guest_manager_cmp" ]
}

fuchsia_component("zircon_guest_manager_cmp") {
  manifest = "meta/zircon_guest_manager.cml"
  deps = [ ":bin" ]
  component_name = "zircon_guest_manager"
}

fuchsia_package("debian_guest_manager") {
  deps = [ ":debian_guest_manager_cmp" ]
}

fuchsia_component("debian_guest_manager_cmp") {
  manifest = "meta/debian_guest_manager.cml"
  deps = [ ":bin" ]
  component_name = "debian_guest_manager"
}

fuchsia_package("termina_guest_manager") {
  deps = [ ":termina_guest_manager_cmp" ]
}

fuchsia_component("termina_guest_manager_cmp") {
  manifest = "meta/termina_guest_manager.cml"
  deps = [ ":bin" ]
  component_name = "termina_guest_manager"
}

executable("guest_manager_test_bin") {
  testonly = true

  sources = [ "guest_manager_test.cc" ]

  deps = [
    ":lib",
    "//sdk/lib/sys/cpp/testing:unit",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/loop_fixture",
    "//src/testing/fidl:placeholders",
  ]
}

resource("test_configs") {
  sources = [
    "test_files/bad_schema_invalid_field.cfg",
    "test_files/valid_guest.cfg",
  ]

  outputs = [ "data/configs/{{source_file_part}}" ]
}

fuchsia_unittest_package("guest_manager_test") {
  deps = [
    ":guest_manager_test_bin",
    ":test_configs",
  ]

  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
}

core_shard("debian_core_shard") {
  shard_file = "meta/debian_guest_manager.core_shard.cml"
}

core_shard("termina_core_shard") {
  shard_file = "meta/termina_guest_manager.core_shard.cml"
}

core_shard("zircon_core_shard") {
  shard_file = "meta/zircon_guest_manager.core_shard.cml"
}
