blob: 435b27995a88f7baf1c184747e45b7041ebc92a4 [file] [log] [blame]
load(
"//tensorflow:tensorflow.bzl",
"tf_cc_test",
"tf_features_nolayering_check_if_android_or_ios",
"tf_opts_nortti_if_android",
"tf_opts_nortti_if_lite_protos",
)
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")
load("//tensorflow:tensorflow.bzl", "get_compatible_with_cloud")
#
# This is a TF Lite delegate that is powered by TensorFlow's Eager.
#
package(
default_visibility = [
"//tensorflow/compiler/mlir/lite:__subpackages__",
"//tensorflow/lite/android:__subpackages__",
"//tensorflow/lite/toco/tflite:__subpackages__",
],
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"],
copts = tf_opts_nortti_if_lite_protos(),
features = tf_features_nolayering_check_if_android_or_ios(),
deps = [
":util",
":buffer_map_util",
"//tensorflow/lite/c:common",
"//tensorflow/lite:string",
"//tensorflow/lite/kernels/internal:compatibility",
] + select({
"//tensorflow:android": [
"//tensorflow/core:portable_tensorflow_lib_lite",
],
"//tensorflow:ios": [
"//tensorflow/core:portable_tensorflow_lib_lite",
],
"//conditions:default": [
"//tensorflow/c:c_api_internal",
"//tensorflow/core:framework",
],
}),
)
cc_library(
name = "buffer_map_util",
srcs = ["buffer_map_util.cc"],
hdrs = ["buffer_map_util.h"],
copts = tf_opts_nortti_if_lite_protos(),
features = tf_features_nolayering_check_if_android_or_ios(),
deps = [
":util",
"//tensorflow/lite/c:common",
"//tensorflow/lite:string_util",
] + select({
"//tensorflow:android": [
"//tensorflow/core:portable_tensorflow_lib_lite",
],
"//tensorflow:ios": [
"//tensorflow/core:portable_tensorflow_lib_lite",
],
"//conditions:default": [
"//tensorflow/c:c_api_internal",
"//tensorflow/core:framework",
"//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",
"//tensorflow/lite:framework",
"//tensorflow/lite:string_util",
"//tensorflow/lite:util",
"//tensorflow/lite/testing:util",
"@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",
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: `libtensorflowlite_flex.dll`
tflite_flex_shared_library(
name = "tensorflowlite_flex",
)
cc_library(
name = "delegate_symbol",
srcs = [
"delegate_symbol.cc",
],
copts = tflite_copts(),
visibility = ["//visibility:public"],
deps = [
":delegate_only_runtime",
"//tensorflow/lite/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",
],
copts = tflite_copts() + tf_opts_nortti_if_android(),
features = tf_features_nolayering_check_if_android_or_ios(),
visibility = ["//visibility:public"],
deps = [
":buffer_map",
":delegate_data",
":util",
":tflite_subgraph_execute",
"@flatbuffers",
"@com_google_absl//absl/strings:strings",
"//tensorflow/lite/core/api",
"//tensorflow/lite/c:common",
"//tensorflow/lite:kernel_api",
"//tensorflow/lite:macros",
"//tensorflow/lite:minimal_logging",
"//tensorflow/lite:string",
"//tensorflow/lite:string_util",
"//tensorflow/lite:util",
"//tensorflow/lite/delegates/utils:simple_delegate",
"//tensorflow/lite/kernels:kernel_util",
] + select({
"//tensorflow:android": [
"//tensorflow/core:portable_tensorflow_lib_lite",
],
"//tensorflow:ios": [
"//tensorflow/core:portable_tensorflow_lib_lite",
],
"//conditions:default": [
"//tensorflow/core/common_runtime/eager:context",
"//tensorflow/core/common_runtime/eager:execute",
"//tensorflow/core/common_runtime/eager:tensor_handle",
"//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"],
copts = tf_opts_nortti_if_android(),
features = tf_features_nolayering_check_if_android_or_ios(),
visibility = ["//visibility:public"],
deps = [
":buffer_map",
":subgraph_resource",
":util",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/strings",
"@flatbuffers",
"//tensorflow/lite/schema:schema_fbs",
"//tensorflow/lite:cc_api",
"//tensorflow/lite:util",
] + select({
"//tensorflow:android": [
"//tensorflow/core:portable_tensorflow_lib_lite",
],
"//tensorflow:ios": [
"//tensorflow/core:portable_tensorflow_lib_lite",
],
"//conditions:default": [
"//tensorflow/core/common_runtime/eager:context",
"//tensorflow/core/common_runtime/eager:core",
"//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:protobuf",
"//tensorflow/core/platform:status",
"//tensorflow/lite:framework",
"//tensorflow/lite/c:common",
"//tensorflow/lite/core/api:error_reporter",
"//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"],
features = tf_features_nolayering_check_if_android_or_ios(),
deps = [
"//tensorflow/lite:cc_api",
] + select({
"//tensorflow:android": [
"//tensorflow/core:portable_tensorflow_lib_lite",
],
"//tensorflow:ios": [
"//tensorflow/core:portable_tensorflow_lib_lite",
],
"//conditions:default": [
"//tensorflow/core:framework",
"//tensorflow/core:lib",
],
}),
)
tf_cc_test(
name = "kernel_test",
size = "small",
srcs = ["kernel_test.cc"],
tags = ["no_gpu"], # GPU + flex is not officially supported.
deps = [
":delegate",
":delegate_data",
":test_util",
"//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"],
features = tf_features_nolayering_check_if_android_or_ios(),
deps = [
"//tensorflow/lite/c:common",
"//tensorflow/lite:kernel_api",
] + select({
"//tensorflow:android": [
"//tensorflow/core:portable_tensorflow_lib_lite",
],
"//tensorflow:ios": [
"//tensorflow/core:portable_tensorflow_lib_lite",
],
"//conditions:default": [
"//tensorflow/c:c_api_internal",
"//tensorflow/core:lib",
"//tensorflow/core:framework",
],
}),
)
tf_cc_test(
name = "util_test",
size = "small",
srcs = ["util_test.cc"],
deps = [
":util",
"//tensorflow/lite:string",
"//tensorflow/lite/testing:util",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "allowlisted_flex_ops_lib",
srcs = [
"allowlisted_flex_ops.cc",
],
hdrs = [
"allowlisted_flex_ops.h",
"allowlisted_flex_ops_internal.h",
],
compatible_with = get_compatible_with_cloud(),
features = tf_features_nolayering_check_if_android_or_ios(),
visibility = internal_visibility_allowlist(),
deps = select({
"//tensorflow:android": [
"//tensorflow/core:portable_tensorflow_lib_lite",
],
"//tensorflow:ios": [
"//tensorflow/core:portable_tensorflow_lib_lite",
],
"//conditions:default": [
"//tensorflow/core:framework",
],
}),
)
tf_cc_test(
name = "allowlisted_flex_ops_test",
size = "small",
srcs = [
"allowlisted_flex_ops_test.cc",
],
features = tf_features_nolayering_check_if_android_or_ios(),
deps = [
":delegate",
":allowlisted_flex_ops_lib",
"@com_google_googletest//:gtest_main",
] + select({
"//tensorflow:android": [
"//tensorflow/core:portable_tensorflow_lib_lite",
],
"//tensorflow:ios": [
"//tensorflow/core:portable_tensorflow_lib_lite",
],
"//conditions:default": [
"//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/png:png_io",
],
)
cc_library(
name = "tflite_subgraph_execute",
srcs = ["tflite_subgraph_execute.cc"],
copts = tf_opts_nortti_if_android(),
features = tf_features_nolayering_check_if_android_or_ios(),
deps = [
":buffer_map_util",
":subgraph_resource",
":util",
"//tensorflow/lite:cc_api",
"//tensorflow/lite:string_util",
"//tensorflow/lite/c:c_api_types",
"//tensorflow/lite/c:common",
"//tensorflow/lite/kernels:builtin_ops",
"//tensorflow/lite/kernels:kernel_util",
] + select({
"//tensorflow:android": [
"//tensorflow/core:portable_tensorflow_lib_lite",
],
"//tensorflow:ios": [
"//tensorflow/core:portable_tensorflow_lib_lite",
],
"//conditions:default": [
"//tensorflow/core:framework",
"//tensorflow/core:lib",
],
}),
alwayslink = 1,
)