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.17k stars 309 forks source link

armNN fail to cross-compile #685

Closed maciejandrzejewski-digica closed 2 years ago

maciejandrzejewski-digica commented 2 years ago

Build env: Ubuntu 22, x86-64 Host: armv8-a (64bit)

Following this instruction two times with same result: https://github.com/ARM-software/armnn/blob/branches/armnn_22_05/BuildGuideCrossCompilation.md

Failed on 'make' step of "Build Arm NN" chapter. Build with 'Arm NN TF Lite Delegate' and without 'Dynamic Backend'.

Short error log:

[ 62%] Linking CXX shared library libarmnn.so
[ 62%] Built target armnn
[ 62%] Building CXX object CMakeFiles/armnnOnnxParser.dir/src/armnnOnnxParser/OnnxParser.cpp.o
[ 62%] Building CXX object src/timelineDecoder/CMakeFiles/timelineDecoderJson.dir/JSONTimelineDecoder.cpp.o
[ 62%] Building CXX object src/armnnTfLiteParser/CMakeFiles/armnnTfLiteParser.dir/TfLiteParser.cpp.o
[ 62%] Building CXX object CMakeFiles/GatordMock.dir/tests/profiling/gatordmock/GatordMockMain.cpp.o
[ 62%] Building CXX object src/backends/backendsCommon/test/CMakeFiles/ValidTestDynamicBackend.dir/TestDynamicBackend.cpp.o
[ 62%] Building CXX object delegate/CMakeFiles/armnnDelegate.dir/src/armnn_delegate.cpp.o
[ 62%] Building CXX object src/backends/backendsCommon/test/CMakeFiles/InvalidTestDynamicBackend1.dir/TestDynamicBackend.cpp.o
[ 62%] Building CXX object src/armnnTestUtils/CMakeFiles/armnnTestUtils.dir/CommonTestUtils.cpp.o
In file included from /home/user/armnn-devenv/armnn/src/armnnTfLiteParser/TfLiteParser.cpp:6:
/home/user/armnn-devenv/armnn/src/armnnTfLiteParser/TfLiteParser.hpp:11:10: fatal error: schema_generated.h: No such file or directory
   11 | #include <schema_generated.h>
      |          ^~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [src/armnnTfLiteParser/CMakeFiles/armnnTfLiteParser.dir/build.make:76: src/armnnTfLiteParser/CMakeFiles/armnnTfLiteParser.dir/TfLiteParser.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:908: src/armnnTfLiteParser/CMakeFiles/armnnTfLiteParser.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 62%] Building CXX object delegate/CMakeFiles/armnnDelegate.dir/src/armnn_external_delegate.cpp.o
[ 62%] Linking CXX executable GatordMock
[ 62%] Built target GatordMock
[ 62%] Building CXX object delegate/CMakeFiles/armnnDelegate.dir/src/DelegateOptions.cpp.o
[ 62%] Building CXX object delegate/CMakeFiles/armnnDelegate.dir/src/SharedFunctions.cpp.o
[ 62%] Linking CXX shared module testDynamicBackend/libValidTestDynamicBackend.so
[ 62%] Linking CXX shared module testDynamicBackend/libInvalidTestDynamicBackend1.so
[ 62%] Built target ValidTestDynamicBackend
[ 62%] Building CXX object CMakeFiles/armnnOnnxParser.dir/home/user/armnn-devenv/onnx/onnx/onnx.pb.cc.o
[ 62%] Built target InvalidTestDynamicBackend1
[ 62%] Building CXX object src/armnnTestUtils/CMakeFiles/armnnTestUtils.dir/GraphUtils.cpp.o
[ 63%] Linking CXX shared library ../../libtimelineDecoderJson.so
[ 63%] Built target timelineDecoderJson
[ 63%] Building CXX object src/armnnTestUtils/CMakeFiles/armnnTestUtils.dir/MockBackend.cpp.o
[ 63%] Building CXX object src/armnnTestUtils/CMakeFiles/armnnTestUtils.dir/MockMemoryManager.cpp.o
[ 63%] Building CXX object src/armnnTestUtils/CMakeFiles/armnnTestUtils.dir/MockTensorHandle.cpp.o
[ 63%] Building CXX object src/armnnTestUtils/CMakeFiles/armnnTestUtils.dir/MockTensorHandleFactory.cpp.o
[ 63%] Building CXX object src/armnnTestUtils/CMakeFiles/armnnTestUtils.dir/TensorCopyUtils.cpp.o
[ 63%] Building CXX object src/armnnTestUtils/CMakeFiles/armnnTestUtils.dir/TestUtils.cpp.o
[ 63%] Building CXX object src/armnnTestUtils/CMakeFiles/armnnTestUtils.dir/UnitTests.cpp.o
[ 64%] Linking CXX shared library libarmnnOnnxParser.so
[ 64%] Built target armnnOnnxParser
[ 64%] Linking CXX shared library libarmnnDelegate.so
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: /home/user/armnn-devenv/tflite/build/libtensorflow-lite.a(common.c.o): Relocations in generic ELF (EM: 62)
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: /home/user/armnn-devenv/tflite/build/libtensorflow-lite.a(common.c.o): Relocations in generic ELF (EM: 62)
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: /home/user/armnn-devenv/tflite/build/libtensorflow-lite.a(common.c.o): Relocations in generic ELF (EM: 62)
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: /home/user/armnn-devenv/tflite/build/libtensorflow-lite.a: error adding symbols: file in wrong format
collect2: error: ld returned 1 exit status
make[2]: *** [delegate/CMakeFiles/armnnDelegate.dir/build.make:162: delegate/libarmnnDelegate.so.26.0] Error 1
make[1]: *** [CMakeFiles/Makefile2:968: delegate/CMakeFiles/armnnDelegate.dir/all] Error 2
[ 65%] Linking CXX shared library ../../libarmnnTestUtils.so
[ 65%] Built target armnnTestUtils
make: *** [Makefile:136: all] Error 2

Looks like linking to code built for different architecture but I'm building from beginning only for amrv8-a. There is also a minor error fatal error: schema_generated.h: No such file or directory which can be easily fixed I think because file is present in those locations: ./tflite/schema_generated.h ./tensorflow/tensorflow/lite/schema/schema_generated.h

Here is full build log from beggining of compile instructions (5MB): https://drive.google.com/file/d/16GAibaHBikNas5SToQyydntxKcaiK76S/view?usp=sharing

maciejandrzejewski-digica commented 2 years ago

From instruction: "You will need to download gcc-arm-8.3-2019.03 toolchain and continue building TF Lite"

Why we are using other custom cross compiler only for TF Lite step?

maciejandrzejewski-digica commented 2 years ago

Closing the issue was an error.

maciejandrzejewski-digica commented 2 years ago

Problem with missing shema_generated.h was in instruction in line: -DTF_LITE_SCHEMA_INCLUDE_PATH=$WORKING_DIR/tflite \ should be changed to: -DTF_LITE_SCHEMA_INCLUDE_PATH=$HOME/armnn-devenv/tflite \

Still it does not link properly..

maciejandrzejewski-digica commented 2 years ago

Another error in instruction in step 'Build TfLite'. Add ';' after each env var declaration. Without that those variables will not expand and that is why TfLite was build with wrong compiler. Replace:

ARMCC_PREFIX=$HOME/armnn-devenv/tflite-toolchains/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu- \
ARMCC_FLAGS="-funsafe-math-optimizations" \
cmake -DCMAKE_C_COMPILER=${ARMCC_PREFIX}gcc \
      -DCMAKE_CXX_COMPILER=${ARMCC_PREFIX}g++ \
      -DCMAKE_C_FLAGS="${ARMCC_FLAGS}" -DCMAKE_CXX_FLAGS="${ARMCC_FLAGS}" \
      -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON  -DCMAKE_SYSTEM_NAME=Linux \
      -DTFLITE_ENABLE_XNNPACK=OFF \
      -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
      $HOME/armnn-devenv/tensorflow/tensorflow/lite/ \

with:

ARMCC_PREFIX=$HOME/armnn-devenv/tflite-toolchains/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-; \
ARMCC_FLAGS="-funsafe-math-optimizations"; \
cmake -DCMAKE_C_COMPILER=${ARMCC_PREFIX}gcc \
      -DCMAKE_CXX_COMPILER=${ARMCC_PREFIX}g++ \
      -DCMAKE_C_FLAGS="${ARMCC_FLAGS}" -DCMAKE_CXX_FLAGS="${ARMCC_FLAGS}" \
      -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON  -DCMAKE_SYSTEM_NAME=Linux \
      -DTFLITE_ENABLE_XNNPACK=OFF \
      -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
      $HOME/armnn-devenv/tensorflow/tensorflow/lite/