# Copyright 2015 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("//src/sys/build/components.gni")

fuchsia_component("component_v1") {
  component_name = "root_presenter"
  manifest = "meta/root_presenter.cmx"
  deps = [ ":bin" ]
}

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

fuchsia_package("root_presenter") {
  deps = [
    ":component_v1",
    ":component_v2",
  ]
}

group("configs") {
  deps = [ ":root_presenter_config" ]
}

config_data("root_presenter_config") {
  for_pkg = "sysmgr"
  outputs = [ "root_presenter.config" ]
  sources = [ "services.config" ]
}

group("tests") {
  testonly = true

  deps = [ "tests" ]
}

executable("bin") {
  output_name = "root_presenter"

  sources = [ "main.cc" ]

  deps = [
    ":lib",
    "//sdk/lib/sys/inspect/cpp",
    "//src/lib/fxl",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/trace",
    "//zircon/system/ulib/trace-provider:trace-provider-with-fdio",
  ]

  defines = [ "GLM_ENABLE_EXPERIMENTAL" ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

source_set("lib") {
  sources = [
    "app.cc",
    "app.h",
    "injector.cc",
    "injector.h",
    "inspect.cc",
    "inspect.h",
    "presentation.cc",
    "presentation.h",
  ]

  public_deps = [
    ":factory_reset_manager",
    ":focus_dispatcher",
    "//sdk/fidl/fuchsia.accessibility",
    "//sdk/fidl/fuchsia.input.virtualkeyboard",
    "//sdk/fidl/fuchsia.media.sounds",
    "//sdk/fidl/fuchsia.recovery",
    "//sdk/fidl/fuchsia.recovery.ui",
    "//sdk/fidl/fuchsia.ui.brightness",
    "//sdk/fidl/fuchsia.ui.gfx",
    "//sdk/fidl/fuchsia.ui.input",
    "//sdk/fidl/fuchsia.ui.input.accessibility",
    "//sdk/fidl/fuchsia.ui.keyboard.focus",
    "//sdk/fidl/fuchsia.ui.pointerinjector",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/fidl/fuchsia.ui.policy.accessibility",
    "//sdk/fidl/fuchsia.ui.scenic",
    "//sdk/fidl/fuchsia.ui.views",
    "//sdk/fidl/fuchsia.ui.views.accessibility",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/sys/inspect/cpp",
    "//sdk/lib/ui/scenic/cpp",
    "//src/lib/ui/input",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/inspect",
  ]

  deps = [
    ":color_transform",
    ":constants",
    ":displays",
    ":media_buttons_handler",
    ":safe_presenter",
    ":virtual_keyboard",
    "//garnet/public/lib/fostr/fidl/fuchsia.input.report",
    "//garnet/public/lib/fostr/fidl/fuchsia.ui.input",
    "//sdk/fidl/fuchsia.accessibility",
    "//sdk/fidl/fuchsia.ui.gfx",
    "//sdk/fidl/fuchsia.ui.input",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/fidl/fuchsia.ui.views",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//src/lib/ui/input",
    "//src/ui/lib/glm_workaround",
    "//src/ui/lib/input_report_reader",
    "//zircon/system/ulib/trace",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

source_set("displays") {
  sources = [
    "displays/display_configuration.cc",
    "displays/display_configuration.h",
    "displays/display_metrics.h",
    "displays/display_model.cc",
    "displays/display_model.h",
  ]

  deps = [
    "//sdk/fidl/fuchsia.ui.policy",
    "//src/lib/fxl",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

source_set("media_buttons_handler") {
  sources = [
    "media_buttons_handler.cc",
    "media_buttons_handler.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.ui.input",
    "//sdk/fidl/fuchsia.ui.policy",
  ]
  deps = [
    ":constants",
    "//garnet/public/lib/fostr/fidl/fuchsia.input.report",
    "//garnet/public/lib/fostr/fidl/fuchsia.ui.input",
    "//sdk/lib/sys/cpp",
    "//src/lib/ui/input",
  ]
}

source_set("focus_dispatcher") {
  sources = [
    "focus_dispatcher.cc",
    "focus_dispatcher.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.ui.focus",
    "//sdk/fidl/fuchsia.ui.keyboard.focus",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
  ]
}

source_set("factory_reset_manager") {
  sources = [
    "factory_reset_manager.cc",
    "factory_reset_manager.h",
    "media_retriever.cc",
    "media_retriever.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.media.sounds",
    "//sdk/fidl/fuchsia.recovery",
    "//sdk/fidl/fuchsia.recovery.policy",
    "//sdk/fidl/fuchsia.recovery.ui",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
  ]

  deps = [
    ":constants",
    "//garnet/public/lib/fostr/fidl/fuchsia.input.report",
    "//garnet/public/lib/fostr/fidl/fuchsia.ui.input",
    "//sdk/fidl/fuchsia.media",
    "//sdk/fidl/fuchsia.ui.input",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/lib/fdio",
    "//src/lib/files",
  ]
}

source_set("color_transform") {
  sources = [
    "color_transform_handler.cc",
    "color_transform_handler.h",
  ]

  public_deps = [ "//sdk/lib/sys/cpp" ]

  deps = [
    ":safe_presenter",
    "//sdk/fidl/fuchsia.accessibility",
    "//sdk/fidl/fuchsia.ui.brightness",
    "//sdk/fidl/fuchsia.ui.gfx",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/fidl/fuchsia.ui.scenic",
    "//sdk/lib/syslog/cpp",
    "//sdk/lib/ui/scenic/cpp",
  ]
}

source_set("safe_presenter") {
  sources = [
    "safe_presenter.cc",
    "safe_presenter.h",
  ]

  public_deps = [ "//sdk/lib/sys/cpp" ]

  deps = [
    "//sdk/lib/syslog/cpp",
    "//sdk/lib/ui/scenic/cpp",
  ]
}

source_set("constants") {
  sources = [
    "constants.cc",
    "constants.h",
  ]
  deps = [ "//src/lib/files" ]
}

source_set("virtual_keyboard") {
  sources = [
    "virtual_keyboard_controller.cc",
    "virtual_keyboard_controller.h",
    "virtual_keyboard_controller_creator.cc",
    "virtual_keyboard_controller_creator.h",
  ]

  deps = [
    "//sdk/fidl/fuchsia.input.virtualkeyboard",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/syslog/cpp",
  ]
}
