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

# This file was generated by the `fx create` command. The template
# is located at `//tools/create/templates/component-default/BUILD.gn.tmpl-rust`.

import("//build/components.gni")
import("//build/rust/rustc_binary.gni")
import("//src/sys/core/build/core_shard.gni")

group("progress-ui") {
  deps = [ ":package" ]
}

rustc_binary("bin") {
  output_name = "progress-ui"
  edition = "2018"

  # Generates a GN target for unit-tests with the label `bin_test`, and
  # a binary named `progress-ui_bin_test`.
  with_unit_tests = false

  deps = [
    "//sdk/fidl/fuchsia.recovery.ui:fuchsia.recovery.ui_rust",
    "//src/graphics/lib/compute/rive-rs",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia",
    "//src/lib/fuchsia-async",
    "//src/lib/ui/carnelian",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/recovery/lib/recovery-ui",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:euclid",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:rand",
    "//third_party/rust_crates:tracing",
  ]
  sources = [ "src/main.rs" ]
}

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

fuchsia_package("package") {
  package_name = "progress-ui"
  deps = [
    ":component",
    "//src/recovery/system:recovery_logo",
    "//src/recovery/system:roboto_regular",
  ]
}

# The core realm shard to be used by example users
core_shard("progress-ui-core-shard") {
  shard_file = "meta/progress_ui.core_shard.cml"
}
