xref: /aosp_15_r20/external/federated-compute/fcp/client/BUILD (revision 14675a029014e728ec732f129a32e299b2da0601)
1# Copyright 2019 Google LLC
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#      http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15load("//fcp:config.bzl", "FCP_COPTS")
16load("@org_tensorflow//tensorflow/core/platform:build_config.bzl", "tf_proto_library")
17load("@com_github_grpc_grpc//bazel:python_rules.bzl", "py_proto_library")
18load("@bazel_skylib//rules:common_settings.bzl", "bool_flag")
19
20package(
21    default_visibility = [
22        "//fcp:internal",
23    ],
24    licenses = ["notice"],  # Apache 2.0
25)
26
27cc_library(
28    name = "grpc_bidi_channel",
29    hdrs = ["grpc_bidi_channel.h"],
30    copts = FCP_COPTS,
31    deps = [
32        "//fcp/base",
33        "@com_github_grpc_grpc//:grpc++",
34        "@com_google_absl//absl/base:core_headers",
35        "@com_google_absl//absl/strings",
36    ],
37)
38
39cc_test(
40    name = "grpc_bidi_channel_test",
41    srcs = ["grpc_bidi_channel_test.cc"],
42    copts = FCP_COPTS,
43    tags = ["local"],  # The certificate path is not accessible from a sandbox.
44    deps = [
45        ":grpc_bidi_stream",
46        "//fcp/protos:cc_grpc",
47        "//fcp/testing",
48        "@com_google_absl//absl/status",
49        "@com_google_googletest//:gtest_main",
50    ],
51)
52
53cc_library(
54    name = "grpc_bidi_stream",
55    srcs = ["grpc_bidi_stream.cc"],
56    hdrs = ["grpc_bidi_stream.h"],
57    copts = FCP_COPTS,
58    deps = [
59        ":grpc_bidi_channel",
60        "//fcp/base",
61        "//fcp/base:status_converters",
62        "//fcp/protocol:grpc_chunked_bidi_stream",
63        "//fcp/protos:cc_grpc",
64        "@com_github_grpc_grpc//:grpc++",
65        "@com_google_absl//absl/base:core_headers",
66        "@com_google_absl//absl/status",
67        "@com_google_absl//absl/synchronization",
68    ],
69)
70
71cc_test(
72    name = "grpc_bidi_stream_test",
73    srcs = ["grpc_bidi_stream_test.cc"],
74    copts = FCP_COPTS,
75    deps = [
76        ":fake_server",
77        ":grpc_bidi_stream",
78        ":test_helpers",
79        "//fcp/base",
80        "//fcp/base:scheduler",
81        "//fcp/testing",
82        "@com_github_grpc_grpc//:grpc++",
83        "@com_google_absl//absl/status",
84        "@com_google_absl//absl/strings",
85        "@com_google_absl//absl/time",
86        "@com_google_googletest//:gtest_main",
87    ],
88)
89
90cc_library(
91    name = "fake_server",
92    testonly = 1,
93    srcs = ["fake_server.cc"],
94    hdrs = ["fake_server.h"],
95    copts = FCP_COPTS,
96    visibility = ["//visibility:public"],
97    deps = [
98        ":grpc_bidi_stream",
99        "//fcp/base",
100        "//fcp/base:status_converters",
101        "//fcp/protocol:grpc_chunked_bidi_stream",
102        "//fcp/protos:cc_grpc",
103        "//fcp/protos:federated_api_cc_proto",
104        "@com_github_grpc_grpc//:grpc++",
105        "@com_google_absl//absl/status",
106        "@com_google_absl//absl/synchronization",
107        "@com_google_googletest//:gtest",
108    ],
109)
110
111# Interfaces used by the engine & protocol. These require platform specific
112# implementations.
113cc_library(
114    name = "interfaces",
115    srcs = [],
116    hdrs = [
117        "event_publisher.h",
118        "files.h",
119        "flags.h",
120        "log_manager.h",
121        "secagg_event_publisher.h",
122        "stats.h",
123    ],
124    visibility = ["//visibility:public"],
125    deps = [
126        ":diag_codes_cc_proto",
127        ":histogram_counters_cc_proto",
128        "//fcp/client/engine:engine_cc_proto",
129        "@com_google_absl//absl/container:flat_hash_map",
130        "@com_google_absl//absl/status",
131        "@com_google_absl//absl/status:statusor",
132        "@com_google_absl//absl/strings",
133        "@com_google_absl//absl/time",
134    ],
135)
136
137cc_library(
138    name = "federated_protocol",
139    hdrs = ["federated_protocol.h"],
140    deps = [
141        ":interfaces",
142        "//fcp/client/engine:engine_cc_proto",
143        "//fcp/protos:federated_api_cc_proto",
144        "//fcp/protos:plan_cc_proto",
145        "//fcp/protos/federatedcompute:federated_compute_cc_proto",
146        "@com_google_absl//absl/container:node_hash_map",
147        "@com_google_absl//absl/status",
148        "@com_google_absl//absl/status:statusor",
149    ],
150)
151
152cc_library(
153    name = "federated_protocol_util",
154    srcs = ["federated_protocol_util.cc"],
155    hdrs = ["federated_protocol_util.h"],
156    deps = [
157        ":diag_codes_cc_proto",
158        ":interfaces",
159        "//fcp/base",
160        "//fcp/base:time_util",
161        "//fcp/protos:federated_api_cc_proto",
162        "@com_google_absl//absl/random",
163        "@com_google_absl//absl/status:statusor",
164        "@com_google_absl//absl/time",
165        "@com_google_protobuf//:protobuf",
166    ],
167)
168
169cc_test(
170    name = "federated_protocol_util_test",
171    srcs = ["federated_protocol_util_test.cc"],
172    deps = [
173        ":diag_codes_cc_proto",
174        ":federated_protocol_util",
175        ":test_helpers",
176        "//fcp/testing",
177        "@com_google_googletest//:gtest_main",
178    ],
179)
180
181cc_library(
182    name = "grpc_federated_protocol",
183    srcs = ["grpc_federated_protocol.cc"],
184    hdrs = [
185        "grpc_federated_protocol.h",
186    ],
187    deps = [
188        ":diag_codes_cc_proto",
189        ":federated_protocol",
190        ":federated_protocol_util",
191        ":fl_runner_cc_proto",
192        ":grpc_bidi_stream",
193        ":interfaces",
194        ":interruptible_runner",
195        ":secagg_runner",
196        ":selector_context_cc_proto",
197        "//fcp/base",
198        "//fcp/base:time_util",
199        "//fcp/base:wall_clock_stopwatch",
200        "//fcp/client/cache:resource_cache",
201        "//fcp/client/engine:engine_cc_proto",
202        "//fcp/client/http:http_client",
203        "//fcp/client/http:in_memory_request_response",
204        "//fcp/client/opstats:opstats_logger",
205        "//fcp/protocol:grpc_chunked_bidi_stream",
206        "//fcp/protos:federated_api_cc_proto",
207        "//fcp/protos:plan_cc_proto",
208        "//fcp/secagg/client",
209        "//fcp/secagg/client:state_transition_listener",
210        "//fcp/secagg/shared",
211        "//fcp/secagg/shared:cc_proto",
212        "@com_google_absl//absl/container:flat_hash_map",
213        "@com_google_absl//absl/container:flat_hash_set",
214        "@com_google_absl//absl/container:node_hash_map",
215        "@com_google_absl//absl/random",
216        "@com_google_absl//absl/status",
217        "@com_google_absl//absl/status:statusor",
218        "@com_google_absl//absl/time",
219        "@com_google_absl//absl/types:span",
220        "@com_google_protobuf//:protobuf",
221    ],
222)
223
224cc_test(
225    name = "grpc_federated_protocol_test",
226    srcs = ["grpc_federated_protocol_test.cc"],
227    deps = [
228        ":diag_codes_cc_proto",
229        ":grpc_bidi_stream",
230        ":grpc_federated_protocol",
231        ":interfaces",
232        ":interruptible_runner",
233        ":test_helpers",
234        "//fcp/base",
235        "//fcp/client/cache:test_helpers",
236        "//fcp/client/engine:engine_cc_proto",
237        "//fcp/client/http:http_client",
238        "//fcp/client/http/testing:test_helpers",
239        "//fcp/protos:federated_api_cc_proto",
240        "//fcp/secagg/client",
241        "//fcp/secagg/shared",
242        "//fcp/secagg/testing:client_mocks",
243        "//fcp/secagg/testing:common_mocks",
244        "//fcp/testing",
245        "@com_google_absl//absl/random",
246        "@com_google_absl//absl/status",
247        "@com_google_absl//absl/synchronization",
248        "@com_google_absl//absl/time",
249        "@com_google_googletest//:gtest_main",
250        "@com_google_protobuf//:protobuf",
251    ],
252)
253
254cc_library(
255    name = "simple_task_environment",
256    srcs = ["simple_task_environment.cc"],
257    hdrs = ["simple_task_environment.h"],
258    copts = FCP_COPTS,
259    visibility = ["//visibility:public"],
260    deps = [
261        ":selector_context_cc_proto",
262        "//fcp/base",
263        "//fcp/client/http:http_client",
264        "//fcp/protos:plan_cc_proto",
265        "@com_google_absl//absl/status:statusor",
266        "@com_google_absl//absl/time",
267    ],
268)
269
270cc_test(
271    name = "simple_task_environment_test",
272    srcs = ["simple_task_environment_test.cc"],
273    deps = [
274        ":simple_task_environment",
275        ":test_helpers",
276        "//fcp/testing",
277        "@com_google_absl//absl/time",
278        "@com_google_googletest//:gtest_main",
279    ],
280)
281
282bool_flag(
283    name = "support_tfmobile",
284    build_setting_default = True,
285)
286
287bool_flag(
288    name = "support_grpc",
289    build_setting_default = True,
290)
291
292config_setting(
293    name = "client_support_tfmobile",
294    flag_values = {":support_tfmobile": "True"},
295)
296
297config_setting(
298    name = "client_support_grpc",
299    flag_values = {":support_grpc": "True"},
300)
301
302TF_OPTIONAL_DEPS = select({
303    ":client_support_tfmobile": [
304        "//fcp/client/engine:plan_engine",
305    ],
306    "//conditions:default": [],
307})
308
309TF_OPTIONAL_DEFINES = select({
310    ":client_support_tfmobile": [
311        "FCP_CLIENT_SUPPORT_TFMOBILE",
312    ],
313    "//conditions:default": [],
314})
315
316GRPC_OPTIONAL_DEFINES = select(
317    {
318        ":client_support_grpc": ["FCP_CLIENT_SUPPORT_GRPC"],
319        "//conditions:default": [],
320    },
321)
322
323GRPC_OPTIONAL_DEPS = select(
324    {
325        ":client_support_grpc": [":grpc_federated_protocol"],
326        "//conditions:default": [],
327    },
328)
329
330cc_library(
331    name = "fl_runner",
332    srcs = ["fl_runner.cc"],
333    hdrs = [
334        "fl_runner.h",
335    ],
336    copts = FCP_COPTS,
337    defines = TF_OPTIONAL_DEFINES + GRPC_OPTIONAL_DEFINES,
338    visibility = ["//visibility:public"],
339    deps = [
340        ":federated_protocol",
341        ":federated_protocol_util",
342        ":federated_select",
343        ":fl_runner_cc_proto",
344        ":histogram_counters_cc_proto",
345        ":interfaces",
346        ":interruptible_runner",
347        ":parsing_utils",
348        ":phase_logger",
349        ":phase_logger_impl",
350        ":secagg_runner",
351        ":selector_context_cc_proto",
352        ":simple_task_environment",
353        "//fcp/base",
354        "//fcp/base:clock",
355        "//fcp/client/cache:file_backed_resource_cache",
356        "//fcp/client/cache:resource_cache",
357        "//fcp/client/engine:common",
358        "//fcp/client/engine:engine_cc_proto",
359        "//fcp/client/engine:example_iterator_factory",
360        "//fcp/client/engine:example_query_plan_engine",
361        "//fcp/client/engine:plan_engine_helpers",
362        "//fcp/client/engine:tflite_plan_engine",
363        "//fcp/client/http:http_client",
364        "//fcp/client/http:http_federated_protocol",
365        "//fcp/client/opstats:opstats_example_store",
366        "//fcp/client/opstats:opstats_logger",
367        "//fcp/client/opstats:opstats_utils",
368        "//fcp/protos:federated_api_cc_proto",
369        "//fcp/protos:opstats_cc_proto",
370        "//fcp/protos:plan_cc_proto",
371        "//fcp/protos/federatedcompute:federated_compute_cc_proto",
372        "@boringssl//:crypto",
373        "@com_google_absl//absl/status",
374        "@com_google_absl//absl/status:statusor",
375        "@com_google_absl//absl/strings:cord",
376        "@com_google_absl//absl/time",
377        "@org_tensorflow//tensorflow/core:framework",
378        "@org_tensorflow//tensorflow/core:protos_all_cc",
379    ] + TF_OPTIONAL_DEPS + GRPC_OPTIONAL_DEPS,
380)
381
382cc_library(
383    name = "lc_runner",
384    srcs = ["lc_runner.cc"],
385    hdrs = [
386        "lc_runner.h",
387    ],
388    copts = FCP_COPTS,
389    defines = TF_OPTIONAL_DEFINES,
390    visibility = ["//visibility:public"],
391    deps = [
392        ":interfaces",
393        ":phase_logger",
394        ":phase_logger_impl",
395        ":selector_context_cc_proto",
396        ":simple_task_environment",
397        "//fcp/base",
398        "//fcp/client/engine:example_iterator_factory",
399        "//fcp/client/engine:plan_engine_helpers",
400        "//fcp/client/engine:tflite_plan_engine",
401        "//fcp/client/opstats:opstats_example_store",
402        "//fcp/client/opstats:opstats_logger",
403        "//fcp/protos:plan_cc_proto",
404        "@com_google_absl//absl/container:flat_hash_map",
405        "@com_google_absl//absl/status",
406        "@com_google_absl//absl/status:statusor",
407        "@com_google_absl//absl/time",
408        "@org_tensorflow//tensorflow/core:framework",
409        "@org_tensorflow//tensorflow/core:protos_all_cc",
410    ] + TF_OPTIONAL_DEPS,
411)
412
413cc_library(
414    name = "phase_logger",
415    hdrs = ["phase_logger.h"],
416    deps = [
417        ":interfaces",
418        "//fcp/client/opstats:opstats_logger",
419        "//fcp/protos:federated_api_cc_proto",
420        "@com_google_absl//absl/strings",
421    ],
422)
423
424cc_library(
425    name = "phase_logger_impl",
426    srcs = ["phase_logger_impl.cc"],
427    hdrs = ["phase_logger_impl.h"],
428    deps = [
429        ":interfaces",
430        ":phase_logger",
431        "//fcp/base",
432        "//fcp/client/opstats:opstats_logger",
433        "//fcp/protos:federated_api_cc_proto",
434        "@com_google_absl//absl/strings",
435        "@com_google_absl//absl/time",
436    ],
437)
438
439cc_test(
440    name = "phase_logger_impl_test",
441    srcs = ["phase_logger_impl_test.cc"],
442    deps = [
443        ":phase_logger_impl",
444        ":test_helpers",
445        "//fcp/testing",
446        "@com_google_absl//absl/status",
447        "@com_google_absl//absl/time",
448        "@com_google_googletest//:gtest_main",
449        "@com_google_protobuf//:protobuf",
450    ],
451)
452
453cc_library(
454    name = "secagg_runner",
455    srcs = ["secagg_runner.cc"],
456    hdrs = ["secagg_runner.h"],
457    deps = [
458        ":federated_protocol",
459        ":interfaces",
460        ":interruptible_runner",
461        "//fcp/secagg/client",
462        "//fcp/secagg/shared",
463        "//fcp/secagg/shared:cc_proto",
464    ],
465)
466
467cc_library(
468    name = "federated_select",
469    srcs = ["federated_select.cc"],
470    hdrs = ["federated_select.h"],
471    deps = [
472        ":diag_codes_cc_proto",
473        ":interfaces",
474        ":interruptible_runner",
475        ":simple_task_environment",
476        "//fcp/base",
477        "//fcp/base:wall_clock_stopwatch",
478        "//fcp/client/engine:example_iterator_factory",
479        "//fcp/client/http:http_client",
480        "//fcp/client/http:http_client_util",
481        "//fcp/client/http:in_memory_request_response",
482        "//fcp/protos:plan_cc_proto",
483        "@com_google_absl//absl/status:statusor",
484        "@com_google_absl//absl/strings",
485        "@com_google_absl//absl/strings:cord",
486        "@com_google_absl//absl/time",
487        "@com_google_protobuf//:protobuf",
488    ],
489)
490
491cc_library(
492    name = "parsing_utils",
493    hdrs = ["parsing_utils.h"],
494    deps = ["@com_google_absl//absl/strings:cord"],
495)
496
497cc_test(
498    name = "federated_select_test",
499    srcs = ["federated_select_test.cc"],
500    deps = [
501        ":client_runner",
502        ":diag_codes_cc_proto",
503        ":federated_select",
504        ":interfaces",
505        ":interruptible_runner",
506        ":test_helpers",
507        "//fcp/base",
508        "//fcp/client/engine:example_iterator_factory",
509        "//fcp/client/http:http_client",
510        "//fcp/client/http:in_memory_request_response",
511        "//fcp/client/http/testing:test_helpers",
512        "//fcp/protos:plan_cc_proto",
513        "//fcp/testing",
514        "@com_google_absl//absl/status",
515        "@com_google_absl//absl/synchronization",
516        "@com_google_absl//absl/time",
517        "@com_google_googletest//:gtest_main",
518        "@com_google_protobuf//:protobuf",
519    ],
520)
521
522cc_library(
523    name = "interruptible_runner",
524    srcs = ["interruptible_runner.cc"],
525    hdrs = ["interruptible_runner.h"],
526    visibility = ["//visibility:public"],
527    deps = [
528        ":diag_codes_cc_proto",
529        ":interfaces",
530        "//fcp/base",
531        "//fcp/base:future",
532        "//fcp/base:scheduler",
533        "@com_google_absl//absl/status",
534        "@com_google_absl//absl/time",
535    ],
536)
537
538cc_library(
539    name = "fake_log_manager",
540    hdrs = ["fake_log_manager.h"],
541    visibility = ["//visibility:public"],
542    deps = [
543        ":diag_codes_cc_proto",
544        ":interfaces",
545        "//fcp/base",
546    ],
547)
548
549cc_library(
550    name = "fake_event_publisher",
551    hdrs = ["fake_event_publisher.h"],
552    visibility = ["//visibility:public"],
553    deps = [
554        ":interfaces",
555        "//fcp/base",
556        "@com_google_absl//absl/strings",
557        "@com_google_absl//absl/time",
558    ],
559)
560
561cc_test(
562    name = "interruptible_runner_test",
563    srcs = ["interruptible_runner_test.cc"],
564    copts = FCP_COPTS,
565    deps = [
566        ":diag_codes_cc_proto",
567        ":interruptible_runner",
568        ":test_helpers",
569        "//fcp/testing",
570        "@com_google_absl//absl/status",
571        "@com_google_absl//absl/synchronization",
572        "@com_google_absl//absl/time",
573        "@com_google_googletest//:gtest_main",
574    ],
575)
576
577# Misc. classes to support embedding a fake client in unit or integration tests.
578cc_library(
579    name = "client_runner",
580    testonly = True,
581    hdrs = ["client_runner.h"],
582    deps = [
583        ":client_runner_example_data_cc_proto",
584        ":diag_codes_cc_proto",
585        ":fake_event_publisher",
586        ":histogram_counters_cc_proto",
587        ":interfaces",
588        ":simple_task_environment",
589        "//fcp/base",
590        "//fcp/client/http/curl:curl_http_client",
591        "//fcp/protos:plan_cc_proto",
592        "@com_google_absl//absl/container:flat_hash_map",
593        "@com_google_absl//absl/status:statusor",
594        "@com_google_absl//absl/strings",
595        "@com_google_absl//absl/time",
596        "@com_google_googletest//:gtest",
597        "@com_google_protobuf//:protobuf",
598    ],
599)
600
601# A command line executable running most of the client side code to
602# use for debugging and illustrating an example integration.
603cc_library(
604    name = "client_runner_main_lib",
605    testonly = True,
606    srcs = ["client_runner_main.cc"],
607    deps = [
608        ":client_runner",
609        ":client_runner_example_data_cc_proto",
610        ":fake_event_publisher",
611        ":fl_runner",
612        "//fcp/base",
613        "//fcp/tensorflow:external_dataset_op_lib",
614        "//fcp/tensorflow:task_eligibility_info_ops_lib",
615        "@com_google_absl//absl/flags:flag",
616        "@com_google_absl//absl/flags:parse",
617        "@com_google_absl//absl/flags:usage",
618        "@com_google_absl//absl/status",
619        "@com_google_absl//absl/status:statusor",
620        "@com_google_absl//absl/strings",
621    ],
622)
623
624cc_binary(
625    name = "client_runner_main",
626    testonly = True,
627    deps = [
628        ":client_runner_main_lib",
629        "@org_tensorflow//tensorflow/core:tensorflow_opensource",
630    ],
631)
632
633cc_library(
634    name = "test_helpers",
635    testonly = True,
636    srcs = ["test_helpers.cc"],
637    hdrs = ["test_helpers.h"],
638    deps = [
639        ":federated_protocol",
640        ":federated_select",
641        ":interfaces",
642        ":phase_logger",
643        ":secagg_runner",
644        ":simple_task_environment",
645        "//fcp/base",
646        "//fcp/client/engine:example_iterator_factory",
647        "//fcp/client/http:http_client",
648        "//fcp/client/opstats:opstats_db",
649        "//fcp/client/opstats:opstats_logger",
650        "@com_google_absl//absl/status",
651        "@com_google_absl//absl/status:statusor",
652        "@com_google_absl//absl/strings",
653        "@com_google_googletest//:gtest_main",
654        "@com_google_protobuf//:protobuf",
655        "@org_tensorflow//tensorflow/core:protos_all_cc",
656    ],
657)
658
659# Protocol buffers for logging. Those get serialized.
660proto_library(
661    name = "histogram_counters_proto",
662    srcs = ["histogram_counters.proto"],
663)
664
665java_proto_library(
666    name = "histogram_counters_java_proto",
667    deps = [":histogram_counters_proto"],
668)
669
670cc_proto_library(
671    name = "histogram_counters_cc_proto",
672    deps = [":histogram_counters_proto"],
673)
674
675# Protocol buffers for FL Runner. These do not get serialized to disk.
676tf_proto_library(
677    name = "fl_runner_proto",
678    srcs = ["fl_runner.proto"],
679    protodeps = [
680        "//fcp/client/engine:engine_proto",
681        "@org_tensorflow//tensorflow/core:protos_all",
682    ],
683    visibility = ["//visibility:public"],
684)
685
686java_proto_library(
687    name = "fl_runner_java_proto",
688    visibility = ["//visibility:public"],
689    deps = [":fl_runner_proto"],
690)
691
692# Allowing to refer to the cc library generated by the rule above in usual way:
693alias(
694    name = "fl_runner_cc_proto",
695    actual = "fl_runner_proto_cc",
696    visibility = ["//visibility:public"],
697)
698
699# Protocol buffers for logging. Those get serialized.
700proto_library(
701    name = "diag_codes_proto",
702    srcs = ["diag_codes.proto"],
703)
704
705java_proto_library(
706    name = "diag_codes_java_proto",
707    deps = [":diag_codes_proto"],
708)
709
710cc_proto_library(
711    name = "diag_codes_cc_proto",
712    deps = [":diag_codes_proto"],
713)
714
715# Protocol buffers for providing example data to client_runner_main.
716proto_library(
717    name = "client_runner_example_data_proto",
718    testonly = True,
719    srcs = ["client_runner_example_data.proto"],
720)
721
722cc_proto_library(
723    name = "client_runner_example_data_cc_proto",
724    testonly = True,
725    deps = [":client_runner_example_data_proto"],
726)
727
728py_proto_library(
729    name = "client_runner_example_data_py_pb2",
730    testonly = True,
731    deps = [":client_runner_example_data_proto"],
732)
733
734# --------------------------------------------------------------------
735# selector_context.proto
736
737proto_library(
738    name = "selector_context_proto",
739    srcs = ["selector_context.proto"],
740    deps = [
741        "@com_google_protobuf//:timestamp_proto",
742    ],
743)
744
745cc_proto_library(
746    name = "selector_context_cc_proto",
747    visibility = ["//visibility:public"],
748    deps = [":selector_context_proto"],
749)
750
751java_proto_library(
752    name = "selector_context_java_proto",
753    visibility = ["//visibility:public"],
754    deps = [":selector_context_proto"],
755)
756
757# --------------------------------------------------------------------
758# example_query_result.proto
759
760proto_library(
761    name = "example_query_result_proto",
762    srcs = ["example_query_result.proto"],
763)
764
765java_proto_library(
766    name = "example_query_result_java_proto",
767    deps = [":example_query_result_proto"],
768)
769
770cc_proto_library(
771    name = "example_query_result_cc_proto",
772    deps = [":example_query_result_proto"],
773)
774