# 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/host.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_library.gni")
import("//build/sdk/sdk_host_tool.gni")
import("//build/testing/environments.gni")

if (is_host) {
  # Write a .rs file containing the IR needed by test_bind_lib_generation.
  ir_content = []

  _fidl_gen_dir = get_label_info("src/tests/fidl:test_fidl($fidl_toolchain)",
                                 "target_gen_dir")
  _ir = "$_fidl_gen_dir/test_fidl.fidl.json"

  # For remote-build-ability, paths must be at least relative to test source.
  # For consistency across different output dirs, paths should be relative
  # to the root_build_dir, which lives under the test source dir.
  _path = rebase_path(_ir, target_gen_dir)
  ir_content += [
    "pub mod bindc_test {",
    "  pub static IR: &str = include_str!(\"$_path\");",
    "}",
  ]
  ir_file = "$target_gen_dir/lib.rs"
  write_file(ir_file, ir_content)

  # Expose the IR in a standard Rust library.
  rustc_library("ir_importer") {
    edition = "2018"

    name = "ir_importer"

    source_root = ir_file

    sources = [ ir_file ]

    inputs = [ _ir ]

    deps = [ "src/tests/fidl" ]
  }

  rustc_binary("bin") {
    name = "bindc"
    edition = "2021"

    with_unit_tests = true
    test_environments = [ host_env ]

    deps = [
      ":ir_importer",
      "//src/devices/lib/bind:lib",
      "//src/devices/lib/fidl-ir:lib",
      "//third_party/rust_crates:anyhow",
      "//third_party/rust_crates:assert_matches",
      "//third_party/rust_crates:serde_json",
      "//third_party/rust_crates:structopt",
    ]

    sources = [
      "src/cpp_generator.rs",
      "src/generate.rs",
      "src/main.rs",
      "src/rust_generator.rs",
    ]

    inputs = [
      "src/templates/bind_lib.template",
      "src/templates/bind_lib_enum.template",
      "src/templates/bind_v1.h.template",
      "src/templates/bind_v2.h.template",
      "src/templates/composite_bind.h.template",
      "src/templates/cpp_header.template",
      "src/templates/fragment.template",
      "src/templates/rust_file.template",
      "src/tests/expected_bind_lib_gen",
      "src/tests/expected_composite_code",
      "src/tests/expected_composite_code_w_dashes",
      "src/tests/expected_cpp_header_gen",
      "src/tests/expected_rust_file_gen",
      "src/tests/test_library.bind",
    ]
  }

  install_host_tools("host") {
    deps = [ ":bin" ]
    outputs = [ "bindc" ]
  }

  sdk_host_tool("bindc_sdk") {
    category = "partner"
    output_name = "bindc"
    deps = [ ":bin" ]
  }
}

group("tests") {
  testonly = true
  deps = [
    ":bin_test($host_toolchain)",
    "./examples:tests",
  ]
}
