# 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/compiled_action.gni")
import("//build/rust/rustc_library.gni")

# Generates a rust library for a given wayland protocol.xml file. The protocol
# will be built as a crate with the same name as the target.
#
#   protocol (required)
#     The path to the XML protocol specification to be scanned.
#
#   deps (optional, default = [])
#     Additional protocol dependencies for this protocol. These labels should
#     correspond another `wayland_protocol` target.
#
# Ex:
#    wayland_protocol("base") {
#        protocol = "base_protocol.xml"
#    }
#
#    wayland_protocol("derived") {
#        protocol = "derived_protocol.xml"
#        deps = [ ":base" ]
#    }
#
template("wayland_protocol") {
  assert(defined(invoker.protocol), "protocol must be defined for $target_name")
  target_crate_root = "$target_gen_dir/$target_name.rs"
  if (defined(invoker.deps)) {
    protocol_deps = invoker.deps
  } else {
    protocol_deps = []
  }

  # Generate the rust sources using the scanner.
  compiled_action("gen_${target_name}_source") {
    tool = "//garnet/bin/wayland/scanner"
    sources = [ invoker.protocol ]
    outputs = [ target_crate_root ]
    args = [
      "-i",
      rebase_path(invoker.protocol),
      "-o",
      rebase_path(target_crate_root),
    ]
    foreach(dep, protocol_deps) {
      args += [
        "-d",
        get_label_info(dep, "name"),
      ]
    }
  }

  # Build the library.
  rustc_library(target_name) {
    edition = "2018"
    non_rust_deps = [ ":gen_${target_name}_source" ]
    deps = [
      "//garnet/bin/wayland/core",
      "//src/lib/trace/rust:trace",
      "//src/lib/zircon/rust:fuchsia-zircon",
      "//third_party/rust_crates:anyhow",
      "//third_party/rust_crates:bitflags",
    ]
    deps += protocol_deps
    source_root = target_crate_root

    sources = [ target_crate_root ]
  }
}
