aboutsummaryrefslogtreecommitdiff
path: root/src/armnnTfLiteParser
diff options
context:
space:
mode:
authorJim Flynn <jim.flynn@arm.com>2021-09-23 12:16:53 +0100
committerKeithARM <keith.davis@arm.com>2021-09-23 15:21:28 +0000
commitfca233eed08f4ec3b793fe76abae540e391f8319 (patch)
tree92c91e0fa06c58d72514ae39fc452b89b9b4b559 /src/armnnTfLiteParser
parentce083d2ea1964411ce5d8f2ff05f6e0004978703 (diff)
downloadarmnn-fca233eed08f4ec3b793fe76abae540e391f8319.tar.gz
IVGCVSW-6181 patch to allow building against tflite > v2.3
Change-Id: I292add699b2af32fab87b98929fe6fee79fdf356 Signed-off-by: Jim Flynn <jim.flynn@arm.com>
Diffstat (limited to 'src/armnnTfLiteParser')
-rwxr-xr-xsrc/armnnTfLiteParser/CMakeLists.txt28
-rw-r--r--src/armnnTfLiteParser/TfLiteParser.cpp18
2 files changed, 43 insertions, 3 deletions
diff --git a/src/armnnTfLiteParser/CMakeLists.txt b/src/armnnTfLiteParser/CMakeLists.txt
index 6a02c94b82..0988420dde 100755
--- a/src/armnnTfLiteParser/CMakeLists.txt
+++ b/src/armnnTfLiteParser/CMakeLists.txt
@@ -19,10 +19,30 @@ if(BUILD_TF_LITE_PARSER)
target_include_directories(armnnTfLiteParser PRIVATE ../armnnUtils)
target_include_directories(armnnTfLiteParser SYSTEM PRIVATE "${TF_LITE_SCHEMA_INCLUDE_PATH}")
+
+ # using the armnn/delegate/cmake/Modules/FindTfLiteSrc.cmake to find the TfLite sources
+ # so that we can use the tensorflow/lite/version.h to determine which version of
+ # tensorflow lite we are compiling against
+ find_package(TfLiteSrc REQUIRED MODULE)
+
+ # Various tflite header files are not warning clean
+ # We can't change compilation flags on header files directly, so we need to add them to an interface library first
+ add_library(tflite_version_headers INTERFACE)
+ target_include_directories(tflite_version_headers INTERFACE $<BUILD_INTERFACE:${TfLite_INCLUDE_DIR}>
+ $<INSTALL_INTERFACE:include/tflite_version_headers>)
+
+ target_compile_options(tflite_version_headers INTERFACE -Wno-conversion
+ -Wno-sign-conversion
+ -Wno-unused-parameter
+ -Wno-unused-function)
+
# If user has explicitly specified flatbuffers lib then use that,
# otherwise search for it based on FLATBUFFERS_BUILD_DIR
if (FLATBUFFERS_LIBRARY)
- target_link_libraries(armnnTfLiteParser armnn ${FLATBUFFERS_LIBRARY})
+ target_link_libraries(armnnTfLiteParser
+ armnn
+ tflite_version_headers
+ ${FLATBUFFERS_LIBRARY})
else()
# Use PATH_SUFFIXES to help find separate libs for debug/release on Windows builds
find_library(FLATBUFFERS_LIBRARY_DEBUG NAMES flatbuffers
@@ -31,7 +51,11 @@ if(BUILD_TF_LITE_PARSER)
find_library(FLATBUFFERS_LIBRARY_RELEASE NAMES flatbuffers
HINTS ${FLATBUFFERS_BUILD_DIR}
PATH_SUFFIXES "Release")
- target_link_libraries(armnnTfLiteParser armnn debug ${FLATBUFFERS_LIBRARY_DEBUG} optimized ${FLATBUFFERS_LIBRARY_RELEASE})
+ target_link_libraries(armnnTfLiteParser
+ armnn
+ tflite_version_headers
+ debug ${FLATBUFFERS_LIBRARY_DEBUG}
+ optimized ${FLATBUFFERS_LIBRARY_RELEASE})
endif()
set_target_properties(armnnTfLiteParser PROPERTIES VERSION ${TFLITE_PARSER_LIB_VERSION} SOVERSION ${TFLITE_PARSER_LIB_SOVERSION} )
diff --git a/src/armnnTfLiteParser/TfLiteParser.cpp b/src/armnnTfLiteParser/TfLiteParser.cpp
index bedefdec2f..68dbbd120f 100644
--- a/src/armnnTfLiteParser/TfLiteParser.cpp
+++ b/src/armnnTfLiteParser/TfLiteParser.cpp
@@ -32,6 +32,8 @@
#include <fmt/format.h>
+#include <tensorflow/lite/version.h>
+
#include <algorithm>
#include <fstream>
#include <iostream>
@@ -767,7 +769,14 @@ INetworkPtr TfLiteParserImpl::CreateNetworkFromModel()
for (OperatorPtr const& op : subgraph->operators)
{
auto const& opCodePtr = m_Model->operator_codes[op->opcode_index];
+
+// work around the introduction of the deprecated_builtin_code introduced in 2.4 in a backwards compatible manner
+#if TF_MAJOR_VERSION > 2 || (TF_MAJOR_VERSION == 2 && TF_MINOR_VERSION > 3)
+ auto builtinCode = std::max(opCodePtr->builtin_code,
+ static_cast<tflite::BuiltinOperator>(opCodePtr->deprecated_builtin_code));
+#else
auto builtinCode = opCodePtr->builtin_code;
+#endif
if (builtinCode > tflite::BuiltinOperator_MAX)
{
@@ -887,7 +896,14 @@ void TfLiteParserImpl::ParseUnsupportedOperator(size_t subgraphIndex, size_t ope
const auto & operatorPtr = m_Model->subgraphs[subgraphIndex]->operators[operatorIndex];
auto opcodeIndex = operatorPtr->opcode_index;
+
+// work around the introduction of the deprecated_builtin_code introduced in 2.4 in a backwards compatible manner
+#if TF_MAJOR_VERSION > 2 || (TF_MAJOR_VERSION == 2 && TF_MINOR_VERSION > 3)
+ auto opcode = std::max(m_Model->operator_codes[opcodeIndex]->builtin_code,
+ static_cast<tflite::BuiltinOperator>(m_Model->operator_codes[opcodeIndex]->deprecated_builtin_code));
+#else
auto opcode = m_Model->operator_codes[opcodeIndex]->builtin_code;
+#endif
if (!m_Options || !m_Options.value().m_StandInLayerForUnsupported)
{
@@ -1601,7 +1617,7 @@ void TfLiteParserImpl::ParseSlice(size_t subgraphIndex, size_t operatorIndex)
for (unsigned int i = 0; i < signedSize.size(); ++i)
{
int signedValue = signedSize[i];
-
+
if (signedValue < -1 || signedValue > static_cast<int>(inputTensorInfo.GetShape()[i] - begin[i]))
{
throw ParseException(fmt::format("Invalid value for size {} size must be in range "