# 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.

assert(is_fuchsia, "These targets are only compiled in the fuchsia toolchain.")

import("//build/components.gni")

group("components-routing-example") {
  testonly = true
  deps = [
    ":components-routing-example-cpp",
    ":components-routing-example-rust",
    "with_subpackages:subpackaged-echo-realm",
  ]
}

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

fuchsia_package("components-routing-example-rust") {
  deps = [
    ":echo_realm",
    "rust/echo_client:echo_client_cmp",
    "rust/echo_server:echo_server_cmp",
  ]
}

fuchsia_package("components-routing-example-cpp") {
  deps = [
    ":echo_realm",
    "cpp/echo_client:echo_client_cmp",
    "cpp/echo_server:echo_server_cmp",
  ]
}

group("hermetic_tests") {
  testonly = true
  deps = [
    "integration_tests/cpp:echo_integration_test_cpp",
    "integration_tests/rust:echo_integration_test_rust",
    "with_subpackages:hermetic_tests",
  ]
}
