2019-12-27 22:16:57 +08:00
cmake_minimum_required ( VERSION 3.0 )
# Versioning stuff
if ( NOT DEFINED MNN_VERSION_MAJOR )
set ( MNN_VERSION_MAJOR 0 )
endif ( )
if ( NOT DEFINED MNN_VERSION_MINOR )
set ( MNN_VERSION_MINOR 2 )
endif ( )
if ( NOT DEFINED MNN_VERSION_PATCH )
set ( MNN_VERSION_PATCH 1 )
endif ( )
if ( NOT DEFINED MNN_VERSION_BUILD )
2020-01-17 10:20:15 +08:00
set ( MNN_VERSION_BUILD 5 )
2019-12-27 22:16:57 +08:00
endif ( )
if ( NOT DEFINED MNN_VERSION_SUFFIX )
set ( MNN_VERSION_SUFFIX git )
endif ( )
if ( NOT PACKAGE_VERSION )
set ( PACKAGE_VERSION
" $ { M N N _ V E R S I O N _ M A J O R } . $ { M N N _ V E R S I O N _ M I N O R } . $ { M N N _ V E R S I O N _ P A T C H } . $ { M N N _ V E R S I O N _ B U I L D } $ { M N N _ V E R S I O N _ S U F F I X } " )
endif ( )
add_definitions ( "-DMNN_VERSION=\" ${ PACKAGE_VERSION } \"")
add_definitions ( "-DMNN_VERSION_MAJOR=${MNN_VERSION_MAJOR}" )
add_definitions ( "-DMNN_VERSION_MINOR=${MNN_VERSION_MINOR}" )
add_definitions ( "-DMNN_VERSION_PATCH=${MNN_VERSION_PATCH}" )
# CMP0048 is related to letting CMake managing the package version for us
2020-01-17 10:20:15 +08:00
cmake_policy ( SET CMP0048 NEW )
2019-12-27 22:16:57 +08:00
project ( MNN VERSION ${ MNN_VERSION_MAJOR } . ${ MNN_VERSION_MINOR } . ${ MNN_VERSION_PATCH } . ${ MNN_VERSION_BUILD } LANGUAGES C CXX ASM )
2019-04-17 10:49:11 +08:00
# complier options
set ( CMAKE_C_STANDARD 99 )
set ( CMAKE_CXX_STANDARD 11 )
2019-12-27 22:16:57 +08:00
set ( CMAKE_MODULE_PATH
$ { C M A K E _ M O D U L E _ P A T H }
" $ { C M A K E _ C U R R E N T _ L I S T _ D I R } / c m a k e "
)
add_custom_command ( OUTPUT "${CMAKE_CURRENT_LIST_DIR}/include/MNN/VCS.h"
C O M M A N D $ { C M A K E _ C O M M A N D } " - D N A M E S = M N N "
" - D M N N _ S O U R C E _ D I R = $ { C M A K E _ C U R R E N T _ L I S T _ D I R } "
" - D H E A D E R _ F I L E = $ { C M A K E _ C U R R E N T _ L I S T _ D I R } / i n c l u d e / M N N / V C S . h "
- P " $ { C M A K E _ C U R R E N T _ L I S T _ D I R } / c m a k e / G e n e r a t e V e r s i o n F r o m V C S . c m a k e "
C O M M E N T " G e n e r a t i n g V e r s i o n C o n t r o l I n f o "
)
add_custom_target ( GenVCSHDR DEPENDS "${CMAKE_CURRENT_LIST_DIR}/include/MNN/VCS.h" )
# Required for OpenCL/OpenGL/Vulkan CodeGen
include ( FindPythonInterp REQUIRED )
2019-04-17 10:49:11 +08:00
# build options
2020-03-01 15:33:28 +08:00
option ( MNN_USE_SYSTEM_LIB "For opencl and vulkan, use system lib or use dlopen" OFF )
2019-04-17 10:49:11 +08:00
option ( MNN_BUILD_HARD "Build -mfloat-abi=hard or not" OFF )
option ( MNN_BUILD_SHARED_LIBS "MNN build shared or static lib" ON )
option ( MNN_FORBID_MULTI_THREAD "Disable Multi Thread" OFF )
option ( MNN_OPENMP "Enable Multiple Thread Linux|Android" ON )
2019-07-19 17:09:09 +08:00
option ( MNN_USE_THREAD_POOL "Use Multiple Thread by Self ThreadPool" ON )
- dynamic computation graph (beta)
- add supports (/express)
- add tests
- add benchmarks with it (/benchmark/exprModels)
- Python
- MNN engine and tools were submitted to pip
- available on Windows/macOS/Linux
- Engine/Converter
- add supports for each op benchmarking
- refactor optimizer by separating steps
- CPU
- add supports for Conv3D, Pool3D, ELU, ReverseSequence
- fix ArgMax, Permute, Scale, BinaryOp, Slice, SliceTf
- OpenCL
- add half transform in CPU
- add broadcast supports for binary
- optimize Conv2D, Reshape, Eltwise, Gemm, etc.
- OpenGL
- add sub, real div supports for binary
- add supports for unary
- optimize Conv2D, Reshape
- Vulkan
- add max supports for eltwise
- Metal
- fix metallib missing problem
- Train/Quantization
- use express to refactor training codes
2019-09-26 21:02:07 +08:00
option ( MNN_BUILD_TRAIN "Build Train Tools" OFF )
2019-06-17 20:10:35 +08:00
option ( MNN_BUILD_DEMO "Build demo/exec or not" OFF )
2019-07-11 13:56:52 +08:00
option ( MNN_BUILD_QUANTOOLS "Build Quantized Tools or not" OFF )
2019-08-07 16:44:09 +08:00
option ( MNN_EVALUATION "Build Evaluation Tools or not" OFF )
- build:
- unify schema building in core and converter;
- add more build script for android;
- add linux build script for python;
- ops impl:
- add floor mod support in binary;
- use eltwise impl in add/max/sub/mul binary for optimization;
- remove fake double support in cast;
- fix 5d support for concat;
- add adjX and adjY support for batch matmul;
- optimize conv2d back prop filter;
- add pad mode support for conv3d;
- fix bug in conv2d & conv depthwise with very small feature map;
- optimize binary without broacast;
- add data types support for gather;
- add gather ND support;
- use uint8 data type in gather v2;
- add transpose support for matmul;
- add matrix band part;
- add dim != 4 support for padding, reshape & tensor convert;
- add pad type support for pool3d;
- make ops based on TensorFlow Lite quantization optional;
- add all & any support for reduction;
- use type in parameter as output type in reduction;
- add int support for unary;
- add variable weight support for conv2d;
- fix conv2d depthwise weights initialization;
- fix type support for transpose;
- fix grad outputs count for reduce grad and reshape grad;
- fix priorbox & detection output;
- fix metal softmax error;
- python:
- add runSessionWithCallBackInfo interface;
- add max nodes limit (1400) for visualization tool;
- fix save error in python3;
- align default dim;
- convert:
- add extra design for optimization;
- add more post converting optimizers;
- add caffe v1 weights blob support;
- add cast, unary, conv transpose support for onnx model;
- optimize batchnorm, conv with variable weights, prelu, reshape, slice, upsample for onnx model;
- add cos/sin/atan/tan support for unary for tensorflow model;
- add any/all support for reduction for tensorflow model;
- add elu, conv3d, pool3d support for tensorflow model;
- optimize argmax, batchnorm, concat, batch to space, conv with variable weights, prelu, slice for tensorflow model;
- others:
- fix size computer lock;
- fix thread pool deadlock;
- add express & parameters in express;
- rewrite blitter chooser without static map;
- add tests for expr;
2019-10-29 13:37:26 +08:00
option ( MNN_BUILD_CONVERTER "Build Converter" OFF )
option ( MNN_SUPPORT_TFLITE_QUAN "Enable MNN's tflite quantized op" ON )
2019-12-27 22:16:57 +08:00
option ( MNN_DEBUG_MEMORY "MNN Debug Memory Access" OFF )
option ( MNN_DEBUG_TENSOR_SIZE "Enable Tensor Size" OFF )
option ( MNN_GPU_TRACE "Enable MNN Gpu Debug" OFF )
option ( MNN_PORTABLE_BUILD "Link the static version of third party libraries where possible to improve the portability of built executables" OFF )
option ( MNN_SEP_BUILD "Build MNN Backends and expression seperately. Only works with MNN_BUILD_SHARED_LIBS=ON" ON )
option ( NATIVE_LIBRARY_OUTPUT "Native Library Path" OFF )
option ( NATIVE_INCLUDE_OUTPUT "Native Include Path" OFF )
2020-01-17 10:20:15 +08:00
option ( MNN_AAPL_FMWK "Build MNN.framework instead of traditional .a/.dylib" OFF )
set ( MNN_SCHEMA_SUFFIX "private" CACHE STRING "MNN Schema Source Path Suffix" )
2019-12-27 22:16:57 +08:00
IF ( APPLE AND MNN_AAPL_FMWK AND MNN_SEP_BUILD )
message ( WARNING "MNN_SEP_BUILD AND MNN_AAPL_FMWK can't coexist. Turning off MNN_SEP_BUILD" )
2020-03-25 20:41:44 +08:00
SET ( MNN_SEP_BUILD OFF CACHE BOOL "<docstring>" FORCE )
2019-12-27 22:16:57 +08:00
ENDIF ( )
2020-03-25 20:41:44 +08:00
IF ( MSVC OR WIN32 )
IF ( MNN_SEP_BUILD )
message ( WARNING "MNN_SEP_BUILD IS TROUBLESOME ON Windows. Forcing OFF..." )
SET ( MNN_SEP_BUILD OFF CACHE BOOL "<docstring>" FORCE )
ENDIF ( )
SET ( MNN_USE_SYSTEM_LIB ON CACHE BOOL "<docstring>" FORCE )
SET ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi" )
2020-01-15 13:33:47 +08:00
ENDIF ( )
2019-12-27 22:16:57 +08:00
include ( ${ CMAKE_CURRENT_LIST_DIR } /cmake/macros.cmake )
2019-07-11 13:56:52 +08:00
2020-03-21 11:01:26 +08:00
IF ( NOT APPLE AND NOT MNN_BUILD_SHARED_LIBS )
2020-03-18 14:17:30 +08:00
SET ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static" )
2020-03-25 20:41:44 +08:00
SET ( MNN_SEP_BUILD OFF CACHE BOOL "<docstring>" FORCE )
2020-03-18 14:47:41 +08:00
IF ( MNN_BUILD_CONVERTER )
2020-03-25 20:41:44 +08:00
SET ( MNN_PORTABLE_BUILD ON CACHE BOOL "<docstring>" FORCE )
2020-03-18 14:47:41 +08:00
ENDIF ( )
2020-03-18 14:17:30 +08:00
ENDIF ( )
2020-01-17 10:20:15 +08:00
# Import FlatBuffers and use standard way to generate schemas
IF ( CMAKE_CROSSCOMPILING )
message ( WARNING "Cross Compilation Detected. Third-Party tools like protobuf/flatbuffer are not built. You'll need to make sure they are available in your $PATH" )
ELSE ( )
add_subdirectory ( ${ CMAKE_CURRENT_LIST_DIR } /3rd_party/flatbuffers ${ CMAKE_CURRENT_BINARY_DIR } /flatbuffers-build EXCLUDE_FROM_ALL )
ENDIF ( )
FILE ( GLOB MNN_SCHEMA_SRC ${ CMAKE_CURRENT_LIST_DIR } /schema/ ${ MNN_SCHEMA_SUFFIX } /*.fbs )
SET ( SCHEMA_TARGETS "" )
FOREACH ( SCHEMA_SRC ${ MNN_SCHEMA_SRC } )
get_filename_component ( SCHEMA_NAME "${SCHEMA_SRC}" NAME_WE )
add_custom_command ( OUTPUT "${CMAKE_CURRENT_LIST_DIR}/schema/current/${SCHEMA_NAME}_generated.h" COMMAND flatc -c -b --gen-object-api --reflect-names ${ SCHEMA_SRC } COMMENT "Generating ${SCHEMA_NAME} Schema in ${CMAKE_CURRENT_LIST_DIR}/schema/${MNN_SCHEMA_SUFFIX}" WORKING_DIRECTORY ${ CMAKE_CURRENT_LIST_DIR } /schema/current/ DEPENDS ${ SCHEMA_SRC } )
ADD_CUSTOM_TARGET ( MNN_SCHEMA_GEN_ ${ SCHEMA_NAME } ALL DEPENDS "${CMAKE_CURRENT_LIST_DIR}/schema/current/${SCHEMA_NAME}_generated.h" )
IF ( NOT CMAKE_CROSSCOMPILING )
add_dependencies ( MNN_SCHEMA_GEN_ ${ SCHEMA_NAME } flatc )
ENDIF ( )
LIST ( APPEND SCHEMA_TARGETS "${CMAKE_CURRENT_LIST_DIR}/schema/current/${SCHEMA_NAME}_generated.h" )
ENDFOREACH ( )
add_custom_target ( MNN_SCHEMA_GEN DEPENDS ${ SCHEMA_TARGETS } )
2019-07-11 13:56:52 +08:00
if ( MNN_USE_THREAD_POOL )
set ( MNN_OPENMP OFF )
add_definitions ( -DMNN_USE_THREAD_POOL )
endif ( )
2019-04-17 10:49:11 +08:00
if ( MNN_FORBID_MULTI_THREAD )
add_definitions ( -DMNN_FORBIT_MULTI_THREADS )
endif ( )
- build:
- unify schema building in core and converter;
- add more build script for android;
- add linux build script for python;
- ops impl:
- add floor mod support in binary;
- use eltwise impl in add/max/sub/mul binary for optimization;
- remove fake double support in cast;
- fix 5d support for concat;
- add adjX and adjY support for batch matmul;
- optimize conv2d back prop filter;
- add pad mode support for conv3d;
- fix bug in conv2d & conv depthwise with very small feature map;
- optimize binary without broacast;
- add data types support for gather;
- add gather ND support;
- use uint8 data type in gather v2;
- add transpose support for matmul;
- add matrix band part;
- add dim != 4 support for padding, reshape & tensor convert;
- add pad type support for pool3d;
- make ops based on TensorFlow Lite quantization optional;
- add all & any support for reduction;
- use type in parameter as output type in reduction;
- add int support for unary;
- add variable weight support for conv2d;
- fix conv2d depthwise weights initialization;
- fix type support for transpose;
- fix grad outputs count for reduce grad and reshape grad;
- fix priorbox & detection output;
- fix metal softmax error;
- python:
- add runSessionWithCallBackInfo interface;
- add max nodes limit (1400) for visualization tool;
- fix save error in python3;
- align default dim;
- convert:
- add extra design for optimization;
- add more post converting optimizers;
- add caffe v1 weights blob support;
- add cast, unary, conv transpose support for onnx model;
- optimize batchnorm, conv with variable weights, prelu, reshape, slice, upsample for onnx model;
- add cos/sin/atan/tan support for unary for tensorflow model;
- add any/all support for reduction for tensorflow model;
- add elu, conv3d, pool3d support for tensorflow model;
- optimize argmax, batchnorm, concat, batch to space, conv with variable weights, prelu, slice for tensorflow model;
- others:
- fix size computer lock;
- fix thread pool deadlock;
- add express & parameters in express;
- rewrite blitter chooser without static map;
- add tests for expr;
2019-10-29 13:37:26 +08:00
if ( MNN_SUPPORT_TFLITE_QUAN )
add_definitions ( -DMNN_SUPPORT_TFLITE_QUAN )
endif ( )
2019-04-17 10:49:11 +08:00
# debug options
if ( MNN_DEBUG_MEMORY )
add_definitions ( -DMNN_DEBUG_MEMORY )
endif ( )
if ( MNN_DEBUG_TENSOR_SIZE )
add_definitions ( -DMNN_DEBUG_TENSOR_SIZE )
endif ( )
if ( MNN_GPU_TRACE )
add_definitions ( -DMNN_GPU_FORCE_FINISH )
endif ( )
# backend options
option ( MNN_METAL "Enable Metal" OFF )
option ( MNN_OPENCL "Enable OpenCL" OFF )
option ( MNN_OPENGL "Enable OpenGL" OFF )
option ( MNN_VULKAN "Enable Vulkan" OFF )
option ( MNN_ARM82 "Enable ARM82" OFF )
2019-05-09 19:39:33 +08:00
# codegen register ops
if ( MNN_METAL )
add_definitions ( -DMNN_CODEGEN_REGISTER )
endif ( )
2019-04-17 10:49:11 +08:00
# target options
- dynamic computation graph (beta)
- add supports (/express)
- add tests
- add benchmarks with it (/benchmark/exprModels)
- Python
- MNN engine and tools were submitted to pip
- available on Windows/macOS/Linux
- Engine/Converter
- add supports for each op benchmarking
- refactor optimizer by separating steps
- CPU
- add supports for Conv3D, Pool3D, ELU, ReverseSequence
- fix ArgMax, Permute, Scale, BinaryOp, Slice, SliceTf
- OpenCL
- add half transform in CPU
- add broadcast supports for binary
- optimize Conv2D, Reshape, Eltwise, Gemm, etc.
- OpenGL
- add sub, real div supports for binary
- add supports for unary
- optimize Conv2D, Reshape
- Vulkan
- add max supports for eltwise
- Metal
- fix metallib missing problem
- Train/Quantization
- use express to refactor training codes
2019-09-26 21:02:07 +08:00
option ( MNN_BUILD_BENCHMARK "Build benchmark or not" OFF )
2019-04-17 10:49:11 +08:00
option ( MNN_BUILD_TEST "Build tests or not" OFF )
option ( MNN_BUILD_FOR_ANDROID_COMMAND "Build from command" OFF )
2020-02-26 09:57:17 +08:00
option ( MNN_USE_LOGCAT "Use Logcat intead of print for info" ON )
2019-04-17 10:49:11 +08:00
set ( MNN_HIDDEN FALSE )
2020-02-26 09:57:17 +08:00
IF ( CMAKE_BUILD_TYPE MATCHES Debug )
2019-12-27 22:16:57 +08:00
ELSE ( )
set ( MNN_HIDDEN TRUE )
2020-02-26 09:57:17 +08:00
ENDIF ( CMAKE_BUILD_TYPE MATCHES Debug )
2019-04-17 10:49:11 +08:00
message ( STATUS ">>>>>>>>>>>>>" )
message ( STATUS "MNN BUILD INFO:" )
message ( STATUS "\tSystem: ${CMAKE_SYSTEM_NAME}" )
message ( STATUS "\tProcessor: ${CMAKE_SYSTEM_PROCESSOR}" )
message ( STATUS "\tMetal: ${MNN_METAL}" )
message ( STATUS "\tOpenCL: ${MNN_OPENCL}" )
message ( STATUS "\tOpenGL: ${MNN_OPENGL}" )
message ( STATUS "\tVulkan: ${MNN_VULKAN}" )
2020-03-22 20:16:29 +08:00
message ( STATUS "\tARM82: ${MNN_ARM82}" )
2019-04-17 10:49:11 +08:00
message ( STATUS "\tOpenMP: ${MNN_OPENMP}" )
2019-11-13 11:44:43 +08:00
message ( STATUS "\tHidden: ${MNN_HIDDEN}" )
2019-12-27 22:16:57 +08:00
message ( STATUS "\tBuild Path: ${CMAKE_CURRENT_BINARY_DIR}" )
2019-04-17 10:49:11 +08:00
if ( WIN32 )
2019-12-27 22:16:57 +08:00
if ( ${ CMAKE_VERSION } VERSION_LESS "3.14.0" )
message ( FATAL_ERROR "MNN requires CMake 3.14+ to build on Windows!" )
endif ( )
- dynamic computation graph (beta)
- add supports (/express)
- add tests
- add benchmarks with it (/benchmark/exprModels)
- Python
- MNN engine and tools were submitted to pip
- available on Windows/macOS/Linux
- Engine/Converter
- add supports for each op benchmarking
- refactor optimizer by separating steps
- CPU
- add supports for Conv3D, Pool3D, ELU, ReverseSequence
- fix ArgMax, Permute, Scale, BinaryOp, Slice, SliceTf
- OpenCL
- add half transform in CPU
- add broadcast supports for binary
- optimize Conv2D, Reshape, Eltwise, Gemm, etc.
- OpenGL
- add sub, real div supports for binary
- add supports for unary
- optimize Conv2D, Reshape
- Vulkan
- add max supports for eltwise
- Metal
- fix metallib missing problem
- Train/Quantization
- use express to refactor training codes
2019-09-26 21:02:07 +08:00
foreach ( flag_var
C M A K E _ C _ F L A G S C M A K E _ C _ F L A G S _ D E B U G C M A K E _ C _ F L A G S _ R E L E A S E
C M A K E _ C _ F L A G S _ M I N S I Z E R E L C M A K E _ C _ F L A G S _ R E L W I T H D E B I N F O
C M A K E _ C X X _ F L A G S C M A K E _ C X X _ F L A G S _ D E B U G C M A K E _ C X X _ F L A G S _ R E L E A S E
C M A K E _ C X X _ F L A G S _ M I N S I Z E R E L C M A K E _ C X X _ F L A G S _ R E L W I T H D E B I N F O )
if ( MNN_BUILD_SHARED_LIBS )
if ( ${ flag_var } MATCHES "/MT" )
string ( REGEX REPLACE "/MT" "/MD" ${ flag_var } "${${flag_var}}" )
endif ( )
else ( )
if ( ${ flag_var } MATCHES "/MD" )
string ( REGEX REPLACE "/MD" "/MT" ${ flag_var } "${${flag_var}}" )
endif ( )
endif ( )
endforeach ( )
2020-01-17 10:20:15 +08:00
elseif ( CMAKE_SYSTEM_NAME MATCHES "^Android" OR CMAKE_SYSTEM_NAME MATCHES "^Linux" )
2019-04-17 10:49:11 +08:00
add_definitions ( -fPIC )
endif ( )
2019-12-27 22:16:57 +08:00
if ( CMAKE_SYSTEM_NAME MATCHES "^Android" )
add_definitions ( -DMNN_BUILD_FOR_ANDROID )
2020-01-17 10:20:15 +08:00
if ( CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" )
add_definitions ( -mfloat-abi=softfp -mfpu=neon )
endif ( )
2019-12-27 22:16:57 +08:00
endif ( )
2020-03-05 21:02:04 +08:00
option ( MNN_USE_CPP11 "Enable MNN use c++11" ON )
if ( NOT MSVC )
if ( MNN_USE_CPP11 )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )
else ( )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x" )
endif ( )
endif ( )
if ( CMAKE_SYSTEM_NAME MATCHES "^Linux" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STRICT_ANSI__" )
if ( CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
# This is to workaround libgcc.a
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++" )
endif ( )
if ( CMAKE_SYSTEM_PROCESSOR MATCHES "^armv7" )
add_definitions ( -mfpu=neon ) #please define in project/cross-compile/arm.toolchain.cmake
endif ( )
if ( MNN_BUILD_HARD )
add_definitions ( -mfloat-abi=hard ) #better define in project/cross-compile/arm.toolchain.cmake
endif ( )
endif ( )
2019-12-27 22:16:57 +08:00
2019-04-17 10:49:11 +08:00
2020-02-26 09:57:17 +08:00
IF ( CMAKE_BUILD_TYPE MATCHES Debug )
2019-09-01 19:25:26 +08:00
add_definitions ( -DMNN_DEBUG -DDEBUG )
2019-06-10 21:08:55 +08:00
if ( MSVC )
2019-09-01 19:25:26 +08:00
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /DEBUG" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /DEBUG" )
2019-06-10 21:08:55 +08:00
else ( )
2019-09-01 19:25:26 +08:00
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g" )
2019-06-10 21:08:55 +08:00
endif ( )
2019-04-17 10:49:11 +08:00
else ( )
2019-06-10 21:08:55 +08:00
if ( MSVC )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /O2" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /O2" )
else ( )
2019-12-27 22:16:57 +08:00
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3" )
if ( CMAKE_SYSTEM_NAME MATCHES "^Android" )
if ( MNN_BUILD_FOR_ANDROID_COMMAND )
2020-02-26 09:57:17 +08:00
set ( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -s" )
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie -fPIE -s" )
2019-12-27 22:16:57 +08:00
set ( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections" )
endif ( )
2019-06-10 21:08:55 +08:00
endif ( )
2019-04-17 10:49:11 +08:00
endif ( )
2020-02-26 09:57:17 +08:00
ENDIF ( CMAKE_BUILD_TYPE MATCHES Debug )
if ( CMAKE_SYSTEM_NAME MATCHES "^Android" )
IF ( MNN_USE_LOGCAT )
add_definitions ( -DMNN_USE_LOGCAT )
ENDIF ( )
IF ( NOT MNN_BUILD_FOR_ANDROID_COMMAND )
set ( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ NATIVE_LIBRARY_OUTPUT } / ${ ANDROID_ABI } )
ENDIF ( )
endif ( )
2019-04-17 10:49:11 +08:00
if ( ${ CMAKE_SYSTEM_NAME } MATCHES "^Linux" )
2019-12-27 22:16:57 +08:00
if ( ( CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" ) OR ( CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64" ) )
2019-04-17 10:49:11 +08:00
set ( aarch64_linux_include
#/usr/include/c++/4.9
#/usr/lib/gcc/x86_64-linux-gnu/4.9
#/usr/lib/gcc/x86_64-linux-gnu/4.9/include
#/usr/include/x86_64-linux-gnu/c++/4.9
)
include_directories ( ${ aarch64_linux_include } )
endif ( )
endif ( )
2019-12-27 22:16:57 +08:00
include_directories ( ${ CMAKE_CURRENT_LIST_DIR } /include/
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / s o u r c e /
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / s c h e m a / c u r r e n t /
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / 3 r d _ p a r t y /
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / 3 r d _ p a r t y / f l a t b u f f e r s / i n c l u d e
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / 3 r d _ p a r t y / h a l f
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / 3 r d _ p a r t y / i m a g e H e l p e r
$ { C M A K E _ C U R R E N T _ L I S T _ D I R } / 3 r d _ p a r t y / O p e n C L H e a d e r s /
2020-01-17 10:20:15 +08:00
)
2020-01-15 13:33:47 +08:00
2019-12-27 22:16:57 +08:00
set ( MNN_OBJECTS_TO_LINK "" )
set ( MNN_TARGETS "" )
# Core
2020-02-26 09:57:17 +08:00
FILE ( GLOB MNN_Core_SRC ${ CMAKE_CURRENT_LIST_DIR } /source/core/* )
2020-01-17 10:20:15 +08:00
add_library ( MNNCore OBJECT ${ MNN_Core_SRC } )
2019-12-27 22:16:57 +08:00
list ( APPEND MNN_OBJECTS_TO_LINK $< TARGET_OBJECTS:MNNCore > )
list ( APPEND MNN_TARGETS MNNCore )
# CV
2020-02-26 09:57:17 +08:00
FILE ( GLOB MNN_CV_SRC ${ CMAKE_CURRENT_LIST_DIR } /source/cv/* )
2020-01-17 10:20:15 +08:00
add_library ( MNNCV OBJECT ${ MNN_CV_SRC } )
2019-12-27 22:16:57 +08:00
list ( APPEND MNN_OBJECTS_TO_LINK $< TARGET_OBJECTS:MNNCV > )
list ( APPEND MNN_TARGETS MNNCV )
# Math
2020-02-26 09:57:17 +08:00
FILE ( GLOB MNN_Math_SRC ${ CMAKE_CURRENT_LIST_DIR } /source/math/* )
2020-01-17 10:20:15 +08:00
add_library ( MNNMath OBJECT ${ MNN_Math_SRC } )
2019-12-27 22:16:57 +08:00
list ( APPEND MNN_OBJECTS_TO_LINK $< TARGET_OBJECTS:MNNMath > )
list ( APPEND MNN_TARGETS MNNMath )
# Shape
2020-02-26 09:57:17 +08:00
FILE ( GLOB MNN_Shape_SRC ${ CMAKE_CURRENT_LIST_DIR } /source/shape/* )
2020-01-17 10:20:15 +08:00
add_library ( MNNShape OBJECT ${ MNN_Shape_SRC } )
2019-12-27 22:16:57 +08:00
list ( APPEND MNN_OBJECTS_TO_LINK $< TARGET_OBJECTS:MNNShape > )
list ( APPEND MNN_TARGETS MNNShape )
# Compute
2020-02-26 09:57:17 +08:00
FILE ( GLOB MNN_Compute_SRC ${ CMAKE_CURRENT_LIST_DIR } /source/backend/cpu/compute/* )
2020-01-17 10:20:15 +08:00
add_library ( MNNCompute OBJECT ${ MNN_Compute_SRC } )
2019-12-27 22:16:57 +08:00
list ( APPEND MNN_OBJECTS_TO_LINK $< TARGET_OBJECTS:MNNCompute > )
list ( APPEND MNN_TARGETS MNNCompute )
2020-01-17 10:20:15 +08:00
# CPU
2020-02-26 09:57:17 +08:00
FILE ( GLOB MNN_CPU_SRC ${ CMAKE_CURRENT_LIST_DIR } /source/backend/cpu/* )
2020-01-17 10:20:15 +08:00
add_library ( MNNCPU OBJECT ${ MNN_CPU_SRC } )
list ( APPEND MNN_OBJECTS_TO_LINK $< TARGET_OBJECTS:MNNCPU > )
list ( APPEND MNN_TARGETS MNNCPU )
2019-12-27 22:16:57 +08:00
# X86_64 AVX/SSE
2020-01-17 10:20:15 +08:00
include ( ${ CMAKE_CURRENT_LIST_DIR } /source/backend/cpu/x86_x64/CMakeLists.txt )
2019-12-27 22:16:57 +08:00
# AArch32/64 Assemblies
2020-01-17 10:20:15 +08:00
include ( ${ CMAKE_CURRENT_LIST_DIR } /source/backend/cpu/arm/CMakeLists.txt )
2019-12-27 22:16:57 +08:00
IF ( NOT DEFINED IOS_ARCH )
set ( IOS_ARCH "" )
ENDIF ( )
SET ( MNN_PUB_HDRS "" )
SET ( MNN_EXPR_PUB_HDRS "" )
list ( APPEND MNN_PUB_HDRS "${CMAKE_CURRENT_SOURCE_DIR}/include/MNN/MNNDefine.h" )
list ( APPEND MNN_PUB_HDRS "${CMAKE_CURRENT_SOURCE_DIR}/include/MNN/Interpreter.hpp" )
list ( APPEND MNN_PUB_HDRS "${CMAKE_CURRENT_SOURCE_DIR}/include/MNN/HalideRuntime.h" )
list ( APPEND MNN_PUB_HDRS "${CMAKE_CURRENT_SOURCE_DIR}/include/MNN/Tensor.hpp" )
list ( APPEND MNN_PUB_HDRS "${CMAKE_CURRENT_SOURCE_DIR}/include/MNN/ErrorCode.hpp" )
list ( APPEND MNN_PUB_HDRS "${CMAKE_CURRENT_SOURCE_DIR}/include/MNN/ImageProcess.hpp" )
list ( APPEND MNN_PUB_HDRS "${CMAKE_CURRENT_SOURCE_DIR}/include/MNN/Matrix.h" )
list ( APPEND MNN_PUB_HDRS "${CMAKE_CURRENT_SOURCE_DIR}/include/MNN/Rect.h" )
list ( APPEND MNN_PUB_HDRS "${CMAKE_CURRENT_SOURCE_DIR}/include/MNN/MNNForwardType.h" )
list ( APPEND MNN_PUB_HDRS "${CMAKE_CURRENT_SOURCE_DIR}/include/MNN/AutoTime.hpp" )
list ( APPEND MNN_EXPR_PUB_HDRS "${CMAKE_CURRENT_SOURCE_DIR}/include/MNN/expr/Expr.hpp" )
list ( APPEND MNN_EXPR_PUB_HDRS "${CMAKE_CURRENT_SOURCE_DIR}/include/MNN/expr/ExprCreator.hpp" )
list ( APPEND MNN_EXPR_PUB_HDRS "${CMAKE_CURRENT_SOURCE_DIR}/include/MNN/expr/MathOp.hpp" )
list ( APPEND MNN_EXPR_PUB_HDRS "${CMAKE_CURRENT_SOURCE_DIR}/include/MNN/expr/NeuralNetWorkOp.hpp" )
list ( APPEND MNN_EXPR_PUB_HDRS "${CMAKE_CURRENT_SOURCE_DIR}/include/MNN/expr/Optimizer.hpp" )
2020-01-17 10:20:15 +08:00
list ( APPEND MNN_EXPR_PUB_HDRS "${CMAKE_CURRENT_SOURCE_DIR}/include/MNN/expr/Executor.hpp" )
set ( CMAKE_CXX_FLAGS_ORIGIN ${ CMAKE_CXX_FLAGS } )
set ( CMAKE_C_FLAGS_ORIGIN ${ CMAKE_C_FLAGS } )
if ( ( NOT ( MSVC OR WIN32 ) ) AND MNN_HIDDEN )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden -fvisibility=hidden" )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden -fstrict-aliasing -ffunction-sections -fdata-sections -ffast-math -fno-rtti -fno-exceptions " )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstrict-aliasing -ffunction-sections -fdata-sections -ffast-math" )
if ( NOT APPLE )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fomit-frame-pointer" )
endif ( )
endif ( )
2019-12-27 22:16:57 +08:00
2020-01-17 10:20:15 +08:00
# Metal
include ( ${ CMAKE_CURRENT_LIST_DIR } /source/backend/metal/CMakeLists.txt )
set ( MNN_DEPS "" )
set ( MNN_EXTRA_DEPENDS "" )
# Vulkan
IF ( MNN_VULKAN )
add_subdirectory ( ${ CMAKE_CURRENT_LIST_DIR } /source/backend/vulkan/ )
2019-12-27 22:16:57 +08:00
IF ( MNN_SEP_BUILD )
2020-01-17 10:20:15 +08:00
list ( APPEND MNN_DEPS MNN_Vulkan )
ELSE ( )
list ( APPEND MNN_TARGETS MNN_Vulkan )
list ( APPEND MNN_OBJECTS_TO_LINK $< TARGET_OBJECTS:MNN_Vulkan > )
2020-03-01 15:33:28 +08:00
list ( APPEND MNN_EXTRA_DEPENDS ${ MNN_VULKAN_LIBS } )
2020-01-17 10:20:15 +08:00
ENDIF ( )
ENDIF ( )
# OpenCL
IF ( MNN_OPENCL )
add_subdirectory ( ${ CMAKE_CURRENT_LIST_DIR } /source/backend/opencl/ )
IF ( MNN_SEP_BUILD )
list ( APPEND MNN_DEPS MNN_CL )
ELSE ( )
list ( APPEND MNN_TARGETS MNN_CL )
list ( APPEND MNN_OBJECTS_TO_LINK $< TARGET_OBJECTS:MNN_CL > )
list ( APPEND MNN_EXTRA_DEPENDS ${ MNN_OCL_LIBS } )
2019-12-27 22:16:57 +08:00
ENDIF ( )
2020-01-17 10:20:15 +08:00
ENDIF ( )
# OpenGL
IF ( MNN_OPENGL )
add_subdirectory ( ${ CMAKE_CURRENT_LIST_DIR } /source/backend/opengl/ )
IF ( MNN_SEP_BUILD )
list ( APPEND MNN_DEPS MNN_GL )
ELSE ( )
list ( APPEND MNN_TARGETS MNN_GL )
list ( APPEND MNN_OBJECTS_TO_LINK $< TARGET_OBJECTS:MNN_GL > )
list ( APPEND MNN_EXTRA_DEPENDS GLESv3 )
list ( APPEND MNN_EXTRA_DEPENDS EGL )
ENDIF ( )
ENDIF ( )
# ARM82 Assemblies
IF ( MNN_ARM82 )
2020-03-22 20:16:29 +08:00
add_definitions ( -DENABLE_ARMV82 )
2020-01-17 10:20:15 +08:00
add_subdirectory ( ${ CMAKE_CURRENT_LIST_DIR } /source/backend/arm82/ )
IF ( MNN_SEP_BUILD )
list ( APPEND MNN_DEPS MNN_Arm82 )
ELSE ( )
list ( APPEND MNN_TARGETS MNN_Arm82 )
list ( APPEND MNN_OBJECTS_TO_LINK $< TARGET_OBJECTS:MNN_Arm82 > )
ENDIF ( )
ENDIF ( )
# Express
add_subdirectory ( ${ CMAKE_CURRENT_LIST_DIR } /express/ )
IF ( MNN_SEP_BUILD )
2019-12-27 22:16:57 +08:00
add_library ( MNN SHARED ${ CMAKE_CURRENT_LIST_DIR } /cmake/dummy.cpp ${ MNN_OBJECTS_TO_LINK } ${ MNN_PUB_HDRS } ${ MNN_EXPR_PUB_HDRS } )
2020-01-17 10:20:15 +08:00
target_link_libraries ( MNN PUBLIC ${ MNN_EXTRA_DEPENDS } )
list ( APPEND MNN_DEPS MNN_Express )
ELSE ( )
list ( APPEND MNN_OBJECTS_TO_LINK $< TARGET_OBJECTS:MNNExpress > )
list ( APPEND MNN_TARGETS MNNExpress )
IF ( MNN_BUILD_SHARED_LIBS )
add_library ( MNN SHARED ${ CMAKE_CURRENT_LIST_DIR } /cmake/dummy.cpp ${ MNN_OBJECTS_TO_LINK } ${ MNN_PUB_HDRS } ${ MNN_EXPR_PUB_HDRS } )
ELSE ( )
add_library ( MNN STATIC ${ CMAKE_CURRENT_LIST_DIR } /cmake/dummy.cpp ${ MNN_OBJECTS_TO_LINK } ${ MNN_PUB_HDRS } ${ MNN_EXPR_PUB_HDRS } )
ENDIF ( )
target_link_libraries ( MNN PUBLIC ${ MNN_EXTRA_DEPENDS } )
2019-12-27 22:16:57 +08:00
if ( WIN32 )
foreach ( TARGET ${ MNN_TARGETS } )
target_compile_definitions ( ${ TARGET } PRIVATE "-DBUILDING_MNN_DLL" )
target_compile_definitions ( ${ TARGET } INTERFACE "-DUSING_MNN_DLL" )
2019-04-17 10:49:11 +08:00
endforeach ( )
2020-01-15 13:33:47 +08:00
target_compile_definitions ( MNN PRIVATE "-DBUILDING_MNN_DLL" )
target_compile_definitions ( MNN INTERFACE "-DUSING_MNN_DLL" )
2019-12-27 22:16:57 +08:00
endif ( )
ENDIF ( )
2020-01-06 13:55:54 +08:00
2020-03-25 20:41:44 +08:00
list ( APPEND MNN_DEPS MNN )
2019-12-27 22:16:57 +08:00
if ( APPLE )
IF ( MNN_AAPL_FMWK )
2020-01-17 10:20:15 +08:00
set_target_properties ( MNN PROPERTIES FRAMEWORK TRUE )
set_target_properties ( MNN PROPERTIES
2019-12-27 22:16:57 +08:00
M A C O S X _ F R A M E W O R K _ I D E N T I F I E R c o m . a l i b a b a . M N N
M A C O S X _ F R A M E W O R K _ S H O R T _ V E R S I O N _ S T R I N G $ { P A C K A G E _ V E R S I O N }
M A C O S X _ F R A M E W O R K _ B U N D L E _ V E R S I O N $ { P A C K A G E _ V E R S I O N }
X C O D E _ A T T R I B U T E _ C O D E _ S I G N _ I D E N T I T Y " i P h o n e D e v e l o p e r "
)
2020-01-17 10:20:15 +08:00
set_target_properties ( MNN PROPERTIES MACOSX_FRAMEWORK_INFO_PLIST ${ CMAKE_CURRENT_SOURCE_DIR } /project/ios/MNN/Info.plist )
2019-12-27 22:16:57 +08:00
ENDIF ( )
IF ( MNN_METAL )
2020-01-17 10:20:15 +08:00
find_library ( FOUNDATION Foundation REQUIRED )
target_link_libraries ( MNN PUBLIC ${ FOUNDATION } )
2019-12-27 22:16:57 +08:00
find_library ( METAL Metal REQUIRED )
target_link_libraries ( MNN PUBLIC ${ METAL } )
ENDIF ( )
2019-04-17 10:49:11 +08:00
endif ( )
2020-01-17 10:20:15 +08:00
add_dependencies ( MNN MNNCore MNNCV MNNShape MNNMath MNNCompute MNNCPU GenVCSHDR )
add_subdirectory ( ${ CMAKE_CURRENT_LIST_DIR } /tools/converter )
2019-04-17 10:49:11 +08:00
2020-01-17 10:20:15 +08:00
if ( CMAKE_SYSTEM_NAME MATCHES "^Linux" )
2020-01-02 12:01:24 +08:00
target_link_libraries ( MNN PUBLIC pthread )
2020-01-17 10:20:15 +08:00
elseif ( CMAKE_SYSTEM_NAME MATCHES "^Android" )
target_link_libraries ( MNN PUBLIC log android m )
2019-04-17 10:49:11 +08:00
else ( )
endif ( )
2019-09-01 19:25:26 +08:00
if ( MSVC OR WIN32 )
target_link_options ( MNN PRIVATE "/IGNORE:4049,4217" )
foreach ( DEPEND ${ MNN_DEPEND } )
- dynamic computation graph (beta)
- add supports (/express)
- add tests
- add benchmarks with it (/benchmark/exprModels)
- Python
- MNN engine and tools were submitted to pip
- available on Windows/macOS/Linux
- Engine/Converter
- add supports for each op benchmarking
- refactor optimizer by separating steps
- CPU
- add supports for Conv3D, Pool3D, ELU, ReverseSequence
- fix ArgMax, Permute, Scale, BinaryOp, Slice, SliceTf
- OpenCL
- add half transform in CPU
- add broadcast supports for binary
- optimize Conv2D, Reshape, Eltwise, Gemm, etc.
- OpenGL
- add sub, real div supports for binary
- add supports for unary
- optimize Conv2D, Reshape
- Vulkan
- add max supports for eltwise
- Metal
- fix metallib missing problem
- Train/Quantization
- use express to refactor training codes
2019-09-26 21:02:07 +08:00
if ( ${ DEPEND } STREQUAL "MNN" )
continue ( )
endif ( )
2019-09-01 19:25:26 +08:00
target_link_options ( MNN PRIVATE /WHOLEARCHIVE: $< TARGET_FILE:${DEPEND} > )
target_link_libraries ( MNN PRIVATE ${ DEPEND } )
endforeach ( )
- dynamic computation graph (beta)
- add supports (/express)
- add tests
- add benchmarks with it (/benchmark/exprModels)
- Python
- MNN engine and tools were submitted to pip
- available on Windows/macOS/Linux
- Engine/Converter
- add supports for each op benchmarking
- refactor optimizer by separating steps
- CPU
- add supports for Conv3D, Pool3D, ELU, ReverseSequence
- fix ArgMax, Permute, Scale, BinaryOp, Slice, SliceTf
- OpenCL
- add half transform in CPU
- add broadcast supports for binary
- optimize Conv2D, Reshape, Eltwise, Gemm, etc.
- OpenGL
- add sub, real div supports for binary
- add supports for unary
- optimize Conv2D, Reshape
- Vulkan
- add max supports for eltwise
- Metal
- fix metallib missing problem
- Train/Quantization
- use express to refactor training codes
2019-09-26 21:02:07 +08:00
endif ( )
if ( NOT MNN_BUILD_SHARED_LIBS )
2019-12-27 22:16:57 +08:00
if ( APPLE )
- dynamic computation graph (beta)
- add supports (/express)
- add tests
- add benchmarks with it (/benchmark/exprModels)
- Python
- MNN engine and tools were submitted to pip
- available on Windows/macOS/Linux
- Engine/Converter
- add supports for each op benchmarking
- refactor optimizer by separating steps
- CPU
- add supports for Conv3D, Pool3D, ELU, ReverseSequence
- fix ArgMax, Permute, Scale, BinaryOp, Slice, SliceTf
- OpenCL
- add half transform in CPU
- add broadcast supports for binary
- optimize Conv2D, Reshape, Eltwise, Gemm, etc.
- OpenGL
- add sub, real div supports for binary
- add supports for unary
- optimize Conv2D, Reshape
- Vulkan
- add max supports for eltwise
- Metal
- fix metallib missing problem
- Train/Quantization
- use express to refactor training codes
2019-09-26 21:02:07 +08:00
set ( MNN_DEPEND -Wl,-all_load ${ MNN_DEPEND } -Wl,-noall_load )
2019-09-01 19:25:26 +08:00
elseif ( CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
- dynamic computation graph (beta)
- add supports (/express)
- add tests
- add benchmarks with it (/benchmark/exprModels)
- Python
- MNN engine and tools were submitted to pip
- available on Windows/macOS/Linux
- Engine/Converter
- add supports for each op benchmarking
- refactor optimizer by separating steps
- CPU
- add supports for Conv3D, Pool3D, ELU, ReverseSequence
- fix ArgMax, Permute, Scale, BinaryOp, Slice, SliceTf
- OpenCL
- add half transform in CPU
- add broadcast supports for binary
- optimize Conv2D, Reshape, Eltwise, Gemm, etc.
- OpenGL
- add sub, real div supports for binary
- add supports for unary
- optimize Conv2D, Reshape
- Vulkan
- add max supports for eltwise
- Metal
- fix metallib missing problem
- Train/Quantization
- use express to refactor training codes
2019-09-26 21:02:07 +08:00
set ( MNN_DEPEND -Wl,--whole-archive ${ MNN_DEPEND } -Wl,--no-whole-archive )
2019-09-01 19:25:26 +08:00
endif ( )
endif ( )
2019-12-27 22:16:57 +08:00
if ( NOT APPLE )
if ( MNN_OPENMP )
message ( STATUS "[*] Checking OpenMP" )
find_package ( OpenMP )
# For CMake < 3.9, we need to make the target ourselves
if ( NOT TARGET OpenMP::OpenMP_CXX )
find_package ( Threads REQUIRED )
add_library ( OpenMP::OpenMP_CXX IMPORTED INTERFACE )
set_property ( TARGET OpenMP::OpenMP_CXX
P R O P E R T Y I N T E R F A C E _ C O M P I L E _ O P T I O N S $ { O p e n M P _ C X X _ F L A G S } )
# Only works if the same flag is passed to the linker; use CMake 3.9+ otherwise (Intel, AppleClang)
set_property ( TARGET OpenMP::OpenMP_CXX
P R O P E R T Y I N T E R F A C E _ L I N K _ L I B R A R I E S $ { O p e n M P _ C X X _ F L A G S } T h r e a d s : : T h r e a d s )
endif ( )
# TODO: Don't pollute global CFLAGS
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}" )
set ( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${OpenMP_SHARED_LINKER_FLAGS}" )
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}" )
if ( WIN32 )
set ( OpenMP_C_FLAGS "/openmp ${OpenMP_C_FLAGS}" )
set ( OpenMP_CXX_FLAGS "/openmp ${OpenMP_CXX_FLAGS}" )
endif ( )
2020-01-17 10:20:15 +08:00
FOREACH ( TARGET ${ MNN_TARGETS } )
target_link_libraries ( ${ TARGET } OpenMP::OpenMP_CXX )
2019-12-27 22:16:57 +08:00
IF ( WIN32 )
target_compile_options ( ${ TARGET } PUBLIC /openmp ${ OpenMP_CXX_FLAGS } ${ OpenMP_C_FLAGS } )
ELSE ( )
target_compile_options ( ${ TARGET } PUBLIC ${ OpenMP_CXX_FLAGS } ${ OpenMP_C_FLAGS } )
ENDIF ( )
ENDFOREACH ( )
2019-04-17 10:49:11 +08:00
endif ( )
endif ( )
2019-12-27 22:16:57 +08:00
list ( APPEND MNN_TARGETS MNN )
FOREACH ( TARGET ${ MNN_TARGETS } )
add_dependencies ( ${ TARGET } MNN_SCHEMA_GEN )
2020-01-17 10:20:15 +08:00
IF ( ( NOT MSVC ) AND ( NOT WIN32 ) )
2019-11-13 15:47:08 +08:00
else ( )
2020-01-17 10:20:15 +08:00
target_compile_definitions ( ${ TARGET } PRIVATE _CRT_SECURE_NO_WARNINGS )
2020-01-15 13:33:47 +08:00
target_compile_options ( ${ TARGET } PRIVATE "/wd4267" "/wd4018" "/wd4251" "/wd4996" "/wd4244" "/wd4146" "/wd4129" "/wd4305" )
2019-11-13 15:47:08 +08:00
endif ( )
2019-12-27 22:16:57 +08:00
ENDFOREACH ( )
list ( REMOVE_ITEM MNN_TARGETS MNN )
include ( ${ CMAKE_CURRENT_LIST_DIR } /demo/exec/CMakeLists.txt )
include ( ${ CMAKE_CURRENT_LIST_DIR } /tools/cpp/CMakeLists.txt )
2020-01-17 10:20:15 +08:00
IF ( MNN_BUILD_TRAIN )
add_subdirectory ( tools/train )
ENDIF ( )
2019-12-27 22:16:57 +08:00
include ( ${ CMAKE_CURRENT_LIST_DIR } /test/CMakeLists.txt )
include ( ${ CMAKE_CURRENT_LIST_DIR } /benchmark/CMakeLists.txt )
include ( ${ CMAKE_CURRENT_LIST_DIR } /tools/quantization/CMakeLists.txt )
include ( ${ CMAKE_CURRENT_LIST_DIR } /tools/evaluation/CMakeLists.txt )
# Install headers
IF ( CMAKE_SYSTEM_NAME MATCHES "^Android" AND NOT MNN_BUILD_FOR_ANDROID_COMMAND )
IF ( NOT NATIVE_INCLUDE_OUTPUT )
set ( NATIVE_INCLUDE_OUTPUT "." )
ENDIF ( )
2019-04-17 10:49:11 +08:00
set ( MNN_INCLUDE_OUTPUT ${ NATIVE_INCLUDE_OUTPUT } /MNN )
add_custom_command (
2019-12-27 22:16:57 +08:00
T A R G E T M N N
P O S T _ B U I L D
C O M M A N D $ { C M A K E _ C O M M A N D }
- E m a k e _ d i r e c t o r y " $ { M N N _ I N C L U D E _ O U T P U T } / "
2019-05-14 19:54:21 +08:00
)
2019-12-27 22:16:57 +08:00
add_custom_command (
T A R G E T M N N
P O S T _ B U I L D
C O M M A N D $ { C M A K E _ C O M M A N D }
- E m a k e _ d i r e c t o r y " $ { M N N _ I N C L U D E _ O U T P U T } / e x p r / "
2019-06-10 21:08:55 +08:00
)
2019-12-27 22:16:57 +08:00
FOREACH ( header ${ MNN_PUB_HDRS } )
add_custom_command (
T A R G E T M N N
P O S T _ B U I L D
C O M M A N D $ { C M A K E _ C O M M A N D }
A R G S - E c o p y $ { h e a d e r } " $ { M N N _ I N C L U D E _ O U T P U T } / "
)
ENDFOREACH ( )
FOREACH ( header ${ MNN_EXPR_PUB_HDRS } )
add_custom_command (
T A R G E T M N N
P O S T _ B U I L D
C O M M A N D $ { C M A K E _ C O M M A N D }
A R G S - E c o p y $ { h e a d e r } " $ { M N N _ I N C L U D E _ O U T P U T } / e x p r / "
)
ENDFOREACH ( )
ELSEIF ( NOT APPLE )
INSTALL ( FILES ${ MNN_PUB_HDRS } DESTINATION include/MNN/ )
INSTALL ( FILES ${ MNN_EXPR_PUB_HDRS } DESTINATION include/MNN/expr/ )
install ( TARGETS MNN
L I B R A R Y D E S T I N A T I O N l i b
A R C H I V E D E S T I N A T I O N l i b
)
ELSE ( )
install ( TARGETS MNN
L I B R A R Y D E S T I N A T I O N l i b
A R C H I V E D E S T I N A T I O N l i b
F R A M E W O R K D E S T I N A T I O N / L i b r a r y / F r a m e w o r k s /
)
FOREACH ( HDR ${ MNN_EXPR_PUB_HDRS } )
SET_SOURCE_FILES_PROPERTIES ( ${ HDR } PROPERTIES MACOSX_PACKAGE_LOCATION Headers/expr/ )
ENDFOREACH ( )
FOREACH ( HDR ${ MNN_PUB_HDRS } )
SET_SOURCE_FILES_PROPERTIES ( ${ HDR } PROPERTIES MACOSX_PACKAGE_LOCATION Headers/ )
ENDFOREACH ( )
2020-01-17 10:20:15 +08:00
IF ( MNN_METAL )
SET_SOURCE_FILES_PROPERTIES ( ${ CMAKE_CURRENT_BINARY_DIR } /mnn.metallib PROPERTIES MACOSX_PACKAGE_LOCATION Resources/ )
ENDIF ( )
2019-12-27 22:16:57 +08:00
ENDIF ( )