IVGCVSW-4701 Make the GUIDGenerator thread safe
[platform/upstream/armnn.git] / BuildGuideCrossCompilation.md
index a6cee16..9baf20c 100644 (file)
@@ -13,7 +13,7 @@
 
 #### <a name="introduction">Introduction</a>
 These are the step by step instructions on Cross-Compiling ArmNN under an x86_64 system to target an Arm64 system. This build flow has been tested with Ubuntu 16.04.
-The instructions show how to build the ArmNN core library and the Boost, Protobuf, Caffe and Compute Libraries necessary for compilation.
+The instructions show how to build the ArmNN core library and the Boost, Protobuf, Caffe, Tensorflow, Tflite, Flatbuffer and Compute Libraries necessary for compilation.
 
 #### <a name="installCCT">Cross-compiling ToolChain</a>
 * Install the standard cross-compilation libraries for arm64:
@@ -23,11 +23,13 @@ The instructions show how to build the ArmNN core library and the Boost, Protobu
 
 #### <a name="buildProtobuf">Build and install Google's Protobuf library</a>
 
-* Get protobuf-all-3.5.1.tar.gz from here: https://github.com/protocolbuffers/protobuf/releases/tag/v3.5.1
-* Extract:
+## We support protobuf version 3.5.2
+* Get protobuf from here: https://github.com/protocolbuffers/protobuf : 
     ```bash
-    tar -zxvf protobuf-all-3.5.1.tar.gz
-    cd protobuf-3.5.1
+    git clone -b v3.5.2 https://github.com/google/protobuf.git protobuf
+    cd protobuf
+    git submodule update --init --recursive
+    ./autogen
     ```
 * Build a native (x86_64) version of the protobuf libraries and compiler (protoc):
   (Requires cUrl, autoconf, llibtool, and other build dependencies if not previously installed: sudo apt install curl autoconf libtool build-essential g++)
@@ -42,8 +44,8 @@ The instructions show how to build the ArmNN core library and the Boost, Protobu
     ```
     mkdir arm64_build
     cd arm64_build
-    CC=aarch64-linux-gnu-gcc \
-    CXX=aarch64-linux-gnu-g++ \
+    export CC=aarch64-linux-gnu-gcc \
+    export CXX=aarch64-linux-gnu-g++ \
     ../configure --host=aarch64-linux \
     --prefix=$HOME/armnn-devenv/google/arm64_pb_install \
     --with-protoc=$HOME/armnn-devenv/google/x86_64_pb_install/bin/protoc
@@ -110,6 +112,60 @@ The instructions show how to build the ArmNN core library and the Boost, Protobu
     scons arch=arm64-v8a neon=1 opencl=1 embed_kernels=1 extra_cxx_flags="-fPIC" -j8 internal_only=0
     ```
 
+#### <a name="buildtf">Build Tensorflow</a>
+* Building Tensorflow version 1.15:
+    '''bash
+    git clone https://github.com/tensorflow/tensorflow.git
+    cd tensorflow/
+    git checkout 590d6eef7e91a6a7392c8ffffb7b58f2e0c8bc6b
+    ../armnn/scripts/generate_tensorflow_protobuf.sh ../tensorflow-protobuf ../google/x86_64_pb_install
+    '''
+
+#### <"a name=buildflatbuffer">Build Flatbuffer</a>
+* Building Flatbuffer version 1.10.0
+    '''bash
+    wget -O flatbuffers-1.10.0.tar.gz https://github.com/google/flatbuffers/archive/v1.10.0.tar.gz
+    tar xf flatbuffers-1.10.0.tar.gz
+    cd flatbuffers-1.10.0
+    rm -f CMakeCache.txt
+    mkdir build
+    cd build
+    cmake .. -DFLATBUFFERS_BUILD_FLATC=1 \
+            -DCMAKE_INSTALL_PREFIX:PATH=$<DIRECTORY_PATH> \
+            -DFLATBUFFERS_BUILD_TESTS=0
+    make all install
+    '''
+* Build arm64 version of flatbuffer
+    '''bash
+    mkdir build-arm64
+    cd build-arm64
+    cmake .. -DCMAKE_C_COMPILER=/usr/bin/aarch64-linux-gnu-gcc \
+            -DCMAKE_CXX_COMPILER=/usr/bin/aarch64-linux-gnu-g++ \
+            -DFLATBUFFERS_BUILD_FLATC=1 \
+            -DCMAKE_INSTALL_PREFIX:PATH=$<DIRECTORY_PATH> \
+            -DFLATBUFFERS_BUILD_TESTS=0
+    make all install
+    '''
+
+#### <a name="buildingONNX">Build Onnx</a>
+* Building Onnx
+    '''bash
+    git clone https://github.com/onnx/onnx.git
+    cd onnx
+    git fetch https://github.com/onnx/onnx.git f612532843bd8e24efeab2815e45b436479cc9ab && git checkout FETCH_HEAD
+    export LD_LIBRARY_PATH=$<DIRECTORY_PATH>/protobuf-host/lib:$LD_LIBRARY_PATH
+    ../google/x86_64_pb_install/bin/protoc onnx/onnx.proto --proto_path=. --proto_path=../google/x86_64_pb_install/include --cpp_out ../onnx
+    '''
+
+#### <a name="buildingtflite">Build TfLite</a>
+* Building TfLite
+    '''bash
+    mkdir tflite
+    cd tflite
+    cp ../tensorflow/tensorflow/lite/schema/schema.fbs .
+    ../flatbuffers-1.10.0/build/flatc -c --gen-object-api --reflect-types --reflect-names schema.fbs
+    '''
+
 #### <a name="buildANN">Build ArmNN</a>
 * Compile ArmNN for arm64:
     ```bash
@@ -122,8 +178,8 @@ The instructions show how to build the ArmNN core library and the Boost, Protobu
 * Use CMake to configure your build environment, update the following script and run it from the armnn/build directory to set up the armNN build:
     ```bash
     #!/bin/bash
-    CXX=aarch64-linux-gnu-g++ \
-    CC=aarch64-linux-gnu-gcc \
+    export CXX=aarch64-linux-gnu-g++ \
+    export CC=aarch64-linux-gnu-gcc \
     cmake .. \
     -DARMCOMPUTE_ROOT=$HOME/armnn-devenv/ComputeLibrary \
     -DARMCOMPUTE_BUILD_DIR=$HOME/armnn-devenv/ComputeLibrary/build/ \
@@ -131,18 +187,59 @@ The instructions show how to build the ArmNN core library and the Boost, Protobu
     -DARMCOMPUTENEON=1 -DARMCOMPUTECL=1 -DARMNNREF=1 \
     -DCAFFE_GENERATED_SOURCES=$HOME/armnn-devenv/caffe/build/src \
     -DBUILD_CAFFE_PARSER=1 \
+    -DONNX_GENERATED_SOURCES=$HOME/onnx \
+    -DBUILD_ONNX_PARSER=1 \
+    -DTF_GENERATED_SOURCES=$HOME/tensorflow-protobuf \
+    -DBUILD_TF_PARSER=1 \
+    -DBUILD_TF_LITE_PARSER=1 \
+    -DTF_LITE_GENERATED_PATH=$HOME/tflite \
+    -DFLATBUFFERS_ROOT=$HOME/flatbuffers-arm64 \
+    -DFLATC_DIR=$HOME/flatbuffers-1.10.0/build \
+    -DPROTOBUF_ROOT=$HOME/google/x86_64_pb_install \
     -DPROTOBUF_ROOT=$HOME/armnn-devenv/google/x86_64_pb_install/ \
     -DPROTOBUF_LIBRARY_DEBUG=$HOME/armnn-devenv/google/arm64_pb_install/lib/libprotobuf.so.15.0.1 \
     -DPROTOBUF_LIBRARY_RELEASE=$HOME/armnn-devenv/google/arm64_pb_install/lib/libprotobuf.so.15.0.1
     ```
+
+* If you want to include standalone sample dynamic backend tests, add the argument to enable the tests and the dynamic backend path to the CMake command:
+    ```bash
+    -DSAMPLE_DYNAMIC_BACKEND=1 \
+    -DDYNAMIC_BACKEND_PATHS=$SAMPLE_DYNAMIC_BACKEND_PATH
+    ```
 * Run the build
     ```bash
     make -j32
     ```
 
+#### <a name="buildStandaloneBackend">Build Standalone Sample Dynamic Backend</a>
+* The sample dynamic backend is located in armnn/src/dynamic/sample
+    ```bash
+    mkdir build
+    cd build
+    ```
+
+* Use CMake to configure your build environment, update the following script and run it from the armnn/src/dynamic/sample/build directory to set up the armNN build:
+    ```bash
+    #!/bin/bash
+    export CXX=aarch64-linux-gnu-g++ \
+    export CC=aarch64-linux-gnu-gcc \
+    cmake .. \
+    -DCMAKE_CXX_FLAGS=--std=c++14 \
+    -DBOOST_ROOT=$HOME/armnn-devenv/boost_arm64_install/ \
+    -DBoost_SYSTEM_LIBRARY=$HOME/armnn-devenv/boost_arm64_install/lib/libboost_system.a \
+    -DBoost_FILESYSTEM_LIBRARY=$HOME/armnn-devenv/boost_arm64_install/lib/libboost_filesystem.a \
+    -DARMNN_PATH=$HOME/armnn-devenv/armnn/build/libarmnn.so
+    ```
+
+* Run the build
+    ```bash
+    make
+    ```
+
 #### <a name="unittests">Run Unit Tests</a>
 * Copy the build folder to an arm64 linux machine
 * Copy the libprotobuf.so.15.0.1 library file to the build folder
+* If you enable the standalone sample dynamic tests, also copy libArm_SampleDynamic_backend.so library file to the folder specified as $SAMPLE_DYNAMIC_BACKEND_PATH when you build ArmNN 
 * cd to the build folder on your arm64 machine and set your LD_LIBRARY_PATH to its current location:
     ```
     cd build/
@@ -252,8 +349,8 @@ https://askubuntu.com/questions/430705/how-to-use-apt-get-to-download-multi-arch
     libarmnnCaffeParser.so: undefined reference to `google::protobuf:*
     ```
 * Missing or out of date protobuf compilation libraries.
-    Use the command 'protoc --version' to check which version of protobuf is available (version 3.5.1 is required).
-    Follow the instructions above to install protobuf 3.5.1
+    Use the command 'protoc --version' to check which version of protobuf is available (version 3.5.2 is required).
+    Follow the instructions above to install protobuf 3.5.2
     Note this will require you to recompile Caffe for x86_64
 
 ##