# Copyright 2016 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("//peridot/build/executable_package.gni")

executable_package("user_runner") {
  meta = [
    {
      path = "meta/user_runner.cmx"
      dest = "user_runner.cmx"
    },
  ]

  sources = [
    "device_map_impl.cc",
    "device_map_impl.h",
    "user_runner.cc",
    "user_runner_impl.cc",
    "user_runner_impl.h",
  ]

  deps = [
    ":component_context",
    ":focus",
    ":presentation_provider",
    ":session_ctl",
    "//garnet/public/fidl/fuchsia.net.oldhttp",
    "//garnet/public/fidl/fuchsia.ui.policy",
    "//garnet/public/fidl/fuchsia.ui.viewsv1",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//peridot/bin/cloud_provider_firestore/fidl",
    "//peridot/bin/device_runner/cobalt",
    "//peridot/bin/ledger/fidl",
    "//peridot/bin/user_runner/agent_runner",
    "//peridot/bin/user_runner/entity_provider_runner",
    "//peridot/bin/user_runner/message_queue",
    "//peridot/bin/user_runner/puppet_master:make_production_impl",
    "//peridot/bin/user_runner/puppet_master:puppet_master_impl",
    "//peridot/bin/user_runner/puppet_master:story_command_executor",
    "//peridot/bin/user_runner/storage",
    "//peridot/bin/user_runner/storage:constants_and_utils",
    "//peridot/bin/user_runner/story_runner",
    "//peridot/lib/common:async_holder",
    "//peridot/lib/common:names",
    "//peridot/lib/common:teardown",
    "//peridot/lib/common:xdr",
    "//peridot/lib/device_info",
    "//peridot/lib/fidl:app_client",
    "//peridot/lib/fidl:array_to_string",
    "//peridot/lib/fidl:clone",
    "//peridot/lib/fidl:environment",
    "//peridot/lib/fidl:json_xdr",
    "//peridot/lib/fidl:view_host",
    "//peridot/lib/ledger_client:constants",
    "//peridot/lib/ledger_client:operations",
    "//peridot/lib/ledger_client:page_client",
    "//peridot/lib/ledger_client:status",
    "//peridot/lib/ledger_client:types",
    "//peridot/lib/rapidjson",
    "//peridot/lib/scoped_tmpfs",
    "//peridot/public/fidl/fuchsia.ledger",
    "//peridot/public/fidl/fuchsia.ledger.cloud",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/fidl/fuchsia.modular.auth",
    "//peridot/public/fidl/fuchsia.modular.internal",
    "//peridot/public/fidl/fuchsia.speech",
    "//peridot/public/lib/app_driver/cpp:app_driver",
    "//peridot/public/lib/async/cpp:operation",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/trace-provider",
  ]

  public_deps = [
    "//peridot/bin/device_runner/cobalt:generate_device_runner_config",
  ]

  resources = [
    {
      path = rebase_path(
              get_label_info(
                  "//peridot/bin/device_runner/cobalt:generate_device_runner_config",
                  "target_gen_dir") + "/cobalt_config.binproto")
      dest = "cobalt_config.binproto"
    },
  ]
}

executable_package("dev_user_shell") {
  sources = [
    "dev_user_shell.cc",
  ]

  deps = [
    "//garnet/public/fidl/fuchsia.ui.viewsv1",
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fxl",
    "//garnet/public/lib/ui/view_framework",
    "//peridot/lib/common:names",
    "//peridot/lib/fidl:array_to_string",
    "//peridot/lib/fidl:single_service_app",
    "//peridot/lib/fidl:view_host",
    "//peridot/lib/rapidjson",
    "//peridot/lib/testing:test_driver",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/app_driver/cpp",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

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

  deps = [
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//peridot/bin/user_runner/puppet_master:puppet_master_impl",
    "//zircon/public/lib/fs",
  ]
}

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

  deps = [
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//peridot/bin/ledger/fidl",
    "//peridot/bin/user_runner/agent_runner:public",
    "//peridot/bin/user_runner/entity_provider_runner",
    "//peridot/bin/user_runner/message_queue",
    "//peridot/bin/user_runner/storage:constants_and_utils",
    "//peridot/lib/fidl:array_to_string",
    "//peridot/lib/fidl:json_xdr",
    "//peridot/lib/ledger_client:operations",
    "//peridot/lib/ledger_client:page_client",
    "//peridot/lib/ledger_client:types",
    "//peridot/public/fidl/fuchsia.ledger",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/async/cpp:operation",
  ]
}

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

  deps = [
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//peridot/bin/user_runner/storage:constants_and_utils",
    "//peridot/lib/fidl:array_to_string",
    "//peridot/lib/fidl:clone",
    "//peridot/lib/fidl:json_xdr",
    "//peridot/lib/ledger_client:operations",
    "//peridot/lib/ledger_client:page_client",
    "//peridot/lib/ledger_client:types",
    "//peridot/lib/rapidjson",
    "//peridot/public/fidl/fuchsia.ledger",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/fidl/fuchsia.modular.internal",
    "//peridot/public/lib/async/cpp:operation",
  ]
}

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

  deps = [
    "//garnet/public/fidl/fuchsia.ui.policy",
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fxl",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}
