xref: /aosp_15_r20/external/tensorflow/tensorflow/lite/swift/BUILD.apple (revision b6fb3261f9314811a0f4371741dbb8839866f948)
1# TensorFlow Lite for Swift
2
3load("//tensorflow/lite:special_rules.bzl", "ios_visibility_allowlist", "tflite_ios_lab_runner")
4load("//tensorflow/lite/ios:ios.bzl", "TFL_DEFAULT_TAGS", "TFL_DISABLED_SANITIZER_TAGS", "TFL_MINIMUM_OS_VERSION")
5load("@build_bazel_rules_apple//apple:ios.bzl", "ios_static_framework", "ios_unit_test")
6load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")
7
8package(
9    default_visibility = ["//visibility:private"],
10    licenses = ["notice"],
11)
12
13config_setting(
14    name = "use_coreml_delegate",
15    define_values = {"use_coreml_delegate": "1"},
16)
17
18config_setting(
19    name = "use_metal_delegate",
20    define_values = {"use_metal_delegate": "1"},
21)
22
23# By default this builds with no delegates.
24# To build with the Metal delegate pass --define=use_metal_delegate=1
25# To build with the CoreML delegate pass --define=use_coreml_delegate=1
26swift_library(
27    name = "TensorFlowLite",
28    srcs = glob(
29        [
30            "Sources/*.swift",
31        ],
32        exclude = [
33            "Sources/CoreMLDelegate.swift",
34            "Sources/MetalDelegate.swift",
35        ],
36    ) + select({
37        ":use_coreml_delegate": [
38            "Sources/CoreMLDelegate.swift",
39        ],
40        "//conditions:default": [],
41    }) + select({
42        ":use_metal_delegate": [
43            "Sources/MetalDelegate.swift",
44        ],
45        "//conditions:default": [],
46    }),
47    linkopts = select({
48        ":use_coreml_delegate": [
49            "-Wl,-weak_framework,CoreML",
50        ],
51        "//conditions:default": [],
52    }) + select({
53        ":use_metal_delegate": [
54            "-Wl,-weak_framework,Metal",
55        ],
56        "//conditions:default": [],
57    }),
58    module_name = "TensorFlowLite",
59    tags = TFL_DEFAULT_TAGS + ["nobuilder"],
60    visibility = ios_visibility_allowlist(),
61    # Do not sort: these targets sort differently internally vs open source
62    deps = ["//tensorflow/lite/ios:tensorflow_lite_c"] + select({
63        ":use_coreml_delegate": [
64            "//tensorflow/lite/delegates/coreml:coreml_delegate",
65        ],
66        "//conditions:default": [],
67    }) + select({
68        ":use_metal_delegate": [
69            "//tensorflow/lite/delegates/gpu:metal_delegate",
70        ],
71        "//conditions:default": [],
72    }),
73)
74
75swift_library(
76    name = "TensorFlowLiteAllDelegates",
77    testonly = 1,
78    srcs = glob(["Sources/*.swift"]),
79    linkopts = [
80        "-Wl,-weak_framework,CoreML",
81        "-Wl,-weak_framework,Metal",
82    ],
83    module_name = "TensorFlowLite",
84    tags = TFL_DEFAULT_TAGS + ["builder_default_ios_arm64"],
85    deps = [
86        "//tensorflow/lite/delegates/coreml:coreml_delegate",
87        "//tensorflow/lite/delegates/gpu:metal_delegate",
88        "//tensorflow/lite/ios:tensorflow_lite_c",
89    ],
90)
91
92# bazel build -c opt --config=ios_fat //tensorflow/lite/swift:TensorFlowLite_framework
93ios_static_framework(
94    name = "TensorFlowLite_framework",
95    avoid_deps = [
96        "//tensorflow/lite/ios:tensorflow_lite_c",
97    ],
98    bundle_name = "TensorFlowLite",
99    minimum_os_version = TFL_MINIMUM_OS_VERSION,
100    deps = [
101        ":TensorFlowLite",
102    ],
103)
104
105ios_unit_test(
106    name = "Tests",
107    size = "small",
108    minimum_os_version = TFL_MINIMUM_OS_VERSION,
109    runner = tflite_ios_lab_runner("IOS_LATEST"),
110    tags = TFL_DEFAULT_TAGS + TFL_DISABLED_SANITIZER_TAGS,
111    deps = [
112        ":TestsLibrary",
113    ],
114)
115
116swift_library(
117    name = "TestsLibrary",
118    testonly = 1,
119    srcs = glob(["Tests/*.swift"]),
120    tags = TFL_DEFAULT_TAGS + ["nobuilder"],
121    deps = [
122        ":Resources",
123        ":TensorFlowLiteAllDelegates",
124    ],
125)
126
127objc_library(
128    name = "Resources",
129    data = [
130        "//tensorflow/lite:testdata/add.bin",
131        "//tensorflow/lite:testdata/add_quantized.bin",
132        "//tensorflow/lite:testdata/multi_add.bin",
133        "//tensorflow/lite:testdata/multi_signatures.bin",
134    ],
135    tags = TFL_DEFAULT_TAGS,
136)
137