484 lines
16 KiB
Python
484 lines
16 KiB
Python
load("@rules_cc//cc:cc_library.bzl", "cc_library")
|
|
load("@rules_cc//cc:cc_test.bzl", "cc_test")
|
|
load("//tensorflow:tensorflow.default.bzl", "get_compatible_with_portable")
|
|
load(
|
|
"//tensorflow/lite:build_def.bzl",
|
|
"tflite_cc_library_with_c_headers_test",
|
|
"tflite_cc_shared_object",
|
|
"tflite_copts",
|
|
"tflite_copts_warnings",
|
|
"tflite_custom_c_library",
|
|
"tflite_linkopts_no_undefined",
|
|
"tflite_self_contained_libs_test_suite",
|
|
)
|
|
load("//tensorflow/lite:special_rules.bzl", "c_api_opaque_internal_visibility_allowlist", "tflite_portable_test_suite")
|
|
load("//tensorflow/lite/core/shims:cc_library_with_tflite.bzl", "cc_library_with_tflite_with_c_headers_test")
|
|
|
|
package(
|
|
# copybara:uncomment default_applicable_licenses = ["//tensorflow:LICENSE"],
|
|
default_visibility = ["//visibility:public"],
|
|
licenses = ["notice"],
|
|
)
|
|
|
|
# Generates a platform-specific shared library containing the TensorFlow Lite C
|
|
# API implementation as define in `c_api.h`. The exact output library name
|
|
# is platform dependent:
|
|
# - Linux/Android: `libtensorflowlite_c.so`
|
|
# - Mac: `libtensorflowlite_c.dylib`
|
|
# - Windows: `tensorflowlite_c.dll`
|
|
tflite_cc_shared_object(
|
|
name = "tensorflowlite_c",
|
|
linkopts = tflite_linkopts_no_undefined() + select({
|
|
"//tensorflow:ios": [
|
|
"-Wl,-exported_symbols_list,$(location //tensorflow/lite/c:exported_symbols.lds)",
|
|
],
|
|
"//tensorflow:macos": [
|
|
"-Wl,-exported_symbols_list,$(location //tensorflow/lite/c:exported_symbols.lds)",
|
|
],
|
|
"//tensorflow:windows": [],
|
|
"//conditions:default": [
|
|
"-Wl,--version-script,$(location //tensorflow/lite/c:version_script.lds)",
|
|
],
|
|
}),
|
|
per_os_targets = True,
|
|
deps = [
|
|
":c_api",
|
|
":c_api_experimental",
|
|
":exported_symbols.lds",
|
|
":version_script.lds",
|
|
],
|
|
)
|
|
|
|
cc_library_with_tflite_with_c_headers_test(
|
|
name = "c_api",
|
|
hdrs = [
|
|
"c_api.h",
|
|
],
|
|
compatible_with = get_compatible_with_portable(),
|
|
copts = tflite_copts(),
|
|
generate_opaque_delegate_target = True,
|
|
deps = [
|
|
":c_api_without_op_resolver",
|
|
"//tensorflow/lite/core/async/c:types",
|
|
"//tensorflow/lite/core/c:c_api",
|
|
],
|
|
)
|
|
|
|
tflite_cc_library_with_c_headers_test(
|
|
name = "c_api_for_testing",
|
|
testonly = True,
|
|
srcs = ["c_api_for_testing.cc"],
|
|
hdrs = ["c_api_for_testing.h"],
|
|
deps = [
|
|
":c_api",
|
|
":c_api_internal",
|
|
"//tensorflow/lite/core/c:c_api",
|
|
],
|
|
)
|
|
|
|
# TODO(b/248514738): Deprecate this target in favour
|
|
# of //third_party/tensorflow/lite/core/c:c_api_without_op_resolver after all known existing uses of
|
|
# those targets have been changed to instead refer to the new target.
|
|
# Same as ":c_api", but doesn't link in the default CreateOpResolver implementation.
|
|
cc_library_with_tflite_with_c_headers_test(
|
|
name = "c_api_without_op_resolver",
|
|
hdrs = ["c_api.h"],
|
|
compatible_with = get_compatible_with_portable(),
|
|
copts = tflite_copts(),
|
|
tags = ["allow_undefined_symbols"], # For tflite::CreateOpResolver().
|
|
deps = [
|
|
":c_api_types",
|
|
"//tensorflow/lite/core/c:c_api_without_op_resolver",
|
|
],
|
|
)
|
|
|
|
# TODO(b/248514738): Deprecate this target in favour
|
|
# of //third_party/tensorflow/lite/core/c:c_api_without_op_resolver_without_alwayslink after all
|
|
# known existing uses of those targets have been changed to instead refer to the new target.
|
|
# Same as ":c_api_without_op_resolver", but without alwayslink=1.
|
|
cc_library_with_tflite_with_c_headers_test(
|
|
name = "c_api_without_op_resolver_without_alwayslink",
|
|
hdrs = ["c_api.h"],
|
|
compatible_with = get_compatible_with_portable(),
|
|
copts = tflite_copts(),
|
|
tags = ["allow_undefined_symbols"], # For tflite::CreateOpResolver().
|
|
deps = ["//tensorflow/lite/core/c:c_api_without_op_resolver_without_alwayslink"],
|
|
)
|
|
|
|
cc_library_with_tflite_with_c_headers_test(
|
|
name = "c_api_experimental",
|
|
hdrs = [
|
|
"c_api_experimental.h",
|
|
# ':c_api_opaque' was promoted to the 'mostly stable' API.
|
|
# Please explicitly add a dependency on ':c_api_opaque' if your target
|
|
# needs both ':c_api_experimental' and ':c_api_opaque' dependencies.
|
|
# We plan to remove 'c_api_opaque.h' from the list of exposed headers and
|
|
# will remove the dependency from this target on ':c_api_opaque' in the future.
|
|
"c_api_opaque.h",
|
|
],
|
|
copts = tflite_copts() + tflite_copts_warnings(),
|
|
generate_opaque_delegate_target = True,
|
|
tflite_deps = [
|
|
":c_api",
|
|
],
|
|
deps = [
|
|
"//tensorflow/lite/core/c:c_api_experimental",
|
|
"//tensorflow/lite/core/c:c_api_opaque",
|
|
],
|
|
)
|
|
|
|
# Same as ":c_api_experimental", but without linking in the default CreateOpResolver implementation.
|
|
cc_library_with_tflite_with_c_headers_test(
|
|
name = "c_api_experimental_without_op_resolver",
|
|
hdrs = [
|
|
"c_api_experimental.h",
|
|
# DEPRECATED
|
|
# ':c_api_opaque_without_op_resolver' was promoted to the 'mostly stable' API.
|
|
# Please explicitly add a dependency on ':c_api_opaque_without_op_resolver' if your target
|
|
# needs both ':c_api_experimental_without_op_resolver' and ':c_api_opaque_without_op_resolver' dependencies.
|
|
# We plan to remove 'c_api_opaque.h' from the list of exposed headers and
|
|
# will remove the dependency from this target on ':c_api_opaque_without_op_resolver' in the future.
|
|
"c_api_opaque.h",
|
|
],
|
|
copts = tflite_copts() + tflite_copts_warnings(),
|
|
tags = ["allow_undefined_symbols"], # For tflite::CreateOpResolver().
|
|
tflite_deps = [
|
|
":c_api_without_op_resolver",
|
|
],
|
|
deps = [
|
|
"//tensorflow/lite/core/c:c_api_experimental_without_op_resolver",
|
|
"//tensorflow/lite/core/c:c_api_opaque_without_op_resolver",
|
|
],
|
|
)
|
|
|
|
# Same as ":c_api_experimental", but without linking in the default CreateOpResolver implementation,
|
|
# and without depending on targets that use alwayslink=1.
|
|
cc_library_with_tflite_with_c_headers_test(
|
|
name = "c_api_experimental_without_op_resolver_without_alwayslink",
|
|
hdrs = [
|
|
"c_api_experimental.h",
|
|
# DEPRECATED
|
|
# ':c_api_opaque_without_op_resolver_without_alwayslink' was promoted to the 'mostly stable' API.
|
|
# Please explicitly add a dependency on ':c_api_opaque_without_op_resolver_without_alwayslink'
|
|
# if your target needs both ':c_api_experimental_without_op_resolver_without_alwayslink' and
|
|
# ':c_api_opaque_without_op_resolver_without_alwayslink' dependencies.
|
|
# We plan to remove 'c_api_opaque.h' from the list of exposed headers and
|
|
# will remove the dependency from this target on
|
|
# ':c_api_opaque_without_op_resolver_without_alwayslink' in the future.
|
|
"c_api_opaque.h",
|
|
],
|
|
copts = tflite_copts() + tflite_copts_warnings(),
|
|
tags = ["allow_undefined_symbols"], # For tflite::CreateOpResolver().
|
|
tflite_deps = [":c_api_without_op_resolver_without_alwayslink"],
|
|
deps = [
|
|
"//tensorflow/lite/core/c:c_api_experimental_without_op_resolver_without_alwayslink",
|
|
"//tensorflow/lite/core/c:c_api_opaque_without_op_resolver_without_alwayslink",
|
|
],
|
|
)
|
|
|
|
cc_library_with_tflite_with_c_headers_test(
|
|
name = "c_api_opaque",
|
|
hdrs = [
|
|
"c_api_opaque.h",
|
|
],
|
|
compatible_with = get_compatible_with_portable(),
|
|
copts = tflite_copts() + tflite_copts_warnings(),
|
|
generate_opaque_delegate_target = True,
|
|
tflite_deps = [":c_api"],
|
|
deps = ["//tensorflow/lite/core/c:c_api_opaque"],
|
|
)
|
|
|
|
cc_library_with_tflite_with_c_headers_test(
|
|
name = "c_api_opaque_without_op_resolver",
|
|
hdrs = [
|
|
"c_api_opaque.h",
|
|
],
|
|
compatible_with = get_compatible_with_portable(),
|
|
copts = tflite_copts() + tflite_copts_warnings(),
|
|
tags = ["allow_undefined_symbols"], # For tflite::CreateOpResolver().
|
|
tflite_deps = [":c_api_without_op_resolver"],
|
|
deps = ["//tensorflow/lite/core/c:c_api_opaque_without_op_resolver"],
|
|
)
|
|
|
|
cc_library_with_tflite_with_c_headers_test(
|
|
name = "c_api_opaque_without_op_resolver_without_alwayslink",
|
|
hdrs = [
|
|
"c_api_opaque.h",
|
|
],
|
|
compatible_with = get_compatible_with_portable(),
|
|
copts = tflite_copts() + tflite_copts_warnings(),
|
|
tags = ["allow_undefined_symbols"], # For tflite::CreateOpResolver().
|
|
tflite_deps = [
|
|
":c_api_without_op_resolver_without_alwayslink",
|
|
],
|
|
deps = ["//tensorflow/lite/core/c:c_api_opaque_without_op_resolver_without_alwayslink"],
|
|
)
|
|
|
|
cc_library_with_tflite_with_c_headers_test(
|
|
name = "c_api_types",
|
|
hdrs = ["c_api_types.h"],
|
|
compatible_with = get_compatible_with_portable(),
|
|
copts = tflite_copts() + tflite_copts_warnings(),
|
|
generate_opaque_delegate_target = True,
|
|
deps = ["//tensorflow/lite/core/c:c_api_types"],
|
|
)
|
|
|
|
cc_library(
|
|
name = "c_api_internal",
|
|
hdrs = ["c_api_internal.h"],
|
|
compatible_with = get_compatible_with_portable(),
|
|
copts = tflite_copts(),
|
|
visibility = [
|
|
"//tensorflow/lite/core/async/c:__subpackages__",
|
|
"//tensorflow/lite/core/c:__subpackages__",
|
|
],
|
|
deps = [
|
|
":common_internal",
|
|
"//tensorflow/lite:builtin_ops",
|
|
"//tensorflow/lite:framework",
|
|
"//tensorflow/lite/core:framework",
|
|
"//tensorflow/lite/core/api",
|
|
"//tensorflow/lite/core/c:common",
|
|
"//tensorflow/lite/profiling/telemetry/c:profiler",
|
|
],
|
|
)
|
|
|
|
filegroup(
|
|
name = "c_api_test_builtin_op_models",
|
|
testonly = 1,
|
|
srcs = [
|
|
"//tensorflow/lite:testdata/add.bin",
|
|
"//tensorflow/lite:testdata/add_quantized.bin",
|
|
],
|
|
)
|
|
|
|
# TODO(b/248514738): Deprecate this target in favour
|
|
# of //third_party/tensorflow/lite/core/c:c_api_test after all known existing uses of those targets
|
|
# have been changed to instead refer to the new target.
|
|
test_suite(
|
|
name = "c_api_test",
|
|
tests = [
|
|
"//tensorflow/lite/core/c:c_api_test",
|
|
],
|
|
)
|
|
|
|
tflite_custom_c_library(
|
|
name = "selectively_built_c_api_test_lib",
|
|
testonly = 1,
|
|
experimental = True,
|
|
models = [":c_api_test_builtin_op_models"],
|
|
visibility = [
|
|
"//tensorflow/lite/core/c:__subpackages__",
|
|
],
|
|
)
|
|
|
|
# TODO(b/248514738): Deprecate this target in favour
|
|
# of //third_party/tensorflow/lite/core/c:selectively_built_c_api_test after all known existing uses
|
|
# of those targets have been changed to instead refer to the new target.
|
|
test_suite(
|
|
name = "selectively_built_c_api_test",
|
|
tests = [
|
|
"//tensorflow/lite/core/c:selectively_built_c_api_test",
|
|
],
|
|
)
|
|
|
|
test_suite(
|
|
name = "c_api_experimental_test",
|
|
tests = [
|
|
"//tensorflow/lite/core/c:c_api_experimental_test",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "c_api_signature_runner_test",
|
|
size = "small",
|
|
srcs = ["c_api_signature_runner_test.cc"],
|
|
copts = tflite_copts(),
|
|
data = [
|
|
"//tensorflow/lite:testdata/multi_signatures.bin",
|
|
"//tensorflow/lite:testdata/no_signatures.bin",
|
|
],
|
|
deps = [
|
|
":c_api",
|
|
"//tensorflow/lite/core/c:c_api",
|
|
"//tensorflow/lite/core/c:common",
|
|
"@com_google_googletest//:gtest_main",
|
|
],
|
|
)
|
|
|
|
cc_library_with_tflite_with_c_headers_test(
|
|
name = "common",
|
|
hdrs = [
|
|
"builtin_op_data.h",
|
|
"common.h",
|
|
],
|
|
compatible_with = get_compatible_with_portable(),
|
|
copts = tflite_copts() + tflite_copts_warnings(),
|
|
generate_opaque_delegate_target = True,
|
|
tflite_deps = [
|
|
":c_api_types",
|
|
],
|
|
deps = [
|
|
"//tensorflow/lite:tflite_kernel_use_xnnpack_optional",
|
|
"//tensorflow/lite/core/c:c_api_types",
|
|
"//tensorflow/lite/core/c:common",
|
|
] + select({
|
|
"//tensorflow/lite:tensorflow_profiler_config": [
|
|
"//tensorflow/lite:macros",
|
|
"//tensorflow/lite:tensorflow_profiler_logger_shim",
|
|
],
|
|
"//conditions:default": [],
|
|
}),
|
|
)
|
|
|
|
cc_library(
|
|
name = "common_internal",
|
|
srcs = ["common_internal.cc"],
|
|
hdrs = ["common_internal.h"],
|
|
compatible_with = get_compatible_with_portable(),
|
|
copts = tflite_copts(),
|
|
visibility = [
|
|
"//tensorflow/lite:__subpackages__",
|
|
],
|
|
deps = [
|
|
"//tensorflow/lite/core/c:c_api_types",
|
|
"//tensorflow/lite/core/c:common",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "c_api_opaque_internal",
|
|
srcs = ["c_api_opaque_internal.cc"],
|
|
hdrs = ["c_api_opaque_internal.h"],
|
|
compatible_with = get_compatible_with_portable(),
|
|
tags = ["allow_undefined_symbols"], # For tflite::CreateOpResolver().
|
|
visibility = [
|
|
"//tensorflow/lite:__subpackages__",
|
|
] + c_api_opaque_internal_visibility_allowlist(),
|
|
deps = [
|
|
":c_api_types",
|
|
"//tensorflow/lite:framework",
|
|
"//tensorflow/lite/c:c_api_internal",
|
|
"//tensorflow/lite/core/api:op_resolver",
|
|
"//tensorflow/lite/core/c:common",
|
|
"//tensorflow/lite/core/c:operator",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "c_api_opaque_internal_test",
|
|
srcs = ["c_api_opaque_internal_test.cc"],
|
|
data = [
|
|
"//tensorflow/lite:testdata/add.bin",
|
|
],
|
|
deps = [
|
|
":c_api_internal",
|
|
":c_api_opaque_internal",
|
|
"//tensorflow/lite:builtin_ops",
|
|
"//tensorflow/lite:framework",
|
|
"//tensorflow/lite/kernels:builtin_ops",
|
|
"@com_google_googletest//:gtest_main",
|
|
],
|
|
)
|
|
|
|
# Same as c_api_opaque_internal, but depends on the
|
|
# '_without_alwayslink' variant of ':c_api_without_op_resolver'.
|
|
cc_library(
|
|
name = "c_api_opaque_internal_without_alwayslink",
|
|
srcs = ["c_api_opaque_internal.cc"],
|
|
hdrs = ["c_api_opaque_internal.h"],
|
|
compatible_with = get_compatible_with_portable(),
|
|
tags = ["allow_undefined_symbols"], # For tflite::CreateOpResolver().
|
|
visibility = [
|
|
"//tensorflow/lite:__subpackages__",
|
|
],
|
|
deps = [
|
|
":c_api_types",
|
|
"//tensorflow/lite:framework",
|
|
"//tensorflow/lite/c:c_api_internal",
|
|
"//tensorflow/lite/core/api:op_resolver",
|
|
"//tensorflow/lite/core/c:common",
|
|
"//tensorflow/lite/core/c:operator_without_alwayslink",
|
|
],
|
|
)
|
|
|
|
# For use with library targets that can't use relative paths.
|
|
# LINT.IfChange(exported_headers)
|
|
exports_files([
|
|
"builtin_op_data.h",
|
|
"c_api.h",
|
|
"c_api_experimental.h",
|
|
"c_api_opaque.h",
|
|
"c_api_types.h",
|
|
"common.h",
|
|
])
|
|
|
|
filegroup(
|
|
name = "tensorflowlite_c_api_hdrs_filegroup",
|
|
srcs = [
|
|
"builtin_op_data.h",
|
|
"c_api.h",
|
|
"c_api_types.h",
|
|
"common.h",
|
|
],
|
|
)
|
|
|
|
alias(
|
|
name = "tensorflowlite_c_impl_hdrs_filegroup",
|
|
actual = "//tensorflow/lite/core/c:headers_filegroup",
|
|
)
|
|
# LINT.ThenChange(../java/BUILD:TFLITE_HEADERS)
|
|
|
|
# Test the C extension API code.
|
|
test_suite(
|
|
name = "common_test",
|
|
tests = [
|
|
"//tensorflow/lite/core/c:common_test",
|
|
],
|
|
)
|
|
|
|
test_suite(
|
|
name = "builtin_op_data_test",
|
|
tests = [
|
|
"//tensorflow/lite/core/c:builtin_op_data_test",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "c_test",
|
|
size = "small",
|
|
srcs = ["c_test.c"],
|
|
copts = tflite_copts(),
|
|
data = [
|
|
"//tensorflow/lite:testdata/add.bin",
|
|
"//tensorflow/lite:testdata/multi_signatures.bin",
|
|
],
|
|
tags = [
|
|
# Testing on Android uses "--gunit_output=xml:test.xml" runtime flag,
|
|
# but this test is C code, not C++, and hence doesn't use GUnit,
|
|
# so doesn't support that flag.
|
|
"tflite_not_portable_android",
|
|
],
|
|
deps = [
|
|
":c_api",
|
|
":c_api_experimental",
|
|
"//tensorflow/lite/core/c:c_api",
|
|
"//tensorflow/lite/core/c:c_api_experimental",
|
|
"//tensorflow/lite/core/c:c_api_opaque",
|
|
"//tensorflow/lite/core/c:c_api_types",
|
|
"//tensorflow/lite/core/c:common",
|
|
],
|
|
)
|
|
|
|
cc_library_with_tflite_with_c_headers_test(
|
|
name = "test_util",
|
|
testonly = True,
|
|
srcs = ["test_util.cc"],
|
|
hdrs = ["test_util.h"],
|
|
generate_opaque_delegate_target = True,
|
|
)
|
|
|
|
tflite_self_contained_libs_test_suite(name = "self_contained_libs_test_suite")
|
|
|
|
tflite_portable_test_suite()
|