xref: /aosp_15_r20/external/federated-compute/fcp/client/engine/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("@org_tensorflow//tensorflow/core/platform:build_config.bzl", "tf_proto_library")
16load("//fcp:config.bzl", "FCP_COPTS")
17
18default_visibility = [
19    "//fcp:internal",
20]
21
22package(
23    default_visibility = default_visibility,
24    licenses = ["notice"],  # Apache 2.0
25)
26
27cc_library(
28    name = "plan_engine",
29    srcs = [
30        "simple_plan_engine.cc",
31    ],
32    hdrs = [
33        "simple_plan_engine.h",
34    ],
35    copts = FCP_COPTS,
36    visibility = default_visibility,
37    deps = [
38        ":common",
39        ":example_iterator_factory",
40        ":plan_engine_helpers",
41        ":tf_wrapper",
42        "//fcp/base",
43        "//fcp/client:histogram_counters_cc_proto",
44        "//fcp/client:interfaces",
45        "//fcp/client:interruptible_runner",
46        "//fcp/client:simple_task_environment",
47        "//fcp/client/opstats:opstats_logger",
48        "//fcp/protos:plan_cc_proto",
49        "@com_google_absl//absl/container:flat_hash_set",
50        "@com_google_absl//absl/status",
51        "@com_google_absl//absl/status:statusor",
52        "@com_google_absl//absl/strings",
53        "@com_google_absl//absl/time",
54        "@org_tensorflow//tensorflow/core:framework",
55        "@org_tensorflow//tensorflow/core:protos_all_cc",
56    ],
57)
58
59cc_library(
60    name = "example_query_plan_engine",
61    srcs = [
62        "example_query_plan_engine.cc",
63    ],
64    hdrs = [
65        "example_query_plan_engine.h",
66    ],
67    copts = FCP_COPTS,
68    visibility = default_visibility,
69    deps = [
70        ":common",
71        ":example_iterator_factory",
72        ":plan_engine_helpers",
73        "//fcp/base",
74        "//fcp/client:example_query_result_cc_proto",
75        "//fcp/client:simple_task_environment",
76        "//fcp/client/opstats:opstats_logger",
77        "//fcp/protos:plan_cc_proto",
78        "//fcp/tensorflow:status",
79        "@com_google_absl//absl/container:flat_hash_map",
80        "@com_google_absl//absl/status",
81        "@com_google_absl//absl/status:statusor",
82        "@org_tensorflow//tensorflow/core:framework",
83        "@org_tensorflow//tensorflow/core/platform:tstring",
84    ],
85)
86
87cc_test(
88    name = "example_query_plan_engine_test",
89    srcs = ["example_query_plan_engine_test.cc"],
90    deps = [
91        ":common",
92        ":example_query_plan_engine",
93        "//fcp/client:client_runner",
94        "//fcp/client:example_query_result_cc_proto",
95        "//fcp/client:test_helpers",
96        "//fcp/protos:plan_cc_proto",
97        "//fcp/tensorflow:external_dataset_op_lib",
98        "//fcp/testing",
99        "@com_google_absl//absl/container:flat_hash_map",
100        "@com_google_absl//absl/status",
101        "@com_google_absl//absl/status:statusor",
102        "@com_google_absl//absl/strings:str_format",
103        "@com_google_googletest//:gtest_main",
104        "@org_tensorflow//tensorflow/c:checkpoint_reader",
105        "@org_tensorflow//tensorflow/c:tf_status_headers",
106        "@org_tensorflow//tensorflow/c:tf_status_helper",
107        "@org_tensorflow//tensorflow/core:framework",
108        "@org_tensorflow//tensorflow/core:protos_all_cc",
109    ],
110)
111
112# A plan-engine independent wrapper around TF that supports cancellation.
113cc_library(
114    name = "tf_wrapper",
115    srcs = ["tf_wrapper.cc"],
116    hdrs = ["tf_wrapper.h"],
117    copts = FCP_COPTS,
118    visibility = ["//visibility:private"],
119    deps = [
120        ":plan_engine_helpers",
121        "//fcp/base",
122        "//fcp/base:future",
123        "//fcp/base:scheduler",
124        "//fcp/client:diag_codes_cc_proto",
125        "//fcp/client:interfaces",
126        "//fcp/client:interruptible_runner",
127        "@com_google_absl//absl/status",
128        "@com_google_absl//absl/status:statusor",
129        "@com_google_absl//absl/time",
130        "@com_google_protobuf//:protobuf",
131        "@org_tensorflow//tensorflow/core:core_cpu",
132    ],
133)
134
135cc_test(
136    name = "tf_wrapper_test",
137    srcs = ["tf_wrapper_test.cc"],
138    deps = [
139        ":tf_wrapper",
140        "//fcp/testing",
141        "@com_google_absl//absl/status",
142        "@com_google_absl//absl/status:statusor",
143        "@com_google_googletest//:gtest_main",
144        "@com_google_protobuf//:protobuf",
145    ],
146)
147
148cc_library(
149    name = "plan_engine_helpers",
150    srcs = ["plan_engine_helpers.cc"],
151    hdrs = ["plan_engine_helpers.h"],
152    copts = FCP_COPTS,
153    visibility = default_visibility,
154    deps = [
155        ":common",
156        ":example_iterator_factory",
157        "//fcp/base",
158        "//fcp/client:diag_codes_cc_proto",
159        "//fcp/client:interfaces",
160        "//fcp/client:simple_task_environment",
161        "//fcp/client/opstats:opstats_logger",
162        "//fcp/client/opstats:opstats_logger_impl",
163        "//fcp/client/opstats:pds_backed_opstats_db",
164        "//fcp/protos:plan_cc_proto",
165        "//fcp/tensorflow:external_dataset",
166        "//fcp/tensorflow:host_object",
167        "@com_google_absl//absl/status",
168        "@com_google_absl//absl/status:statusor",
169        "@org_tensorflow//tensorflow/core:framework",
170    ],
171)
172
173cc_library(
174    name = "tflite_wrapper",
175    srcs = ["tflite_wrapper.cc"],
176    hdrs = ["tflite_wrapper.h"],
177    deps = [
178        ":caching_error_reporter",
179        "//fcp/base",
180        "//fcp/client:interfaces",
181        "//fcp/client:interruptible_runner",
182        "//fcp/client:simple_task_environment",
183        "@com_google_absl//absl/status",
184        "@com_google_absl//absl/status:statusor",
185        "@com_google_absl//absl/strings:str_format",
186        "@com_google_protobuf//:protobuf",
187        "@org_tensorflow//tensorflow/core:framework",
188        "@org_tensorflow//tensorflow/lite:framework_stable",
189        "@org_tensorflow//tensorflow/lite:string_util",
190        "@org_tensorflow//tensorflow/lite/delegates/flex:delegate_only_runtime",
191        "@org_tensorflow//tensorflow/lite/delegates/flex:util",
192        "@org_tensorflow//tensorflow/lite/kernels:builtin_ops",
193    ],
194)
195
196cc_test(
197    name = "tflite_wrapper_test",
198    srcs = ["tflite_wrapper_test.cc"],
199    data = [
200        "//fcp/client/engine/data:join_model.flatbuffer",
201        "//fcp/client/engine/data:length_model.flatbuffer",
202    ],
203    deps = [
204        ":tflite_wrapper",
205        "//fcp/client:interruptible_runner",
206        "//fcp/client:test_helpers",
207        "//fcp/testing",
208        "@com_google_googletest//:gtest_main",
209        "@org_tensorflow//tensorflow/core/kernels:string_join_op",
210        "@org_tensorflow//tensorflow/core/ops:string_ops_op_lib",
211    ],
212)
213
214cc_library(
215    name = "tflite_plan_engine",
216    srcs = [
217        "tflite_plan_engine.cc",
218    ],
219    hdrs = [
220        "tflite_plan_engine.h",
221    ],
222    copts = FCP_COPTS,
223    deps = [
224        ":common",
225        ":example_iterator_factory",
226        ":plan_engine_helpers",
227        ":tflite_wrapper",
228        "//fcp/client:interfaces",
229        "//fcp/client:interruptible_runner",
230        "//fcp/client:simple_task_environment",
231        "//fcp/client/opstats:opstats_logger",
232        "//fcp/protos:plan_cc_proto",
233        "@org_tensorflow//tensorflow/core:framework",
234        "@org_tensorflow//tensorflow/core:protos_all_cc",
235    ],
236)
237
238cc_library(
239    name = "caching_error_reporter",
240    srcs = ["caching_error_reporter.cc"],
241    hdrs = ["caching_error_reporter.h"],
242    deps = [
243        "@com_google_absl//absl/synchronization",
244        "@org_tensorflow//tensorflow/lite/core/api:error_reporter",
245    ],
246)
247
248cc_test(
249    name = "caching_error_reporter_test",
250    srcs = ["caching_error_reporter_test.cc"],
251    deps = [
252        ":caching_error_reporter",
253        "//fcp/testing",
254        "@com_google_absl//absl/strings",
255        "@com_google_googletest//:gtest_main",
256        "@org_tensorflow//tensorflow/lite/core/api:error_reporter",
257    ],
258)
259
260cc_library(
261    name = "common",
262    srcs = ["common.cc"],
263    hdrs = ["common.h"],
264    deps = [
265        ":engine_cc_proto",
266        "//fcp/base",
267        "//fcp/client:interfaces",
268        "//fcp/protos:plan_cc_proto",
269        "@com_google_absl//absl/container:flat_hash_set",
270        "@com_google_absl//absl/status",
271        "@org_tensorflow//tensorflow/core:framework",
272        "@org_tensorflow//tensorflow/core:protos_all_cc",
273    ],
274)
275
276cc_library(
277    name = "example_iterator_factory",
278    hdrs = ["example_iterator_factory.h"],
279    copts = FCP_COPTS,
280    visibility = default_visibility,
281    deps = [
282        "//fcp/client:simple_task_environment",
283        "//fcp/protos:plan_cc_proto",
284        "@com_google_absl//absl/status:statusor",
285    ],
286)
287
288# Runtime protos. Those do not typically get serialized.
289tf_proto_library(
290    name = "engine_proto",
291    srcs = ["engine.proto"],
292    visibility = ["//visibility:public"],
293)
294
295java_proto_library(
296    name = "engine_java_proto",
297    deps = [":engine_proto"],
298)
299
300# Allowing to refer to the cc library generated by the rule above in usual way:
301alias(
302    name = "engine_cc_proto",
303    actual = "engine_proto_cc",
304    visibility = default_visibility,
305)
306