[Fix] Fix recent build problems ()

* simplify deps management

* skip visibility flags for MSVC

* simplify cuda deps

* naming

* workaround for cmake<3.17

* add spdlog dependency

* move the enablement of CUDA to top level CMakeLists.txt

* fix MSVC build

* fix lint

* fix build for backend ops only

* remove comment

* allow to use apis/python as a standalone project

* remove redundant cmake code

* control shared or static lib using `MMDEPLOY_SHARED_LIBS` instead of `BUILD_SHARED_LIBS`

* fix MSVC build

* update docs
pull/555/head
lzhangzz 2022-06-06 11:19:34 +08:00 committed by GitHub
parent 51f630b22c
commit 567ec62296
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
67 changed files with 249 additions and 320 deletions

3
.gitmodules vendored
View File

@ -4,3 +4,6 @@
[submodule "third_party/pybind11"]
path = third_party/pybind11
url = https://github.com/pybind/pybind11.git
[submodule "third_party/spdlog"]
path = third_party/spdlog
url = https://github.com/gabime/spdlog.git

View File

@ -1,6 +1,6 @@
# Copyright (c) OpenMMLab. All rights reserved.
if (NOT DEFINED CMAKE_INSTALL_PREFIX)
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "MMDeploy's installation directory")
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "installation directory")
endif ()
message(STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")
@ -19,21 +19,28 @@ endif ()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
# options
option(BUILD_SHARED_LIBS "build shared lib" ON)
option(MMDEPLOY_BUILD_MODEL_OPTIMIZER "build MMDeploy's model optimizer" ON)
option(MMDEPLOY_BUILD_SDK "build MMDeploy's SDK" OFF)
option(MMDEPLOY_ZIP_MODEL "support sdk model in zip format" OFF)
option(MMDEPLOY_BUILD_SDK_CSHARP_API "build MMDeployExtern.dll for C# API" OFF)
option(MMDEPLOY_BUILD_TEST "build MMDeploy's csrc's unittest" OFF)
set(MMDEPLOY_TARGET_DEVICES
"cpu" CACHE STRING "MMDeploy's target devices")
set(MMDEPLOY_TARGET_BACKENDS "" CACHE STRING "MMDeploy's target inference engines")
set(MMDEPLOY_CODEBASES "all" CACHE STRING "select OpenMMLab's codebases")
option(MMDEPLOY_SHARED_LIBS "build shared libs" ON)
option(MMDEPLOY_BUILD_SDK "build MMDeploy SDK" OFF)
option(MMDEPLOY_BUILD_TEST "build unittests" OFF)
option(MMDEPLOY_BUILD_SDK_PYTHON_API "build SDK Python API" OFF)
option(MMDEPLOY_BUILD_SDK_CXX_API "build SDK C++ API" OFF)
option(MMDEPLOY_BUILD_SDK_CSHARP_API "build SDK C# API support" OFF)
option(MMDEPLOY_SPDLOG_EXTERNAL "use external spdlog" OFF)
option(MMDEPLOY_ZIP_MODEL "support SDK model in zip format" 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 CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "choose 'Release' as default build type" FORCE)
endif ()
if (MMDEPLOY_SHARED_LIBS)
set(MMDEPLOY_LIB_TYPE SHARED)
else ()
set(MMDEPLOY_LIB_TYPE STATIC)
endif ()
# when CUDA devices are enabled, the environment variable ASAN_OPTIONS=protect_shadow_gap=0
# must be set at runtime
if (MMDEPLOY_ASAN_ENABLE)
@ -53,16 +60,20 @@ if (MSVC)
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:/Zc:preprocessor>) # /experimental:preprocessor on VS2017
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:/Zc:__cplusplus>)
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:/wd4251>)
else ()
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fvisibility=hidden>)
endif ()
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
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 ()
# this must come after including cuda.cmake because policies in function scope is captured
# at function definition
include(cmake/MMDeploy.cmake)
add_subdirectory(csrc)
if (MMDEPLOY_BUILD_SDK)
@ -84,6 +95,9 @@ if (MMDEPLOY_BUILD_SDK)
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)
@ -110,13 +124,24 @@ if (MMDEPLOY_BUILD_SDK)
${CMAKE_CURRENT_BINARY_DIR}/MMDeployConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/MMDeployConfigVersion.cmake
${CMAKE_CURRENT_SOURCE_DIR}/cmake/MMDeploy.cmake
${CMAKE_CURRENT_SOURCE_DIR}/cmake/loader.cpp.in
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
)
install(DIRECTORY ${CMAKE_SOURCE_DIR}/demo/csrc/ DESTINATION example)
if (${CMAKE_VERSION} VERSION_LESS "3.17.0")
install(SCRIPT cmake/post-install.cmake)
endif ()
endif ()

View File

@ -14,8 +14,18 @@ endfunction ()
function (mmdeploy_add_library NAME)
# EXCLUDE: exclude from registering & exporting
cmake_parse_arguments(_MMDEPLOY "EXCLUDE" "" "" ${ARGN})
add_library(${NAME} ${_MMDEPLOY_UNPARSED_ARGUMENTS})
# search for add_library keywords
cmake_parse_arguments(_TYPE "STATIC;SHARED;MODULE" "" "" ${_MMDEPLOY_UNPARSED_ARGUMENTS})
set(_MAYBE_TYPE)
if (NOT (_TYPE_STATIC OR _TYPE_SHARED OR _TYPE_MODULE))
set(_MAYBE_TYPE ${MMDEPLOY_LIB_TYPE})
endif ()
add_library(${NAME} ${_MAYBE_TYPE} ${_MMDEPLOY_UNPARSED_ARGUMENTS})
if (NOT MSVC)
target_compile_options(${NAME} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-fvisibility=hidden>)
endif ()
target_compile_definitions(${NAME} PRIVATE -DMMDEPLOY_API_EXPORTS=1)
get_target_property(_TYPE ${NAME} TYPE)
if (_TYPE STREQUAL STATIC_LIBRARY)
@ -36,19 +46,25 @@ function (mmdeploy_add_module NAME)
# LIBRARY: the module is also a library (add_libray with SHARED instead of MODULE)
cmake_parse_arguments(_MMDEPLOY "EXCLUDE;LIBRARY" "" "" ${ARGN})
# search for add_library keywords
cmake_parse_arguments(_KW "STATIC;SHARED;MODULE" "" "" ${_MMDEPLOY_UNPARSED_ARGUMENTS})
cmake_parse_arguments(_TYPE "STATIC;SHARED;MODULE" "" "" ${_MMDEPLOY_UNPARSED_ARGUMENTS})
set(_MAYBE_MODULE)
set(_MAYBE_TYPE)
# no library type specified
if (NOT (_KW_STATIC OR _KW_SHARED OR _KW_MODULE))
if (NOT (_TYPE_STATIC OR _TYPE_SHARED OR _TYPE_MODULE))
# shared but not marked as a library, build module library so that no .lib dependency
# will be generated for MSVC
if (MSVC AND BUILD_SHARED_LIBS AND NOT _MMDEPLOY_LIBRARY)
set(_MAYBE_MODULE MODULE)
if (MSVC AND MMDEPLOY_SHARED_LIBS AND NOT _MMDEPLOY_LIBRARY)
set(_MAYBE_TYPE MODULE)
else ()
set(_MAYBE_TYPE ${MMDEPLOY_LIB_TYPE})
endif ()
endif ()
add_library(${NAME} ${_MAYBE_MODULE} ${_MMDEPLOY_UNPARSED_ARGUMENTS})
add_library(${NAME} ${_MAYBE_TYPE} ${_MMDEPLOY_UNPARSED_ARGUMENTS})
if (NOT MSVC)
target_compile_options(${NAME} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-fvisibility=hidden>)
endif ()
# automatically link mmdeploy::core if exists
if (TARGET mmdeploy::core)

View File

@ -8,7 +8,7 @@ set(MMDEPLOY_CODEBASES @MMDEPLOY_CODEBASES@)
set(MMDEPLOY_TARGET_DEVICES @MMDEPLOY_TARGET_DEVICES@)
set(MMDEPLOY_TARGET_BACKENDS @MMDEPLOY_TARGET_BACKENDS@)
set(MMDEPLOY_BUILD_TYPE @CMAKE_BUILD_TYPE@)
set(MMDEPLOY_BUILD_SHARED @BUILD_SHARED_LIBS@)
set(MMDEPLOY_BUILD_SHARED @MMDEPLOY_SHARED_LIBS@)
if (NOT MMDEPLOY_BUILD_SHARED)
if ("cuda" IN_LIST MMDEPLOY_TARGET_DEVICES)
@ -26,6 +26,7 @@ endif ()
set(MMDEPLOY_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/modules")
list(APPEND CMAKE_MODULE_PATH ${MMDEPLOY_MODULE_PATH})
@SPDLOG_DEPENDENCY@
@TENSORRT_DEPENDENCY@
@CUDNN_DEPENDENCY@
@ONNXRUNTIME_DEPENDENCY@
@ -34,7 +35,6 @@ list(APPEND CMAKE_MODULE_PATH ${MMDEPLOY_MODULE_PATH})
@pplnn_DEPENDENCY@
list(REMOVE_ITEM CMAKE_MODULE_PATH ${MMDEPLOY_MODULE_PATH})
find_package(spdlog REQUIRED)
find_package(OpenCV REQUIRED)
set(THREADS_PREFER_PTHREAD_FLAG ON)

View File

@ -1,19 +1,18 @@
# Copyright (c) OpenMMLab. All rights reserved.
#message(STATUS "CMAKE_VERSION: ${CMAKE_VERSION}")
if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.18.0")
# suppress 'CMAKE_CUDA_ARCHITECTURES' warning
cmake_policy(SET CMP0104 OLD)
endif ()
if (MSVC)
if (MSVC OR (NOT DEFINED CMAKE_CUDA_RUNTIME_LIBRARY))
# use shared, on windows, python api can't build with static lib.
set(CMAKE_CUDA_RUNTIME_LIBRARY Shared)
set(CUDA_USE_STATIC_CUDA_RUNTIME OFF)
endif ()
# nvcc compiler settings
find_package(CUDA REQUIRED)
#message(STATUS "CUDA VERSION: ${CUDA_VERSION_STRING}")
if (MSVC)
set(CMAKE_CUDA_COMPILER ${CUDA_TOOLKIT_ROOT_DIR}/bin/nvcc.exe)

View File

@ -0,0 +1,10 @@
set(_TARGETS_PATH ${CMAKE_INSTALL_PREFIX}/lib/cmake/MMDeploy/MMDeployTargets.cmake)
file(READ ${_TARGETS_PATH} _MMDEPLOY_TARGETS)
string(REGEX REPLACE "::@<0x[a-z0-9]+>" ""
_MMDEPLOY_TARGETS_FIXED "${_MMDEPLOY_TARGETS}")
file(WRITE ${_TARGETS_PATH} "${_MMDEPLOY_TARGETS_FIXED}")

View File

@ -1,5 +1,5 @@
# Copyright (c) OpenMMLab. All rights reserved.
include(${CMAKE_SOURCE_DIR}/cmake/cuda.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/modules/FindTENSORRT.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/modules/FindCUDNN.cmake)
find_path(

View File

@ -3,6 +3,9 @@
add_subdirectory(backend_ops)
if (MMDEPLOY_BUILD_SDK)
# include OpenCV for SDK modules since many of them depends on it
include(${CMAKE_SOURCE_DIR}/cmake/opencv.cmake)
add_subdirectory(core)
add_subdirectory(execution)
add_subdirectory(utils)

View File

@ -1,8 +1,6 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(capis)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
project(capis)
set(COMMON_LIST
common

View File

@ -23,7 +23,7 @@ To use the nuget package, you also need to download the backend dependencies. Fo
**Step 0.** Build sdk.
Before building the c# api, you need to build sdk first. Please follow this [tutorial](../../../docs/en/build/windows.md)/[教程](../../../docs/zh_cn/build/windows.md) to build sdk. Remember to set the MMDEPLOY_BUILD_CSHARP_EXTERN option to ON. We recommend setting `BUILD_SHARED_LIBS` to OFF and use the static third party libraries(spdlog, pplcv, opencv, etc.). If so, you only need add the backend dependencies to your system path, or you need to add all dependencies.
Before building the c# api, you need to build sdk first. Please follow this [tutorial](../../../docs/en/build/windows.md)/[教程](../../../docs/zh_cn/build/windows.md) to build sdk. Remember to set the MMDEPLOY_BUILD_SDK_CSHARP_API option to ON. We recommend setting `MMDEPLOY_SHARED_LIBS` to OFF and use the static third party libraries(pplcv, opencv, etc.). If so, you only need add the backend dependencies to your system path, or you need to add all dependencies.
If you follow the tutorial, the MMDeployExtern.dll will be built in `build\bin\release`. Make sure the expected dll is in that path or the next step will throw a file-not-exist error.
@ -42,4 +42,4 @@ dotnet build --configuration Release -p:Version=1.0.0
You can set the package-version through `Properties -> Package Version`. The default version is 1.0.0 if you don't set it.
If you meets some missing dependencies error, follow the vs instructions.
If you encounter missing dependencies, follow the instructions for MSVC.

View File

@ -1,19 +1,20 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_python)
if ("cuda" IN_LIST MMDEPLOY_TARGET_DEVICES)
include(${CMAKE_SOURCE_DIR}/cmake/cuda.cmake)
endif ()
set(MMDEPLOY_PYTHON_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/common.cpp)
if (NOT TARGET pybind11)
set(CMAKE_CXX_STANDARD 17)
if (${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME})
add_subdirectory(${CMAKE_SOURCE_DIR}/../../../third_party/pybind11
${CMAKE_CURRENT_BINARY_DIR}/pybind11)
find_package(MMDeploy REQUIRED)
elseif (NOT TARGET pybind11)
add_subdirectory(${CMAKE_SOURCE_DIR}/third_party/pybind11 pybind11)
endif ()
set(MMDEPLOY_PYTHON_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/common.cpp
${CMAKE_CURRENT_SOURCE_DIR}/executor.cpp)
macro(mmdeploy_python_add_module name)
if (TARGET mmdeploy_${name})
list(APPEND MMDEPLOY_PYTHON_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/${name}.cpp)
@ -36,5 +37,5 @@ mmdeploy_load_dynamic(${PROJECT_NAME} MMDeployDynamicModules)
target_link_libraries(${PROJECT_NAME} PRIVATE MMDeployLibs)
target_include_directories(${PROJECT_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/../..)
${CMAKE_CURRENT_SOURCE_DIR}/..
${CMAKE_CURRENT_SOURCE_DIR})

View File

@ -1,8 +1,6 @@
// Copyright (c) OpenMMLab. All rights reserved.
#include "apis/python/common.h"
#include "core/value.h"
#include "common.h"
namespace mmdeploy {
@ -34,6 +32,8 @@ mm_mat_t GetMat(const PyImage& img) {
return mat;
}
#if 0
py::object ConvertToPyObject(const Value& value) {
switch (value.type()) {
case ValueType::kNull:
@ -102,6 +102,8 @@ Value ConvertToValue(const py::object& obj) {
}
}
#endif
} // namespace mmdeploy
PYBIND11_MODULE(mmdeploy_python, m) {

View File

@ -5,7 +5,7 @@
#include <stdexcept>
#include "apis/c/common.h"
#include "c/common.h"
#include "pybind11/numpy.h"
#include "pybind11/pybind11.h"
#include "pybind11/stl.h"

View File

@ -1,6 +1,6 @@
// Copyright (c) OpenMMLab. All rights reserved.
#include "apis/python/common.h"
#include "common.h"
#include "core/utils/formatter.h"
#include "execution/execution.h"
#include "execution/schedulers/inlined_scheduler.h"
@ -47,16 +47,6 @@ using _python::PySender;
static void register_python_executor(py::module& m) {
py::class_<PySender, std::unique_ptr<PySender>>(m, "PySender")
.def("__await__", &PySender::__await__);
// m.def("test_async", [](const py::object& x) {
// static StaticThreadPool pool;
// TypeErasedScheduler<Value> scheduler{pool.GetScheduler()};
// auto sender = TransferJust(scheduler, ConvertToValue(x)) | Then([](Value x) {
// // std::this_thread::sleep_for(std::chrono::milliseconds(10));
// return Value(x.get<int>() * x.get<int>());
// });
// return std::make_unique<PySender>(std::move(sender));
// });
}
class PythonExecutorRegisterer {

View File

@ -3,9 +3,9 @@
#include "pose_detector.h"
#include <array>
#include <sstream>
#include "common.h"
#include "core/logger.h"
namespace mmdeploy {
@ -14,7 +14,6 @@ using Rect = std::array<float, 4>;
class PyPoseDedector {
public:
PyPoseDedector(const char *model_path, const char *device_name, int device_id) {
MMDEPLOY_INFO("{}, {}, {}", model_path, device_name, device_id);
auto status =
mmdeploy_pose_detector_create_by_path(model_path, device_name, device_id, &handle_);
if (status != MM_SUCCESS) {
@ -26,9 +25,9 @@ class PyPoseDedector {
return py::list{};
}
if (vboxes.size() != 0 && vboxes.size() != imgs.size()) {
std::string error =
fmt::format("imgs length not equal with vboxes [{} vs {}]", imgs.size(), vboxes.size());
throw std::invalid_argument(error);
std::ostringstream os;
os << "imgs length not equal with vboxes [" << imgs.size() << " vs " << vboxes.size() << "]";
throw std::invalid_argument(os.str());
}
std::vector<mm_mat_t> mats;
@ -51,7 +50,7 @@ class PyPoseDedector {
// full image
if (vboxes.size() == 0) {
for (int i = 0; i < mats.size(); i++) {
mm_rect_t box = {0.f, 0.f, mats[i].width - 1, mats[i].height - 1};
mm_rect_t box = {0.f, 0.f, mats[i].width - 1.f, mats[i].height - 1.f};
boxes.push_back(box);
bbox_count.push_back(1);
}

View File

@ -3,14 +3,12 @@
#include "rotated_detector.h"
#include "common.h"
#include "core/logger.h"
namespace mmdeploy {
class PyRotatedDetector {
public:
PyRotatedDetector(const char *model_path, const char *device_name, int device_id) {
MMDEPLOY_INFO("{}, {}, {}", model_path, device_name, device_id);
auto status =
mmdeploy_rotated_detector_create_by_path(model_path, device_name, device_id, &handle_);
if (status != MM_SUCCESS) {

View File

@ -1,12 +1,15 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_archive)
add_library(${PROJECT_NAME} INTERFACE)
target_link_libraries(${PROJECT_NAME} INTERFACE mmdeploy::core)
add_library(mmdeploy::archive ALIAS mmdeploy_archive)
install(DIRECTORY ${CMAKE_SOURCE_DIR}/csrc/archive
DESTINATION include/cpp
FILES_MATCHING PATTERN "*.h")
install(FILES ${CMAKE_SOURCE_DIR}/third_party/json/json.hpp DESTINATION include/cpp/archive)
if (MMDEPLOY_BUILD_SDK_CXX_API)
install(DIRECTORY ${CMAKE_SOURCE_DIR}/csrc/archive
DESTINATION include/cpp
FILES_MATCHING PATTERN "*.h")
install(FILES ${CMAKE_SOURCE_DIR}/third_party/json/json.hpp
DESTINATION include/cpp/archive)
endif ()

View File

@ -1,5 +1,4 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
# ncnn
find_package(ncnn)

View File

@ -1,5 +1,5 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(onnx2ncnn)
find_package(Protobuf)

View File

@ -1,8 +1,6 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_ncnn_ops)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
project(mmdeploy_ncnn_ops)
# add plugin source
file(GLOB_RECURSE NCNN_OPS_SRCS *.cpp)

View File

@ -1,5 +1,5 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(ncnn_ext)
# pybind11

View File

@ -1,8 +1,7 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_onnxruntime_ops)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/modules/FindONNXRUNTIME.cmake)
# add plugin source

View File

@ -1,10 +1,7 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
include(${CMAKE_SOURCE_DIR}/cmake/cuda.cmake NO_POLICY_SCOPE)
project(mmdeploy_tensorrt_ops CUDA CXX)
project(mmdeploy_tensorrt_ops)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/tensorrt.cmake NO_POLICY_SCOPE)
include(${CMAKE_SOURCE_DIR}/cmake/tensorrt.cmake)
# cub
if (NOT DEFINED CUB_ROOT_DIR)

View File

@ -1,5 +1,4 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
add_subdirectory(ops)
add_subdirectory(optimizer)

View File

@ -1,16 +1,13 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
if("cuda" IN_LIST MMDEPLOY_TARGET_DEVICES)
project(mmdeploy_torchscript_ops CUDA CXX)
include(${CMAKE_SOURCE_DIR}/cmake/cuda.cmake NO_POLICY_SCOPE)
file(GLOB_RECURSE BACKEND_OPS_SRCS *.cpp *.cu)
else()
project(mmdeploy_torchscript_ops CXX)
file(GLOB_RECURSE BACKEND_OPS_SRCS *.cpp)
endif()
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
find_package(Torch REQUIRED)

View File

@ -1,5 +1,5 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(ts_optimizer)
find_package(Torch REQUIRED)

View File

@ -1,5 +1,5 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_codebase)
set(CODEBASES "")

View File

@ -1,8 +1,6 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_mmcls)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
project(mmdeploy_mmcls)
file(GLOB_RECURSE SRCS ${CMAKE_CURRENT_SOURCE_DIR} "*.cpp")
mmdeploy_add_module(${PROJECT_NAME} "${SRCS}")

View File

@ -1,9 +1,6 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_mmdet)
include(${CMAKE_SOURCE_DIR}/cmake/opencv.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
project(mmdeploy_mmdet)
file(GLOB_RECURSE SRCS ${CMAKE_CURRENT_SOURCE_DIR} "*.cpp")
mmdeploy_add_module(${PROJECT_NAME} "${SRCS}")

View File

@ -1,9 +1,6 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_mmedit)
include(${CMAKE_SOURCE_DIR}/cmake/opencv.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
project(mmdeploy_mmedit)
file(GLOB_RECURSE SRCS ${CMAKE_CURRENT_SOURCE_DIR} "*.cpp")
mmdeploy_add_module(${PROJECT_NAME} "${SRCS}")

View File

@ -1,9 +1,6 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_mmocr)
include(${CMAKE_SOURCE_DIR}/cmake/opencv.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
project(mmdeploy_mmocr)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} OCR_SRCS)
aux_source_directory(${CMAKE_SOURCE_DIR}/third_party/clipper CLIPPER_SRCS)

View File

@ -1,10 +1,8 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_mmocr_cpu_impl CXX)
if ("cpu" IN_LIST MMDEPLOY_TARGET_DEVICES)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
add_library(${PROJECT_NAME} OBJECT dbnet.cpp panet.cpp psenet.cpp)
set_target_properties(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE 1)
target_link_libraries(${PROJECT_NAME} PRIVATE

View File

@ -1,12 +1,8 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_mmocr_cuda_impl)
if ("cuda" IN_LIST MMDEPLOY_TARGET_DEVICES)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/cuda.cmake NO_POLICY_SCOPE)
enable_language(CUDA)
add_library(${PROJECT_NAME} OBJECT
connected_component.cu
utils.cu
@ -19,7 +15,8 @@ if ("cuda" IN_LIST MMDEPLOY_TARGET_DEVICES)
target_link_libraries(${PROJECT_NAME} PRIVATE
mmdeploy_opencv_utils
mmdeploy::core
${CUDA_LIBRARIES})
${CUDA_LIBRARIES}
cuda)
target_link_libraries(mmdeploy_mmocr PRIVATE
${PROJECT_NAME})
mmdeploy_export(${PROJECT_NAME})

View File

@ -1,9 +1,7 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_mmpose)
include(${CMAKE_SOURCE_DIR}/cmake/opencv.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
file(GLOB_RECURSE SRCS ${CMAKE_CURRENT_SOURCE_DIR} "*.cpp")
mmdeploy_add_module(${PROJECT_NAME} "${SRCS}")

View File

@ -1,9 +1,6 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_mmrotate)
include(${CMAKE_SOURCE_DIR}/cmake/opencv.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
project(mmdeploy_mmrotate)
file(GLOB_RECURSE SRCS ${CMAKE_CURRENT_SOURCE_DIR} "*.cpp")
mmdeploy_add_module(${PROJECT_NAME} "${SRCS}")

View File

@ -1,9 +1,6 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_mmseg)
include(${CMAKE_SOURCE_DIR}/cmake/opencv.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
project(mmdeploy_mmseg)
file(GLOB_RECURSE SRCS ${CMAKE_CURRENT_SOURCE_DIR} "*.cpp")
mmdeploy_add_module(${PROJECT_NAME} "${SRCS}")

View File

@ -1,24 +1,25 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_core)
#[==[
Refer to: https://cmake.org/cmake/help/latest/command/file.html
Note We do not recommend using GLOB to collect a list of source files from your source tree.
If no CMakeLists.txt file changes when a source is added or removed then the generated build
system cannot know when to ask CMake to regenerate. The CONFIGURE_DEPENDS flag may not work
reliably on all generators, or if a new generator is added in the future that cannot support it,
projects using it will be stuck. Even if CONFIGURE_DEPENDS works reliably, there is still a cost
to perform the check on every rebuild.
#]==]
# this is used to keep compatibility with legacy spdlog where CMake package is not available
set(SPDLOG_LIB)
find_package(spdlog QUIET)
if (spdlog_FOUND)
message(STATUS "spdlog is found")
set(SPDLOG_LIB spdlog::spdlog)
endif ()
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
if (MMDEPLOY_SPDLOG_EXTERNAL)
find_package(spdlog QUIET)
if (spdlog_FOUND)
set(SPDLOG_LIB spdlog::spdlog)
endif ()
else ()
set(MMDEPLOY_SPDLOG_DIR ${CMAKE_SOURCE_DIR}/third_party/spdlog)
add_subdirectory(${MMDEPLOY_SPDLOG_DIR} ${CMAKE_CURRENT_BINARY_DIR}/spdlog EXCLUDE_FROM_ALL)
set_target_properties(spdlog PROPERTIES POSITION_INDEPENDENT_CODE ON)
set(SPDLOG_LIB spdlog::spdlog)
mmdeploy_export(spdlog)
if (MMDEPLOY_BUILD_SDK_CXX_API)
install(DIRECTORY ${MMDEPLOY_SPDLOG_DIR}/include/spdlog DESTINATION include/cpp)
endif ()
endif ()
set(SRCS
device_impl.cpp
@ -46,20 +47,27 @@ target_include_directories(${PROJECT_NAME}
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/third_party/outcome>
# TODO: remove dependency of `json`
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/third_party/json>
$<INSTALL_INTERFACE:include/cpp>
)
if (MMDEPLOY_BUILD_SDK_CXX_API)
target_include_directories(${PROJECT_NAME} PUBLIC
$<INSTALL_INTERFACE:include/cpp>)
endif ()
target_link_libraries(${PROJECT_NAME} PUBLIC ${SPDLOG_LIB})
if (NOT (MSVC OR ANDROID))
target_link_libraries(${PROJECT_NAME} PUBLIC stdc++fs)
endif ()
add_library(mmdeploy::core ALIAS ${PROJECT_NAME})
install(DIRECTORY ${CMAKE_SOURCE_DIR}/csrc/core
DESTINATION include/cpp
FILES_MATCHING PATTERN "*.h")
install(FILES ${CMAKE_SOURCE_DIR}/third_party/outcome/outcome-experimental.hpp
DESTINATION include/cpp/core)
if (MMDEPLOY_BUILD_SDK_CXX_API)
install(DIRECTORY ${CMAKE_SOURCE_DIR}/csrc/core
DESTINATION include/cpp
FILES_MATCHING PATTERN "*.h")
install(FILES ${CMAKE_SOURCE_DIR}/third_party/outcome/outcome-experimental.hpp
DESTINATION include/cpp/core)
install(DIRECTORY ${CMAKE_SOURCE_DIR}/csrc/experimental
DESTINATION include/cpp
FILES_MATCHING PATTERN "*.h")
install(DIRECTORY ${CMAKE_SOURCE_DIR}/csrc/experimental
DESTINATION include/cpp
FILES_MATCHING PATTERN "*.h")
endif ()

View File

@ -2,11 +2,13 @@
#include "tensor.h"
#include <algorithm>
#include <numeric>
#include <sstream>
#include "core/utils/formatter.h"
#include "logger.h"
using std::stringstream;
namespace mmdeploy {

View File

@ -3,9 +3,12 @@
#ifndef MMDEPLOY_SRC_UTILS_FORMATTER_H_
#define MMDEPLOY_SRC_UTILS_FORMATTER_H_
#include <ostream>
#include <utility>
#include "core/logger.h"
#include "core/types.h"
#include "spdlog/fmt/ostr.h"
#if FMT_VERSION >= 50000
#include "spdlog/fmt/bundled/ostream.h"
@ -20,12 +23,55 @@ class Value;
MMDEPLOY_API std::string format_value(const Value& value);
inline std::string to_string(PixelFormat format) {
switch (format) {
case PixelFormat::kBGR:
return "BGR";
case PixelFormat::kRGB:
return "RGB";
case PixelFormat::kGRAYSCALE:
return "GRAYSCALE";
case PixelFormat::kNV12:
return "NV12";
case PixelFormat::kNV21:
return "NV21";
case PixelFormat::kBGRA:
return "BGRA";
default:
return "invalid_format_enum";
}
}
inline std::string to_string(DataType type) {
switch (type) {
case DataType::kFLOAT:
return "FLOAT";
case DataType::kHALF:
return "HALF";
case DataType::kINT8:
return "INT8";
case DataType::kINT32:
return "INT32";
case DataType::kINT64:
return "INT64";
default:
return "invalid_data_type_enum";
}
}
inline std::ostream& operator<<(std::ostream& os, PixelFormat format) {
return os << to_string(format);
}
inline std::ostream& operator<<(std::ostream& os, DataType type) { return os << to_string(type); }
} // namespace mmdeploy
namespace fmt {
#if FMT_VERSION >= 50000
// `Value` maybe an incomplete type at this point, making `operator<<` not usable
template <>
struct formatter<mmdeploy::Value> {
constexpr auto parse(format_parse_context& ctx) { return ctx.begin(); }
@ -37,21 +83,16 @@ struct formatter<mmdeploy::Value> {
#else
inline void format_arg(BasicFormatter<char> &f, const char *, const mmdeploy::Value &d) {
inline void format_arg(BasicFormatter<char>& f, const char*, const mmdeploy::Value& d) {
f.writer() << mmdeploy::format_value(d);
}
template <typename T, std::enable_if_t<std::is_enum<std::decay_t<T> >::value, bool> = true>
void format_arg(BasicFormatter<char> &f, const char *, const T &v) {
f.writer() << (int)v;
}
template <typename T>
auto format_arg(BasicFormatter<char> &f, const char *, const T &v)
auto format_arg(BasicFormatter<char>& f, const char*, const T& v)
-> std::void_t<decltype(begin(v), end(v))> {
f.writer() << "[";
bool first = true;
for (const auto &x : v) {
for (const auto& x : v) {
f.writer() << (first ? "" : ", ") << fmt::format("{}", x);
first = false;
}
@ -59,7 +100,7 @@ auto format_arg(BasicFormatter<char> &f, const char *, const T &v)
}
template <class Tuple, size_t... Is>
void format_tuple_impl(BasicFormatter<char> &f, const Tuple &t, std::index_sequence<Is...>) {
void format_tuple_impl(BasicFormatter<char>& f, const Tuple& t, std::index_sequence<Is...>) {
constexpr int last = sizeof...(Is) - 1;
f.writer() << "(";
((f.writer() << fmt::format("{}", std::get<Is>(t)) << (Is != last ? ", " : "")), ...);
@ -67,7 +108,7 @@ void format_tuple_impl(BasicFormatter<char> &f, const Tuple &t, std::index_seque
}
template <typename... Ts>
void format_arg(BasicFormatter<char> &f, const char *, const std::tuple<Ts...> &t) {
void format_arg(BasicFormatter<char>& f, const char*, const std::tuple<Ts...>& t) {
format_tuple_impl(f, t, std::index_sequence_for<Ts...>{});
}

View File

@ -1,5 +1,4 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
add_subdirectory(cpu)

View File

@ -1,8 +1,6 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_cpu_device)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
project(mmdeploy_cpu_device)
file(GLOB_RECURSE SRCS "*.cpp")

View File

@ -1,15 +1,11 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
include(${CMAKE_SOURCE_DIR}/cmake/cuda.cmake NO_POLICY_SCOPE)
project(mmdeploy_cuda_device CUDA CXX)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
project(mmdeploy_cuda_device)
set(SRCS
cuda_device.cpp
cuda_builtin_kernels.cu)
mmdeploy_add_module(${PROJECT_NAME} "${SRCS}")
target_include_directories(${PROJECT_NAME} PRIVATE ${CUDA_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PRIVATE cudart cuda)
target_link_libraries(${PROJECT_NAME} PRIVATE ${CUDA_LIBRARIES} cuda)
add_library(mmdeploy::device::cuda ALIAS ${PROJECT_NAME})

View File

@ -1,9 +1,7 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_execution)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
set(SRCS schedulers/schedulers.cpp)
mmdeploy_add_module(${PROJECT_NAME} LIBRARY "${SRCS}")
add_library(mmdeploy::execution ALIAS ${PROJECT_NAME})

View File

@ -1,8 +1,7 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_graph)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
set(SRCS
common.cpp
task.cpp

View File

@ -1,8 +1,6 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(model)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
project(model)
set(MODEL_NAMES "directory_model")
if (${MMDEPLOY_ZIP_MODEL})

View File

@ -1,8 +1,6 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_net_module)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
project(mmdeploy_net_module)
if ("trt" IN_LIST MMDEPLOY_TARGET_BACKENDS)
add_subdirectory(trt)

View File

@ -1,9 +1,8 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_ncnn_net)
if ("cpu" IN_LIST MMDEPLOY_TARGET_DEVICES)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
find_package(ncnn REQUIRED)

View File

@ -1,9 +1,8 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_openvino_net)
if ("cpu" IN_LIST MMDEPLOY_TARGET_DEVICES)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
find_package(InferenceEngine REQUIRED)
mmdeploy_add_module(${PROJECT_NAME} openvino_net.cpp)

View File

@ -1,11 +1,10 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_ort_net)
include(${CMAKE_SOURCE_DIR}/cmake/modules/FindONNXRUNTIME.cmake)
if ("cpu" IN_LIST MMDEPLOY_TARGET_DEVICES)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
mmdeploy_add_module(${PROJECT_NAME} ort_net.cpp)
target_include_directories(${PROJECT_NAME} PRIVATE ${ONNXRUNTIME_DIR}/include)
target_link_libraries(${PROJECT_NAME} PRIVATE mmdeploy_onnxruntime_ops_obj)

View File

@ -1,8 +1,7 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_pplnn_net)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
find_package(pplnn REQUIRED)
mmdeploy_add_module(${PROJECT_NAME} ppl_net.cpp)

View File

@ -1,9 +1,7 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
include(${CMAKE_SOURCE_DIR}/cmake/cuda.cmake NO_POLICY_SCOPE)
project(mmdeploy_trt_net)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/tensorrt.cmake)
mmdeploy_add_module(${PROJECT_NAME} trt_net.cpp)

View File

@ -1,5 +1,5 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_transform_module)
add_subdirectory(transform)
@ -8,7 +8,6 @@ if ("cuda" IN_LIST MMDEPLOY_TARGET_DEVICES)
add_subdirectory(cuda)
endif ()
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
mmdeploy_add_module(${PROJECT_NAME} transform_module.cpp)
target_link_libraries(${PROJECT_NAME} PRIVATE mmdeploy::transform)
add_library(mmdeploy::transform_module ALIAS ${PROJECT_NAME})

View File

@ -1,9 +1,6 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_cpu_transform_impl)
include(${CMAKE_SOURCE_DIR}/cmake/opencv.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
project(mmdeploy_cpu_transform_impl)
set(SRCS
collect_impl.cpp

View File

@ -1,12 +1,9 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
include(${CMAKE_SOURCE_DIR}/cmake/cuda.cmake NO_POLICY_SCOPE)
project(mmdeploy_cuda_transform_impl CUDA CXX)
find_package(pplcv REQUIRED)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
set(SRCS
crop_impl.cpp
image2tensor_impl.cpp

View File

@ -1,8 +1,6 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_transform)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
project(mmdeploy_transform)
set(SRCS
collect.cpp

View File

@ -1,9 +1,6 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(mmdeploy_opencv_utils)
include(${CMAKE_SOURCE_DIR}/cmake/opencv.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
project(mmdeploy_opencv_utils)
mmdeploy_add_library(${PROJECT_NAME} opencv_utils.cpp)
@ -13,5 +10,3 @@ target_link_libraries(${PROJECT_NAME}
target_include_directories(${PROJECT_NAME}
INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
#export_module(${PROJECT_NAME})

View File

@ -6,7 +6,7 @@ You should build csharp api first, it will generate a nuget package, or you can
**step 1.** Add runtime dll to the system path
If you built csharp api from source and didn't build static lib, you should add the built dll to your system path. The same is to opencv, spdlog, etc.
If you built csharp api from source and didn't build static lib, you should add the built dll to your system path. The same is to opencv, etc.
And don't forget to install backend dependencies. Take tensorrt backend as example, you have to install cudatoolkit, cudnn and tensorrt. The version of backend dependencies that our prebuit nuget package used will be offered in release note.

View File

@ -61,20 +61,6 @@ You can skip this chapter if only interested in model converter.
</tr>
</thead>
<tbody>
<tr>
<td>spdlog </td>
<td>
<pre><code>
git clone -b v1.9.2 https://github.com/gabime/spdlog.git
cd spdlog
export SPDLOG_DIR=${PWD}
mkdir -p build
cd build
cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_INSTALL_PREFIX=${SPDLOG_DIR} -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-30 ..
make install
</code></pre>
</td>
</tr>
<tr>
<td>OpenCV<br>(>=3.0) </td>
<td>
@ -159,7 +145,7 @@ make install
<td>Enable codebase's postprocess modules. It MUST be set by a semicolon separated list of codebase names. The currently supported codebases are 'mmcls', 'mmdet', 'mmedit', 'mmseg', 'mmocr'. Instead of listing them one by one, you can also pass <code>all</code> to enable them all, i.e., <code>-DMMDEPLOY_CODEBASES=all</code></td>
</tr>
<tr>
<td>BUILD_SHARED_LIBS</td>
<td>MMDEPLOY_SHARED_LIBS</td>
<td>{ON, OFF}</td>
<td>ON</td>
<td>Switch to build shared library or static library of MMDeploy SDK. Now you should build static library for android. Bug will be fixed soon.</td>
@ -177,11 +163,10 @@ MMDeploy provides a recipe as shown below for building SDK with ncnn as inferenc
cmake .. \
-DMMDEPLOY_BUILD_SDK=ON \
-DOpenCV_DIR=${OPENCV_ANDROID_SDK_DIR}/sdk/native/jni/abi-arm64-v8a \
-Dspdlog_DIR=${SPDLOG_DIR}/lib/cmake/spdlog \
-Dncnn_DIR=${NCNN_DIR}/build/install/lib/cmake/ncnn \
-DMMDEPLOY_TARGET_BACKENDS=ncnn \
-DMMDEPLOY_CODEBASES=all \
-DBUILD_SHARED_LIBS=OFF \
-DMMDEPLOY_SHARED_LIBS=OFF \
-DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a \
-DANDROID_PLATFORM=android-30 \
@ -197,7 +182,6 @@ cd ${MMDEPLOY_DIR}/build/install/example
mkdir -p build && cd build
cmake .. \
-DOpenCV_DIR=${OPENCV_ANDROID_SDK_DIR}/sdk/native/jni/abi-arm64-v8a \
-Dspdlog_DIR=${SPDLOG_DIR}/lib/cmake/spdlog \
-Dncnn_DIR=${NCNN_DIR}/build/install/lib/cmake/ncnn \
-DMMDeploy_DIR=${MMDEPLOY_DIR}/build/install/lib/cmake/MMDeploy \
-DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \

View File

@ -101,21 +101,6 @@ You can skip this chapter if you are only interested in the model converter.
</tr>
</thead>
<tbody>
<tr>
<td>spdlog </td>
<td>
On Ubuntu >=18.04,
<pre><code>
sudo apt-get install libspdlog-dev
</code></pre>
On Ubuntu 16.04,
<pre><code>
wget http://archive.ubuntu.com/ubuntu/pool/universe/s/spdlog/libspdlog-dev_0.16.3-1_amd64.deb
sudo dpkg -i libspdlog-dev_0.16.3-1_amd64.deb
</code></pre>
You can also build spdlog from its source to enjoy its latest features. But be sure to open cmake option <code>-DCMAKE_POSITION_INDEPENDENT_CODE=ON</code>.
</td>
</tr>
<tr>
<td>OpenCV<br>(>=3.0) </td>
<td>
@ -346,7 +331,7 @@ Currently, <b>The Model Converter supports torchscript, but SDK doesn't</b>.
<td>Enable codebase's postprocess modules. You can provide a semicolon separated list of codebase names to enable them, e.g., <code>-DMMDEPLOY_CODEBASES="mmcls;mmdet"</code>. Or you can pass <code>all</code> to enable them all, i.e., <code>-DMMDEPLOY_CODEBASES=all</code></td>
</tr>
<tr>
<td>BUILD_SHARED_LIBS</td>
<td>MMDEPLOY_SHARED_LIBS</td>
<td>{ON, OFF}</td>
<td>ON</td>
<td>Switch to build shared library or static library of MMDeploy SDK</td>

View File

@ -79,22 +79,6 @@ You can skip this chapter if you are only interested in the model converter.
</tr>
</thead>
<tbody>
<tr>
<td>spdlog </td>
<td>
spdlog is a very fast, header-only/compiled, C++ logging library. You can install it like this,
<pre><code>
Invoke-WebRequest -Uri https://github.com/gabime/spdlog/archive/refs/tags/v1.9.2.zip -OutFile spdlog-1.9.2.zip
Expand-Archive spdlog-1.9.2.zip .
cd spdlog-1.9.2
mkdir build
cd build
cmake .. -G "Visual Studio 16 2019" -A x64 -T v142 -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release
cmake --build . --target install --config Release -- /m
cd ../..
</code></pre>
</td>
</tr>
<tr>
<td>OpenCV<br>(>=3.0) </td>
<td>
@ -274,7 +258,7 @@ $env:MMDEPLOY_DIR="$pwd"
<td>Enable codebase's postprocess modules. You can provide a semicolon separated list of codebase names to enable them. Or you can pass <code>all</code> to enable them all, i.e., <code>-DMMDEPLOY_CODEBASES=all</code></td>
</tr>
<tr>
<td>BUILD_SHARED_LIBS</td>
<td>MMDEPLOY_SHARED_LIBS</td>
<td>{ON, OFF}</td>
<td>ON</td>
<td>Switch to build shared library or static library of MMDeploy SDK</td>

View File

@ -154,7 +154,6 @@ make -j$(nproc)
cmake -DMMDEPLOY_BUILD_SDK=ON \
-DCMAKE_CXX_COMPILER=g++-7 \
-DOpenCV_DIR=/path/to/OpenCV/lib/cmake/OpenCV \
-Dspdlog_DIR=/path/to/spdlog/lib/cmake/spdlog \
-DONNXRUNTIME_DIR=${ONNXRUNTIME_DIR} \
-DMMDEPLOY_TARGET_BACKENDS=ort \
-DMMDEPLOY_CODEBASES=mmdet ..

View File

@ -61,20 +61,6 @@ MMDeploy 的交叉编译分为两步:
</tr>
</thead>
<tbody>
<tr>
<td>spdlog </td>
<td>
<pre><code>
git clone -b v1.9.2 https://github.com/gabime/spdlog.git
cd spdlog
export SPDLOG_DIR=${PWD}
mkdir -p build
cd build
cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_INSTALL_PREFIX=${SPDLOG_DIR} -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-30 ..
make install
</code></pre>
</td>
</tr>
<tr>
<td>OpenCV<br>(>=3.0) </td>
<td>
@ -153,7 +139,7 @@ make install
<td>用来设置 SDK 后处理组件,加载 OpenMMLab 算法仓库的后处理功能. 已支持的算法仓库有'mmcls','mmdet','mmedit','mmseg'和'mmocr'. 如果选择多个codebase,中间使用分号隔开. 比如, 'mmcls', 'mmdet', 'mmedit', 'mmseg', 'mmocr'. 也可以通过 <code>all</code> 的方式, 加载所有codebase, 即 <code>-DMMDEPLOY_CODEBASES=all.</code></td>
</tr>
<tr>
<td>BUILD_SHARED_LIBS</td>
<td>MMDEPLOY_SHARED_LIBS</td>
<td>{ON, OFF}</td>
<td>ON</td>
<td>MMDeploy SDK 的动态库的编译开关.设置 OFF 时, 编译静态库. 目前 android 端 SDK 仅支持静态库加载, 后续会进行对动态库加载的支持.</td>
@ -172,11 +158,10 @@ make install
cmake .. \
-DMMDEPLOY_BUILD_SDK=ON \
-DOpenCV_DIR=${OPENCV_ANDROID_SDK_DIR}/sdk/native/jni/abi-arm64-v8a \
-Dspdlog_DIR=${SPDLOG_DIR}/lib/cmake/spdlog \
-Dncnn_DIR=${NCNN_DIR}/build/install/lib/cmake/ncnn \
-DMMDEPLOY_TARGET_BACKENDS=ncnn \
-DMMDEPLOY_CODEBASES=all \
-DBUILD_SHARED_LIBS=OFF \
-DMMDEPLOY_SHARED_LIBS=OFF \
-DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a \
-DANDROID_PLATFORM=android-30 \
@ -192,7 +177,6 @@ cd ${MMDEPLOY_DIR}/build/install/example
mkdir -p build && cd build
cmake .. \
-DOpenCV_DIR=${OPENCV_ANDROID_SDK_DIR}/sdk/native/jni/abi-arm64-v8a \
-Dspdlog_DIR=${SPDLOG_DIR}/lib/cmake/spdlog \
-Dncnn_DIR=${NCNN_DIR}/build/install/lib/cmake/ncnn \
-DMMDeploy_DIR=${MMDEPLOY_DIR}/build/install/lib/cmake/MMDeploy \
-DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \

View File

@ -93,21 +93,6 @@ pip install mmcv-full==1.4.0 -f https://download.openmmlab.com/mmcv/dist/${cu_ve
</tr>
</thead>
<tbody>
<tr>
<td>spdlog </td>
<td>
在 Ubuntu 18.04 及以上版本
<pre><code>
sudo apt-get install libspdlog-dev
</code></pre>
在 Ubuntu 16.04,
<pre><code>
wget http://archive.ubuntu.com/ubuntu/pool/universe/s/spdlog/libspdlog-dev_0.16.3-1_amd64.deb
sudo dpkg -i libspdlog-dev_0.16.3-1_amd64.deb
</code></pre>
您也可以使用spdlog的源码进行编译激活它更多的特性。但是请务必打开 <code>-DCMAKE_POSITION_INDEPENDENT_CODE=ON</code>.
</td>
</tr>
<tr>
<td>OpenCV<br>(>=3.0) </td>
<td>
@ -331,7 +316,7 @@ export MMDEPLOY_DIR=$(pwd)
<td>用来设置 SDK 后处理组件,加载 OpenMMLab 算法仓库的后处理功能。如果选择多个 codebase中间使用分号隔开。比如<code>-DMMDEPLOY_CODEBASES="mmcls;mmdet"</code>。也可以通过 <code>-DMMDEPLOY_CODEBASES=all</code> 方式,加载所有 codebase。</td>
</tr>
<tr>
<td>BUILD_SHARED_LIBS</td>
<td>MMDEPLOY_SHARED_LIBS</td>
<td>{ON, OFF}</td>
<td>ON</td>
<td>MMDeploy SDK 的动态库的编译开关。设置 OFF 时,编译静态库</td>

View File

@ -76,21 +76,6 @@ pip install mmcv-full==1.4.0 -f https://download.openmmlab.com/mmcv/dist/$env:cu
</tr>
</thead>
<tbody>
<tr>
<td>spdlog </td>
<td>spdlog是一个精巧的日志管理库。请参考如下命令安装 <br>
<pre><code>
Invoke-WebRequest -Uri https://github.com/gabime/spdlog/archive/refs/tags/v1.9.2.zip -OutFile spdlog-1.9.2.zip
Expand-Archive spdlog-1.9.2.zip .
cd spdlog-1.9.2
mkdir build
cd build
cmake .. -G "Visual Studio 16 2019" -A x64 -T v142 -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release
cmake --build . --target install --config Release -- /m
cd ../..
</code></pre>
</td>
</tr>
<tr>
<td>OpenCV </td>
<td>
@ -261,7 +246,7 @@ $env:MMDEPLOY_DIR="$pwd"
<td>用来设置SDK后处理组件加载 OpenMMLab 算法仓库的后处理功能。如果选择多个 codebase中间使用分号隔开。比如<code>-DMMDEPLOY_CODEBASES="mmcls;mmdet"</code>。也可以通过 <code>-DMMDEPLOY_CODEBASES=all</code> 方式,加载所有 codebase。</td>
</tr>
<tr>
<td>BUILD_SHARED_LIBS</td>
<td>MMDEPLOY_SHARED_LIBS</td>
<td>{ON, OFF}</td>
<td>ON</td>
<td>动态库的编译开关。设置OFF时编译静态库</td>

View File

@ -157,7 +157,6 @@ make -j$(nproc)
cmake -DMMDEPLOY_BUILD_SDK=ON \
-DCMAKE_CXX_COMPILER=g++-7 \
-DOpenCV_DIR=/path/to/OpenCV/lib/cmake/OpenCV \
-Dspdlog_DIR=/path/to/spdlog/lib/cmake/spdlog \
-DONNXRUNTIME_DIR=${ONNXRUNTIME_DIR} \
-DMMDEPLOY_TARGET_BACKENDS=ort \
-DMMDEPLOY_CODEBASES=mmdet ..

View File

@ -1,13 +1,7 @@
# Copyright (c) OpenMMLab. All rights reserved.
cmake_minimum_required(VERSION 3.14)
project(tests)
if ("cuda" IN_LIST MMDEPLOY_TARGET_DEVICES)
include(${CMAKE_SOURCE_DIR}/cmake/cuda.cmake)
endif()
include(${CMAKE_SOURCE_DIR}/cmake/opencv.cmake)
set(TC_SRCS test_main.cpp)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/archive ARCHIVE_TC)

1
third_party/spdlog vendored 160000

@ -0,0 +1 @@
Subproject commit 9e8e52c0488706986c76eeb4225286ac02fb1ee9