load("@bazel_skylib//:bzl_library.bzl", "bzl_library") load("@bazel_skylib//lib:selects.bzl", "selects") load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") load("@rules_cc//cc:cc_library.bzl", "cc_library") load("@rules_cc//cc:cc_test.bzl", "cc_test") load("//tensorflow:tensorflow.bzl", "if_google", "if_not_windows", "if_oss", "tf_cc_test") load("//tensorflow:tensorflow.default.bzl", "get_compatible_with_portable") load( "//tensorflow/lite:api_visibility.bzl", "TFLITE_FRAMEWORK_VISIBILITY", ) load("//tensorflow/lite:build_def.bzl", "tflite_cc_shared_object", "tflite_copts", "tflite_copts_warnings", "tflite_linkopts_no_undefined", "tflite_self_contained_libs_test_suite") load("//tensorflow/lite:special_rules.bzl", "SPECIAL_RULES_DEPS", "internal_visibility_allowlist", "tflite_internal_cc_3p_api_deps_src_all_visibility_allowlist", "tflite_portable_test_suite") load("//tensorflow/lite/core/shims:cc_library_with_tflite.bzl", "alias_with_tflite", "cc_library_with_tflite", "cc_test_with_tflite") package_group( name = "tf_lite_runtime", packages = ["//tensorflow/lite/..."], ) package( # copybara:uncomment default_applicable_licenses = ["//tensorflow:license"], 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", }, ) # Without @platforms//cpu:x86_64, 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 @platforms//cpu:x86_64 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 @platforms//cpu:x86_64. We are not attempting that # since we currently only using the BUILD files for x86. config_setting( name = "tf_lite_static_memory", constraint_values = ["@platforms//cpu:x86_64"], values = { "copt": "-DTF_LITE_STATIC_MEMORY", }, ) # 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", constraint_values = if_google( ["@platforms//os:fuchsia"], [], ), flag_values = { ":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"}, {}, ), ) config_setting( name = "tflite_mmap_disabled_true", values = { "copt": "-DTFLITE_MMAP_DISABLED", }, ) selects.config_setting_group( name = "tflite_mmap_disabled", match_any = [ ":fuchsia_mmap_disabled", ":tflite_mmap_disabled_true", "//tensorflow:windows", ], ) filegroup( name = "tflite_internal_cc_3p_api_deps_src_all", srcs = [ ":tflite_internal_cc_3p_api_deps_src", "//tensorflow/compiler/mlir/lite:tflite_internal_cc_3p_api_deps_src", "//tensorflow/compiler/mlir/lite/core/api:tflite_internal_cc_3p_api_deps_src", "//tensorflow/compiler/mlir/lite/core/c:tflite_internal_cc_3p_api_deps_src", "//tensorflow/compiler/mlir/lite/schema:tflite_internal_cc_3p_api_deps_src", "//tensorflow/lite/core:macros.h", "//tensorflow/lite/core/acceleration/configuration/c:tflite_internal_cc_3p_api_deps_src", "//tensorflow/lite/core/api:tflite_internal_cc_3p_api_deps_src", "//tensorflow/lite/core/c:tflite_internal_cc_3p_api_deps_src", "//tensorflow/lite/kernels:tflite_internal_cc_3p_api_deps_src", "//tensorflow/lite/kernels/internal:tflite_internal_cc_3p_api_deps_src", "//tensorflow/lite/schema:tflite_internal_cc_3p_api_deps_src", ], visibility = tflite_internal_cc_3p_api_deps_src_all_visibility_allowlist(), ) filegroup( name = "tflite_internal_cc_3p_api_deps_src", srcs = [ ":allocation.h", ":array.cc", ":array.h", ":builtin_ops.h", ":logger.h", ":minimal_logging.cc", ":minimal_logging.h", ":minimal_logging_android.cc", ":mutable_op_resolver.cc", ":mutable_op_resolver.h", ":mutable_op_resolver_utils.cc", ":mutable_op_resolver_utils.h", ":op_resolver.h", ":portable_type_to_tflitetype.h", ":stderr_reporter.cc", ":stderr_reporter.h", ":tensorflow_profiler_logger.h", ":tensorflow_profiler_logger_shim.cc", ":type_to_tflitetype.h", ":util.cc", ":util.h", ], visibility = [ "//visibility:private", ], ) STABLE_FRAMEWORK_LIB_HDRS = [ "allocation.h", "context_util.h", "//tensorflow/lite/core:macros.h", "error_reporter.h", "interpreter.h", "model.h", "model_builder.h", "interpreter_builder.h", "signature_runner.h", "mutable_op_resolver.h", "op_resolver.h", "stderr_reporter.h", ] FRAMEWORK_LIB_HDRS = STABLE_FRAMEWORK_LIB_HDRS + [ "context.h", "//tensorflow/lite/core:subgraph.h", "graph_info.h", "interpreter_options.h", "logger.h", "optional_debug_tools.h", ] # Private header files that are included from the public API header files. STABLE_FRAMEWORK_LIB_IMPL_HDRS = [ "//tensorflow/lite/core:subgraph.h", ] exports_files( [hdr for hdr in FRAMEWORK_LIB_HDRS if hdr[0] != "/"], visibility = [ "//tensorflow/lite/core/shims:__subpackages__", ] + tflite_internal_cc_3p_api_deps_src_all_visibility_allowlist(), ) cc_library( name = "version", hdrs = ["version.h"], compatible_with = get_compatible_with_portable(), copts = tflite_copts_warnings(), deps = [ "//tensorflow/core/public:release_version", ], ) alias( name = "schema_fbs_version", actual = ":version", compatible_with = get_compatible_with_portable(), # 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/core/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/core/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", ":builtin_ops", ":graph_info", "//tensorflow/lite/c:c_api_types", "//tensorflow/lite/core/c:common", "@com_google_absl//absl/log", "@com_google_absl//absl/log:check", "@com_google_googletest//:gtest_main", ], ) cc_test( name = "arena_planner_subgraph_test", size = "small", srcs = ["arena_planner_subgraph_test.cc"], tags = [ "tflite_not_portable_android", ], deps = [ ":cc_api_stable", "//tensorflow/lite/c:c_api_types", "//tensorflow/lite/c:common", "//tensorflow/lite/kernels:subgraph_test_util", "//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/core/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/core/c:common", "@com_google_absl//absl/log", "@com_google_absl//absl/log:check", "@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/core/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/core/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/core/c:common", ], ) cc_library( name = "memory_planner", hdrs = ["memory_planner.h"], compatible_with = get_compatible_with_portable(), copts = tflite_copts_warnings(), deps = [ "//tensorflow/lite/core/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/core/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/core/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, ) # copybara:uncomment_begin(google-only) # # 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", # "//base:addressmap", # "//base:low_level_alloc", # "//base:malloc_hook", # "@xla//xla/tsl/profiler/backends/cpu:traceme_recorder", # "//tensorflow/lite/core/c:common", # "//tensorflow/lite/kernels:kernel_util", # "@tsl//tsl/profiler/lib:scoped_memory_debug_annotation", # "@tsl//tsl/profiler/lib:traceme", # "@tsl//tsl/profiler/lib:traceme_encode", # "@com_google_absl//absl/base", # "@com_google_absl//absl/base:core_headers", # "@com_google_absl//absl/debugging:stacktrace", # "@com_google_absl//absl/debugging:symbolize", # "@com_google_absl//absl/synchronization", # "@com_google_absl//absl/time", # ], # alwayslink = 1, # ) # copybara:uncomment_end 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/core/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/core/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", hdrs = [ "allocation.h", "//tensorflow/compiler/mlir/lite:allocation.h", ], compatible_with = get_compatible_with_portable(), copts = tflite_copts_warnings(), deps = [ "//tensorflow/compiler/mlir/lite:allocation", "//tensorflow/compiler/mlir/lite/core/api:error_reporter", ], ) cc_library( name = "model_builder", hdrs = ["model_builder.h"], compatible_with = get_compatible_with_portable(), copts = tflite_copts_warnings(), visibility = internal_visibility_allowlist(), deps = [ "//tensorflow/lite/core:model_builder", ], ) # 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_with_tflite( 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_with_tflite( name = "framework", actual = "framework_experimental", compatible_with = get_compatible_with_portable(), ) # The public target for the C++ API excluding experimental APIs. # TODO(ahentz): investigate dependency on gemm_support requiring usage of tf_copts. cc_library_with_tflite( name = "framework_stable", srcs = STABLE_FRAMEWORK_LIB_IMPL_HDRS, hdrs = STABLE_FRAMEWORK_LIB_HDRS, compatible_with = get_compatible_with_portable(), copts = tflite_copts() + tflite_copts_warnings(), tflite_deps = [ ":cc_api_stable", ], visibility = TFLITE_FRAMEWORK_VISIBILITY, deps = [ ":allocation", ":array", ":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_internal", "//tensorflow/lite/core:cc_api_stable", "//tensorflow/lite/core:framework_stable", "//tensorflow/lite/core:signature_runner", "//tensorflow/lite/core:subgraph", "//tensorflow/lite/core/api", "//tensorflow/lite/core/api:verifier", "//tensorflow/lite/core/c:common", "//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_with_tflite( name = "framework_experimental", srcs = [], hdrs = [hdr for hdr in FRAMEWORK_LIB_HDRS if hdr != "optional_debug_tools.h"] + ["optional_debug_tools.h"], compatible_with = get_compatible_with_portable(), copts = tflite_copts() + tflite_copts_warnings(), tflite_deps = [ ":cc_api_experimental", ], visibility = TFLITE_FRAMEWORK_VISIBILITY, deps = [ ":allocation", ":array", ":external_cpu_backend_context", ":graph_info", ":kernel_api", ":macros", ":memory_planner", ":mutable_op_resolver", ":optional_debug_tools", ":stderr_reporter", ":string", ":type_to_tflitetype", ":util", "//tensorflow/lite/c:common_internal", "//tensorflow/lite/core:cc_api_stable", "//tensorflow/lite/core:framework_experimental", "//tensorflow/lite/core:model_builder", "//tensorflow/lite/core:signature_runner", "//tensorflow/lite/core:subgraph", "//tensorflow/lite/core/api", "//tensorflow/lite/core/api:verifier", "//tensorflow/lite/core/c:common", "//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. ) cc_library( name = "logger", srcs = ["logger.cc"], hdrs = ["logger.h"], compatible_with = get_compatible_with_portable(), visibility = ["//tensorflow/lite:__subpackages__"], deps = [ ":minimal_logging", ], ) # 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_with_tflite( name = "cc_api_stable", srcs = STABLE_FRAMEWORK_LIB_IMPL_HDRS, hdrs = [ "interpreter.h", "interpreter_builder.h", "interpreter_options.h", "model.h", "model_builder.h", "signature_runner.h", ], compatible_with = get_compatible_with_portable(), copts = tflite_copts() + tflite_copts_warnings(), generate_opaque_delegate_target = True, visibility = [ "//research/drishti/benchmarking/async:__subpackages__", "//tensorflow/lite/kernels:__subpackages__", ], deps = [ ":allocation", ":array", ":external_cpu_backend_context", ":graph_info", ":logger", ":macros", ":memory_planner", ":minimal_logging", ":mutable_op_resolver", ":shared_library", ":simple_memory_arena", ":stderr_reporter", ":string", ":tensorflow_profiler_logger_shim", ":type_to_tflitetype", ":util", ":version", "//tensorflow/lite/c:common_internal", "//tensorflow/lite/core:cc_api_stable", "//tensorflow/lite/core:model_builder", "//tensorflow/lite/core:subgraph", "//tensorflow/lite/core/api", "//tensorflow/lite/core/api:verifier", "//tensorflow/lite/core/c:c_api_types", "//tensorflow/lite/core/c:common", # copybara:uncomment "//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", "@flatbuffers//:runtime_cc", "@ruy//ruy:denormal", ], alwayslink = 1, # TODO(b/161243354): eliminate this. ) cc_library_with_tflite( name = "signature_runner", hdrs = ["signature_runner.h"], compatible_with = get_compatible_with_portable(), visibility = [ "//tensorflow/lite/core:__subpackages__", "//tensorflow/lite/java:__subpackages__", ], deps = ["//tensorflow/lite/core:signature_runner"], ) # 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_with_tflite( name = "cc_api_experimental", srcs = [], hdrs = [ "graph_info.h", "interpreter.h", "interpreter_builder.h", "interpreter_options.h", "logger.h", "model.h", "model_builder.h", "signature_runner.h", "//tensorflow/lite/core:subgraph.h", ], compatible_with = get_compatible_with_portable(), copts = tflite_copts() + tflite_copts_warnings(), generate_opaque_delegate_target = True, tflite_deps = [ ":cc_api_stable", ], visibility = [ "//tensorflow/lite/delegates/flex:__subpackages__", "//tensorflow/lite/kernels:__subpackages__", ], deps = [ ":allocation", ":array", ":builtin_ops", ":external_cpu_backend_context", ":macros", ":memory_planner", ":minimal_logging", ":mutable_op_resolver", ":stderr_reporter", ":string", ":type_to_tflitetype", ":util", "//tensorflow/lite/c:common_internal", "//tensorflow/lite/core:cc_api_experimental", "//tensorflow/lite/core/api", "//tensorflow/lite/core/api:verifier", "//tensorflow/lite/core/c:c_api_types", "//tensorflow/lite/core/c:common", "//tensorflow/lite/experimental/resource", "//tensorflow/lite/internal:signature_def", "//tensorflow/lite/profiling:root_profiler", "//tensorflow/lite/schema:schema_fbs", "@flatbuffers//:runtime_cc", "@ruy//ruy:denormal", ], alwayslink = 1, # TODO(b/161243354): eliminate this. ) cc_library( name = "interpreter_options_header", hdrs = [ "interpreter_options.h", ], compatible_with = get_compatible_with_portable(), visibility = [ "//tensorflow/lite:__subpackages__", ], ) 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/core:cc_api_experimental", "//tensorflow/lite/core:framework_stable", "//tensorflow/lite/core/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 = [ ":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/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 = [ ":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/core/api:op_resolver", "//tensorflow/lite/core/api:op_resolver_internal", "//tensorflow/lite/core/c:common", "//tensorflow/lite/schema:schema_fbs", ], ) cc_library_with_tflite( name = "mutable_op_resolver_utils", srcs = ["mutable_op_resolver_utils.cc"], hdrs = ["mutable_op_resolver_utils.h"], compatible_with = get_compatible_with_portable(), copts = tflite_copts() + tflite_copts_warnings(), tflite_deps = [ "//tensorflow/lite/c:c_api", "//tensorflow/lite/c:c_api_opaque", "//tensorflow/lite/c:common", ], visibility = [ "//visibility:public", ], deps = [ ":builtin_ops", ":mutable_op_resolver", "//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/compiler/mlir/lite:string_utils", "//tensorflow/lite/core/c:c_api_types", "//tensorflow/lite/core/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/core/c:common", "//tensorflow/lite/delegates/xnnpack:xnnpack_delegate", ], alwayslink = 1, ) # Enables calling xnnpack impl directly from TFLite kernels. config_setting( name = "tflite_kernel_use_xnnpack_false", define_values = {"tflite_kernel_use_xnnpack": "false"}, ) cc_library( name = "tflite_kernel_use_xnnpack_optional", compatible_with = get_compatible_with_portable(), defines = select({ ":tflite_kernel_use_xnnpack_false": [], ":tflite_with_xnnpack_explicit_false": [], "//conditions:default": [ "TFLITE_KERNEL_USE_XNNPACK", ], }), ) # 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 = [ ":tflite_with_xnnpack_enabled", ], ) cc_library( name = "tflite_with_xnnpack_optional", srcs = ["tflite_with_xnnpack_optional.cc"], hdrs = [ "tflite_with_xnnpack_optional.h", "//tensorflow/lite/core:macros.h", ], compatible_with = get_compatible_with_portable(), copts = tflite_copts() + tflite_copts_warnings(), deps = [ "//tensorflow/lite/core/c:common", ] + select({ ":tflite_with_xnnpack_explicit_true": [ ":tflite_with_xnnpack_enabled", "//tensorflow/lite/delegates/xnnpack:xnnpack_delegate_hdrs_only", ], ":tflite_with_xnnpack_explicit_false": [], "//conditions:default": [ ":tflite_with_xnnpack_default", "//tensorflow/lite/delegates/xnnpack:xnnpack_delegate_hdrs_only", ], }), ) cc_test( name = "string_util_test", size = "small", srcs = ["string_util_test.cc"], deps = [ ":framework", ":string", ":string_util", "//tensorflow/lite/core:framework_stable", "//tensorflow/lite/core/c:c_api_types", "@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/core:framework_stable", "//tensorflow/lite/core/api", "//tensorflow/lite/core/c:common", "//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", "@com_google_googletest//:gtest", "@eigen_archive//:eigen3", ], ) # 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/core:framework", "//tensorflow/lite/core/c:c_api_types", "//tensorflow/lite/core/c:common", "//tensorflow/lite/core/kernels:builtin_ops", "//tensorflow/lite/delegates/utils:simple_delegate", "//tensorflow/lite/kernels:kernel_util", "//tensorflow/lite/kernels/internal:compatibility", "//tensorflow/lite/testing:util", "//tensorflow/lite/types:half", "@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/core/c:common", "@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/core/c:common", "@com_google_googletest//:gtest_main", ], ) # 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:framework", "//tensorflow/lite/core/api", "//tensorflow/lite/core/kernels:builtin_ops", "//tensorflow/lite/delegates/flex:delegate", "//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 = [ "tflite_not_portable_android", "tflite_not_portable_ios", "tflite_smoke_test", ], deps = [ ":framework", ":string", ":tflite_with_xnnpack", ":util", "//tensorflow/lite/core:framework", "//tensorflow/lite/core/c:common", "//tensorflow/lite/core/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/core/c:common", "//tensorflow/lite/schema:schema_fbs", "//tensorflow/lite/testing:util", "@com_google_googletest//:gtest_main", ], ) cc_test_with_tflite( name = "mutable_op_resolver_utils_test", srcs = ["mutable_op_resolver_utils_test.cc"], tags = ["tflite_disable_mobile_test"], # Due to b/144306101 and b/329899620. tflite_deps = [ ":mutable_op_resolver_utils", ":test_util", "//tensorflow/lite/c:c_api", "//tensorflow/lite/c:c_api_opaque", "//tensorflow/lite/c:common", ], deps = [ ":builtin_ops", ":mutable_op_resolver", "//tensorflow/lite/c:common_internal", "//tensorflow/lite/schema:schema_fbs", "@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"], deps = [ ":framework", ":optional_debug_tools", "//tensorflow/lite/core:framework", "//tensorflow/lite/core/c:common", "//tensorflow/lite/core/kernels:builtin_ops", "//tensorflow/lite/delegates/xnnpack:xnnpack_delegate", "@com_google_absl//absl/types:span", "@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 = [ ":array", ":kernel_api", ":macros", "//tensorflow/lite/core/c:common", "//tensorflow/lite/schema:schema_fbs", "@com_google_absl//absl/types:span", ], ) cc_library( name = "array", srcs = ["array.cc"], hdrs = ["array.h"], compatible_with = get_compatible_with_portable(), copts = tflite_copts_warnings() + tflite_copts(), deps = [ "//tensorflow/lite/c:common", "//tensorflow/lite/core/c:common", ], ) cc_test( name = "array_test", srcs = ["array_test.cc"], deps = [ ":array", "//tensorflow/lite/core/c:common", "@com_google_absl//absl/types:span", "@com_google_googletest//:gtest_main", ], ) cc_test( name = "test_util_test", srcs = ["test_util_test.cc"], deps = [ ":array", ":test_util", "//tensorflow/lite/c:common", "//tensorflow/lite/core/c:common", "@com_google_absl//absl/strings:str_format", "@com_google_googletest//:gtest_main", ], ) cc_library_with_tflite( name = "create_op_resolver_header", hdrs = ["create_op_resolver.h"], deps = ["//tensorflow/lite/core:create_op_resolver_header"], ) # Defines CreateOpResolver with all builtin ops. cc_library_with_tflite( name = "create_op_resolver_with_builtin_ops", hdrs = ["create_op_resolver.h"], compatible_with = get_compatible_with_portable(), copts = tflite_copts(), deps = ["//tensorflow/lite/core:create_op_resolver_with_builtin_ops"], ) # Defines CreateOpResolver with a selected subset of ops. cc_library_with_tflite( 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/core:create_op_resolver_header", "//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/core/c:c_api_types", "//tensorflow/lite/core/c:common", "//tensorflow/lite/kernels:test_util", "//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/core/c:common", ], ) cc_test( name = "type_to_tflitetype_test", size = "small", srcs = ["type_to_tflitetype_test.cc"], deps = [ ":type_to_tflitetype", "//tensorflow/lite/core/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 = ["//tensorflow/lite/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:error_reporter"], ) # 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 = tflite_linkopts_no_undefined() + select({ "//tensorflow:macos": [ "-Wl,-exported_symbols_list,$(location //tensorflow/lite:tflite_exported_symbols.lds)", ], "//tensorflow:ios": [ "-Wl,-exported_symbols_list,$(location //tensorflow/lite:tflite_exported_symbols.lds)", ], "//tensorflow:windows": [], "//conditions:default": [ "-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", ], ) cc_library_with_tflite( name = "test_util", testonly = True, hdrs = ["test_util.h"], tflite_deps = [ "//tensorflow/lite/c:test_util", ], deps = [ ":array", "@com_google_absl//absl/strings", "@com_google_absl//absl/strings:str_format", "@com_google_googletest//:gtest", ], ) bzl_library( name = "build_def_bzl", srcs = ["build_def.bzl"], visibility = [ "//learning/brain/models/app_benchmarks:__pkg__", "//tensorflow/lite/core/shims:__subpackages__", ], deps = [ ":special_rules_bzl", "//tensorflow:tensorflow_bzl", "//tensorflow/lite/java:aar_with_jni_bzl", "@bazel_skylib//rules:build_test", ], ) # This target defines the TFLITE_CONDITIONAL_NAMESPACE macro. cc_library_with_tflite( name = "namespace", hdrs = ["namespace.h"], compatible_with = get_compatible_with_portable(), visibility = [ "//visibility:public", ], ) bzl_library( name = "special_rules_bzl", srcs = ["special_rules.bzl"], visibility = ["//visibility:private"], deps = SPECIAL_RULES_DEPS, ) tflite_self_contained_libs_test_suite(name = "self_contained_libs_test_suite") tflite_portable_test_suite()