| load("@rules_proto//proto:defs.bzl", "proto_library") |
| load( |
| "@com_google_protobuf//:protobuf.bzl", |
| "cc_proto_library", |
| "proto_gen", |
| "py_proto_library", |
| ) |
| |
| licenses(["notice"]) |
| |
| filegroup( |
| name = "LICENSE", |
| visibility = ["//visibility:public"], |
| ) |
| |
| # Map of all well known protos. |
| # name => (include path, imports) |
| WELL_KNOWN_PROTO_MAP = { |
| "any": ("google/protobuf/any.proto", []), |
| "api": ( |
| "google/protobuf/api.proto", |
| [ |
| "source_context", |
| "type", |
| ], |
| ), |
| "compiler_plugin": ( |
| "google/protobuf/compiler/plugin.proto", |
| ["descriptor"], |
| ), |
| "descriptor": ("google/protobuf/descriptor.proto", []), |
| "duration": ("google/protobuf/duration.proto", []), |
| "empty": ("google/protobuf/empty.proto", []), |
| "field_mask": ("google/protobuf/field_mask.proto", []), |
| "source_context": ("google/protobuf/source_context.proto", []), |
| "struct": ("google/protobuf/struct.proto", []), |
| "timestamp": ("google/protobuf/timestamp.proto", []), |
| "type": ( |
| "google/protobuf/type.proto", |
| [ |
| "any", |
| "source_context", |
| ], |
| ), |
| "wrappers": ("google/protobuf/wrappers.proto", []), |
| } |
| |
| RELATIVE_WELL_KNOWN_PROTOS = [proto[1][0] for proto in WELL_KNOWN_PROTO_MAP.items()] |
| |
| genrule( |
| name = "link_proto_files", |
| outs = RELATIVE_WELL_KNOWN_PROTOS, |
| cmd = """ |
| for i in $(OUTS); do |
| f=$${i#$(@D)/} |
| mkdir -p $(@D)/$${f%/*} |
| ln -sf $(PROTOBUF_INCLUDE_PATH)/$$f $(@D)/$$f |
| done |
| """, |
| ) |
| |
| cc_library( |
| name = "protobuf", |
| linkopts = ["-lprotobuf"], |
| visibility = ["//visibility:public"], |
| ) |
| |
| cc_library( |
| name = "protobuf_headers", |
| linkopts = ["-lprotobuf"], |
| visibility = ["//visibility:public"], |
| ) |
| |
| cc_library( |
| name = "protoc_lib", |
| linkopts = ["-lprotoc"], |
| visibility = ["//visibility:public"], |
| ) |
| |
| genrule( |
| name = "protoc", |
| outs = ["protoc.bin"], |
| cmd = "ln -s $$(which protoc) $@", |
| executable = 1, |
| visibility = ["//visibility:public"], |
| ) |
| |
| cc_proto_library( |
| name = "cc_wkt_protos", |
| internal_bootstrap_hack = 1, |
| protoc = ":protoc", |
| visibility = ["//visibility:public"], |
| ) |
| |
| proto_gen( |
| name = "protobuf_python_genproto", |
| includes = ["."], |
| protoc = "@com_google_protobuf//:protoc", |
| visibility = ["//visibility:public"], |
| ) |
| |
| py_library( |
| name = "protobuf_python", |
| srcs_version = "PY3", |
| visibility = ["//visibility:public"], |
| ) |
| |
| [proto_library( |
| name = proto[0] + "_proto", |
| srcs = [proto[1][0]], |
| visibility = ["//visibility:public"], |
| deps = [dep + "_proto" for dep in proto[1][1]], |
| ) for proto in WELL_KNOWN_PROTO_MAP.items()] |