# 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/bazel/bazel_inputs.gni")
import("//build/components.gni")
import("//build/rust/rustc_binary.gni")

# TODO(https://fxbug.dev/42169911): add some tests.  Add these to //src/session/examples:tests
# group("tests") {}

rustc_binary("bin") {
  output_name = "tiles-session"
  with_unit_tests = true
  edition = "2021"

  deps = [
    ":tiles_config",
    "//sdk/fidl/fuchsia.element:fuchsia.element_rust",
    "//sdk/fidl/fuchsia.session.scene:fuchsia.session.scene_rust",
    "//sdk/fidl/fuchsia.ui.composition:fuchsia.ui.composition_rust",
    "//sdk/fidl/fuchsia.ui.views:fuchsia.ui.views_rust",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/ui/fuchsia-scenic",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:tracing",
  ]

  test_deps = []

  sources = [ "src/main.rs" ]
}

fuchsia_component_manifest("tiles_manifest") {
  manifest = "meta/tiles-session.cml"
  component_name = "tiles-session"
}

fuchsia_structured_config_rust_lib("tiles_config") {
  cm_label = ":tiles_manifest"
}

fuchsia_component("tiles_component") {
  cm_label = ":tiles_manifest"
  deps = [ ":bin" ]
}

fuchsia_structured_config_values("tiles_config_values") {
  cm_label = ":tiles_manifest"
  values_source = "//src/ui/bin/tiles-session/meta/config.json5"
}

fuchsia_package("tiles-session") {
  package_name = "tiles-session"
  subpackages = [ "//src/session/bin/element_manager" ]

  deps = [
    ":tiles_component",
    ":tiles_config_values",
    ":tiles_manifest",
  ]
}

# Make `tiles_session` available to products assembled with Bazel.
#
# TODO(https://fxbug.dev/42073448): Make this less verbose.
fuchsia_package_archive("tiles_session_archive") {
  package = ":tiles-session"
}

bazel_input_resource("tiles_session_bazel_inputs") {
  deps = [ ":tiles_session_archive" ]
  sources = get_target_outputs(":tiles_session_archive")
  outputs = [ "{{source_file_part}}" ]
}
