blob: 690ad328406b1702501daa94fc7949ab142aa644 [file] [log] [blame]
# 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 ]
}
}