How to build ARM Compute Library & NN SDK - t-kuha/mpsoc-library GitHub Wiki

Environment

  • ARM ComputeLibrary v19.08
  • ARM NN SDK v18.11
  • Boost: v1.68
  • Toolchain: Vitis 2019.2

Get SCons

$ wget http://prdownloads.sourceforge.net/scons/scons-3.1.1.tar.gz
$ cd scons-3.1.1/
$ sudo python setup.py install

Build ARM Compute Library

  • Use ARM NEON instruction
$ scons -j$(nproc) extra_cxx_flags="-fPIC" \
benchmark_tests=1 validation_tests=1 \
neon=1 opencl=0 arch=arm64-v8a debug=0 \
install_dir=_install
  • Output will be in build/_install/lib/

Build ARM NN SDK

  • Get TensorFlow source
$ wget https://github.com/tensorflow/tensorflow/archive/v1.15.0.tar.gz
$ tar xf v1.15.0.tar.gz 
  • Ger ONNX source
$ wget https://github.com/onnx/onnx/archive/v1.6.0.tar.gz
$ tar xf v1.6.0.tar.gz
  • Get prebuilt dependencies
$ git clone https://github.com/t-kuha/mpsoc-library.git
$ export MPSOC_LIB_DIR=$(pwd)/mpsoc-library```
  • Prerequisite

    • flaltbuffers
    # Build for host
    $ mkdir _host
    $ cd _host
    
    $ cmake .. -G"Unix Makefiles" \
    -DCMAKE_INSTALL_PREFIX=_install -DCMAKE_BUILD_TYPE=Release \
    -DFLATBUFFERS_BUILD_SHAREDLIB=OFF -DFLATBUFFERS_BUILD_TESTS=OFF
    $ cmake --build . --config Release --target install -- -j$(nproc)
    
    # Build for target
    $ mkdir _mpsoc
    $ cd _mpsoc
    
    $ cmake .. -G"Unix Makefiles" \
    -DCMAKE_TOOLCHAIN_FILE=toolchain.make \
    -DCMAKE_INSTALL_PREFIX=_install -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_C_FLAGS="-fPIC" -DCMAKE_CXX_FLAGS="-fPIC" \
    -DFLATBUFFERS_BUILD_SHAREDLIB=OFF -DFLATBUFFERS_BUILD_TESTS=OFF
    
    $ cmake --build . --config Release --target install -- -j$(nproc)
    
    • Generate C++ sources and headers for TensorFlow
    $ cd tensorflow-1.15.0/
    $ ../armnn-19.08/scripts/generate_tensorflow_protobuf.sh . ../protobuf-3.10.1/_host/_install/
    $ cd ../armnn-19.08/
    
    • Generate ONNX protobuf source files
    $ mkdir -p _out _out/protobuf-host/include
    $ ../protobuf-3.10.1/_host/_install/bin/protoc onnx/onnx.proto \
    --proto_path=. --proto_path=_out/protobuf-host/include --cpp_out _out
    
  • NN SDK

$ cmake .. -G"Unix Makefiles" \
-DCMAKE_TOOLCHAIN_FILE=toolchain.make \
-DCMAKE_INSTALL_PREFIX=_install \
-DCMAKE_BUILD_TYPE=Release \
-DBOOST_ROOT=${MPSOC_LIB_DIR}/dl-framework/caffe-dependency/ \
-DARMCOMPUTENEON=ON \
-DARMCOMPUTE_ROOT=${MPSOC_LIB_DIR}/arm \
-DARMCOMPUTE_LIBRARIES="${MPSOC_LIB_DIR}/arm/lib/libarm_compute-static.a;${MPSOC_LIB_DIR}/arm/lib/libarm_compute_core-static.a" \
-DBUILD_ARMNN_QUANTIZER=ON \
-DBUILD_ARMNN_SERIALIZER=ON \
-DFLATBUFFERS_ROOT=${MPSOC_LIB_DIR}/arm \
-DFLATC=<Path to flatc for host> \
-DBUILD_CAFFE_PARSER=ON \
-DCAFFE_GENERATED_SOURCES=<Caffe directory>/.build_release/src \
-DPROTOBUF_ROOT=${MPSOC_LIB_DIR}/dl-framework/caffe-dependency/ \
-DBUILD_TF_LITE_PARSER=ON \
-DTF_LITE_SCHEMA_INCLUDE_PATH=../../tensorflow-1.15.0/tensorflow/lite/schema/ \
-DTF_GENERATED_SOURCES=../../tensorflow-1.15.0/ -DBUILD_TF_PARSER=ON \
-DONNX_GENERATED_SOURCES=../../onnx-1.6.0/_out/ -DBUILD_ONNX_PARSER=ON

$ cmake --build . --config Release --target install -- -j$(nproc)