编译宏介绍

MNN使用CMake构建项目,CMake中的宏定义列表如下:

宏名 宏说明
MNN_USE_SYSTEM_LIB 在使用openclvulkan时,使用系统库(ON)还是通过dlopen引入动态库(OFF),默认为OFF
MNN_BUILD_HARD 是否使用-mfloat-abi=hard,默认为OFF
MNN_BUILD_SHARED_LIBS 是否构建为动态库,默认为ON
MNN_WIN_RUNTIME_MT 在Windows上构建dll时是否使用/MT,默认为OFF
MNN_FORBID_MULTI_THREAD 是否禁止多线程,默认为OFF
MNN_OPENMP 是否使用OpenMP的线程池,该选项在Mac/iOS平台无效,默认为OFF
MNN_USE_THREAD_POOL 是否使用MNN内部线程池,默认为ON
MNN_BUILD_TRAIN 是否构建MNN的训练框架,默认为OFF
MNN_BUILD_DEMO 是否构建MNN的demo,默认为OFF
MNN_BUILD_TOOLS 是否构建MNN的测试工具,默认为ON
MNN_BUILD_QUANTOOLS 是否构建MNN的量化工具,默认为OFF
MNN_EVALUATION 是否构建MNN的评估工具,默认为OFF
MNN_BUILD_CONVERTER 是否构建MNN的转换工具,默认为OFF
MNN_SUPPORT_DEPRECATED_OP 是否支持Tflite的量化算子,默认为ON
MNN_DEBUG_MEMORY 是否开启MNN内存调试,默认为OFF
MNN_DEBUG_TENSOR_SIZE 是否开启MNN tensor size调试,默认为OFF
MNN_GPU_TRACE 是否开启MNN GPU调试,默认为OFF
MNN_PORTABLE_BUILD 尽可能链接第三方库的静态版本,以提高构建的可执行文件的可移植性,默认为OFF
MNN_SEP_BUILD 是否构建MNN的后端和表达式分离版本,只在MNN_BUILD_SHARED_LIBS=ON时生效,默认为ON
NATIVE_LIBRARY_OUTPUT 如果构建为动态库,则指定动态库的输出路径,默认为OFF
NATIVE_INCLUDE_OUTPUT 如果构建为动态库,则指定动态库的头文件路径,默认为OFF
MNN_AAPL_FMWK 是否构建MNN.framework替代*.dylib,默认为OFF
MNN_WITH_PLUGIN 是否支持Plugin算子,默认为OFF
MNN_BUILD_MINI 是否构建MNN的最小化版本,最小化版本仅支持固定形状,默认为OFF
MNN_USE_SSE 在x86上是否使用SSE指令集,默认为OFF
MNN_BUILD_CODEGEN 是否构建MNN的代码生成部分,该功能提供了算子融合与代码生成能力,为实验性功能,默认为OFF
MNN_ENABLE_COVERAGE 是否开启MNN的代码覆盖率,默认为OFF
MNN_BUILD_PROTOBUFFER 是否使用MNN中的protobuffer,默认为ON
MNN_BUILD_OPENCV 是否构建MNN的OpenCV功能,默认为OFF
MNN_INTERNAL 是否构建MNN的一些内部功能,如:日志;默认为OFF
MNN_JNI 是否构建MNN的JNI支持,默认为OFF
MNN_METAL 是否构建Metal后端,默认为OFF
MNN_OPENCL 是否构建OpenCL后端,默认为OFF
MNN_OPENGL 是否构建OpenGL后端,默认为OFF
MNN_VULKAN 是否构建Vulkan后端,默认为OFF
MNN_ARM82 是否构建Armv8.2后端,默认为OFF
MNN_ONEDNN 是否使用oneDNN,默认为OFF
MNN_AVX512 是否构建avx512后端,默认为OFF
MNN_CUDA 是否构建Cuda后端,默认为OFF
MNN_CUDA_PROFILE 是否打开CUDA profile工具,默认为OFF
MNN_CUDA_QUANT 是否打开CUDA 量化文件编译,默认为OFF
MNN_CUDA_BF16 是否打开CUDA Bf16文件编译,默认为OFF
MNN_TENSORRT 是否构建TensorRT后端,默认为OFF
MNN_COREML 是否构建CoreML后端,默认为OFF
MNN_NNAPI 是否构建NNAPI后端,默认为OFF
MNN_BUILD_BENCHMARK 是否构建MNN的性能测试,默认为OFF
MNN_BUILD_TEST 是否构建MNN的单元测试,默认为OFF
MNN_BUILD_FOR_ANDROID_COMMAND 是否使用命令行构建Android,默认为OFF
MNN_USE_LOGCAT 是否使用logcat代替printf输出日志,默认为OFF
MNN_USE_CPP11 是否使用C++11编译MNN,默认为ON
MNN_SUPPORT_BF16 是否支持BF16,默认为OFF
MNN_SSE_USE_FP16_INSTEAD 在X86平台是否使用FP16替代BF16,默认为OFF
MNN_AVX512_VNNI 是否使用avx512_vnni指令,该宏仅在MNN_AVX512=ON时生效,默认为OFF
MNN_OPENCL_SIZE_CUT 是否为了降低OpenCL大小而关闭OpenCL Buffer实现,该宏仅在MNN_OPENCL=ON时生效,默认为OFF
MNN_OPENCL_PROFILE 是否打开OpenCL Kernel性能Profile,该宏仅在MNN_OPENCL=ON时生效,默认为OFF
MNN_METALLIB_SOURCE 使用Metal时是否直接使用Metal源码,该宏仅在MNN_METAL=ON时生效,默认为ON
MNN_VULKAN_DEBUG 是否打开Vulkan的DEBUG模式,该宏仅在MNN_VULKAN=ON时生效,默认为OFF
MNN_OPENGL_REGEN 是否重新生成OpenGL Kenel,该宏仅在MNN_OPENGL=ON时生效,默认为OFF
MNN_TRT_DYNAMIC 是否通过dlopen的方式引入TRT的动态库,该宏仅在MNN_TENSORRT=ON时生效,默认为`OFF
TF_CONVERT_ORIGIN 构建的MNNConvert是否使用原始TF转换模式,该宏仅在MNN_BUILD_CONVERTER=ON时生效,默认为OFF
TFMODEL_OPTIMIZE 构建的MNNConvert是否对Tensorflow模型执行优化,该宏仅在MNN_BUILD_CONVERTER=ON时生效,默认为OFF
MNN_BUILD_TORCH 构建的MNNConvert是否支持TorchScript,该宏仅在MNN_BUILD_CONVERTER=ON时生效,默认为OFF
MNN_TRAIN_DEBUG 构建的训练模块是否支持调试,该宏仅在MNN_BUILD_TRAIN=ON时生效,默认为OFF
MNN_BUILD_TRAIN_MINI 构建删减版训练模块,不构建Datasetmodel,该宏仅在MNN_BUILD_TRAIN=ON时生效,默认为OFF
MNN_USE_OPENCV 构建的训练Demo是否使用OpenCV依赖,该宏仅在MNN_BUILD_TRAIN=ON时生效,默认为OFF
MNN_IMGPROC_COLOR 构建MNN的OpenCV功能是否开启颜色空间转换,默认为ON
MNN_IMGPROC_GEOMETRIC 构建MNN的OpenCV功能是否开启形变,默认为ON
MNN_IMGPROC_DRAW 构建MNN的OpenCV功能是否开启画图,默认为ON
MNN_IMGPROC_FILTER 构建MNN的OpenCV功能是否开启滤波,默认为ON
MNN_IMGPROC_MISCELLANEOUS 构建MNN的OpenCV功能是否开启混合,默认为ON
MNN_IMGPROC_STRUCTRAL 构建MNN的OpenCV功能是否开启结构,默认为ON
MNN_IMGPROC_HISTOGRAMS 构建MNN的OpenCV功能是否开启直方图,默认为ON
MNN_CALIB3D 构建MNN的OpenCV功能是否开启3d,默认为ON
MNN_IMGCODECS 构建MNN的OpenCV功能是否开启图像编解码,默认为OFF
MNN_CVCORE 构建MNN的OpenCV功能是否开启core功能,默认为ON
MNN_OPENCV_TEST 构建MNN的OpenCV功能是否开启单元测试,默认为OFF
MNN_OPENCV_BENCH 构建MNN的OpenCV功能是否开启性能benchmark,默认为OFF
MNN_VULKAN_IMAGE 构建MNN的Vulkan后端时采用Image内存模式,以便支持FP16和部分移动端上GPU的加速,默认为ON
MNN_LOW_MEMORY 是否支持低内存模式,支持低内存模式使用权值量化模型并设置low_memory则会使用计算时反量化,默认为OFF