load("@rules_cc//cc:cc_library.bzl", "cc_library") load( "//tensorflow:tensorflow.bzl", "if_android", "if_mobile", "if_not_mobile", "tf_cc_test", "tf_opts_nortti_if_lite_protos", "tf_opts_nortti_if_mobile", ) load("//tensorflow:tensorflow.default.bzl", "get_compatible_with_portable") load("//tensorflow/lite:build_def.bzl", "tflite_copts") load("//tensorflow/lite:special_rules.bzl", "internal_visibility_allowlist") load("//tensorflow/lite/delegates/flex:build_def.bzl", "tflite_flex_cc_library", "tflite_flex_shared_library") default_visibility = [ "//tensorflow/compiler/mlir/lite:__subpackages__", "//tensorflow/lite/android:__subpackages__", "//tensorflow/lite/toco/tflite:__subpackages__", ] # # This is a TF Lite delegate that is powered by TensorFlow's Eager. # package( # copybara:uncomment default_applicable_licenses = ["//tensorflow:LICENSE"], default_visibility = default_visibility, licenses = ["notice"], ) exports_files([ "delegate.h", "exported_symbols.lds", "version_script.lds", ]) cc_library( name = "buffer_map", srcs = ["buffer_map.cc"], hdrs = ["buffer_map.h"], compatible_with = get_compatible_with_portable(), copts = tf_opts_nortti_if_lite_protos(), deps = [ ":buffer_map_util", ":util", "//tensorflow/lite:string", "//tensorflow/lite/core/c:common", "//tensorflow/lite/kernels/internal:compatibility", ] + if_mobile([ "//tensorflow/core:portable_tensorflow_lib_lite", ]) + if_not_mobile([ "//tensorflow/c:c_api_internal", "//tensorflow/core:framework", ]), ) cc_library( name = "buffer_map_util", srcs = ["buffer_map_util.cc"], hdrs = ["buffer_map_util.h"], compatible_with = get_compatible_with_portable(), copts = tf_opts_nortti_if_lite_protos(), deps = [ ":util", "//tensorflow/core/platform:tstring", "//tensorflow/lite:string_util", "//tensorflow/lite:util", "//tensorflow/lite/c:c_api_types", "//tensorflow/lite/core/c:common", "//tensorflow/lite/experimental/resource", "@com_google_absl//absl/status", "@eigen_archive//:eigen3", ] + if_mobile([ "//tensorflow/core:portable_tensorflow_lib_lite", ]) + if_not_mobile([ "//tensorflow/c:c_api_internal", "//tensorflow/core:framework", "//tensorflow/c:tf_tensor_internal", "//tensorflow/core:protos_all_cc", "//tensorflow/core/platform:status", ]), ) tf_cc_test( name = "buffer_map_test", size = "small", srcs = ["buffer_map_test.cc"], deps = [ ":buffer_map", ":buffer_map_util", ":util", "//tensorflow/core:framework", "//tensorflow/lite:framework", "//tensorflow/lite:string_util", "//tensorflow/lite:util", "//tensorflow/lite/core/c:c_api_types", "//tensorflow/lite/testing:util", "@com_google_absl//absl/status", "@com_google_googletest//:gtest_main", ], ) # Define the standard flex delegate library, that pulls in the standard set # of TensorFlow ops and kernels, using tflite_flex_cc_library with no # models parameter. Custom flex delegate can be defined with # tflite_flex_cc_library if the parameter models is provided. Tensorflow # user-provided ops could also be supported by passing to additional_deps. # Ex: # tflite_flex_cc_library( # name = "sample_delegate", # models = ["model1.tflite", "model2.tflite"], # additional_deps = ["your_custom_ops_lib"], # ) tflite_flex_cc_library( name = "delegate", compatible_with = get_compatible_with_portable(), visibility = ["//visibility:public"], ) # Compared to the library above, this one doesn't define a strong symbol for # AcquireFlexDelegate(). This is useful if one doesn't want the default flex # delegate to be automatically applied when building the interpreter. tflite_flex_cc_library( name = "delegate_without_symbol", link_symbol = False, visibility = ["//visibility:public"], ) # Shared lib target for convenience, pulls in the standard set of TensorFlow # ops and kernels. The output library name is platform dependent: # - Linux/Android: `libtensorflowlite_flex.so` # - Mac: `libtensorflowlite_flex.dylib` # - Windows: `tensorflowlite_flex.dll` tflite_flex_shared_library( name = "tensorflowlite_flex", ) cc_library( name = "delegate_symbol", srcs = [ "delegate_symbol.cc", ], compatible_with = get_compatible_with_portable(), copts = tflite_copts(), visibility = ["//visibility:public"], deps = [ ":delegate_only_runtime", "//tensorflow/lite/core/c:c_api_types", ], alwayslink = 1, ) # Delegate implementation that does *not* pull in the standard set of TensorFlow # ops and kernels. cc_library( name = "delegate_only_runtime", srcs = [ "delegate.cc", "kernel.cc", "kernel.h", ], hdrs = [ "delegate.h", ], compatible_with = get_compatible_with_portable(), copts = tflite_copts() + tf_opts_nortti_if_mobile(), visibility = ["//visibility:public"], deps = [ ":buffer_map", ":delegate_data", ":tflite_subgraph_execute", ":util", "//tensorflow/core:session_options", "//tensorflow/core/tfrt/fallback:op_kernel_runner", "//tensorflow/lite:kernel_api", "//tensorflow/lite:macros", "//tensorflow/lite:minimal_logging", "//tensorflow/lite:string", "//tensorflow/lite:string_util", "//tensorflow/lite:util", "//tensorflow/lite/core:subgraph", "//tensorflow/lite/core/api", "//tensorflow/lite/core/c:common", "//tensorflow/lite/delegates/utils:simple_delegate", "//tensorflow/lite/kernels:kernel_util", "@com_google_absl//absl/container:flat_hash_set", "@com_google_absl//absl/container:inlined_vector", "@com_google_absl//absl/log:check", "@com_google_absl//absl/status", "@com_google_absl//absl/strings", "@flatbuffers", ] + if_mobile([ "//tensorflow/core:portable_tensorflow_lib_lite", ]) + if_not_mobile([ "//tensorflow/core/common_runtime/eager:context", "//tensorflow/core:lib", "//tensorflow/core:protos_all_cc", "//tensorflow/core:framework", ]), alwayslink = 1, ) tf_cc_test( name = "delegate_test", size = "small", srcs = ["delegate_test.cc"], tags = [ "no_gpu", # GPU + flex is not officially supported. ], deps = [ ":delegate", ":test_util", "//tensorflow/lite:shared_library", "//tensorflow/lite/kernels:test_util", "@com_google_googletest//:gtest_main", ], ) cc_library( name = "delegate_data", srcs = ["delegate_data.cc"], hdrs = ["delegate_data.h"], compatible_with = get_compatible_with_portable(), copts = tf_opts_nortti_if_mobile(), visibility = ["//visibility:public"], deps = [ ":buffer_map", ":subgraph_resource", ":util", "//tensorflow/lite:cc_api_experimental", "//tensorflow/lite:util", "//tensorflow/lite/core/c:common", "//tensorflow/lite/schema:schema_fbs", "@com_google_absl//absl/memory", "@com_google_absl//absl/strings", "@flatbuffers", ] + if_mobile([ "//tensorflow/core:portable_tensorflow_lib_lite", ]) + if_not_mobile([ "//tensorflow/core/common_runtime/eager:context", "//tensorflow/core/common_runtime/eager:core_no_xla", "//tensorflow/core:core_cpu", "//tensorflow/core:framework", "//tensorflow/core:lib", "//tensorflow/core:protos_all_cc", ]), ) tf_cc_test( name = "delegate_data_test", size = "small", srcs = ["delegate_data_test.cc"], deps = [ ":delegate_data", "//tensorflow/core:test", "//tensorflow/core/common_runtime/eager:context", "//tensorflow/core/platform:mutex", "//tensorflow/core/platform:protobuf", "//tensorflow/core/platform:status", "//tensorflow/lite:framework", "//tensorflow/lite/core/api:error_reporter", "//tensorflow/lite/core/c:common", "//tensorflow/lite/kernels:subgraph_test_util", "//tensorflow/lite/testing:util", "@com_google_absl//absl/memory", "@com_google_absl//absl/strings", "@com_google_googletest//:gtest_main", ], ) cc_library( name = "subgraph_resource", hdrs = ["subgraph_resource.h"], compatible_with = get_compatible_with_portable(), copts = if_android(["-Wno-private-header"]), deps = [ "//tensorflow/core/platform:mutex", "//tensorflow/core/platform:thread_annotations", "//tensorflow/lite:cc_api_experimental", "//tensorflow/lite/core/c:common", ] + if_mobile([ "//tensorflow/core:portable_tensorflow_lib_lite", ]) + if_not_mobile([ "//tensorflow/core:framework", "//tensorflow/core:lib", ]), ) tf_cc_test( name = "kernel_test", size = "small", srcs = [ "kernel.h", "kernel_test.cc", ], tags = ["no_gpu"], # GPU + flex is not officially supported. deps = [ ":delegate", ":delegate_data", ":test_util", "//tensorflow/core/platform:status", "//tensorflow/core/tfrt/fallback:op_kernel_runner", "//tensorflow/lite/core/c:c_api_types", "//tensorflow/lite/core/c:common", "//tensorflow/lite/delegates/utils:simple_delegate", "//tensorflow/lite/kernels:kernel_util", "@com_google_googletest//:gtest_main", ], ) cc_library( name = "test_util", testonly = True, srcs = ["test_util.cc"], hdrs = ["test_util.h"], visibility = internal_visibility_allowlist(), deps = [ "//tensorflow/c:c_api_internal", "//tensorflow/lite:string", "//tensorflow/lite/kernels:test_util", "@com_google_absl//absl/memory", "@flatbuffers", ], ) cc_library( name = "util", srcs = ["util.cc"], hdrs = ["util.h"], compatible_with = get_compatible_with_portable(), #TODO(b/206038955): Consider restrict the visibility to '//third_party/fcp/client:__subpackages__'. visibility = ["//visibility:public"], deps = [ "//tensorflow/core:protos_all_cc", "//tensorflow/lite:kernel_api", "//tensorflow/lite:string_util", "//tensorflow/lite:util", "//tensorflow/lite/c:common", "//tensorflow/lite/core/c:c_api_types", "//tensorflow/lite/core/c:common", "//tensorflow/lite/kernels/internal:tensor", "@com_google_absl//absl/status", "@com_google_absl//absl/status:statusor", "@com_google_absl//absl/strings", "@com_google_absl//absl/strings:str_format", ] + if_mobile([ "//tensorflow/core:portable_tensorflow_lib_lite", ]) + if_not_mobile([ "//tensorflow/c:c_api_internal", "//tensorflow/core:lib", "//tensorflow/core:framework", "//tensorflow/core/protobuf:error_codes_proto_impl_cc", ]), ) tf_cc_test( name = "util_test", size = "small", srcs = ["util_test.cc"], deps = [ ":util", "//tensorflow/c:tf_datatype", "//tensorflow/core:framework", "//tensorflow/core:portable_gif_internal", "//tensorflow/core:protos_all_cc", "//tensorflow/core/platform:errors", "//tensorflow/core/platform:status", "//tensorflow/core/platform:tstring", "//tensorflow/core/protobuf:error_codes_proto_impl_cc", "//tensorflow/lite:string", "//tensorflow/lite:string_util", "//tensorflow/lite:util", "//tensorflow/lite/core/c:c_api_types", "//tensorflow/lite/core/c:common", "@com_google_absl//absl/status", "@com_google_googletest//:gtest_main", ], ) tf_cc_test( name = "allowlisted_flex_ops_test", size = "small", srcs = [ "allowlisted_flex_ops_test.cc", ], extra_copts = if_android(["-Wno-private-header"]), deps = [ ":delegate", "//tensorflow/compiler/mlir/lite/delegates/flex:allowlisted_flex_ops_lib", "@com_google_googletest//:gtest_main", ] + if_mobile([ "//tensorflow/core:portable_tensorflow_lib_lite", ]) + if_not_mobile([ "//tensorflow/core:framework", ]), ) # Alias to support selective build of image ops. # TODO(b/163285312): Remove after tensorflow/core refactoring completed. cc_library( name = "portable_images_lib", visibility = ["//visibility:public"], deps = [ "//tensorflow/core:portable_gif_internal", "//tensorflow/core:portable_jpeg_internal", "//tensorflow/core/lib/jxl:jxl_io", "//tensorflow/core/lib/png:png_io", "//tensorflow/core/lib/webp:webp_io", ], ) cc_library( name = "tflite_subgraph_execute", srcs = ["tflite_subgraph_execute.cc"], compatible_with = get_compatible_with_portable(), copts = tf_opts_nortti_if_mobile(), deps = [ ":buffer_map_util", ":subgraph_resource", ":util", "//tensorflow/lite:cc_api_experimental", "//tensorflow/lite:string_util", "//tensorflow/lite/core/c:c_api_types", "//tensorflow/lite/core/c:common", "//tensorflow/lite/kernels:builtin_ops", "//tensorflow/lite/kernels:kernel_util", "//tensorflow/lite/kernels/internal:tensor", "@com_google_absl//absl/strings", "@com_google_absl//absl/strings:str_format", ] + if_mobile([ "//tensorflow/core:portable_tensorflow_lib_lite", ]) + if_not_mobile([ "//tensorflow/core:framework", "//tensorflow/core:lib", "//tensorflow/c:tf_tensor_internal", ]), alwayslink = 1, )