# Copyright 2017 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/config.gni")
import("//build/package.gni")
import("//build/rust/rustc_binary.gni")
import("//build/testing/environments.gni")

group("system") {
  testonly = true
  deps = [
    ":config",
    ":system_recovery",
    ":tests",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":system_recovery",
    ":system_recovery_tests",
  ]
}

rustc_binary("bin") {
  name = "system_recovery"
  edition = "2018"
  with_lto = "fat"
  with_unit_tests = true

  deps = [
    "//garnet/public/rust/carnelian",
    "//garnet/public/rust/fuchsia-async",
    "//garnet/public/rust/fuchsia-framebuffer",
    "//third_party/rust_crates:failure",
    "//third_party/rust_crates:futures-preview",
    "//third_party/rust_crates:rouille",
  ]
}

config_data("config") {
  for_pkg = "sysmgr"
  sources = [
    "config/recovery.config",
  ]
  outputs = [
    "recovery.config",
  ]
}

package("system_recovery") {
  meta = [
    {
      path = rebase_path("meta/system_recovery.cmx")
      dest = "system_recovery.cmx"
    },
  ]

  deps = [
    ":bin",
  ]

  binaries = [
    {
      name = "system_recovery"
      path = "rust_crates/system_recovery"
    },
  ]
}

package("system_recovery_tests") {
  testonly = true
  deps = [
    ":bin",
  ]

  tests = [
    {
      name = "system_recovery_bin_test"
      environments = basic_envs
    },
  ]
}
