# Copyright 2018 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/testing/environments.gni")

executable("fidl_compatibility_test") {
  testonly = true

  sources = [
    "compatibility_test.cc",
  ]

  deps = [
    "//garnet/public/lib/fidl/compatibility_test:compatibility_test_service",
    "//garnet/public/lib/fidl/compatibility_test:echo_client_app",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp",
    "//src/lib/files",
    "//src/lib/fxl",
    "//third_party/googletest:gtest",
    "//zircon/public/lib/async-default",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

executable("compatibility_test_server_cpp_bin") {
  output_name = "compatibility_test_server_cpp"

  sources = [
    "compatibility_test_server_cpp.cc",
  ]

  deps = [
    "//garnet/public/lib/fidl/compatibility_test:compatibility_test_service",
    "//garnet/public/lib/fidl/compatibility_test:echo_client_app",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp",
    "//zircon/public/lib/async-default",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

executable("compatibility_test_server_llcpp_bin") {
  output_name = "compatibility_test_server_llcpp"

  sources = [
    "compatibility_test_server_llcpp.cc",
  ]

  deps = [
    "//garnet/public/lib/fidl/compatibility_test:compatibility_test_service_llcpp",
    "//sdk/lib/sys/cpp",
    "//zircon/public/lib/async-default",
    "//zircon/public/lib/async-loop",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/fidl-async-cpp",
  ]
}

rustc_binary("compatibility_test_server_rust_bin") {
  name = "compatibility_test_server_rust"
  edition = "2018"
  source_root = "compatibility_test_server_rust.rs"

  deps = [
    "//garnet/public/lib/fidl/compatibility_test:compatibility_test_service-rustc",
    "//garnet/public/lib/fidl/rust/fidl",
    "//garnet/public/rust/fuchsia-async",
    "//garnet/public/rust/fuchsia-component",
    "//sdk/fidl/fuchsia.sys:fuchsia.sys-rustc",
    "//third_party/rust_crates:failure",
    "//third_party/rust_crates:futures-preview",
  ]
}

copy("run_fidl_compatibility_test_garnet_sh") {
  sources = [
    "run_fidl_compatibility_test_garnet.sh",
  ]
  outputs = [
    "${root_build_dir}/run_fidl_compatibility_test_garnet.sh",
  ]
}

package("fidl_compatibility_test_server_cpp") {
  deps = [
    ":compatibility_test_server_cpp_bin",
  ]

  meta = [
    {
      path = "meta/fidl_compatibility_test_server_cpp.cmx"
      dest = "fidl_compatibility_test_server_cpp.cmx"
    },
  ]

  testonly = true

  binary = "compatibility_test_server_cpp"
}

package("fidl_compatibility_test_server_llcpp") {
  deps = [
    ":compatibility_test_server_llcpp_bin",
  ]

  meta = [
    {
      path = "meta/fidl_compatibility_test_server_llcpp.cmx"
      dest = "fidl_compatibility_test_server_llcpp.cmx"
    },
  ]

  testonly = true

  binary = "compatibility_test_server_llcpp"
}

package("fidl_compatibility_test_server_rust") {
  deps = [
    ":compatibility_test_server_rust_bin",
  ]

  meta = [
    {
      path = "meta/fidl_compatibility_test_server_rust.cmx"
      dest = "fidl_compatibility_test_server_rust.cmx"
    },
  ]

  testonly = true

  binary = "rust_crates/compatibility_test_server_rust"
}

# The test binary that gets invoked by shell scripts.
package("fidl_compatibility_test_bin") {
  package_name = "fidl_compatibility_test_bin"

  deps = [
    ":fidl_compatibility_test",
  ]

  meta = [
    {
      path = "meta/fidl_compatibility_test_bin.cmx"
      dest = "fidl_compatibility_test_bin.cmx"
    },
  ]

  testonly = true

  # Declare it as a binary so humans and automation don't try to run it
  # directly as a test, which would fail.
  binary = "fidl_compatibility_test"
}

# Contains the shell script that runs the test binary.
package("package") {
  package_name = "fidl_compatibility_test"

  deps = [
    ":run_fidl_compatibility_test_garnet_sh",
  ]

  testonly = true

  tests = [
    {
      name = "run_fidl_compatibility_test_garnet.sh"
      environments = basic_envs
    },
  ]
}
