Environmental Requirements

  • cmake (version >=3.10 is recommended)
  • protobuf (version >= 3.0 is required)
  • gcc (version >= 4.9 is required)

Build Options

When compiling with cmake, you can modify the options in CMakeLists.txt:

  • MNN_DEBUG

Defaults OFF, When OFF, remove symbols and build with optimizations.

  • MNN_OPENMP

Defaults ON, When OFF, do not use openmp multi-thread.

  • MNN_OPENCL

Defaults OFF, When ON, build the OpenCL backend, apply GPU according to setting the forward type to be MNN_FORWARD_OPENCL at inference time.

  • MNN_OPENGL

Defaults OFF, When ON, build the OpenGL backend, apply GPU according to setting the forward type to be MNN_FORWARD_OPENGL at inference time.

  • MNN_VULKAN

Defaults OFF, When ON, build the Vulkan backend, apply GPU according to setting the forward type to be MNN_FORWARD_VULKAN at inference time.

  • MNN_METAL

Defaults OFF, When ON, build the Metal backend, apply GPU according to setting the forward type to be MNN_FORWARD_Metal at inference time, only effective on iOS/macOS.

Steps

Common Preparation

  1. cd /path/to/MNN
  2. ./schema/generate.sh
  3. ./tools/script/get_model.sh # optional, models are needed only in demo project

Build on Host

  1. mkdir build && cd build && cmake .. && make -j4

Then you will get the MNN library(libMNN.so)

Cross Compile

Download cross compile toolchain from Linaro. Examples:

aarch64

  1. Download aarch64 toolchain

    1. mkdir -p linaro/aarch64
    2. cd linaro/aarch64
    3. wget http://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz
    4. tar xvf gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz
  2. cmake & make

    1. export cross_compile_toolchain=/path/to/linaro/aarch64
    2. mkdir build && cd build
    3. cmake .. \
    4. -DCMAKE_SYSTEM_NAME=Linux \
    5. -DCMAKE_SYSTEM_VERSION=1 \
    6. -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
    7. -DCMAKE_C_COMPILER=$cross_compile_toolchain/bin/aarch64-linux-gnu-gcc \
    8. -DCMAKE_CXX_COMPILER=$cross_compile_toolchain/bin/aarch64-linux-gnu-g++
    9. make -j4

arm

  1. Download arm toolchain

    1. mkdir -p linaro/arm
    2. cd linaro/arm
    3. wget http://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabi/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi.tar.xz
    4. tar xvf gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi.tar.xz
  2. cmake & make

    1. export cross_compile_toolchain=/path/to/linaro/arm
    2. mkdir build && cd build
    3. cmake .. \
    4. -DCMAKE_SYSTEM_NAME=Linux \
    5. -DCMAKE_SYSTEM_VERSION=1 \
    6. -DCMAKE_SYSTEM_PROCESSOR=arm \
    7. -DCMAKE_C_COMPILER=$cross_compile_toolchain/bin/arm-linux-gnueabi-gcc \
    8. -DCMAKE_CXX_COMPILER=$cross_compile_toolchain/bin/arm-linux-gnueabi-g++
    9. make -j4