# 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("//build/rust/rustc_library.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")

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

  # Only for internal use.
  visibility = [
    "//src/session/*",
    "//src/sys/component_manager/*",
    "//src/sys/component_manager_for_test/*",
  ]

  deps = [
    "//garnet/lib/rust/cm_fidl_translator",
    "//garnet/lib/rust/cm_fidl_validator",
    "//garnet/lib/rust/cm_rust",
    "//garnet/lib/rust/files_async",
    "//garnet/lib/rust/io_util",
    "//sdk/fidl/fuchsia.component:fuchsia.component-rustc",
    "//sdk/fidl/fuchsia.component.runner:fuchsia.component.runner-rustc",
    "//sdk/fidl/fuchsia.data:fuchsia.data-rustc",
    "//sdk/fidl/fuchsia.process.lifecycle:fuchsia.process.lifecycle-rustc",
    "//sdk/fidl/fuchsia.security.resource:fuchsia.security.resource-rustc",
    "//sdk/fidl/fuchsia.sys:fuchsia.sys-rustc",
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc",
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc",
    "//src/lib/by_addr:by_addr",
    "//src/lib/error/clonable_error",
    "//src/lib/fdio/rust:fdio",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-runtime",
    "//src/lib/fuchsia-url",
    "//src/lib/process_builder",
    "//src/lib/storage/vfs/rust:vfs",
    "//src/lib/trace/rust:trace",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/lib/zircon/rust:fuchsia-zircon-status",
    "//src/lib/zircon/rust:fuchsia-zircon-sys",
    "//src/sys/lib/directory_broker",
    "//src/sys/lib/library_loader",
    "//src/sys/lib/runner",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:byteorder",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:lazy_static",
    "//third_party/rust_crates:log",
    "//third_party/rust_crates:maplit",
    "//third_party/rust_crates:matches",
    "//third_party/rust_crates:parking_lot",
    "//third_party/rust_crates:rand",
    "//third_party/rust_crates:tempfile",
    "//third_party/rust_crates:thiserror",
    "//third_party/rust_crates:url",
    "//third_party/rust_crates:void",
    "//zircon/system/fidl/fuchsia-boot:fuchsia-boot-rustc",
    "//zircon/system/fidl/fuchsia-io:fuchsia-io-rustc",
    "//zircon/system/fidl/fuchsia-io2:fuchsia-io2-rustc",
    "//zircon/system/fidl/fuchsia-process:fuchsia-process-rustc",

    # This is a 'logical' test-only dep, in that it's only used in the
    # model::testing helpers, but that module is currently included in the main
    # library (rather than being guarded with '#[cfg(test)]') to allow use in
    # separate integration test targets.
    "//garnet/examples/fidl/services:echo-rustc",
  ]

  non_rust_deps = [
    "//zircon/public/lib/trace",
    "//zircon/public/lib/trace-provider-with-fdio",
  ]

  # Test-only deps. Prefer adding deps used only in tests here instead of
  # above, which has the benefit of keeping unneeded deps out of the production
  # binary and allows depending on 'testonly' targets.
  test_deps = [
    "//src/lib/process_builder:test-util-fidl-rustc",
    "//src/sys/lib/directory_broker",
  ]

  # TODO(47215): Fix the leaks and remove this.
  non_rust_deps += [ "//build/config/sanitizers:suppress-lsan.DO-NOT-USE-THIS" ]
}

rustc_binary("bin") {
  name = "component_manager"
  with_unit_tests = true
  edition = "2018"
  force_opt = "z"

  # Component manager must always be small (even in debug builds) since it
  # is part of the Zircon boot image.
  #
  # We use a Thin LTO, which provides a ~65% decrease in binary size, albeit at
  # the cost of a ~5x increase in compile wall time (or roughly 10 seconds on
  # a 2018-era workstation). Fat LTO provides an even smaller binary (~70%
  # decrease from no-LTO), but is single threaded, requiring ~6x more wall time
  # to build (or roughly 60 seconds on a 2018-era workstation).
  configs += [ "//build/config/lto:thinlto" ]
  configs -= [ "//build/config/lto:thinlto" ]
  configs += [ "//build/config/lto:thinlto" ]

  deps = [
    ":lib",
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-runtime",
    "//src/lib/storage/pseudo-fs",
    "//src/lib/trace/rust:trace-provider",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:log",
    "//third_party/rust_crates:thiserror",
    "//zircon/system/fidl/fuchsia-io:fuchsia-io-rustc",
    "//zircon/system/fidl/fuchsia-io2:fuchsia-io2-rustc",
  ]
}

# This manifest is consumed by the ZBI rule in //build/images to add component_manager to bootfs.
generate_manifest("component_manager.bootfs") {
  deps = [ ":bin" ]

  args = [ "--entry=bin/component_manager=" +
           rebase_path("$root_build_dir/component_manager", root_build_dir) ]
}

# Note that this package and the component it contains wrap component_manager
# as a v1 Component for interactive testing purposes through the shell. This
# will eventually go away.
package("component_manager") {
  deps = [ ":bin" ]
  binaries = [
    {
      name = "component_manager"
    },
  ]
  meta = [
    {
      path = rebase_path("meta/component_manager.cmx")
      dest = "component_manager.cmx"
    },
  ]
}

test_package("component_manager_tests") {
  rootjob_svc = true
  rootresource_svc = true

  deps = [
    ":lib_test",
    "//examples/components/basic:hello_world_bin",
    "//garnet/examples/fidl/echo_server_rust:echo_server_rust_bin",
    "//sdk/fidl/fuchsia.component:fuchsia.component-rustc",
    "//src/lib/process_builder:root_job_test_runner",
    "//src/lib/process_builder:test_util",
  ]

  tests = [
    {
      name = "component_manager_lib_lib_test"
      dest = "component_manager_tests"
      environments = basic_envs
    },
    {
      name = "component_manager_lib_lib_test"
      dest = "component_manager_boot_env_tests"
      environments = basic_envs
    },
  ]

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

  meta = [
    {
      path = rebase_path("meta/component_manager_tests_hello_world.cml")
      dest = "component_manager_tests_hello_world.cm"
    },
    {
      path = rebase_path("//garnet/examples/fidl/meta/echo_server.cmx")
      dest = "echo_server_rust.cmx"
    },
  ]

  binaries = [
    {
      name = "hello_world"
    },
    {
      name = "process_builder_test_util"
    },
    {
      name = "root_job_test_runner"
    },
    {
      name = "echo_server_rust"
      dest = "bin/echo_server"
    },
  ]
}

group("tests") {
  testonly = true

  deps = [
    ":component_manager",
    ":component_manager_tests",
    "src/elf_runner/tests",
    "tests",
  ]
}
