blob: 4e608488fb797aba5477804008c18603bf4be18d [file] [log] [blame]
load("//tensorflow/lite:build_def.bzl", "tflite_copts", "tflite_copts_warnings", "tflite_self_contained_libs_test_suite")
load("//tensorflow:tensorflow.default.bzl", "get_compatible_with_portable")
load("//tensorflow/lite:special_rules.bzl", "internal_visibility_allowlist", "tflite_portable_test_suite")
load("//tensorflow/lite/core:special_rules.bzl", "macros_visibility_allowlist")
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
package(
# copybara:uncomment default_applicable_licenses = ["//tensorflow:license"],
licenses = ["notice"],
)
exports_files(
srcs = [
"create_op_resolver.h",
"macros.h",
"subgraph.h",
],
visibility = [
"//tensorflow/lite:__subpackages__",
],
)
bzl_library(
name = "special_rules_bzl",
srcs = ["special_rules.bzl"],
visibility = ["//tensorflow/lite:__subpackages__"],
)
# 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 = [
"subgraph.h",
],
hdrs = [
"interpreter.h",
"interpreter_builder.h",
"macros.h",
"model.h",
"model_builder.h",
],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts() + tflite_copts_warnings(),
visibility = [
"//tensorflow/lite:__subpackages__",
],
deps = [
":cc_api_stable",
"//tensorflow/lite:allocation",
"//tensorflow/lite:external_cpu_backend_context",
"//tensorflow/lite:graph_info",
"//tensorflow/lite:interpreter_options_header",
"//tensorflow/lite:kernel_api",
"//tensorflow/lite:macros",
"//tensorflow/lite:memory_planner",
"//tensorflow/lite:mutable_op_resolver",
"//tensorflow/lite:signature_runner",
"//tensorflow/lite:stderr_reporter",
"//tensorflow/lite:string",
"//tensorflow/lite:type_to_tflitetype",
"//tensorflow/lite:util",
"//tensorflow/lite/c:common_internal",
"//tensorflow/lite/core/api",
"//tensorflow/lite/core/api:verifier",
"//tensorflow/lite/core/async:async_signature_runner",
"//tensorflow/lite/core/c:common",
"//tensorflow/lite/experimental/remat:metadata_util",
"//tensorflow/lite/experimental/resource",
"//tensorflow/lite/internal:signature_def",
"//tensorflow/lite/profiling:root_profiler",
"//tensorflow/lite/profiling/telemetry",
"//tensorflow/lite/profiling/telemetry:profiler",
"//tensorflow/lite/profiling/telemetry/c:telemetry_setting_internal",
"//tensorflow/lite/schema:conversion_metadata_fbs",
"//tensorflow/lite/schema:schema_fbs",
"@flatbuffers//:runtime_cc",
],
)
# 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",
compatible_with = get_compatible_with_portable(),
visibility = ["//visibility:public"],
)
# 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 = [
"interpreter.h",
"interpreter_builder.h",
"macros.h",
"model.h",
"model_builder.h",
"subgraph.h",
],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts() + tflite_copts_warnings(),
visibility = [
"//tensorflow/lite:__subpackages__",
],
deps = [
":cc_api_experimental",
":cc_api_stable",
":model_builder",
"//tensorflow/lite:allocation",
"//tensorflow/lite:external_cpu_backend_context",
"//tensorflow/lite:graph_info",
"//tensorflow/lite:interpreter_options_header",
"//tensorflow/lite:kernel_api",
"//tensorflow/lite:macros",
"//tensorflow/lite:memory_planner",
"//tensorflow/lite:mutable_op_resolver",
"//tensorflow/lite:optional_debug_tools",
"//tensorflow/lite:signature_runner",
"//tensorflow/lite:stderr_reporter",
"//tensorflow/lite:string",
"//tensorflow/lite:type_to_tflitetype",
"//tensorflow/lite:util",
"//tensorflow/lite/c:common_internal",
"//tensorflow/lite/core/api",
"//tensorflow/lite/core/api:verifier",
"//tensorflow/lite/core/async:async_signature_runner",
"//tensorflow/lite/core/c:common",
"//tensorflow/lite/experimental/remat:metadata_util",
"//tensorflow/lite/experimental/resource",
"//tensorflow/lite/internal:signature_def",
"//tensorflow/lite/profiling:root_profiler",
"//tensorflow/lite/profiling/telemetry",
"//tensorflow/lite/profiling/telemetry:profiler",
"//tensorflow/lite/profiling/telemetry/c:telemetry_setting_internal",
"//tensorflow/lite/schema:conversion_metadata_fbs",
"//tensorflow/lite/schema:schema_fbs",
"@flatbuffers//:runtime_cc",
],
alwayslink = 1, # TODO(b/161243354): eliminate this.
)
# TODO(b/242310498): move interpreter.cc, logger.cc and signature_runner.h from
# tensorflow/lite/ to here.
cc_library(
name = "cc_api_stable",
srcs = [
"interpreter.cc",
"interpreter_builder.cc",
"subgraph.h",
],
hdrs = [
"interpreter.h",
"interpreter_builder.h",
"model.h",
"model_builder.h",
],
compatible_with = get_compatible_with_portable(),
visibility = [
"//tensorflow/lite:__subpackages__",
],
deps = [
":model_builder",
":subgraph",
"//tensorflow/lite:allocation",
"//tensorflow/lite:external_cpu_backend_context",
"//tensorflow/lite:graph_info",
"//tensorflow/lite:interpreter_options_header",
"//tensorflow/lite:macros",
"//tensorflow/lite:memory_planner",
"//tensorflow/lite:minimal_logging",
"//tensorflow/lite:mutable_op_resolver",
"//tensorflow/lite:shared_library",
"//tensorflow/lite:signature_runner",
"//tensorflow/lite:simple_memory_arena",
"//tensorflow/lite:stderr_reporter",
"//tensorflow/lite:string",
"//tensorflow/lite:tensorflow_profiler_logger_shim",
"//tensorflow/lite:type_to_tflitetype",
"//tensorflow/lite:util",
"//tensorflow/lite:version",
"//tensorflow/lite/c:common_internal",
"//tensorflow/lite/core/api",
"//tensorflow/lite/core/api:verifier",
"//tensorflow/lite/core/async:async_signature_runner",
"//tensorflow/lite/core/c:c_api_types",
"//tensorflow/lite/core/c:common",
"//tensorflow/lite/delegates:telemetry",
"//tensorflow/lite/delegates/xnnpack:tflite_with_xnnpack_qs8",
"//tensorflow/lite/delegates/xnnpack:tflite_with_xnnpack_qu8",
"//tensorflow/lite/experimental/remat:metadata_util",
"//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/profiling/telemetry",
"//tensorflow/lite/profiling/telemetry:profiler",
"//tensorflow/lite/profiling/telemetry/c:telemetry_setting_internal",
"//tensorflow/lite/schema:conversion_metadata_fbs",
"//tensorflow/lite/schema:schema_fbs",
"//tensorflow/lite/schema:schema_utils",
"@flatbuffers//:runtime_cc",
"@ruy//ruy:denormal",
],
alwayslink = 1,
)
# 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:__subpackages__",
"//tensorflow/lite/delegates/flex:__subpackages__",
"//tensorflow/lite/kernels:__subpackages__",
],
)
# 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",
],
hdrs = [
"interpreter.h",
"interpreter_builder.h",
"model.h",
"model_builder.h",
"subgraph.h",
],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts() + tflite_copts_warnings(),
visibility = [
"//tensorflow/lite:__subpackages__",
],
deps = [
":cc_api_stable",
"//tensorflow/lite:allocation",
"//tensorflow/lite:builtin_ops",
"//tensorflow/lite:external_cpu_backend_context",
"//tensorflow/lite:graph_info",
"//tensorflow/lite:interpreter_options_header",
"//tensorflow/lite:macros",
"//tensorflow/lite:memory_planner",
"//tensorflow/lite:minimal_logging",
"//tensorflow/lite:mutable_op_resolver",
"//tensorflow/lite:signature_runner",
"//tensorflow/lite:stderr_reporter",
"//tensorflow/lite:string",
"//tensorflow/lite:type_to_tflitetype",
"//tensorflow/lite:util",
"//tensorflow/lite/c:common_internal",
"//tensorflow/lite/core/api",
"//tensorflow/lite/core/api:verifier",
"//tensorflow/lite/core/async:async_signature_runner",
"//tensorflow/lite/core/c:c_api_types",
"//tensorflow/lite/core/c:common",
"//tensorflow/lite/experimental/remat:metadata_util",
"//tensorflow/lite/experimental/resource",
"//tensorflow/lite/internal:signature_def",
"//tensorflow/lite/profiling:root_profiler",
"//tensorflow/lite/profiling/telemetry",
"//tensorflow/lite/profiling/telemetry:profiler",
"//tensorflow/lite/profiling/telemetry/c:telemetry_setting_internal",
"//tensorflow/lite/schema:conversion_metadata_fbs",
"//tensorflow/lite/schema:schema_fbs",
"@flatbuffers//:runtime_cc",
"@ruy//ruy:denormal",
],
alwayslink = 1, # TODO(b/161243354): eliminate this.
)
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 = [
":macros",
"//tensorflow/lite:allocation",
"//tensorflow/lite:mutable_op_resolver",
"//tensorflow/lite:stderr_reporter",
"//tensorflow/lite:string",
"//tensorflow/lite/core/api:error_reporter",
"//tensorflow/lite/core/api:op_resolver",
"//tensorflow/lite/core/api:verifier",
"//tensorflow/lite/core/c:common",
"//tensorflow/lite/schema:schema_fbs",
"@flatbuffers",
],
alwayslink = 1,
)
# Test model framework.
cc_test(
name = "model_test",
size = "small",
srcs = ["model_test.cc"],
data = [
"//tensorflow/lite:testdata/0_subgraphs.bin",
"//tensorflow/lite:testdata/2_subgraphs.bin",
"//tensorflow/lite:testdata/2_subgraphs_dont_delegate_name.bin",
"//tensorflow/lite:testdata/add_shared_tensors.bin",
"//tensorflow/lite:testdata/empty_model.bin",
"//tensorflow/lite:testdata/multi_add_flex.bin",
"//tensorflow/lite:testdata/segment_sum_invalid_buffer.bin",
"//tensorflow/lite:testdata/sparse_tensor.bin",
"//tensorflow/lite:testdata/test_min_runtime.bin",
"//tensorflow/lite:testdata/test_model.bin",
"//tensorflow/lite:testdata/test_model_broken.bin",
"//tensorflow/lite:testdata/test_model_redux_precision.bin",
"//tensorflow/lite:testdata/while_op_with_forwarding_input.bin",
"//tensorflow/lite:testdata/zero_size_constant.bin",
],
tags = [
"no_windows", # TODO(b/194459105): the test is flaky.
"tflite_not_portable",
"tflite_smoke_test",
],
deps = [
":framework",
"//tensorflow/core/platform:resource_loader",
"//tensorflow/lite:framework",
"//tensorflow/lite:interpreter_test_util",
"//tensorflow/lite:string",
"//tensorflow/lite:string_util",
"//tensorflow/lite/core/api",
"//tensorflow/lite/core/api:verifier",
"//tensorflow/lite/core/c:common",
"//tensorflow/lite/core/kernels:builtin_ops",
"//tensorflow/lite/schema:schema_fbs",
"//tensorflow/lite/testing:util",
"@com_google_googletest//:gtest_main",
"@flatbuffers//:runtime_cc",
],
)
cc_library(
name = "create_op_resolver_header",
hdrs = [
"create_op_resolver.h",
],
compatible_with = get_compatible_with_portable(),
visibility = [
"//tensorflow/lite:__subpackages__",
],
deps = [
"//tensorflow/lite:mutable_op_resolver",
"//tensorflow/lite: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"],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts(),
visibility = [
"//tensorflow/lite:__subpackages__",
],
deps = [
"//tensorflow/lite:mutable_op_resolver",
"//tensorflow/lite:op_resolver",
"//tensorflow/lite/core/kernels:builtin_ops",
],
# Some targets only have an implicit dependency on CreateOpResolver.
# This avoids warnings about backwards references when linking.
alwayslink = True,
)
# This target is only for use by the "tflite_custom_c_library" and "tflite_custom_cc_library" build
# macro and should not be used anywhere other than in the implementation of that build macro.
# "tflite_custom_c_library" requires target to be public, that's why we duplicated
# :create_op_resolver_header target to be used only by "tflite_custom_c_library".
# Making :create_op_resolver_header public could cause some problems because it is widely used
# inside the TF Lite code base, that might lead others outside the TF Lite code base to copy that
# dependency and use it and subsequently depend on it, which would be bad. Using a separate
# :private_create_op_resolver_header target ensures that the only use of the unwantedly-"public"
# target is inside the "tflite_custom_c_library" itself, where it is less likely to get copied into
# third party code.
alias(
name = "private_create_op_resolver_header",
actual = ":create_op_resolver_header",
tags = ["avoid_dep"],
visibility = [
"//visibility:public",
],
)
cc_library(
name = "macros",
hdrs = ["macros.h"],
compatible_with = get_compatible_with_portable(),
visibility = [
"//tensorflow/lite:__subpackages__",
] + macros_visibility_allowlist(),
)
cc_library(
name = "subgraph",
srcs = [
"subgraph.cc",
],
hdrs = [
"subgraph.h",
],
compatible_with = get_compatible_with_portable(),
copts = tflite_copts() + tflite_copts_warnings(),
visibility = [
"//platforms/darwinn/tflite:__subpackages__",
"//tensorflow/lite:__subpackages__",
"//tensorflow/lite/core:__subpackages__",
"//tensorflow/lite/kernels:__subpackages__",
],
deps = [
"//tensorflow/lite:allocation",
"//tensorflow/lite:graph_info",
"//tensorflow/lite:interpreter_options_header",
"//tensorflow/lite:kernel_api",
"//tensorflow/lite:macros",
"//tensorflow/lite:memory_planner",
"//tensorflow/lite:minimal_logging",
"//tensorflow/lite:util",
"//tensorflow/lite/c:common_internal",
"//tensorflow/lite/core/api",
"//tensorflow/lite/core/c:c_api_types",
"//tensorflow/lite/core/c:common",
"//tensorflow/lite/experimental/remat:metadata_util",
"//tensorflow/lite/experimental/resource",
"//tensorflow/lite/profiling:root_profiler",
"//tensorflow/lite/profiling/telemetry",
"//tensorflow/lite/schema:schema_fbs",
] + select({
"//tensorflow/lite:tflite_use_simple_memory_planner": [
"//tensorflow/lite:simple_planner",
],
"//conditions:default": [
"//tensorflow/lite:arena_planner",
],
}) + select({
"//tensorflow/lite:tensorflow_profiler_config": [
"//tensorflow/lite:tensorflow_profiler_logger_shim",
],
"//conditions:default": [],
}),
alwayslink = 1, # TODO(b/161243354): eliminate this.
)
# Test subgraph.
cc_test(
name = "subgraph_test",
size = "small",
srcs = [
"subgraph_test.cc",
],
deps = [
":framework_stable",
"//tensorflow/lite:framework",
"//tensorflow/lite:util",
"//tensorflow/lite/kernels:builtin_ops", # build_cleaner: keep
"//tensorflow/lite/testing:util",
"@com_google_googletest//:gtest_main",
],
)
tflite_self_contained_libs_test_suite(name = "self_contained_libs_test_suite")
tflite_portable_test_suite()