aboutsummaryrefslogtreecommitdiff
path: root/tools/interface_generator/defs.bzl
diff options
context:
space:
mode:
Diffstat (limited to 'tools/interface_generator/defs.bzl')
-rw-r--r--tools/interface_generator/defs.bzl53
1 files changed, 53 insertions, 0 deletions
diff --git a/tools/interface_generator/defs.bzl b/tools/interface_generator/defs.bzl
new file mode 100644
index 0000000..d5c6f91
--- /dev/null
+++ b/tools/interface_generator/defs.bzl
@@ -0,0 +1,53 @@
+def _generate_interface_impl(ctx):
+ out_hdrs = [
+ ctx.actions.declare_file(ctx.attr.interface + ".h"),
+ ctx.actions.declare_file(ctx.attr.interface + "_mock.hpp"),
+ ]
+ out_srcs = [
+ ctx.actions.declare_file(ctx.attr.interface + "_mock.cpp"),
+ ]
+ args = ["-l", ctx.file.license.path, "-o", out_hdrs[0].dirname]
+
+ ctx.actions.run(
+ tools = ctx.attr._interface_generator_tool[DefaultInfo].data_runfiles.files,
+ inputs = [ctx.file.license],
+ outputs = out_srcs + out_hdrs,
+ executable = ctx.executable._interface_generator_tool,
+ arguments = args,
+ mnemonic = "GenerateInterface",
+ )
+
+ compilation_ctx = cc_common.create_compilation_context(
+ headers = depset(out_hdrs),
+ includes = depset([out_hdrs[0].dirname]),
+ )
+
+ return [
+ DefaultInfo(files = depset(out_srcs)),
+ CcInfo(compilation_context = compilation_ctx),
+ ]
+
+generate_interface_rule = rule(
+ implementation = _generate_interface_impl,
+ attrs = {
+ "interface": attr.string(),
+ "license": attr.label(allow_single_file = True),
+ "_interface_generator_tool": attr.label(
+ executable = True,
+ cfg = "exec",
+ allow_files = True,
+ providers = [DefaultInfo],
+ default = Label("//:interface_generator"),
+ ),
+ "outs": attr.output_list(),
+ },
+)
+
+def generate_interface(name, interface, license, visibility = None):
+ generate_interface_rule(
+ name = name,
+ interface = interface,
+ outs = [name + "_mock.cpp"],
+ license = license,
+ visibility = visibility,
+ )