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)