lzhangzz 640aa03538
Support Windows (#106)
* minor changes

* support windows

* fix GCC build

* fix lint

* reformat

* fix Windows build

* fix GCC build

* search backend ops for onnxruntime

* fix lint

* fix lint

* code clean-up

* code clean-up

* fix clang build

* fix trt support

* fix cmake for ncnn

* fix cmake for openvino

* fix SDK Python API

* handle ops for other backends (ncnn, trt)

* handle SDK Python API library location

* robustify linkage

* fix cuda

* minor fix for openvino & ncnn

* use CMAKE_CUDA_ARCHITECTURES if set

* fix cuda preprocessor

* fix misc

* fix pplnn & pplcv, drop support for pplcv<0.6.0

* robustify cmake

* update build.md (#2)

* build dynamic modules as module library & fix demo (partially)

* fix candidate path for mmdeploy_python

* move "enable CUDA" to cmake config for demo

* refine demo cmake

* add comment

* fix ubuntu build

* revert docs/en/build.md

* fix C API

* fix lint

* Windows build doc (#3)

* check in docs related to mmdeploy build on windows

* update build guide on windows platform

* update build guide on windows platform

* make path of thirdparty libraries consistent

* make path consistency

* correct build command for custom ops

* correct build command for sdk

* update sdk build instructions

* update doc

* correct build command

* fix lint

* correct build command and fix lint

Co-authored-by: lvhan <lvhan@pjlab.org>

* trailing whitespace (#4)

* minor fix

* fix sr sdk model

* fix type deduction

* fix cudaFree after driver shutting down

* update ppl.cv installation warning (#5)

* fix device allocator threshold & fix lint

* update doc (#6)

* update ppl.cv installation warning

* missing 'git clone'

Co-authored-by: chenxin <chenxin2@sensetime.com>
Co-authored-by: zhangli <zhangli@sensetime.com>
Co-authored-by: lvhan028 <lvhan_028@163.com>
Co-authored-by: lvhan <lvhan@pjlab.org>
2022-02-24 20:08:44 +08:00

79 lines
2.9 KiB
C++

// Copyright (c) OpenMMLab. All rights reserved.
#ifndef MMDEPLOY_SRC_CODEBASE_COMMON_H_
#define MMDEPLOY_SRC_CODEBASE_COMMON_H_
#include "core/device.h"
#include "core/module.h"
#include "core/registry.h"
#include "core/utils/formatter.h"
#include "experimental/module_adapter.h"
namespace mmdeploy {
class Context {
public:
explicit Context(const Value& config) {
MMDEPLOY_DEBUG("config: {}", config);
device_ = config["context"]["device"].get<Device>();
stream_ = config["context"]["stream"].get<Stream>();
}
Device& device() { return device_; }
Stream& stream() { return stream_; }
protected:
Device device_;
Stream stream_;
};
template <class Tag>
class CodebaseCreator : public Creator<Module> {
public:
const char* GetName() const override { return Tag::name; }
int GetVersion() const override { return 1; }
std::unique_ptr<Module> Create(const Value& cfg) override {
constexpr auto key{"component"};
if (!cfg.contains(key)) {
MMDEPLOY_ERROR("no key '{}' in config {}", key, cfg);
throw_exception(eInvalidArgument);
}
if (!cfg[key].is_string()) {
MMDEPLOY_ERROR("key '{}' is not a string", key);
throw_exception(eInvalidArgument);
}
auto postprocess_type = cfg[key].get<std::string>();
auto creator = Registry<Tag>::Get().GetCreator(postprocess_type);
if (creator == nullptr) {
MMDEPLOY_ERROR("could not found entry '{}' in {}", postprocess_type, Tag::name);
throw_exception(eEntryNotFound);
}
return creator->Create(cfg);
}
};
#define DECLARE_CODEBASE(codebase_type, codebase_name) \
class codebase_type : public Context { \
public: \
static constexpr const auto name = #codebase_name; \
using type = std::unique_ptr<Module>; \
explicit codebase_type(const Value& config) : Context(config) {} \
};
#define REGISTER_CODEBASE(codebase) \
using codebase##_##Creator = CodebaseCreator<codebase>; \
REGISTER_MODULE(Module, codebase##_##Creator)
#define REGISTER_CODEBASE_COMPONENT(codebase, component_type) \
class component_type##_##Creator : public Creator<codebase> { \
public: \
const char* GetName() const override { return #component_type; } \
int GetVersion() const override { return 1; } \
ReturnType Create(const Value& config) override { return CreateTask(component_type(config)); } \
}; \
REGISTER_MODULE(codebase, component_type##_##Creator)
} // namespace mmdeploy
#endif // MMDEPLOY_SRC_CODEBASE_COMMON_H_