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