anki/pylib/protobuf.bzl

51 lines
1.5 KiB
Python
Raw Normal View History

load("@bazel_skylib//lib:paths.bzl", "paths")
def _py_proto_library_impl(ctx):
basename = ctx.file.src.basename
outs = [
ctx.actions.declare_file(paths.replace_extension(basename, "_pb2.py")),
ctx.actions.declare_file(paths.replace_extension(basename, "_pb2.pyi")),
]
ctx.actions.run(
outputs = outs,
inputs = [ctx.file.src],
executable = ctx.executable.protoc_wrapper,
arguments = [
ctx.executable.protoc.path,
ctx.executable.mypy_protobuf.path,
ctx.file.src.path,
paths.dirname(outs[0].path),
],
tools = [
ctx.executable.protoc,
ctx.executable.mypy_protobuf,
],
use_default_shell_env = True,
)
return [
DefaultInfo(files = depset(direct = outs), data_runfiles = ctx.runfiles(files = outs)),
]
py_proto_library_typed = rule(
implementation = _py_proto_library_impl,
attrs = {
"src": attr.label(allow_single_file = [".proto"]),
"protoc_wrapper": attr.label(
executable = True,
cfg = "exec",
2020-11-02 07:28:31 +01:00
default = Label("//pylib/tools:protoc_wrapper"),
),
"protoc": attr.label(
executable = True,
cfg = "host",
allow_files = True,
default = Label("@com_google_protobuf//:protoc"),
),
"mypy_protobuf": attr.label(
executable = True,
cfg = "exec",
default = Label("//pylib/tools:protoc-gen-mypy"),
),
},
)