# 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/host.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_macro.gni")
import("//build/sdk/sdk_host_tool.gni")
import("//build/test/test_package.gni")

if (host_toolchain == current_toolchain) {
  rustc_binary("cmc") {
    name = "cmc"
    with_unit_tests = true
    edition = "2018"

    deps = [
      ":cmc_macro",
      "//src/lib/directed_graph",
      "//src/sys/lib/cm_json",
      "//src/sys/lib/cm_types",
      "//third_party/rust_crates:anyhow",
      "//third_party/rust_crates:clap",
      "//third_party/rust_crates:json5",
      "//third_party/rust_crates:json5format",
      "//third_party/rust_crates:lazy_static",
      "//third_party/rust_crates:maplit",
      "//third_party/rust_crates:regex",
      "//third_party/rust_crates:serde",
      "//third_party/rust_crates:serde_json",
      "//third_party/rust_crates:structopt",
      "//third_party/rust_crates:tempfile",
      "//third_party/rust_crates:thiserror",
      "//third_party/rust_crates:valico",
    ]

    non_rust_deps = [ ":cmc_test_schemas" ]

    test_deps = [ "//third_party/rust_crates:matches" ]
  }

  sdk_host_tool("cmc_sdk") {
    category = "partner"
    output_name = "cmc"
    deps = [ ":cmc" ]
  }

  rustc_macro("cmc_macro") {
    edition = "2018"
    source_root = "macro/src/lib.rs"

    deps = [
      "//third_party/rust_crates:maplit",
      "//third_party/rust_crates:proc-macro2",
      "//third_party/rust_crates:quote",
      "//third_party/rust_crates:syn",
    ]
  }

  source_set("cmc_test_schemas") {
    inputs = [
      "test_block_dev.json",
      "test_block_shell_feature.json",
    ]
  }
}

rustc_binary("cmc_integration_test_bin") {
  name = "cmc_integration_test"
  edition = "2018"
  source_root = "tests/integration_test.rs"
  deps = [
    "//sdk/fidl/fuchsia.data:fuchsia.data-rustc",
    "//sdk/fidl/fuchsia.io2:fuchsia.io2-rustc",
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc",
    "//src/sys/lib/cm_fidl_translator",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:thiserror",
  ]
}

rustc_binary("example_bin") {
  name = "example"
  edition = "2018"
  source_root = "tests/example.rs"
}

test_package("cmc_integration_test") {
  deps = [
    ":cmc_integration_test_bin",
    ":example_bin",
  ]

  resources = [
    {
      if (is_debug) {
        path = rebase_path("tests/golden_debug.cm")
      } else {
        path = rebase_path("tests/golden_release.cm")
      }
      dest = "golden.cm"
    },
  ]

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

  tests = [
    {
      name = "cmc_integration_test"
    },
  ]
}

install_host_tools("install") {
  deps = [ ":cmc" ]

  outputs = [ "cmc" ]
}

group("tests") {
  testonly = true

  deps = [
    ":cmc_integration_test",
    ":cmc_test($host_toolchain)",
  ]
}
