ARM-software / armnn

Arm NN ML Software. The code here is a read-only mirror of https://review.mlplatform.org/admin/repos/ml/armnn
https://developer.arm.com/products/processors/machine-learning/arm-nn
MIT License
1.15k stars 307 forks source link

Build of armnn 22.02 fails with LTO enabled #623

Closed ggardet closed 2 years ago

ggardet commented 2 years ago

Build of armnn 22.02 fails with LTO enabled:

[  528s] [ 57%] Linking CXX shared library ../../libarmnnSerializer.so
[  528s] cd /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer && /usr/bin/cmake -E cmake_link_script CMakeFiles/armnnSerializer.dir/link.txt --verbose=1
[  528s] /usr/bin/c++ -fPIC -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -flto=auto -g -pthread -std=c++14 -Wall -Wextra -Werror -Wold-style-cast -Wno-missing-braces -Wconversion -Wsign-conversion  -Wno-psabi -O2 -g  -flto=auto -Wl,--as-needed -Wl,--no-undefined -Wl,-z,now -shared -Wl,-soname,libarmnnSerializer.so.28 -o ../../libarmnnSerializer.so.28.0 CMakeFiles/armnnSerializer.dir/Serializer.cpp.o CMakeFiles/armnnSerializer.dir/SerializerUtils.cpp.o CMakeFiles/armnnSerializer.dir/__/armnnDeserializer/Deserializer.cpp.o  ../../libarmnn.so.28.0 -lflatbuffers ../../libarmnnUtils.a ../../profiling/common/src/libpipeCommon.a -ldl ../../third-party/fmt/libfmt.a 
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:650:6: error: type 'ConstTensorData' violates the C++ One Definition Rule [-Werror=odr]
[  528s]   650 | enum ConstTensorData {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:646:6: note: a type with different precision is defined in another translation unit
[  528s]   646 | enum ConstTensorData : uint8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:488:6: error: type 'DataType' violates the C++ One Definition Rule [-Werror=odr]
[  528s]   488 | enum DataType {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:484:6: note: a type with different precision is defined in another translation unit
[  528s]   484 | enum DataType : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:545:6: error: type 'DataLayout' violates the C++ One Definition Rule [-Werror=odr]
[  528s]   545 | enum DataLayout {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:541:6: note: a type with different precision is defined in another translation unit
[  528s]   541 | enum DataLayout : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:979:6: error: type 'UnaryOperation' violates the C++ One Definition Rule [-Werror=odr]
[  528s]   979 | enum UnaryOperation {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:975:6: note: a type with different precision is defined in another translation unit
[  528s]   975 | enum UnaryOperation : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:937:6: error: type 'ComparisonOperation' violates the C++ One Definition Rule [-Werror=odr]
[  528s]   937 | enum ComparisonOperation {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:933:6: note: a type with different precision is defined in another translation unit
[  528s]   933 | enum ComparisonOperation : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:1057:6: error: type 'PoolingAlgorithm' violates the C++ One Definition Rule [-Werror=odr]
[  528s]  1057 | enum PoolingAlgorithm {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:1053:6: note: a type with different precision is defined in another translation unit
[  528s]  1053 | enum PoolingAlgorithm : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:1090:6: error: type 'OutputShapeRounding' violates the C++ One Definition Rule [-Werror=odr]
[  528s]  1090 | enum OutputShapeRounding {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:1086:6: note: a type with different precision is defined in another translation unit
[  528s]  1086 | enum OutputShapeRounding : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:1120:6: error: type 'PaddingMethod' violates the C++ One Definition Rule [-Werror=odr]
[  528s]  1120 | enum PaddingMethod {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:1116:6: note: a type with different precision is defined in another translation unit
[  528s]  1116 | enum PaddingMethod : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:1210:6: error: type 'PaddingMode' violates the C++ One Definition Rule [-Werror=odr]
[  528s]  1210 | enum PaddingMode {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:1206:6: note: a type with different precision is defined in another translation unit
[  528s]  1206 | enum PaddingMode : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:1150:6: error: type 'NormalizationAlgorithmChannel' violates the C++ One Definition Rule [-Werror=odr]
[  528s]  1150 | enum NormalizationAlgorithmChannel {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:1146:6: note: a type with different precision is defined in another translation unit
[  528s]  1146 | enum NormalizationAlgorithmChannel : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:1180:6: error: type 'NormalizationAlgorithmMethod' violates the C++ One Definition Rule [-Werror=odr]
[  528s]  1180 | enum NormalizationAlgorithmMethod {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:1176:6: note: a type with different precision is defined in another translation unit
[  528s]  1176 | enum NormalizationAlgorithmMethod : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:620:6: error: type 'ResizeMethod' violates the C++ One Definition Rule [-Werror=odr]
[  528s]   620 | enum ResizeMethod {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:616:6: note: a type with different precision is defined in another translation unit
[  528s]   616 | enum ResizeMethod : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:581:6: error: type 'ReduceOperation' violates the C++ One Definition Rule [-Werror=odr]
[  528s]   581 | enum ReduceOperation {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:577:6: note: a type with different precision is defined in another translation unit
[  528s]   577 | enum ReduceOperation : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:1027:6: error: type 'LogicalBinaryOperation' violates the C++ One Definition Rule [-Werror=odr]
[  528s]  1027 | enum LogicalBinaryOperation {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:1023:6: note: a type with different precision is defined in another translation unit
[  528s]  1023 | enum LogicalBinaryOperation : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:1243:6: error: type 'Layer' violates the C++ One Definition Rule [-Werror=odr]
[  528s]  1243 | enum Layer {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:1239:6: note: a type with different precision is defined in another translation unit
[  528s]  1239 | enum Layer : uint8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:398:6: error: type 'ActivationFunction' violates the C++ One Definition Rule [-Werror=odr]
[  528s]   398 | enum ActivationFunction {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:394:6: note: a type with different precision is defined in another translation unit
[  528s]   394 | enum ActivationFunction : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:458:6: error: type 'ArgMinMaxFunction' violates the C++ One Definition Rule [-Werror=odr]
[  528s]   458 | enum ArgMinMaxFunction {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:454:6: note: a type with different precision is defined in another translation unit
[  528s]   454 | enum ArgMinMaxFunction : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.hpp:35:47: error: 'GetFlatBufferNormalizationAlgorithmMethod' violates the C++ One Definition Rule [-Werror=odr]
[  528s]    35 | armnnSerializer::NormalizationAlgorithmMethod GetFlatBufferNormalizationAlgorithmMethod(
[  528s]       |                                               ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:200:47: note: return value type mismatch
[  528s]   200 | armnnSerializer::NormalizationAlgorithmMethod GetFlatBufferNormalizationAlgorithmMethod(
[  528s]       |                                               ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:1176:6: note: type 'NormalizationAlgorithmMethod' itself violates the C++ One Definition Rule
[  528s]  1176 | enum NormalizationAlgorithmMethod : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:1180:6: note: the incompatible type is defined here
[  528s]  1180 | enum NormalizationAlgorithmMethod {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:200:47: note: 'GetFlatBufferNormalizationAlgorithmMethod' was previously declared here
[  528s]   200 | armnnSerializer::NormalizationAlgorithmMethod GetFlatBufferNormalizationAlgorithmMethod(
[  528s]       |                                               ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.hpp:32:48: error: 'GetFlatBufferNormalizationAlgorithmChannel' violates the C++ One Definition Rule [-Werror=odr]
[  528s]    32 | armnnSerializer::NormalizationAlgorithmChannel GetFlatBufferNormalizationAlgorithmChannel(
[  528s]       |                                                ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:186:48: note: return value type mismatch
[  528s]   186 | armnnSerializer::NormalizationAlgorithmChannel GetFlatBufferNormalizationAlgorithmChannel(
[  528s]       |                                                ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:1146:6: note: type 'NormalizationAlgorithmChannel' itself violates the C++ One Definition Rule
[  528s]  1146 | enum NormalizationAlgorithmChannel : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:1150:6: note: the incompatible type is defined here
[  528s]  1150 | enum NormalizationAlgorithmChannel {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:186:48: note: 'GetFlatBufferNormalizationAlgorithmChannel' was previously declared here
[  528s]   186 | armnnSerializer::NormalizationAlgorithmChannel GetFlatBufferNormalizationAlgorithmChannel(
[  528s]       |                                                ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.hpp:28:32: error: 'GetFlatBufferPaddingMethod' violates the C++ One Definition Rule [-Werror=odr]
[  528s]    28 | armnnSerializer::PaddingMethod GetFlatBufferPaddingMethod(armnn::PaddingMethod paddingMethod);
[  528s]       |                                ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:161:32: note: return value type mismatch
[  528s]   161 | armnnSerializer::PaddingMethod GetFlatBufferPaddingMethod(armnn::PaddingMethod paddingMethod)
[  528s]       |                                ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:1116:6: note: type 'PaddingMethod' itself violates the C++ One Definition Rule
[  528s]  1116 | enum PaddingMethod : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:1120:6: note: the incompatible type is defined here
[  528s]  1120 | enum PaddingMethod {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:161:32: note: 'GetFlatBufferPaddingMethod' was previously declared here
[  528s]   161 | armnnSerializer::PaddingMethod GetFlatBufferPaddingMethod(armnn::PaddingMethod paddingMethod)
[  528s]       |                                ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.hpp:25:38: error: 'GetFlatBufferOutputShapeRounding' violates the C++ One Definition Rule [-Werror=odr]
[  528s]    25 | armnnSerializer::OutputShapeRounding GetFlatBufferOutputShapeRounding(
[  528s]       |                                      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:149:38: note: return value type mismatch
[  528s]   149 | armnnSerializer::OutputShapeRounding GetFlatBufferOutputShapeRounding(armnn::OutputShapeRounding outputShapeRounding)
[  528s]       |                                      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:1086:6: note: type 'OutputShapeRounding' itself violates the C++ One Definition Rule
[  528s]  1086 | enum OutputShapeRounding : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:1090:6: note: the incompatible type is defined here
[  528s]  1090 | enum OutputShapeRounding {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:149:38: note: 'GetFlatBufferOutputShapeRounding' was previously declared here
[  528s]   149 | armnnSerializer::OutputShapeRounding GetFlatBufferOutputShapeRounding(armnn::OutputShapeRounding outputShapeRounding)
[  528s]       |                                      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.hpp:23:35: error: 'GetFlatBufferPoolingAlgorithm' violates the C++ One Definition Rule [-Werror=odr]
[  528s]    23 | armnnSerializer::PoolingAlgorithm GetFlatBufferPoolingAlgorithm(armnn::PoolingAlgorithm poolingAlgorithm);
[  528s]       |                                   ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:135:35: note: return value type mismatch
[  528s]   135 | armnnSerializer::PoolingAlgorithm GetFlatBufferPoolingAlgorithm(armnn::PoolingAlgorithm poolingAlgorithm)
[  528s]       |                                   ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:1053:6: note: type 'PoolingAlgorithm' itself violates the C++ One Definition Rule
[  528s]  1053 | enum PoolingAlgorithm : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:1057:6: note: the incompatible type is defined here
[  528s]  1057 | enum PoolingAlgorithm {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:135:35: note: 'GetFlatBufferPoolingAlgorithm' was previously declared here
[  528s]   135 | armnnSerializer::PoolingAlgorithm GetFlatBufferPoolingAlgorithm(armnn::PoolingAlgorithm poolingAlgorithm)
[  528s]       |                                   ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.hpp:38:31: error: 'GetFlatBufferResizeMethod' violates the C++ One Definition Rule [-Werror=odr]
[  528s]    38 | armnnSerializer::ResizeMethod GetFlatBufferResizeMethod(armnn::ResizeMethod method);
[  528s]       |                               ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:214:31: note: return value type mismatch
[  528s]   214 | armnnSerializer::ResizeMethod GetFlatBufferResizeMethod(armnn::ResizeMethod method)
[  528s]       |                               ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:616:6: note: type 'ResizeMethod' itself violates the C++ One Definition Rule
[  528s]   616 | enum ResizeMethod : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:620:6: note: the incompatible type is defined here
[  528s]   620 | enum ResizeMethod {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:214:31: note: 'GetFlatBufferResizeMethod' was previously declared here
[  528s]   214 | armnnSerializer::ResizeMethod GetFlatBufferResizeMethod(armnn::ResizeMethod method)
[  528s]       |                               ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.hpp:43:34: error: 'GetFlatBufferReduceOperation' violates the C++ One Definition Rule [-Werror=odr]
[  528s]    43 | armnnSerializer::ReduceOperation GetFlatBufferReduceOperation(armnn::ReduceOperation reduceOperation);
[  528s]       |                                  ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:227:34: note: return value type mismatch
[  528s]   227 | armnnSerializer::ReduceOperation GetFlatBufferReduceOperation(armnn::ReduceOperation reduceOperation)
[  528s]       |                                  ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:577:6: note: type 'ReduceOperation' itself violates the C++ One Definition Rule
[  528s]   577 | enum ReduceOperation : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:581:6: note: the incompatible type is defined here
[  528s]   581 | enum ReduceOperation {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:227:34: note: 'GetFlatBufferReduceOperation' was previously declared here
[  528s]   227 | armnnSerializer::ReduceOperation GetFlatBufferReduceOperation(armnn::ReduceOperation reduceOperation)
[  528s]       |                                  ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.hpp:30:30: error: 'GetFlatBufferPaddingMode' violates the C++ One Definition Rule [-Werror=odr]
[  528s]    30 | armnnSerializer::PaddingMode GetFlatBufferPaddingMode(armnn::PaddingMode paddingMode);
[  528s]       |                              ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:173:30: note: return value type mismatch
[  528s]   173 | armnnSerializer::PaddingMode GetFlatBufferPaddingMode(armnn::PaddingMode paddingMode)
[  528s]       |                              ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:1206:6: note: type 'PaddingMode' itself violates the C++ One Definition Rule
[  528s]  1206 | enum PaddingMode : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:1210:6: note: the incompatible type is defined here
[  528s]  1210 | enum PaddingMode {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:173:30: note: 'GetFlatBufferPaddingMode' was previously declared here
[  528s]   173 | armnnSerializer::PaddingMode GetFlatBufferPaddingMode(armnn::PaddingMode paddingMode)
[  528s]       |                              ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.hpp:40:41: error: 'GetFlatBufferLogicalBinaryOperation' violates the C++ One Definition Rule [-Werror=odr]
[  528s]    40 | armnnSerializer::LogicalBinaryOperation GetFlatBufferLogicalBinaryOperation(
[  528s]       |                                         ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:31:41: note: return value type mismatch
[  528s]    31 | armnnSerializer::LogicalBinaryOperation GetFlatBufferLogicalBinaryOperation(
[  528s]       |                                         ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:1023:6: note: type 'LogicalBinaryOperation' itself violates the C++ One Definition Rule
[  528s]  1023 | enum LogicalBinaryOperation : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:1027:6: note: the incompatible type is defined here
[  528s]  1027 | enum LogicalBinaryOperation {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:31:41: note: 'GetFlatBufferLogicalBinaryOperation' was previously declared here
[  528s]    31 | armnnSerializer::LogicalBinaryOperation GetFlatBufferLogicalBinaryOperation(
[  528s]       |                                         ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.hpp:21:33: error: 'GetFlatBufferUnaryOperation' violates the C++ One Definition Rule [-Werror=odr]
[  528s]    21 | armnnSerializer::UnaryOperation GetFlatBufferUnaryOperation(armnn::UnaryOperation unaryOperation);
[  528s]       |                                 ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:110:33: note: return value type mismatch
[  528s]   110 | armnnSerializer::UnaryOperation GetFlatBufferUnaryOperation(armnn::UnaryOperation comparisonOperation)
[  528s]       |                                 ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:975:6: note: type 'UnaryOperation' itself violates the C++ One Definition Rule
[  528s]   975 | enum UnaryOperation : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:979:6: note: the incompatible type is defined here
[  528s]   979 | enum UnaryOperation {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:110:33: note: 'GetFlatBufferUnaryOperation' was previously declared here
[  528s]   110 | armnnSerializer::UnaryOperation GetFlatBufferUnaryOperation(armnn::UnaryOperation comparisonOperation)
[  528s]       |                                 ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.hpp:13:38: error: 'GetFlatBufferComparisonOperation' violates the C++ One Definition Rule [-Werror=odr]
[  528s]    13 | armnnSerializer::ComparisonOperation GetFlatBufferComparisonOperation(armnn::ComparisonOperation comparisonOperation);
[  528s]       |                                      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:11:38: note: return value type mismatch
[  528s]    11 | armnnSerializer::ComparisonOperation GetFlatBufferComparisonOperation(armnn::ComparisonOperation comparisonOperation)
[  528s]       |                                      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:933:6: note: type 'ComparisonOperation' itself violates the C++ One Definition Rule
[  528s]   933 | enum ComparisonOperation : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:937:6: note: the incompatible type is defined here
[  528s]   937 | enum ComparisonOperation {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:11:38: note: 'GetFlatBufferComparisonOperation' was previously declared here
[  528s]    11 | armnnSerializer::ComparisonOperation GetFlatBufferComparisonOperation(armnn::ComparisonOperation comparisonOperation)
[  528s]       |                                      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.hpp:19:29: error: 'GetFlatBufferDataLayout' violates the C++ One Definition Rule [-Werror=odr]
[  528s]    19 | armnnSerializer::DataLayout GetFlatBufferDataLayout(armnn::DataLayout dataLayout);
[  528s]       |                             ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:94:29: note: return value type mismatch
[  528s]    94 | armnnSerializer::DataLayout GetFlatBufferDataLayout(armnn::DataLayout dataLayout)
[  528s]       |                             ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:541:6: note: type 'DataLayout' itself violates the C++ One Definition Rule
[  528s]   541 | enum DataLayout : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:545:6: note: the incompatible type is defined here
[  528s]   545 | enum DataLayout {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:94:29: note: 'GetFlatBufferDataLayout' was previously declared here
[  528s]    94 | armnnSerializer::DataLayout GetFlatBufferDataLayout(armnn::DataLayout dataLayout)
[  528s]       |                             ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.hpp:15:34: error: 'GetFlatBufferConstTensorData' violates the C++ One Definition Rule [-Werror=odr]
[  528s]    15 | armnnSerializer::ConstTensorData GetFlatBufferConstTensorData(armnn::DataType dataType);
[  528s]       |                                  ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:45:34: note: return value type mismatch
[  528s]    45 | armnnSerializer::ConstTensorData GetFlatBufferConstTensorData(armnn::DataType dataType)
[  528s]       |                                  ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:646:6: note: type 'ConstTensorData' itself violates the C++ One Definition Rule
[  528s]   646 | enum ConstTensorData : uint8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:650:6: note: the incompatible type is defined here
[  528s]   650 | enum ConstTensorData {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:45:34: note: 'GetFlatBufferConstTensorData' was previously declared here
[  528s]    45 | armnnSerializer::ConstTensorData GetFlatBufferConstTensorData(armnn::DataType dataType)
[  528s]       |                                  ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.hpp:17:27: error: 'GetFlatBufferDataType' violates the C++ One Definition Rule [-Werror=odr]
[  528s]    17 | armnnSerializer::DataType GetFlatBufferDataType(armnn::DataType dataType);
[  528s]       |                           ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:67:27: note: return value type mismatch
[  528s]    67 | armnnSerializer::DataType GetFlatBufferDataType(armnn::DataType dataType)
[  528s]       |                           ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/build/src/armnnSerializer/ArmnnSchema_generated.h:484:6: note: type 'DataType' itself violates the C++ One Definition Rule
[  528s]   484 | enum DataType : int8_t {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/ArmnnSchema_generated.h:488:6: note: the incompatible type is defined here
[  528s]   488 | enum DataType {
[  528s]       |      ^
[  528s] /home/abuild/rpmbuild/BUILD/armnn-22.02/src/armnnSerializer/SerializerUtils.cpp:67:27: note: 'GetFlatBufferDataType' was previously declared here
[  528s]    67 | armnnSerializer::DataType GetFlatBufferDataType(armnn::DataType dataType)
[  528s]       |                           ^
[  528s] lto1: all warnings being treated as errors
[  528s] lto-wrapper: fatal error: /usr/bin/c++ returned 1 exit status
[  528s] compilation terminated.
[  528s] /usr/lib64/gcc/x86_64-suse-linux/11/../../../../x86_64-suse-linux/bin/ld: error: lto-wrapper failed
[  528s] collect2: error: ld returned 1 exit status
[  528s] make[2]: *** [src/armnnSerializer/CMakeFiles/armnnSerializer.dir/build.make:141: libarmnnSerializer.so.28.0] Error 1
[  528s] make[2]: Leaving directory '/home/abuild/rpmbuild/BUILD/armnn-22.02/build'
[  528s] make[1]: *** [CMakeFiles/Makefile2:870: src/armnnSerializer/CMakeFiles/armnnSerializer.dir/all] Error 2
[  528s] make[1]: *** Waiting for unfinished jobs....
TeresaARM commented 2 years ago

Hi @ggardet which command are you using for building, have you tried a clean build?

ggardet commented 2 years ago

Hi @ggardet which command are you using for building, have you tried a clean build?

The cmake command is:

[  146s] + /usr/bin/cmake /home/abuild/rpmbuild/BUILD/armnn-22.02/. '-GUnix Makefiles' -DCMAKE_INSTALL_PREFIX:PATH=/usr -DINCLUDE_INSTALL_DIR:PATH=/usr/include -DLIB_INSTALL_DIR:PATH=/usr/lib64 -DSYSCONF_INSTALL_DIR:PATH=/etc -DSHARE_INSTALL_PREFIX:PATH=/usr/share -DCMAKE_INSTALL_LIBDIR:PATH=lib64 -DCMAKE_INSTALL_LIBEXECDIR=/usr/libexec -DCMAKE_BUILD_TYPE=RelWithDebInfo '-DCMAKE_C_FLAGS=-mbranch-protection=standard -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -flto=auto -g -DNDEBUG' '-DCMAKE_CXX_FLAGS=-mbranch-protection=standard -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -flto=auto -g -DNDEBUG' '-DCMAKE_Fortran_FLAGS=-mbranch-protection=standard -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -flto=auto -g -DNDEBUG' '-DCMAKE_EXE_LINKER_FLAGS=-flto=auto -Wl,--as-needed -Wl,--no-undefined -Wl,-z,now' '-DCMAKE_MODULE_LINKER_FLAGS=-flto=auto -Wl,--as-needed' '-DCMAKE_SHARED_LINKER_FLAGS=-flto=auto -Wl,--as-needed -Wl,--no-undefined -Wl,-z,now' -DLIB_SUFFIX=64 -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DBUILD_SHARED_LIBS:BOOL=ON -DBUILD_STATIC_LIBS:BOOL=OFF -DCMAKE_COLOR_MAKEFILE:BOOL=OFF -DCMAKE_INSTALL_DO_STRIP:BOOL=OFF -DCMAKE_MODULES_INSTALL_DIR=/usr/lib64/cmake/armnn -DCMAKE_SKIP_RPATH=True -DSHARED_BOOST=1 '-DCMAKE_CXX_FLAGS:STRING=-mbranch-protection=standard -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -flto=auto -g -pthread ' -DBOOST_LIBRARYDIR=/usr/lib64 -DBUILD_ONNX_PARSER=OFF -DBUILD_ARMNN_SERIALIZER=ON -DFLATC_DIR=/usr/bin -DFLATBUFFERS_INCLUDE_PATH=/usr/include -DBUILD_TF_LITE_PARSER=ON -DTfLite_Schema_INCLUDE_PATH=/usr/include/tensorflow/lite/schema/ -DTF_LITE_SCHEMA_INCLUDE_PATH=/usr/include/tensorflow/lite/schema/ -DARMCOMPUTE_INCLUDE=/usr/include -DHALF_INCLUDE=/usr/include/half -DARMCOMPUTE_BUILD_DIR=/usr/lib64 -DARMCOMPUTE_ROOT=/usr -DARMCOMPUTENEON=ON -DARMCOMPUTECL=OFF -DTHIRD_PARTY_INCLUDE_DIRS=/usr/include -DBUILD_SAMPLE_APP=ON -DBUILD_UNIT_TESTS=ON -DBUILD_TESTS=ON -DBUILD_PYTHON_WHL=OFF -DBUILD_PYTHON_SRC=OFF -DBUILD_ARMNN_EXAMPLES=OFF

The build folder is clean.

FrancisMurtagh-arm commented 2 years ago

Hi @ggardet,

What version of Flatbuffers are you using?

Regards, Francis.

ggardet commented 2 years ago

What version of Flatbuffers are you using?

Flatbuffers 2.0.0

FrancisMurtagh-arm commented 2 years ago

Hi @ggardet,

Did OpenSuse bump Flatbuffers recently? We support Flatbuffers 1.12; is there any way you can try it with that version?

Regards, Francis.

ggardet commented 2 years ago

flatbuffers package has been updated from 1.12.0 to 2.0.0 10 months ago. But LTO was disabled for previous versions as well. I cannot test easily with previous package.

Please note that armnn 22.02 builds fine without LTO.

MatthewARM commented 2 years ago

I would guess from the error messages, that ArmnnSchema_generated.h has created more than one definition of e.g. ConstTensorData. One definition is at line 650 and one at 646. In my build there's only one definition. @ggardet could you have a look at those definitions or maybe post a snippet from your ArmnnSchema_generated.h file? I can theorise four possibilities:

a) The two definitions are surrounded by preprocessor conditions, and somehow during the build of libarmnnSerializer.so.28.0 some of the translation units are getting one of the definitions and some are getting the other. This seems unlikely as all of the diagnostics refer to SerializerUtils.cpp, no other source file is mentioned, so unless SerializerUtils.cpp is compiled more than once with different options I can't see how it can be this. b) ArmnnSchema_generated.h only has one definition, and somehow an old artifact with an incompatible definition is partially getting used in the build process. c) ArmnnSchema_generated.h is getting generated more than once during the build process, with different options to flatc, causing different source to be generated. Again I would have expected other .cpp files to appear in the diagnostics, as per theory (a). d) flatc is generating multiple definitions and they are not surrounded by preprocessor conditions. I don't think it can be this, as then I would have expected all builds to fail, not just LTO.

MatthewARM commented 2 years ago

Ah yes, it's probably (c). ArmnnSchema_generated.h is both checked-in and generated during the build. That's asking for trouble.

MatthewARM commented 2 years ago

ArmnnSchema_generated.h was checked in to the repo in this change https://review.mlplatform.org/c/ml/armnn/+/4850 so that the serializer could build from Android.mk without invoking flatc.

MatthewARM commented 2 years ago

AOSP now includes flatbuffers, so I think the proper fix here is to:

MatthewARM commented 2 years ago

If that's not possible for some reason, then the alternative less-good solution would be:

I really don't like this solution as it increases the dependences between android-nn-driver and armnn for AOSP builds, which violates modularity.

catcor01 commented 2 years ago

Hello @ggardet,

I'm closing this due to inactivity. If you still need help with this then please create a new ticket.

Kind Regards, Cathal.