# Copyright 2021 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("//build/dist/component_manifest_resources.gni")
import("//build/rust/rustc_binary.gni")
import("//src/sys/core/build/core_shard.gni")

group("tests") {
  testonly = true
  deps = [ ":flashmap-unittests" ]
}

rustc_binary("bin") {
  output_name = "flashmap"
  with_unit_tests = true
  edition = "2018"

  configs += [ "//build/config/rust:bootfs" ]

  deps = [
    "//sdk/fidl/fuchsia.acpi.chromeos:fuchsia.acpi.chromeos-rustc",
    "//sdk/fidl/fuchsia.device:fuchsia.device-rustc",
    "//sdk/fidl/fuchsia.hardware.nand:fuchsia.hardware.nand-rustc",
    "//sdk/fidl/fuchsia.mem:fuchsia.mem-rustc",
    "//sdk/fidl/fuchsia.nand:fuchsia.nand-rustc",
    "//sdk/fidl/fuchsia.nand.flashmap:fuchsia.nand.flashmap-rustc",
    "//src/lib/diagnostics/inspect/runtime/rust",
    "//src/lib/diagnostics/inspect/rust",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-runtime",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:tracing",
  ]

  sources = [
    "src/flashmap.rs",
    "src/main.rs",
    "src/manager.rs",
    "src/util.rs",
  ]
}

component_manifest_resources("manifest") {
  sources = [ "meta/flashmap.cml" ]
}

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

fuchsia_package("flashmap") {
  deps = [ ":component" ]
}

group("bootfs") {
  deps = [
    ":bin",
    ":manifest",
  ]
}

fuchsia_unittest_package("flashmap-unittests") {
  deps = [ ":bin_test" ]
}

core_shard("flashmap-core-shard") {
  shard_file = "meta/flashmap.core_shard.cml"
}
