blob: fa29d6b6315a7a95b2bf2bc0c4901f095ed19ef5 [file] [log] [blame]
load("//tensorflow:tensorflow.bzl", "if_google", "if_not_windows", "if_oss", "tf_cc_test")
load("//tensorflow/lite:build_def.bzl", "tflite_cc_shared_object", "tflite_copts", "tflite_copts_warnings", "tflite_self_contained_libs_test_suite")
load("//tensorflow/lite:special_rules.bzl", "SPECIAL_RULES_DEPS", "internal_visibility_allowlist", "tflite_portable_test_suite")
load("//tensorflow:tensorflow.bzl", "get_compatible_with_portable")
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
load("@bazel_skylib//rules:common_settings.bzl", "bool_flag")
package(
default_visibility = ["//visibility:public"],
licenses = ["notice"],
)
exports_files(glob([
"testdata/*.bin",
"testdata/*.pb",
"testdata/*.tflite",
"testdata/*.csv",
"models/testdata/*",
]) + [
"create_op_resolver.h",
"create_op_resolver_with_selected_ops.cc",
])
# Config to keep symbol tables even for optimized builds. Debug builds already
# preserve symbols.
config_setting(
name = "tflite_keep_symbols",
define_values = {"tflite_keep_symbols": "true"},
)
config_setting(
name = "gemmlowp_profiling",
values = {
"copt": "-DGEMMLOWP_PROFILING",
},
)
config_setting(
name = "tflite_use_simple_memory_planner",
values = {
"copt": "-DTFLITE_USE_SIMPLE_MEMORY_PLANNER",
},
)
config_setting(
name = "mips",
values = {
"cpu": "mips",
},
)
config_setting(
name = "mips64",
values = {
"cpu": "mips64",
},
)
# Without "cpu":"k8", when building with --copt=-DTF_LITE_STATIC_MEMORY, we get
# the following error:
# Multiple matches are not allowed unless one is unambiguously more specialized.
#
# The reason for this is that some of the tflite BUILD files (e.g.
# kernels/internal/BUILD) have config_settings based on "cpu":"k8" and the
# tf_lite_static_memory config_setting needs to be more specialized. It may be
# possible to change the existing config_settings to allow for
# tf_lite_static_memory to not require "cpu":"k8". We are not attempting that
# since we currently only using the BUILD files for x86.
config_setting(
name = "tf_lite_static_memory",
values = {
"copt": "-DTF_LITE_STATIC_MEMORY",
"cpu": "k8",
},
)
# Flag to disable mmap: Fuchsia's minfs does not support mmap (blobfs
# does, which is why we don't always disable mmap on Fuchsia).
# TODO(b/227339138): dynamically decide depending on the filesystem.
bool_flag(
name = "enable_fuchsia_mmap",
build_setting_default = True,
)
config_setting(
name = "fuchsia_mmap_disabled",
flag_values = if_google(
{
":enable_fuchsia_mmap": "False",
"//tools/cpp:cc_target_os": "fuchsia",
},
{
":enable_fuchsia_mmap": "False",
},
),
values = if_oss(
# TODO(b/149248802) When we have a Fuchsia Bazel SDK update to use the values it sets.
{"cpu": "fuchsia"},
{},
),
)
STABLE_FRAMEWORK_LIB_HDRS = [
"allocation.h",
"context_util.h",
"core/macros.h",
"error_reporter.h",
"interpreter.h",
"model.h",
"model_builder.h",
"interpreter_builder.h",
"mutable_op_resolver.h",
"op_resolver.h",
"stderr_reporter.h",
]
FRAMEWORK_LIB_HDRS = STABLE_FRAMEWORK_LIB_HDRS + [
"context.h",
"core/subgraph.h",
"graph_info.h",
"interpreter_options.h",
"logger.h",
"optional_debug_tools.h",
"signature_runner.h",
]
exports_files(
FRAMEWORK_LIB_HDRS,
visibility = ["//tensorflow/lite/core/shims:__subpackages__"],
)
cc_library(
name = "version",
srcs = ["//tensorflow/core/public:version.h"],
hdrs = ["version.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts_warnings(),
)
# TODO(b/128420794): Migrate clients to use :version directly.
alias(
name = "schema_fbs_version",
actual = ":version",
# avoid_dep tells build_cleaner to not use schema_fbs_version.
tags = ["avoid_dep"],
)
cc_library(
name = "arena_planner",
srcs = ["arena_planner.cc"],
hdrs = ["arena_planner.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts_warnings(),
deps = [
":graph_info",
":memory_planner",
":simple_memory_arena",
":util",
"//tensorflow/lite/c:common",
],
)
cc_library(
name = "arena_planner_with_profiler",
testonly = True,
srcs = ["arena_planner.cc"],
hdrs = ["arena_planner.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts_warnings() + ["-DTF_LITE_TENSORFLOW_PROFILER"],
deps = [
":graph_info",
":memory_planner",
":simple_memory_arena_with_profiler",
":util",
"//tensorflow/lite/c:common",
],
)
cc_test(
name = "arena_planner_test",
size = "small",
srcs = ["arena_planner_test.cc"],
tags = [
"tflite_not_portable_android",
],
deps = [
":arena_planner_with_profiler",
":graph_info",
"//tensorflow/core:tflite_portable_logging",
"//tensorflow/lite/c:common",
"//tensorflow/lite/testing:util",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "simple_planner",
srcs = ["simple_planner.cc"],
hdrs = ["simple_planner.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts_warnings(),
deps = [
":graph_info",
":memory_planner",
":util",
"//tensorflow/lite/c:common",
],
)
cc_test(
name = "simple_planner_test",
size = "small",
srcs = ["simple_planner_test.cc"],
deps = [
":graph_info",
":simple_planner",
"//tensorflow/core:tflite_portable_logging",
"//tensorflow/lite/c:common",
"//tensorflow/lite/testing:util",
"@com_google_googletest//:gtest_main",
],
)
# Main library. No ops are included here.
# TODO(aselle): Resolve problems preventing C99 usage.
cc_library(
name = "context",
hdrs = ["context.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts_warnings(),
deps = ["//tensorflow/lite/c:common"],
)
cc_library(
name = "external_cpu_backend_context",
srcs = ["external_cpu_backend_context.cc"],
hdrs = ["external_cpu_backend_context.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts_warnings(),
deps = [
"//tensorflow/lite/c:common",
],
)
cc_library(
name = "graph_info",
srcs = ["graph_info.cc"],
hdrs = ["graph_info.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts_warnings(),
deps = [
":kernel_api",
"//tensorflow/lite/c:common",
],
)
cc_library(
name = "memory_planner",
hdrs = ["memory_planner.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts_warnings(),
deps = ["//tensorflow/lite/c:common"],
)
cc_library(
name = "simple_memory_arena",
srcs = ["simple_memory_arena.cc"],
hdrs = ["simple_memory_arena.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts() + tflite_copts_warnings(),
deps = [
":macros",
":tensorflow_profiler_logger_shim",
"//tensorflow/lite/c:common",
],
)
cc_library(
name = "simple_memory_arena_with_profiler",
testonly = True,
srcs = ["simple_memory_arena.cc"],
hdrs = ["simple_memory_arena.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts() + tflite_copts_warnings() + ["-DTF_LITE_TENSORFLOW_PROFILER"],
deps = [
":macros",
":tensorflow_profiler_logger_shim",
"//tensorflow/lite/c:common",
],
)
# A config for enabling tensorflow profiler in TFLite. Currently, it only supports dynamic
# allocation. Add '--define=tflite_tensorflow_profiler=true' in your build command line to use it.
config_setting(
name = "tensorflow_profiler_config",
define_values = {"tflite_tensorflow_profiler": "true"},
)
# This is intended to be used only by allocators.
cc_library(
name = "tensorflow_profiler_logger_shim",
srcs = ["tensorflow_profiler_logger_shim.cc"],
hdrs = ["tensorflow_profiler_logger.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts_warnings(),
deps = [
":macros",
],
alwayslink = 1,
)
# Benchmarks should link this library to see the actual result.
cc_library(
name = "tensorflow_profiler_logger",
srcs = ["tensorflow_profiler_logger.cc"],
hdrs = ["tensorflow_profiler_logger.h"],
copts = tflite_copts_warnings(),
deps = [
":macros",
"//tensorflow/core/profiler/lib:scoped_memory_debug_annotation",
"//tensorflow/core/profiler/lib:traceme",
"//tensorflow/lite/c:common",
"//tensorflow/lite/kernels:kernel_util",
],
alwayslink = 1,
)
cc_library(
name = "simple_memory_arena_debug_dump",
srcs = ["simple_memory_arena_debug_dump.cc"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts_warnings(),
deps = [
":simple_memory_arena",
],
alwayslink = 1,
)
cc_library(
name = "builtin_op_data",
hdrs = ["builtin_op_data.h"],
compatible_with = get_compatible_with_portable(),
deps = ["//tensorflow/lite/c:common"],
)
cc_library(
name = "kernel_api",
hdrs = [
"builtin_op_data.h",
"builtin_ops.h",
"context_util.h",
],
compatible_with = get_compatible_with_portable(),
deps = ["//tensorflow/lite/c:common"],
)
cc_library(
name = "builtin_ops",
hdrs = ["builtin_ops.h"],
compatible_with = get_compatible_with_portable(),
)
exports_files(["builtin_ops.h"])
cc_library(
name = "string",
hdrs = [
"string_type.h",
],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts_warnings(),
)
cc_library(
name = "allocation",
srcs = [
"allocation.cc",
] + select({
"//tensorflow:android": [
"mmap_allocation.cc",
],
"//tensorflow:windows": [
"mmap_allocation_disabled.cc",
],
":fuchsia_mmap_disabled": [
"mmap_allocation_disabled.cc",
],
"//conditions:default": [
"mmap_allocation.cc",
],
}),
hdrs = [
"allocation.h",
],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts_warnings(),
deps = [
":string",
"//tensorflow/lite/c:common",
"//tensorflow/lite/core/api",
],
)
cc_library(
name = "model_builder",
srcs = ["model_builder.cc"],
hdrs = ["model_builder.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts_warnings(),
visibility = internal_visibility_allowlist(),
deps = [
":allocation",
":mutable_op_resolver",
":stderr_reporter",
":string",
"//tensorflow/lite/c:common",
"//tensorflow/lite/core/api:error_reporter",
"//tensorflow/lite/core/api:op_resolver",
"//tensorflow/lite/core/api:verifier",
"//tensorflow/lite/schema:schema_fbs",
"@flatbuffers",
],
)
# The library that implements the full C++ API.
# See also 'framework' below, which is the corresponding public target.
# DEPRECATED: use 'framework_stable' or 'framework' instead.
alias(
name = "framework_lib",
actual = "framework",
visibility = ["//tensorflow/lite:__subpackages__"],
)
# The public target for the full C++ API, including experimental APIs.
#
# Experimental APIs are functional, tested and usable in production; however,
# the corresponding API surface has not been finalized, and is subject to
# change.
alias(
name = "framework",
actual = "framework_experimental",
)
# The public target for the C++ API excluding experimental APIs.
# TODO(ahentz): investigate dependency on gemm_support requiring usage of tf_copts.
cc_library(
name = "framework_stable",
srcs = [],
hdrs = FRAMEWORK_LIB_HDRS,
compatible_with = get_compatible_with_portable(),
copts = tflite_copts() + tflite_copts_warnings(),
deps = [
":allocation",
":cc_api_stable",
":external_cpu_backend_context",
":graph_info",
":kernel_api",
":macros",
":memory_planner",
":mutable_op_resolver",
":stderr_reporter",
":string",
":type_to_tflitetype",
":util",
"//tensorflow/lite/c:common",
"//tensorflow/lite/core/api",
"//tensorflow/lite/core/api:verifier",
"//tensorflow/lite/experimental/resource",
"//tensorflow/lite/internal:signature_def",
"//tensorflow/lite/profiling:root_profiler",
"//tensorflow/lite/schema:schema_fbs",
"@flatbuffers//:runtime_cc",
],
)
# The full C++ API, including experimental APIs.
#
# Experimental APIs are functional, tested and usable in production; however,
# the corresponding API surface has not been finalized, and is subject to
# change.
#
# Note that if you have code which depends on both stable and experimental API
# features, it's fine to depend only on 'framework_experimental', since
# that includes 'framework_stable' as a subset.
cc_library(
name = "framework_experimental",
srcs = [],
hdrs = FRAMEWORK_LIB_HDRS,
compatible_with = get_compatible_with_portable(),
copts = tflite_copts() + tflite_copts_warnings(),
deps = [
":allocation",
":cc_api_experimental",
":external_cpu_backend_context",
":graph_info",
":kernel_api",
":macros",
":memory_planner",
":model_builder",
":mutable_op_resolver",
":optional_debug_tools",
":stderr_reporter",
":string",
":type_to_tflitetype",
":util",
"//tensorflow/lite/c:common",
"//tensorflow/lite/core/api",
"//tensorflow/lite/core/api:verifier",
"//tensorflow/lite/experimental/resource",
"//tensorflow/lite/internal:signature_def",
"//tensorflow/lite/profiling:root_profiler",
"//tensorflow/lite/schema:schema_fbs",
"@flatbuffers//:runtime_cc",
],
alwayslink = 1, # TODO(b/161243354): eliminate this.
)
# The key parts of the C++ API. This target defines the TF Lite classes for
# loading models and interpreting them.
# DEPRECATED: prefer to depend on :cc_api_stable or :cc_api_experimental.
alias(
name = "cc_api",
actual = "cc_api_experimental",
visibility = [
"//tensorflow/lite/core/shims:__subpackages__",
"//tensorflow/lite/delegates/flex:__subpackages__",
"//tensorflow/lite/kernels:__subpackages__",
],
)
# The key parts of the C++ API, excluding experimental APIs.
# This target defines the TF Lite classes for loading models and interpreting them.
#
# This target has restricted visibility; for a public target that exposes
# these APIs, see 'framework_stable' above.
cc_library(
name = "cc_api_stable",
srcs = [
"core/subgraph.cc",
"core/subgraph.h",
"interpreter.cc",
"interpreter_builder.cc",
"logger.cc",
"signature_runner.h",
],
hdrs = [
"interpreter.h",
"interpreter_builder.h",
"interpreter_options.h",
"logger.h",
"model.h",
"model_builder.h",
],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts() + tflite_copts_warnings(),
visibility = [
"//tensorflow/lite/core/shims:__subpackages__",
"//tensorflow/lite/delegates/flex:__subpackages__",
"//tensorflow/lite/kernels:__subpackages__",
],
deps = [
":allocation",
":external_cpu_backend_context",
":graph_info",
":kernel_api",
":macros",
":memory_planner",
":minimal_logging",
":model_builder",
":mutable_op_resolver",
":shared_library",
":simple_memory_arena",
":stderr_reporter",
":string",
":tensorflow_profiler_logger_shim",
":type_to_tflitetype",
":util",
":version",
"@flatbuffers//:runtime_cc",
"@ruy//ruy:denormal",
"//tensorflow/lite/c:c_api_types",
"//tensorflow/lite/c:common",
"//tensorflow/lite/c:common_internal",
"//tensorflow/lite/core/api",
"//tensorflow/lite/core/api:verifier",
"//tensorflow/lite/delegates:telemetry",
"//tensorflow/lite/delegates/xnnpack:tflite_with_xnnpack_qs8",
"//tensorflow/lite/delegates/xnnpack:tflite_with_xnnpack_qu8",
"//tensorflow/lite/experimental/resource",
"//tensorflow/lite/internal:signature_def",
"//tensorflow/lite/kernels/internal:compatibility",
"//tensorflow/lite/profiling:platform_profiler",
"//tensorflow/lite/profiling:root_profiler",
"//tensorflow/lite/schema:schema_fbs",
"//tensorflow/lite/schema:schema_utils",
] + select({
":tflite_use_simple_memory_planner": [
":simple_planner",
],
"//conditions:default": [
":arena_planner",
],
}),
alwayslink = 1, # TODO(b/161243354): eliminate this.
)
# The key parts of the C++ API, including experimental APIs.
#
# This target has restricted visibility; for a public target that exposes
# these APIs, see 'framework_experimental' above.
cc_library(
name = "cc_api_experimental",
srcs = [
"interpreter_experimental.cc",
"signature_runner.cc",
],
hdrs = [
"core/subgraph.h",
"graph_info.h",
"interpreter.h",
"interpreter_builder.h",
"interpreter_options.h",
"logger.h",
"model.h",
"model_builder.h",
"signature_runner.h",
],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts() + tflite_copts_warnings(),
visibility = [
"//tensorflow/lite/core/shims:__subpackages__",
"//tensorflow/lite/delegates/flex:__subpackages__",
"//tensorflow/lite/kernels:__subpackages__",
],
deps = [
":allocation",
":builtin_ops",
":cc_api_stable",
":external_cpu_backend_context",
":graph_info",
":kernel_api",
":macros",
":memory_planner",
":minimal_logging",
":mutable_op_resolver",
":stderr_reporter",
":string",
":type_to_tflitetype",
":util",
"@flatbuffers//:runtime_cc",
"@ruy//ruy:denormal",
"//tensorflow/lite/c:c_api_types",
"//tensorflow/lite/c:common",
"//tensorflow/lite/core/api",
"//tensorflow/lite/core/api:verifier",
"//tensorflow/lite/experimental/resource",
"//tensorflow/lite/internal:signature_def",
"//tensorflow/lite/profiling:root_profiler",
"//tensorflow/lite/schema:schema_fbs",
] + select({
":tflite_use_simple_memory_planner": [
":simple_planner",
],
"//conditions:default": [
":arena_planner",
],
}),
alwayslink = 1, # TODO(b/161243354): eliminate this.
)
cc_library(
name = "optional_debug_tools",
srcs = [
"optional_debug_tools.cc",
],
hdrs = ["optional_debug_tools.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts() + tflite_copts_warnings(),
visibility = [
"//visibility:public",
],
deps = [
":kernel_api",
":macros",
"//tensorflow/lite:cc_api_experimental",
"//tensorflow/lite/c:common",
"//tensorflow/lite/schema:schema_fbs",
],
)
cc_library(
name = "error_reporter",
hdrs = ["error_reporter.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts() + tflite_copts_warnings(),
visibility = [
"//visibility:public",
],
deps = [
"//tensorflow/lite:stderr_reporter",
"//tensorflow/lite/core/api:error_reporter",
],
)
cc_library(
name = "stderr_reporter",
srcs = ["stderr_reporter.cc"],
hdrs = ["stderr_reporter.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts() + tflite_copts_warnings(),
visibility = [
"//visibility:public",
],
deps = [
":minimal_logging",
"//tensorflow/lite/c:common",
"//tensorflow/lite/core/api:error_reporter",
],
)
cc_library(
name = "op_resolver",
hdrs = ["op_resolver.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts() + tflite_copts_warnings(),
visibility = [
"//visibility:public",
],
deps = [
"//tensorflow/lite:mutable_op_resolver",
"//tensorflow/lite/core/api:op_resolver",
],
)
cc_library(
name = "mutable_op_resolver",
srcs = ["mutable_op_resolver.cc"],
hdrs = ["mutable_op_resolver.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts() + tflite_copts_warnings(),
visibility = [
"//visibility:public",
],
deps = [
":util",
"//tensorflow/lite/c:common",
"//tensorflow/lite/core/api:op_resolver",
"//tensorflow/lite/core/api:op_resolver_internal",
"//tensorflow/lite/schema:schema_fbs",
],
)
cc_library(
name = "string_util",
srcs = ["string_util.cc"],
hdrs = ["string_util.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts_warnings(),
deps = [
":string",
"//tensorflow/lite/c:common",
],
)
# Link this library to inject XNNPACK delegate to TFLite runtime automatically
# by utilizing the weak symbols if they're supported by the platform.
cc_library(
name = "tflite_with_xnnpack",
srcs = ["tflite_with_xnnpack.cc"],
copts = tflite_copts() + tflite_copts_warnings(),
linkstatic = True,
deps = [
"//tensorflow/lite/c:common",
"//tensorflow/lite/delegates/xnnpack:xnnpack_delegate",
],
alwayslink = 1,
)
# Enables applying XNNPACK delegate for float models in TFLite runtime.
# WARNING: This build flag is experimental and subject to change.
config_setting(
name = "tflite_with_xnnpack_explicit_true",
define_values = {"tflite_with_xnnpack": "true"},
)
config_setting(
name = "tflite_with_xnnpack_explicit_false",
define_values = {"tflite_with_xnnpack": "false"},
)
cc_library(
name = "tflite_with_xnnpack_enabled",
compatible_with = get_compatible_with_portable(),
defines = ["TFLITE_BUILD_WITH_XNNPACK_DELEGATE"],
visibility = ["//visibility:private"],
deps = [
"//tensorflow/lite/delegates/xnnpack:xnnpack_delegate",
],
)
cc_library(
name = "tflite_with_xnnpack_default",
compatible_with = get_compatible_with_portable(),
visibility = ["//visibility:private"],
# Note: adding ":tflite_with_xnnpack_enabled" to the values of following
# configuration conditions will make TFLite interpreter to apply XNNPACK
# delegate by default.
deps = select({
"//tensorflow:macos": [],
"//tensorflow:fuchsia": [],
"//conditions:default": [":tflite_with_xnnpack_enabled"],
}),
)
cc_library(
name = "tflite_with_xnnpack_optional",
srcs = ["tflite_with_xnnpack_optional.cc"],
hdrs = [
"core/macros.h",
"tflite_with_xnnpack_optional.h",
],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts() + tflite_copts_warnings(),
deps = [
"//tensorflow/lite/c:common",
] + select({
":tflite_with_xnnpack_explicit_true": [
"//tensorflow/lite/delegates/xnnpack:xnnpack_delegate_hdrs_only",
":tflite_with_xnnpack_enabled",
],
":tflite_with_xnnpack_explicit_false": [],
"//conditions:default": [
"//tensorflow/lite/delegates/xnnpack:xnnpack_delegate_hdrs_only",
":tflite_with_xnnpack_default",
],
}),
)
cc_test(
name = "string_util_test",
size = "small",
srcs = ["string_util_test.cc"],
features = ["-dynamic_link_test_srcs"], # see go/dynamic_link_test_srcs
deps = [
":framework",
":string",
":string_util",
"//tensorflow/lite/c:common",
"//tensorflow/lite/testing:util",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "interpreter_test_util",
testonly = True,
hdrs = ["interpreter_test_util.h"],
deps = [
":builtin_op_data",
":external_cpu_backend_context",
":framework",
":string_util",
":version",
"//tensorflow/lite/c:common",
"//tensorflow/lite/core/api",
"//tensorflow/lite/internal:signature_def",
"//tensorflow/lite/kernels:builtin_ops",
"//tensorflow/lite/kernels:cpu_backend_context",
"//tensorflow/lite/kernels:kernel_util",
"//tensorflow/lite/kernels/internal:compatibility",
"//tensorflow/lite/schema:schema_fbs",
"//tensorflow/lite/testing:util",
"//third_party/eigen3",
"@com_google_googletest//:gtest",
],
)
# Test main interpreter
cc_test(
name = "interpreter_test",
size = "small",
srcs = [
"interpreter_test.cc",
],
features = ["-dynamic_link_test_srcs"], # see go/dynamic_link_test_srcs
tags = [
"tflite_smoke_test",
],
deps = [
":external_cpu_backend_context",
":framework",
":interpreter_test_util",
":string",
":string_util",
":util",
"//tensorflow/lite/c:c_api_types",
"//tensorflow/lite/c:common",
"//tensorflow/lite/delegates/utils:simple_delegate",
"//tensorflow/lite/kernels:builtin_ops",
"//tensorflow/lite/kernels:kernel_util",
"//tensorflow/lite/kernels/internal:compatibility",
"//tensorflow/lite/testing:util",
"//third_party/eigen3",
"@com_google_googletest//:gtest_main",
],
)
# Test subgraph.
cc_test(
name = "subgraph_test",
size = "small",
srcs = [
"core/subgraph_test.cc",
],
deps = [
":framework",
"//tensorflow/lite/kernels:builtin_ops",
"//tensorflow/lite/testing:util",
"@com_google_googletest//:gtest_main",
],
)
# Test signature runner.
cc_test(
name = "signature_runner_test",
size = "small",
srcs = ["signature_runner_test.cc"],
data = [
"testdata/multi_signatures.bin",
],
deps = [
":framework",
"//tensorflow/lite/kernels:builtin_ops",
"//tensorflow/lite/schema:schema_fbs",
"//tensorflow/lite/testing:util",
"@com_google_googletest//:gtest_main",
],
)
# Test graph utils
cc_test(
name = "graph_info_test",
size = "small",
srcs = ["graph_info_test.cc"],
features = ["-dynamic_link_test_srcs"], # see go/dynamic_link_test_srcs
deps = [
":framework",
"//tensorflow/lite/c:common",
"//tensorflow/lite/testing:util",
"@com_google_googletest//:gtest_main",
],
)
# Test arena allocator
cc_test(
name = "simple_memory_arena_test",
size = "small",
srcs = ["simple_memory_arena_test.cc"],
features = ["-dynamic_link_test_srcs"], # see go/dynamic_link_test_srcs
deps = [
":simple_memory_arena",
"//tensorflow/lite/c:common",
"//tensorflow/lite/testing:util",
"@com_google_googletest//:gtest_main",
],
)
# Test model framework.
cc_test(
name = "model_test",
size = "small",
srcs = ["model_test.cc"],
data = [
"testdata/0_subgraphs.bin",
"testdata/2_subgraphs.bin",
"testdata/2_subgraphs_dont_delegate_name.bin",
"testdata/add_shared_tensors.bin",
"testdata/empty_model.bin",
"testdata/multi_add_flex.bin",
"testdata/segment_sum_invalid_buffer.bin",
"testdata/sparse_tensor.bin",
"testdata/test_min_runtime.bin",
"testdata/test_model.bin",
"testdata/test_model_broken.bin",
"testdata/test_model_redux_precision.bin",
"testdata/while_op_with_forwarding_input.bin",
"testdata/zero_size_constant.bin",
],
tags = [
"no_windows", # TODO(b/194459105): the test is flaky.
"tflite_not_portable",
"tflite_smoke_test",
],
deps = [
":framework",
":interpreter_test_util",
":string",
":string_util",
"//tensorflow/lite/c:common",
"//tensorflow/lite/core/api",
"//tensorflow/lite/core/api:verifier",
"//tensorflow/lite/kernels:builtin_ops",
"//tensorflow/lite/schema:schema_fbs",
"//tensorflow/lite/testing:util",
"@com_google_googletest//:gtest_main",
"@flatbuffers//:runtime_cc",
],
)
# Test model framework with the flex library linked into the target.
tf_cc_test(
name = "model_flex_test",
size = "small",
srcs = ["model_flex_test.cc"],
data = [
"testdata/multi_add_flex.bin",
],
tags = [
"no_gpu", # GPU + flex is not officially supported.
"no_windows", # No weak symbols with MSVC.
"tflite_not_portable_android",
"tflite_not_portable_ios",
],
deps = [
":framework",
"//tensorflow/lite/core/api",
"//tensorflow/lite/delegates/flex:delegate",
"//tensorflow/lite/kernels:builtin_ops",
"//tensorflow/lite/testing:util",
"@com_google_googletest//:gtest_main",
],
)
# Test model framework with the XNNPACK delegate.
cc_test(
name = "model_xnnpack_test",
size = "small",
srcs = [
"model_xnnpack_test.cc",
],
data = [
"testdata/multi_add.bin",
],
tags = [
"no_windows", # TODO(b/194459105): the test is flaky.
"tflite_not_portable_android",
"tflite_not_portable_ios",
"tflite_smoke_test",
],
deps = [
":framework",
":string",
":tflite_with_xnnpack",
":util",
"//tensorflow/lite/c:common",
"//tensorflow/lite/kernels:builtin_ops",
"@com_google_googletest//:gtest_main",
],
)
cc_test(
name = "allocation_test",
size = "small",
srcs = ["allocation_test.cc"],
data = [
"testdata/empty_model.bin",
],
tags = [
"tflite_smoke_test",
],
deps = [
":allocation",
"//tensorflow/lite/testing:util",
"@com_google_googletest//:gtest_main",
],
)
# Test OpResolver.
cc_test(
name = "mutable_op_resolver_test",
size = "small",
srcs = ["mutable_op_resolver_test.cc"],
features = ["-dynamic_link_test_srcs"], # see go/dynamic_link_test_srcs
deps = [
":framework",
"//tensorflow/lite/c:common",
"//tensorflow/lite/schema:schema_fbs",
"//tensorflow/lite/testing:util",
"@com_google_googletest//:gtest_main",
],
)
cc_test(
name = "stderr_reporter_test",
srcs = ["stderr_reporter_test.cc"],
deps = [
":stderr_reporter",
"//tensorflow/lite/core/api:error_reporter",
"@com_google_googletest//:gtest_main",
],
)
cc_test(
name = "optional_debug_tools_test",
size = "small",
srcs = ["optional_debug_tools_test.cc"],
data = ["testdata/add.bin"],
tags = [
"nomsan", # TODO(b/186359792)
],
deps = [
":framework",
":optional_debug_tools",
"//tensorflow/lite/c:common",
"//tensorflow/lite/delegates/xnnpack:xnnpack_delegate",
"//tensorflow/lite/kernels:builtin_ops",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "util",
srcs = ["util.cc"],
hdrs = ["util.h"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts_warnings() + tflite_copts(),
deps = [
":kernel_api",
":macros",
"//tensorflow/lite/c:common",
"//tensorflow/lite/schema:schema_fbs",
],
)
cc_library(
name = "create_op_resolver_header",
hdrs = ["create_op_resolver.h"],
deps = [
":mutable_op_resolver",
":op_resolver",
],
)
# Defines CreateOpResolver with all builtin ops.
cc_library(
name = "create_op_resolver_with_builtin_ops",
srcs = ["create_op_resolver_with_builtin_ops.cc"],
hdrs = ["create_op_resolver.h"],
copts = tflite_copts(),
deps = [
":mutable_op_resolver",
":op_resolver",
"//tensorflow/lite/kernels:builtin_ops",
],
# Some targets only have an implicit dependency on CreateOpResolver.
# This avoids warnings about backwards references when linking.
alwayslink = True,
)
# Defines CreateOpResolver with a selected subset of ops.
cc_library(
name = "create_op_resolver_with_selected_ops",
srcs = ["create_op_resolver_with_selected_ops.cc"],
hdrs = ["create_op_resolver.h"],
copts = tflite_copts(),
# This library is not self-contained; it needs to be linked
# together with an implementation of RegisterSelectedOps
# (normally one automatically generated by gen_selected_ops).
tags = ["allow_undefined_symbols"],
deps = [
":mutable_op_resolver",
":op_resolver",
"//tensorflow/lite/kernels:builtin_ops",
],
# Some targets only have an implicit dependency on CreateOpResolver.
# This avoids warnings about backwards references when linking.
alwayslink = True,
)
cc_test(
name = "util_test",
size = "small",
srcs = ["util_test.cc"],
features = ["-dynamic_link_test_srcs"], # see go/dynamic_link_test_srcs
deps = [
":util",
"//tensorflow/lite/c:c_api_types",
"//tensorflow/lite/c:common",
"//tensorflow/lite/schema:schema_fbs",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "minimal_logging",
srcs = [
"minimal_logging.cc",
] + select({
"//tensorflow:android": [
"minimal_logging_android.cc",
],
"//tensorflow:ios": [
"minimal_logging_ios.cc",
],
"//tensorflow:macos": [
"minimal_logging_default.cc",
],
"//conditions:default": [
"minimal_logging_default.cc",
],
}),
hdrs = [
"logger.h",
"minimal_logging.h",
],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts_warnings() + tflite_copts(),
linkopts = select({
"//tensorflow:android": ["-llog"],
"//conditions:default": [],
}),
visibility = internal_visibility_allowlist(),
)
cc_library(
name = "type_to_tflitetype",
hdrs = [
"portable_type_to_tflitetype.h",
] + select({
":tf_lite_static_memory": [],
"//conditions:default": [
"type_to_tflitetype.h",
],
}),
compatible_with = get_compatible_with_portable(),
deps = ["//tensorflow/lite/c:common"],
)
cc_test(
name = "type_to_tflitetype_test",
size = "small",
srcs = ["type_to_tflitetype_test.cc"],
deps = [
":type_to_tflitetype",
"//tensorflow/lite/c:c_api_types",
"@com_google_googletest//:gtest_main",
],
)
cc_test(
name = "minimal_logging_test",
size = "small",
srcs = ["minimal_logging_test.cc"],
deps = [
":minimal_logging",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "shared_library",
hdrs = ["shared_library.h"],
compatible_with = get_compatible_with_portable(),
linkopts = if_not_windows(["-ldl"]),
)
cc_library(
name = "macros",
hdrs = ["core/macros.h"],
compatible_with = get_compatible_with_portable(),
)
cc_library(
name = "stateful_error_reporter",
hdrs = ["stateful_error_reporter.h"],
compatible_with = get_compatible_with_portable(),
deps = ["//tensorflow/lite/core/api"],
)
# Shared lib target for convenience, pulls in the core runtime and builtin ops.
# Note: This target is not yet finalized, and the exact set of exported (C/C++)
# APIs is subject to change. The output library name is platform dependent:
# - Linux/Android: `libtensorflowlite.so`
# - Mac: `libtensorflowlite.dylib`
# - Windows: `tensorflowlite.dll`
tflite_cc_shared_object(
name = "tensorflowlite",
# Until we have more granular symbol export for the C++ API on Windows,
# export all symbols.
features = ["windows_export_all_symbols"],
linkopts = select({
"//tensorflow:macos": [
"-Wl,-exported_symbols_list,$(location //tensorflow/lite:tflite_exported_symbols.lds)",
],
"//tensorflow:windows": [],
"//conditions:default": [
"-Wl,-z,defs",
"-Wl,--version-script,$(location //tensorflow/lite:tflite_version_script.lds)",
],
}),
per_os_targets = True,
deps = [
":framework",
":tflite_exported_symbols.lds",
":tflite_version_script.lds",
"//tensorflow/lite/kernels:builtin_ops_all_linked",
],
)
bzl_library(
name = "build_def_bzl",
srcs = ["build_def.bzl"],
visibility = ["//tensorflow/lite/core/shims:__subpackages__"],
deps = [
":special_rules_bzl",
"//tensorflow:tensorflow_bzl",
"//tensorflow/lite/java:aar_with_jni_bzl",
"@bazel_skylib//rules:build_test",
],
)
bzl_library(
name = "special_rules_bzl",
srcs = ["special_rules.bzl"],
visibility = ["//tensorflow/lite/core/shims:__subpackages__"],
deps = SPECIAL_RULES_DEPS,
)
tflite_self_contained_libs_test_suite(name = "self_contained_libs_test_suite")
tflite_portable_test_suite()