# Copyright 2020 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/packages/sdk_fuchsia_package.gni")
import("//build/rust/rustc_binary.gni")

rustc_binary("realm_builder_server_bin") {
  edition = "2021"
  name = "realm_builder_server"
  with_unit_tests = true
  sources = [
    "src/builtin.rs",
    "src/main.rs",
    "src/resolver.rs",
    "src/runner.rs",
  ]

  deps = [
    "//sdk/fidl/fuchsia.component:fuchsia.component_rust",
    "//sdk/fidl/fuchsia.component.decl:fuchsia.component.decl_rust",
    "//sdk/fidl/fuchsia.component.resolution:fuchsia.component.resolution_rust",
    "//sdk/fidl/fuchsia.component.runner:fuchsia.component.runner_rust",
    "//sdk/fidl/fuchsia.component.test:fuchsia.component.test_rust",
    "//sdk/fidl/fuchsia.data:fuchsia.data_rust",
    "//sdk/fidl/fuchsia.inspect:fuchsia.inspect_rust",
    "//sdk/fidl/fuchsia.io:fuchsia.io_rust",
    "//sdk/fidl/fuchsia.logger:fuchsia.logger_rust",
    "//sdk/fidl/fuchsia.mem:fuchsia.mem_rust",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/flyweights",
    "//src/lib/fuchsia",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-fs",
    "//src/lib/versioning/version-history/rust:version-history",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/lib/zircon/rust:fuchsia-zircon-status",
    "//src/storage/lib/vfs/rust:vfs",
    "//src/sys/lib/cm_fidl_validator",
    "//src/sys/lib/cm_rust",
    "//src/sys/lib/cm_types",
    "//src/sys/lib/config_encoder",
    "//src/sys/lib/fidl-fuchsia-component-abi-ext",
    "//src/sys/lib/mem_util",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:lazy_static",
    "//third_party/rust_crates:thiserror",
    "//third_party/rust_crates:tracing",
    "//third_party/rust_crates:url",
  ]
  test_deps = [
    "//src/sys/lib/cm_rust/testing",
    "//third_party/rust_crates:assert_matches",
    "//third_party/rust_crates:difference",
    "//third_party/rust_crates:maplit",
    "//third_party/rust_crates:test-case",
  ]
}

fuchsia_component("realm_builder_server_component") {
  manifest = "meta/realm_builder_server.cml"
  component_name = "realm_builder_server"
  deps = [ ":realm_builder_server_bin" ]
}

fuchsia_component("realm_with_child") {
  manifest = "meta/realm_with_child.cml"
}

fuchsia_component("a") {
  manifest = "meta/a.cml"
}

fuchsia_unittest_package("realm_builder_server_unit_tests") {
  manifest = "meta/unit-tests.cml"
  deps = [
    ":a",
    ":realm_builder_server_bin_test",
    ":realm_with_child",
  ]
}

fuchsia_package("pkg") {
  package_name = "fuchsia-component-test"
  deps = [ ":realm_builder_server_component" ]
}

sdk_fuchsia_package("realm_builder_server_sdk") {
  distribution_name = "realm_builder_server"
  package_label = ":pkg"
  category = "partner"
  expected_files_exact = [ "meta/realm_builder_server.cm" ]
  api_level_added = 15
}
