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