Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support macos onnxruntime #2577

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
403 changes: 251 additions & 152 deletions .clang-format

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ venv*

data/
data
.vscode
# .vscode
.idea
.DS_Store

Expand Down Expand Up @@ -172,3 +172,5 @@ demo/csharp/*/Properties

# doxygen
docs/cppapi/docs

*debug*
263 changes: 136 additions & 127 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
# Copyright (c) OpenMMLab. All rights reserved.
if (NOT DEFINED CMAKE_INSTALL_PREFIX)
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "installation directory")
endif ()
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
set(CMAKE_INSTALL_PREFIX
"${CMAKE_BINARY_DIR}/install"
CACHE PATH "installation directory")
endif()
message(STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")

if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "choose 'Release' as default build type" FORCE)
endif ()
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE
Release
CACHE STRING "choose 'Release' as default build type" FORCE)
endif()

cmake_minimum_required(VERSION 3.14)
project(MMDeploy VERSION 1.3.1)
Expand All @@ -18,11 +22,11 @@ set(MMDEPLOY_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(MMDEPLOY_VERSION_PATCH ${PROJECT_VERSION_PATCH})

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
if (MSVC)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
else ()
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
endif ()
if(MSVC)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
else()
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
endif()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

# options
Expand All @@ -41,141 +45,146 @@ option(MMDEPLOY_COVERAGE "build SDK for coverage" OFF)
option(MMDEPLOY_USE_MSCV_STATIC "statically linked CRT" OFF)
option(MMDEPLOY_ELENA_FUSION "use elena to fuse preprocess" OFF)

set(MMDEPLOY_TARGET_DEVICES "cpu" CACHE STRING "target devices to support")
set(MMDEPLOY_TARGET_BACKENDS "" CACHE STRING "target inference engines to support")
set(MMDEPLOY_CODEBASES "all" CACHE STRING "select OpenMMLab codebases")

if ((NOT MMDEPLOY_BUILD_SDK_MONOLITHIC) AND MMDEPLOY_DYNAMIC_BACKEND)
set(MMDEPLOY_DYNAMIC_BACKEND OFF)
endif ()
set(MMDEPLOY_TARGET_DEVICES
"cpu"
CACHE STRING "target devices to support")
set(MMDEPLOY_TARGET_BACKENDS
""
CACHE STRING "target inference engines to support")
set(MMDEPLOY_CODEBASES
"all"
CACHE STRING "select OpenMMLab codebases")

if((NOT MMDEPLOY_BUILD_SDK_MONOLITHIC) AND MMDEPLOY_DYNAMIC_BACKEND)
set(MMDEPLOY_DYNAMIC_BACKEND OFF)
endif()

if (MMDEPLOY_SHARED_LIBS)
set(MMDEPLOY_LIB_TYPE SHARED)
else ()
set(MMDEPLOY_LIB_TYPE STATIC)
endif ()
if(MMDEPLOY_SHARED_LIBS)
set(MMDEPLOY_LIB_TYPE SHARED)
else()
set(MMDEPLOY_LIB_TYPE STATIC)
endif()

set(MMDEPLOY_TASKS "" CACHE INTERNAL "")
set(MMDEPLOY_TASKS
""
CACHE INTERNAL "")

if (MMDEPLOY_COVERAGE)
add_compile_options(-coverage -fprofile-arcs -ftest-coverage)
add_link_options(-coverage -lgcov)
endif ()
if(MMDEPLOY_COVERAGE)
add_compile_options(-coverage -fprofile-arcs -ftest-coverage)
add_link_options(-coverage -lgcov)
endif()

# when CUDA devices are enabled, the environment variable ASAN_OPTIONS=protect_shadow_gap=0
# must be set at runtime
if (MMDEPLOY_ASAN_ENABLE)
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fsanitize=address>)
add_link_options(-fsanitize=address)
endif ()
# when CUDA devices are enabled, the environment variable
# ASAN_OPTIONS=protect_shadow_gap=0 must be set at runtime
if(MMDEPLOY_ASAN_ENABLE)
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fsanitize=address>)
add_link_options(-fsanitize=address)
endif()

# notice that ubsan has linker issues for ubuntu < 18.04, see
# https://stackoverflow.com/questions/50024731/ld-unrecognized-option-push-state-no-as-needed
if (MMDEPLOY_UBSAN_ENABLE)
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fsanitize=undefined>)
add_link_options(-fsanitize=undefined)
endif ()

if (MSVC)
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:/diagnostics:classic>)
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:/wd4251>)
if (MMDEPLOY_USE_MSCV_STATIC)
foreach(lang C CXX)
string(REPLACE /MD /MT CMAKE_${lang}_FLAGS_DEBUG "${CMAKE_${lang}_FLAGS_DEBUG}")
string(REPLACE /MD /MT CMAKE_${lang}_FLAGS_RELEASE "${CMAKE_${lang}_FLAGS_RELEASE}")
endforeach()
endif ()
endif ()
if(MMDEPLOY_UBSAN_ENABLE)
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fsanitize=undefined>)
add_link_options(-fsanitize=undefined)
endif()

if(MSVC)
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:/diagnostics:classic>)
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:/wd4251>)
if(MMDEPLOY_USE_MSCV_STATIC)
foreach(lang C CXX)
string(REPLACE /MD /MT CMAKE_${lang}_FLAGS_DEBUG
"${CMAKE_${lang}_FLAGS_DEBUG}")
string(REPLACE /MD /MT CMAKE_${lang}_FLAGS_RELEASE
"${CMAKE_${lang}_FLAGS_RELEASE}")
endforeach()
endif()
endif()

if(APPLE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fobjc-arc")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fobjc-arc")
endif()

add_library(MMDeployStaticModules INTERFACE)
add_library(MMDeployDynamicModules INTERFACE)
add_library(MMDeployLibs INTERFACE)

if ((cuda IN_LIST MMDEPLOY_TARGET_DEVICES) OR (trt IN_LIST MMDEPLOY_TARGET_BACKENDS))
include(cmake/cuda.cmake NO_POLICY_SCOPE)
endif ()
if((cuda IN_LIST MMDEPLOY_TARGET_DEVICES) OR (trt IN_LIST
MMDEPLOY_TARGET_BACKENDS))
include(cmake/cuda.cmake NO_POLICY_SCOPE)
endif()

# this must come after including cuda.cmake because policies in function scope is captured
# at function definition
# this must come after including cuda.cmake because policies in function scope
# is captured at function definition
include(cmake/MMDeploy.cmake)

add_subdirectory(csrc/mmdeploy)

if (MMDEPLOY_BUILD_SDK)
if (NOT MMDEPLOY_BUILD_SDK_MONOLITHIC)
install(TARGETS MMDeployStaticModules
MMDeployDynamicModules
MMDeployLibs
EXPORT MMDeployTargets)
endif ()

if (MMDEPLOY_BUILD_TEST)
add_subdirectory(tests/test_csrc)
endif ()

if (MMDEPLOY_BUILD_EXAMPLES)
include(${CMAKE_SOURCE_DIR}/cmake/opencv.cmake)
add_subdirectory(demo/csrc)
endif ()

# export MMDeploy package
install(EXPORT MMDeployTargets
FILE MMDeployTargets.cmake
if(MMDEPLOY_BUILD_SDK)
if(NOT MMDEPLOY_BUILD_SDK_MONOLITHIC)
install(TARGETS MMDeployStaticModules MMDeployDynamicModules MMDeployLibs
EXPORT MMDeployTargets)
endif()

if(MMDEPLOY_BUILD_TEST)
add_subdirectory(tests/test_csrc)
endif()

if(MMDEPLOY_BUILD_EXAMPLES)
include(${CMAKE_SOURCE_DIR}/cmake/opencv.cmake)
add_subdirectory(demo/csrc)
endif()

# export MMDeploy package
install(
EXPORT MMDeployTargets
FILE MMDeployTargets.cmake
DESTINATION lib/cmake/MMDeploy)

if(MMDEPLOY_SPDLOG_EXTERNAL)
set(SPDLOG_DEPENDENCY "find_package(spdlog QUIET)")
endif()
# append backend deps
mmdeploy_add_deps(trt BACKENDS ${MMDEPLOY_TARGET_BACKENDS} DEPS TENSORRT
CUDNN)
mmdeploy_add_deps(ort BACKENDS ${MMDEPLOY_TARGET_BACKENDS} DEPS ONNXRUNTIME)
mmdeploy_add_deps(ncnn BACKENDS ${MMDEPLOY_TARGET_BACKENDS} DEPS ncnn)
mmdeploy_add_deps(openvino BACKENDS ${MMDEPLOY_TARGET_BACKENDS} DEPS
InferenceEngine)
if(NOT MMDEPLOY_SHARED_LIBS)
mmdeploy_add_deps(pplnn BACKENDS ${MMDEPLOY_TARGET_BACKENDS} DEPS pplnn)
endif()
mmdeploy_add_deps(snpe BACKENDS ${MMDEPLOY_TARGET_BACKENDS} DEPS snpe)
mmdeploy_add_deps(rknn BACKENDS ${MMDEPLOY_TARGET_BACKENDS} DEPS rknn)

include(CMakePackageConfigHelpers)
# generate the config file that is includes the exports
configure_package_config_file(
${CMAKE_SOURCE_DIR}/cmake/MMDeployConfig.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/MMDeployConfig.cmake"
INSTALL_DESTINATION "lib/cmake"
NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO)

write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/MMDeployConfigVersion.cmake"
VERSION "${MMDeploy_VERSION_MAJOR}.${MMDeploy_VERSION_MINOR}"
COMPATIBILITY AnyNewerVersion)

install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/MMDeployConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/MMDeployConfigVersion.cmake
${CMAKE_CURRENT_SOURCE_DIR}/cmake/MMDeploy.cmake
DESTINATION lib/cmake/MMDeploy)

if(MSVC)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/loader.cpp.in
DESTINATION lib/cmake/MMDeploy)
endif()

install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules
DESTINATION lib/cmake/MMDeploy)

if (MMDEPLOY_SPDLOG_EXTERNAL)
set(SPDLOG_DEPENDENCY "find_package(spdlog QUIET)")
endif ()
# append backend deps
mmdeploy_add_deps(trt BACKENDS ${MMDEPLOY_TARGET_BACKENDS} DEPS TENSORRT CUDNN)
mmdeploy_add_deps(ort BACKENDS ${MMDEPLOY_TARGET_BACKENDS} DEPS ONNXRUNTIME)
mmdeploy_add_deps(ncnn BACKENDS ${MMDEPLOY_TARGET_BACKENDS} DEPS ncnn)
mmdeploy_add_deps(openvino BACKENDS ${MMDEPLOY_TARGET_BACKENDS} DEPS InferenceEngine)
if (NOT MMDEPLOY_SHARED_LIBS)
mmdeploy_add_deps(pplnn BACKENDS ${MMDEPLOY_TARGET_BACKENDS} DEPS pplnn)
endif ()
mmdeploy_add_deps(snpe BACKENDS ${MMDEPLOY_TARGET_BACKENDS} DEPS snpe)
mmdeploy_add_deps(rknn BACKENDS ${MMDEPLOY_TARGET_BACKENDS} DEPS rknn)

include(CMakePackageConfigHelpers)
# generate the config file that is includes the exports
configure_package_config_file(${CMAKE_SOURCE_DIR}/cmake/MMDeployConfig.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/MMDeployConfig.cmake"
INSTALL_DESTINATION "lib/cmake"
NO_SET_AND_CHECK_MACRO
NO_CHECK_REQUIRED_COMPONENTS_MACRO
)

write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/MMDeployConfigVersion.cmake"
VERSION "${MMDeploy_VERSION_MAJOR}.${MMDeploy_VERSION_MINOR}"
COMPATIBILITY AnyNewerVersion
)

install(FILES
${CMAKE_CURRENT_BINARY_DIR}/MMDeployConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/MMDeployConfigVersion.cmake
${CMAKE_CURRENT_SOURCE_DIR}/cmake/MMDeploy.cmake
DESTINATION lib/cmake/MMDeploy
)

if (MSVC)
install(FILES
${CMAKE_CURRENT_SOURCE_DIR}/cmake/loader.cpp.in
DESTINATION lib/cmake/MMDeploy
)
endif ()

install(DIRECTORY
${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules
DESTINATION lib/cmake/MMDeploy
)

if (${CMAKE_VERSION} VERSION_LESS "3.17.0")
install(SCRIPT cmake/post-install.cmake)
endif ()
endif ()
if(${CMAKE_VERSION} VERSION_LESS "3.17.0")
install(SCRIPT cmake/post-install.cmake)
endif()
endif()
Loading