# 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/package.gni")
import("//build/rust/rustc_binary.gni")
import("//src/session/build/session_config.gni")

group("tests") {
  testonly = true
  deps = [ ":workstation_session_tests" ]
}

rustc_binary("bin") {
  name = "workstation_session"
  with_unit_tests = true
  edition = "2018"

  deps = [
    "//sdk/fidl/fuchsia.component:fuchsia.component-rustc",
    "//sdk/fidl/fuchsia.input.report:fuchsia.input.report-rustc",
    "//sdk/fidl/fuchsia.session:fuchsia.session-rustc",
    "//sdk/fidl/fuchsia.sys:fuchsia.sys-rustc",
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc",
    "//sdk/fidl/fuchsia.ui.app:fuchsia.ui.app-rustc",
    "//sdk/fidl/fuchsia.ui.gfx:fuchsia.ui.gfx-rustc",
    "//sdk/fidl/fuchsia.ui.input:fuchsia.ui.input-rustc",
    "//sdk/fidl/fuchsia.ui.input2:fuchsia.ui.input2-rustc",
    "//sdk/fidl/fuchsia.ui.policy:fuchsia.ui.policy-rustc",
    "//sdk/fidl/fuchsia.ui.scenic:fuchsia.ui.scenic-rustc",
    "//sdk/fidl/fuchsia.ui.shortcut:fuchsia.ui.shortcut-rustc",
    "//sdk/fidl/fuchsia.ui.views:fuchsia.ui.views-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/ui/fuchsia-scenic",
    "//src/lib/ui/input-synthesis",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/session/lib/element_management",
    "//src/session/lib/input",
    "//src/session/lib/scene_management",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:rand",
  ]

  test_deps = []
}

package("workstation_session") {
  deps = [ ":bin" ]

  binaries = [
    {
      name = "workstation_session"
    },
  ]

  meta = [
    {
      path = rebase_path("meta/workstation_session.cml")
      dest = "workstation_session.cm"
    },
  ]
}

package("workstation_session_tests") {
  testonly = true

  deps = [
    ":bin",
    ":bin_test",
    "//src/sys/test_adapters/rust",
  ]

  binaries = [
    {
      name = "workstation_session"
    },
    {
      name = "rust_test_adapter"
    },
  ]

  meta = [
    {
      path = "meta/workstation_session_bin_test.cml"
      dest = "workstation_session_bin_test.cm"
    },
  ]

  tests = [
    {
      name = "workstation_session_bin_test"
    },
  ]
}

session_config("session_config") {
  config = "//src/experiences/session_shells/ermine/session/session_config.json"
}
