@@ -3,6 +3,12 @@ load("@com_google_protobuf//:protobuf.bzl", _py_proto_library = "py_proto_librar
3
3
load ("@io_bazel_rules_go//go:def.bzl" , "go_test" )
4
4
load ("@io_bazel_rules_go//proto:def.bzl" , "go_grpc_library" , "go_proto_library" )
5
5
load ("@rules_proto//proto:defs.bzl" , "proto_library" )
6
+ load (
7
+ "//bazel:external_proto_deps.bzl" ,
8
+ "EXTERNAL_PROTO_CC_BAZEL_DEP_MAP" ,
9
+ "EXTERNAL_PROTO_GO_BAZEL_DEP_MAP" ,
10
+ "EXTERNAL_PROTO_PY_BAZEL_DEP_MAP" ,
11
+ )
6
12
7
13
_PY_PROTO_SUFFIX = "_py_proto"
8
14
_CC_PROTO_SUFFIX = "_cc_proto"
@@ -24,18 +30,21 @@ _COMMON_PROTO_DEPS = [
24
30
"@com_envoyproxy_protoc_gen_validate//validate:validate_proto" ,
25
31
]
26
32
27
- def _proto_mapping (dep , proto_suffix ):
28
- prefix = "@" + Label (dep ).workspace_name if not dep .startswith ("//" ) else ""
29
- return prefix + "//" + Label (dep ).package + ":" + Label (dep ).name + proto_suffix
33
+ def _proto_mapping (dep , proto_dep_map , proto_suffix ):
34
+ mapped = proto_dep_map .get (dep )
35
+ if mapped == None :
36
+ prefix = "@" + Label (dep ).workspace_name if not dep .startswith ("//" ) else ""
37
+ return prefix + "//" + Label (dep ).package + ":" + Label (dep ).name + proto_suffix
38
+ return mapped
30
39
31
40
def _go_proto_mapping (dep ):
32
- return _proto_mapping (dep , _GO_PROTO_SUFFIX )
41
+ return _proto_mapping (dep , EXTERNAL_PROTO_GO_BAZEL_DEP_MAP , _GO_PROTO_SUFFIX )
33
42
34
43
def _cc_proto_mapping (dep ):
35
- return _proto_mapping (dep , _CC_PROTO_SUFFIX )
44
+ return _proto_mapping (dep , EXTERNAL_PROTO_CC_BAZEL_DEP_MAP , _CC_PROTO_SUFFIX )
36
45
37
46
def _py_proto_mapping (dep ):
38
- return _proto_mapping (dep , _PY_PROTO_SUFFIX )
47
+ return _proto_mapping (dep , EXTERNAL_PROTO_PY_BAZEL_DEP_MAP , _PY_PROTO_SUFFIX )
39
48
40
49
# TODO(htuch): Convert this to native py_proto_library once
41
50
# https://github.com/bazelbuild/bazel/issues/3935 and/or
@@ -58,7 +67,7 @@ def _xds_py_proto_library(name, srcs = [], deps = []):
58
67
59
68
# This defines googleapis py_proto_library. The repository does not provide its definition and requires
60
69
# overriding it in the consuming project (see https://github.com/grpc/grpc/issues/19255 for more details).
61
- def py_proto_library (name , deps = []):
70
+ def py_proto_library (name , deps = [], plugin = None ):
62
71
srcs = [dep [:- 6 ] + ".proto" if dep .endswith ("_proto" ) else dep for dep in deps ]
63
72
proto_deps = []
64
73
@@ -67,6 +76,14 @@ def py_proto_library(name, deps = []):
67
76
# As a workaround, manually specify the proto dependencies for the imported python rules.
68
77
if name == "annotations_py_proto" :
69
78
proto_deps = proto_deps + [":http_py_proto" ]
79
+
80
+ # checked.proto depends on syntax.proto, we have to add this dependency manually as well.
81
+ if name == "checked_py_proto" :
82
+ proto_deps = proto_deps + [":syntax_py_proto" ]
83
+
84
+ # py_proto_library does not support plugin as an argument yet at gRPC v1.25.0:
85
+ # https://github.com/grpc/grpc/blob/v1.25.0/bazel/python_rules.bzl#L72.
86
+ # plugin should also be passed in here when gRPC version is greater than v1.25.x.
70
87
_py_proto_library (
71
88
name = name ,
72
89
srcs = srcs ,
@@ -110,7 +127,12 @@ def _xds_cc_py_proto_library(
110
127
# TODO: neither C++ or Python service generation is supported today, follow the Envoy example to implementthis.
111
128
pass
112
129
113
- def xds_proto_package (srcs = [], deps = [], has_services = False , visibility = ["//visibility:public" ]):
130
+ def xds_proto_package (
131
+ name = "pkg" ,
132
+ srcs = [],
133
+ deps = [],
134
+ has_services = False ,
135
+ visibility = ["//visibility:public" ]):
114
136
if srcs == []:
115
137
srcs = native .glob (["*.proto" ])
116
138
@@ -127,13 +149,16 @@ def xds_proto_package(srcs = [], deps = [], has_services = False, visibility = [
127
149
if has_services :
128
150
compilers = ["@io_bazel_rules_go//proto:go_grpc" , "//bazel:pgv_plugin_go" ]
129
151
152
+ # Because RBAC proro depends on googleapis syntax.proto and checked.proto,
153
+ # which share the same go proto library, it causes duplicative dependencies.
154
+ # Thus, we use depset().to_list() to remove duplicated depenencies.
130
155
go_proto_library (
131
156
name = name + _GO_PROTO_SUFFIX ,
132
157
compilers = compilers ,
133
158
importpath = _GO_IMPORTPATH_PREFIX + native .package_name (),
134
159
proto = name ,
135
160
visibility = ["//visibility:public" ],
136
- deps = [_go_proto_mapping (dep ) for dep in deps ] + [
161
+ deps = depset ( [_go_proto_mapping (dep ) for dep in deps ] + [
137
162
"@com_envoyproxy_protoc_gen_validate//validate:go_default_library" ,
138
163
"@com_github_golang_protobuf//ptypes:go_default_library_gen" ,
139
164
"@go_googleapis//google/api:annotations_go_proto" ,
@@ -143,7 +168,7 @@ def xds_proto_package(srcs = [], deps = [], has_services = False, visibility = [
143
168
"@io_bazel_rules_go//proto/wkt:struct_go_proto" ,
144
169
"@io_bazel_rules_go//proto/wkt:timestamp_go_proto" ,
145
170
"@io_bazel_rules_go//proto/wkt:wrappers_go_proto" ,
146
- ],
171
+ ]). to_list () ,
147
172
)
148
173
149
174
def xds_cc_test (name , ** kwargs ):
0 commit comments