# Copyright 2019 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("ui") {
  deps = [
    "a11y",
    "bin",
    "examples",
    "input",
    "scenic",
    "tools",
    "wayland",
  ]
}

group("tests") {
  testonly = true

  deps = [
    "a11y:tests",
    "backlight:tests",
    "bin:tests",
    "examples:tests",
    "input:tests",
    "lib:tests",
    "light:tests",
    "scenic:tests",
    "tests",
    "tools:tests",
    "wayland:tests",
  ]
}

fuchsia_component("ui-component") {
  component_name = "ui"
  manifest = "meta/ui.cml"
}

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

fuchsia_package("ui_pkg") {
  package_name = "ui"

  deps = [ ":ui-component" ]
}

fuchsia_component("ui-with-root-presenter-component") {
  component_name = "ui-with-root-presenter"
  manifest = "meta/ui_with_root_presenter.cml"
}

core_shard("ui-with-root-presenter-core-shard") {
  shard_file = "meta/ui_with_root_presenter.core_shard.cml"
}

fuchsia_package("ui_with_root_presenter_pkg") {
  package_name = "ui"

  deps = [ ":ui-with-root-presenter-component" ]
}

# Deprecated. Please use runtime_with_scene_manager instead.
group("workstation") {
  deps = [ ":runtime_with_scene_manager" ]
}

# runtime_with_scene_manager is the set of package dependencies typically
# desired for the construction of a product that includes UI and scene manager
# (as opposed to root presenter).
group("runtime_with_scene_manager") {
  deps = [
    ":ui_pkg",
    "a11y",
    "bin/scene_manager",
  ]
}

# Runtime_root_presenter is the set of package dependencies typically desired
# for the construction of a product that includes UI (Scenic, A11y) and root
# presenter (as opposed to scene manager).
group("runtime_with_root_presenter") {
  deps = [
    ":ui_with_root_presenter_pkg",
    "a11y",
    "bin/input-pipeline",
    "bin/input-pipeline:configs",
    "bin/root_presenter",
    "bin/root_presenter:configs",
    "scenic",
    "//src/graphics/bundles:vulkan",
    "//src/sys/activity",

    # TODO(fxbug.dev/82822): Remove after out-of-tree tests migrate to
    # text_manager.
    "bin/text:ime_service",
    "bin/text:text_manager",
  ]
}
