# 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("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_library.gni")
import("//src/session/build/session_manager.gni")
import("//src/sys/core/build/core_shard.gni")
import("//third_party/cobalt/metrics_registry.gni")

core_shard("workstation_core_shard") {
  shard_file = "meta/workstation.core_shard.cml"
}

metrics_registry("session_framework_metrics_registry") {
  # This must match the ID of our Cobalt project as specified in:
  # third_party/cobalt_config/projects.yaml
  project_id = 2550112954
  generate_rust = true
  namespace = "cobalt_registry"
  generate_binarypb = false
}

rustc_library("lib") {
  name = "session_manager_lib"
  with_unit_tests = true
  edition = "2018"

  visibility = [
    "//src/session/bin/session_manager/*",
    "//src/session/examples/*",
    "//src/session/tests/session_manager/*",
    "//src/session/tools/*",
  ]

  deps = [
    ":session_framework_metrics_registry_rustlib",
    "//sdk/fidl/fuchsia.component:fuchsia.component-rustc",
    "//sdk/fidl/fuchsia.component.decl:fuchsia.component.decl-rustc",
    "//sdk/fidl/fuchsia.element:fuchsia.element-rustc",
    "//sdk/fidl/fuchsia.input.injection:fuchsia.input.injection-rustc",
    "//sdk/fidl/fuchsia.input.report:fuchsia.input.report-rustc",
    "//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
    "//sdk/fidl/fuchsia.metrics:fuchsia.metrics-rustc",
    "//sdk/fidl/fuchsia.session:fuchsia.session-rustc",
    "//src/lib/fdio/rust:fdio",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/session/fidl/fuchsia.sessionmanager:fuchsia.sessionmanager-rustc",
    "//src/session/lib/realm_management",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:thiserror",
    "//third_party/rust_crates:tracing",
  ]

  test_deps = [
    "//src/lib/fuchsia",
    "//src/lib/test_util",
    "//src/lib/ui/fuchsia-scenic",
    "//src/session/testing",
    "//third_party/rust_crates:assert_matches",
    "//third_party/rust_crates:lazy_static",
  ]

  sources = [
    "src/cobalt.rs",
    "src/lib.rs",
    "src/session_manager.rs",
    "src/startup.rs",
  ]
}

fuchsia_component_manifest("manifest") {
  component_name = "session_manager"
  manifest = "meta/session_manager.cml"
  restricted_features = [ "structured_config" ]
}

fuchsia_structured_config_rust_lib("session_manager_config") {
  cm_label = ":manifest"
}

rustc_binary("bin") {
  name = "session_manager"
  edition = "2018"

  deps = [
    ":lib",
    ":session_manager_config",
    "//sdk/fidl/fuchsia.component:fuchsia.component-rustc",
    "//src/lib/fuchsia",
    "//src/lib/fuchsia-component",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:tracing",
  ]

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

fuchsia_component("session_manager_comp") {
  cm_label = ":manifest"
  deps = [ ":bin" ]
}

fuchsia_package("session_manager") {
  deps = [ ":session_manager_comp" ]

  # This package's configuration is supplied by product assembly's config.
  validate_structured_config = false
}

fuchsia_unittest_package("session_manager_tests") {
  deps = [ ":lib_test" ]

  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
}

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