@@ -18,7 +18,11 @@ set(TRITON_COMMON_REPO_TAG "main" CACHE STRING "Tag for triton-inference-server/
1818
1919# TFLite Options
2020set (TFLITE_TAG "v2.4.1" CACHE STRING "Version of TFLite to build" )
21+ set (BAZEL_BINARY "/usr/bin/bazel" CACHE STRING "Location of bazel binary on host" )
22+ option (TFLITE_BAZEL_BUILD "Build tflite bazel" OFF )
2123option (TFLITE_ENABLE_RUY "Use RUY library in TFLite build" ON )
24+ option (TFLITE_ENABLE_XNNPACK "Build backend with xnnpack delgate support" ON )
25+ option (TFLITE_ENABLE_FLEX_OPS "Build tflite with flex ops support (must build with bazel)" OFF )
2226
2327# ArmNN Options
2428set (ARMNN_TAG "v21.08" CACHE STRING "Tag for ArmNN repo" )
@@ -44,6 +48,11 @@ if (TRITON_ENABLE_MALI_GPU)
4448 set (ACL_ENABLE_CL "1" )
4549endif ()
4650
51+ # Ensure bazel build set if enabling flex ops delegate
52+ if (TFLITE_ENABLE_FLEX_OPS AND (NOT (TFLITE_BAZEL_BUILD)))
53+ message (FATAL_ERROR "Please set TFLITE_BAZEL_BUILD if you wish to build flex ops delegate" )
54+ endif ()
55+
4756if (NOT DEFINED ACL_ARCH)
4857 if (${TARGET_ARCH} MATCHES "armv7" )
4958 set (ACL_ARCH "armv7a" )
@@ -95,15 +104,23 @@ FetchContent_Declare(
95104 GIT_TAG ${TRITON_BACKEND_REPO_TAG}
96105 GIT_SHALLOW ON
97106)
98- FetchContent_Declare(
99- tensorflow-lite
100- GIT_REPOSITORY https://github.com/tensorflow/tensorflow.git
101- GIT_TAG ${TFLITE_TAG}
102- GIT_SHALLOW ON
103- PATCH_COMMAND git apply ${CMAKE_CURRENT_SOURCE_DIR} /patches/xnnpack_commit.patch || true # patch updates the commit hash for xnnpack for tensorflow v2.4.1
104- SOURCE_SUBDIR tensorflow/lite
105- )
106- FetchContent_MakeAvailable(repo-common repo-core repo-backend tensorflow-lite)
107+
108+ set (MAKE_AVAILABLE_LIST repo-common repo-core repo-backend)
109+
110+ if (NOT TFLITE_BAZEL_BUILD)
111+ FetchContent_Declare(
112+ tensorflow-lite
113+ GIT_REPOSITORY https://github.com/tensorflow/tensorflow.git
114+ GIT_TAG ${TFLITE_TAG}
115+ GIT_SHALLOW ON
116+ PATCH_COMMAND git apply ${CMAKE_CURRENT_SOURCE_DIR} /patches/xnnpack_commit.patch || true # patch updates the commit hash for xnnpack for tensorflow v2.4.1
117+ SOURCE_SUBDIR tensorflow/lite
118+ )
119+
120+ LIST (APPEND MAKE_AVAILABLE_LIST tensorflow-lite)
121+ endif ()
122+
123+ FetchContent_MakeAvailable(${MAKE_AVAILABLE_LIST} )
107124
108125#
109126# Shared library implementing the Triton Backend API
@@ -112,6 +129,55 @@ configure_file(src/libtriton_armnn_tflite.ldscript libtriton_armnn_tflite.ldscri
112129
113130include (ExternalProject)
114131
132+ set (TFLITE_LOCATION ${CMAKE_CURRENT_BINARY_DIR} /external/tensorflow_lite)
133+
134+ if (TFLITE_BAZEL_BUILD)
135+ SET (BAZEL_BUILD_FLAGS
136+ "--config=monolithic"
137+ "-c" "opt"
138+ )
139+
140+ if (TFLITE_ENABLE_RUY)
141+ LIST (APPEND BAZEL_BUILD_FLAGS "--define=tflite_with_ruy=true" )
142+ else ()
143+ LIST (APPEND BAZEL_BUILD_FLAGS "--define=tflite_with_ruy=false" )
144+ endif ()
145+
146+ if (TFLITE_ENABLE_XNNPACK)
147+ SET (BAZEL_BUILD_PATCH "${CMAKE_CURRENT_SOURCE_DIR} /patches/tflite_bazel_build_with_xnnpack.patch" )
148+ else ()
149+ SET (BAZEL_BUILD_PATCH "${CMAKE_CURRENT_SOURCE_DIR} /patches/tflite_bazel_build.patch" )
150+ endif ()
151+
152+ if (TFLITE_ENABLE_FLEX_OPS)
153+ SET (TFLITE_PATCH_COMMAND "git" "apply" ${BAZEL_BUILD_PATCH} "||" "true" )
154+ else ()
155+ SET (TFLITE_PATCH_COMMAND "" )
156+ endif ()
157+
158+ if (CMAKE_BUILD_TYPE STREQUAL "Debug" )
159+ LIST (APPEND BAZEL_BUILD_FLAGS "-c" "dbg" "--copt=-g" )
160+ else ()
161+ LIST (APPEND BAZEL_BUILD_FLAGS "--strip=always" )
162+ endif ()
163+
164+ # Build tensorflow lite shared lib using bazel (required for flex ops delegate)
165+ ExternalProject_Add(
166+ tensorflow-lite
167+ PREFIX ${TFLITE_LOCATION}
168+ GIT_REPOSITORY https://github.com/tensorflow/tensorflow.git
169+ GIT_TAG ${TFLITE_TAG}
170+ GIT_SHALLOW ON
171+ PATCH_COMMAND git apply ${CMAKE_CURRENT_SOURCE_DIR} /patches/tflite.patch || true # patch updates the commit hash for xnnpack for tensorflow v2.4.1
172+ COMMAND ${TFLITE_PATCH_COMMAND}
173+ CONFIGURE_COMMAND ""
174+ BUILD_COMMAND ${BAZEL_BINARY} build ${BAZEL_BUILD_FLAGS} //tensorflow/lite:libtensorflowlite.so
175+ BUILD_IN_SOURCE ON
176+ INSTALL_COMMAND ""
177+ )
178+ endif ()
179+
180+
115181if (ARMNN_DELEGATE_ENABLE)
116182 #
117183 # Build ArmNN dependencies using custom command
@@ -142,15 +208,26 @@ if (ARMNN_DELEGATE_ENABLE)
142208 INSTALL_COMMAND ""
143209 )
144210
211+ if (TFLITE_BAZEL_BUILD)
212+ SET (ARMNN_PATCH_COMMAND "" )
213+ SET (TENSORFLOW_ROOT ${TFLITE_LOCATION} /src/tensorflow-lite)
214+ SET (TFLITE_LIB_ROOT ${TFLITE_LOCATION} /src/tensorflow-lite/bazel-bin)
215+ else ()
216+ # Never fail as patch is always applied after repo clone
217+ SET (ARMNN_PATCH_COMMAND "git" "apply" "${CMAKE_CURRENT_SOURCE_DIR} /patches/tflite_armnn_delegate.patch" "||" "true" )
218+ SET (TENSORFLOW_ROOT ${CMAKE_CURRENT_BINARY_DIR} /_deps/tensorflow-lite-src)
219+ SET (TFLITE_LIB_ROOT ${CMAKE_CURRENT_BINARY_DIR} /_deps/tensorflow-lite-build )
220+ endif ()
221+
145222 # ArmNN and its tflite delegate
146223 ExternalProject_Add(
147224 armnn
148225 PREFIX ${ARMNN_LOCATION}
149226 GIT_REPOSITORY https://review.mlplatform.org/ml/armnn
150227 GIT_TAG ${ARMNN_TAG}
151228 GIT_SHALLOW ON
152- PATCH_COMMAND git apply ${CMAKE_CURRENT_SOURCE_DIR} /patches/tflite_armnn_delegate.patch || true # Never fail as patch is always applied after repo clone
153- CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH =${ARMNN_LOCATION} -DBUILD_ARMNN_TFLITE_DELEGATE=1 -DTENSORFLOW_ROOT=${CMAKE_CURRENT_BINARY_DIR} /_deps/tensorflow-lite-src -DTFLITE_LIB_ROOT=${CMAKE_CURRENT_BINARY_DIR} /_deps/tensorflow-lite- build -DARMCOMPUTE_ROOT=${ACL_LOCATION} /src/acl -DARMCOMPUTENEON=${ACL_ENABLE_NEON} -DARMCOMPUTECL=${ACL_ENABLE_CL} -DBUILD_UNIT_TESTS=0 -DCMAKE_BUILD_TYPE=${ARMNN_BUILD_TYPE} -DBUILD_ARMNN_SERIALIZER=0 -DARMNNREF=1 -DFLATBUFFERS_ROOT=${FLATBUFFERS_LOCATION} /flatbuffers-${FLATBUFFERS_VERSION} /install
229+ PATCH_COMMAND ${ARMNN_PATCH_COMMAND}
230+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH =${ARMNN_LOCATION} -DBUILD_ARMNN_TFLITE_DELEGATE=1 -DTENSORFLOW_ROOT=${TENSORFLOW_ROOT} -DTFLITE_LIB_ROOT=${TFLITE_LIB_ROOT} -DARMCOMPUTE_ROOT=${ACL_LOCATION} /src/acl -DARMCOMPUTENEON=${ACL_ENABLE_NEON} -DARMCOMPUTECL=${ACL_ENABLE_CL} -DBUILD_UNIT_TESTS=0 -DCMAKE_BUILD_TYPE=${ARMNN_BUILD_TYPE} -DBUILD_ARMNN_SERIALIZER=0 -DARMNNREF=1 -DFLATBUFFERS_ROOT=${FLATBUFFERS_LOCATION} /flatbuffers-${FLATBUFFERS_VERSION} /install
154231 DEPENDS flatbuffers-armnn acl tensorflow-lite
155232 )
156233endif ()
@@ -174,15 +251,23 @@ add_library(
174251 TritonArmNNTFLiteBackend::triton-armnn-tflite-backend ALIAS triton-armnn-tflite-backend
175252)
176253
177- target_include_directories (
178- triton-armnn-tflite-backend
179- PRIVATE
254+ SET (BACKEND_INCLUDE_DIRS
180255 ${CMAKE_CURRENT_SOURCE_DIR} /src
181- ${CMAKE_CURRENT_BINARY_DIR} /_deps/tensorflow-lite-src
256+ ${TENSORFLOW_ROOT} # for tflite headers
182257 ${ARMNN_LOCATION} /include # for armnn headers
183258 ${ARMNN_LOCATION} /src/armnn/delegate/include # for delegate headers
184259)
185260
261+ if (TFLITE_BAZEL_BUILD)
262+ LIST (APPEND BACKEND_INCLUDE_DIRS ${TENSORFLOW_ROOT} /bazel-tensorflow-lite/external/flatbuffers/include )
263+ endif ()
264+
265+ target_include_directories (
266+ triton-armnn-tflite-backend
267+ PRIVATE
268+ ${BACKEND_INCLUDE_DIRS}
269+ )
270+
186271target_compile_features (triton-armnn-tflite-backend PRIVATE cxx_std_11)
187272target_compile_options (
188273 triton-armnn-tflite-backend PRIVATE
@@ -211,15 +296,30 @@ set_target_properties(
211296 LINK_FLAGS "-Wl,--no-as-needed,--version-script libtriton_armnn_tflite.ldscript"
212297)
213298
299+ SET (BACKEND_LINK_LIBS
300+ triton-core-serverapi
301+ triton-core-backendapi
302+ triton-core-serverstub
303+ triton-backend-utils
304+ ${CMAKE_DL_LIBS}
305+ )
306+
307+ if (TFLITE_BAZEL_BUILD)
308+ # Link the tensorflow lite library
309+ target_link_libraries (
310+ triton-armnn-tflite-backend
311+ PRIVATE
312+ "-L${TFLITE_LOCATION} /src/tensorflow-lite/bazel-bin/tensorflow/lite" # From bazel tflite build
313+ -ltensorflowlite
314+ )
315+ else ()
316+ LIST (APPEND BACKEND_LINK_LIBS tensorflow-lite)
317+ endif ()
318+
214319target_link_libraries (
215320 triton-armnn-tflite-backend
216321 PRIVATE
217- triton-core-serverapi # from repo-core
218- triton-core-backendapi # from repo-core
219- triton-core-serverstub # from repo-core
220- triton-backend-utils # from repo-backend
221- tensorflow-lite
222- ${CMAKE_DL_LIBS}
322+ ${BACKEND_LINK_LIBS}
223323)
224324
225325if (ARMNN_DELEGATE_ENABLE)
@@ -264,10 +364,19 @@ if (ARMNN_DELEGATE_ENABLE)
264364 )
265365endif ()
266366
367+ if (TFLITE_BAZEL_BUILD)
368+ # Install tflite library
369+ install (
370+ FILES
371+ ${TFLITE_LOCATION} /src/tensorflow-lite/bazel-bin/tensorflow/lite/libtensorflowlite.so
372+ DESTINATION ${CMAKE_INSTALL_PREFIX} /backends/armnn_tflite
373+ )
374+ endif ()
375+
267376# Install Tensorflow license
268377install (
269378 FILES
270- ${CMAKE_CURRENT_BINARY_DIR} /_deps/tensorflow-lite-src /LICENSE
379+ ${TENSORFLOW_ROOT} /LICENSE
271380 RENAME tensorflow.LICENSE
272381 DESTINATION ${CMAKE_INSTALL_PREFIX} /backends/armnn_tflite
273382)
0 commit comments