• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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    deps = [
62        "//tensorflow/lite/ios:tensorflow_lite_c",
63    ] + select({
64        ":use_coreml_delegate": [
65            "//tensorflow/lite/delegates/coreml:coreml_delegate",
66        ],
67        "//conditions:default": [],
68    }) + select({
69        ":use_metal_delegate": [
70            "//tensorflow/lite/delegates/gpu:metal_delegate",
71        ],
72        "//conditions:default": [],
73    }),
74)
75
76swift_library(
77    name = "TensorFlowLiteAllDelegates",
78    testonly = 1,
79    srcs = glob(["Sources/*.swift"]),
80    linkopts = [
81        "-Wl,-weak_framework,CoreML",
82        "-Wl,-weak_framework,Metal",
83    ],
84    module_name = "TensorFlowLite",
85    tags = TFL_DEFAULT_TAGS + ["builder_default_ios_arm64"],
86    deps = [
87        "//tensorflow/lite/delegates/coreml:coreml_delegate",
88        "//tensorflow/lite/delegates/gpu:metal_delegate",
89        "//tensorflow/lite/ios:tensorflow_lite_c",
90    ],
91)
92
93# bazel build -c opt --config=ios_fat //tensorflow/lite/swift:TensorFlowLite_framework
94ios_static_framework(
95    name = "TensorFlowLite_framework",
96    avoid_deps = [
97        "//tensorflow/lite/ios:tensorflow_lite_c",
98    ],
99    bundle_name = "TensorFlowLite",
100    minimum_os_version = TFL_MINIMUM_OS_VERSION,
101    deps = [
102        ":TensorFlowLite",
103    ],
104)
105
106ios_unit_test(
107    name = "Tests",
108    size = "small",
109    minimum_os_version = TFL_MINIMUM_OS_VERSION,
110    runner = tflite_ios_lab_runner("IOS_LATEST"),
111    tags = TFL_DEFAULT_TAGS + TFL_DISABLED_SANITIZER_TAGS,
112    deps = [
113        ":TestsLibrary",
114    ],
115)
116
117swift_library(
118    name = "TestsLibrary",
119    testonly = 1,
120    srcs = glob(["Tests/*.swift"]),
121    tags = TFL_DEFAULT_TAGS + ["nobuilder"],
122    deps = [
123        ":Resources",
124        ":TensorFlowLiteAllDelegates",
125    ],
126)
127
128objc_library(
129    name = "Resources",
130    data = [
131        "//tensorflow/lite:testdata/add.bin",
132        "//tensorflow/lite:testdata/add_quantized.bin",
133        "//tensorflow/lite:testdata/multi_add.bin",
134    ],
135    tags = TFL_DEFAULT_TAGS,
136)
137