Browse Source

fix(serialization): remove #include flatbuffers/flatbuffers.h in public header

Removes the need of Flatbuffers for (most) internal users.

GitOrigin-RevId: 6585e9c848
release-0.6
Megvii Engine Team Xu Xinran 5 years ago
parent
commit
ad4928c995
2 changed files with 21 additions and 7 deletions
  1. +8
    -1
      src/serialization/impl/serializer_oss.cpp
  2. +13
    -6
      src/serialization/include/megbrain/serialization/opr_load_dump.h

+ 8
- 1
src/serialization/impl/serializer_oss.cpp View File

@@ -33,6 +33,8 @@
#include "megbrain/serialization/serializer.h" #include "megbrain/serialization/serializer.h"
#include "megbrain/version.h" #include "megbrain/version.h"


#include <flatbuffers/flatbuffers.h>

#include <cerrno> #include <cerrno>
#include <cinttypes> #include <cinttypes>
#include <cstdio> #include <cstdio>
@@ -121,7 +123,12 @@ public:
void dump_tensor(const std::string& name, const HostTensorND& tensor, void dump_tensor(const std::string& name, const HostTensorND& tensor,
TensorWriteMethod method) override; TensorWriteMethod method) override;
flatbuffers::FlatBufferBuilder& builder() override { return m_builder; } flatbuffers::FlatBufferBuilder& builder() override { return m_builder; }
void append_param(uint32_t type, flatbuffers::Offset<void> value) override {
void append_param(uint32_t type, uint32_t value) override {
static_assert(std::is_same<uint32_t, flatbuffers::uoffset_t>::value,
"append_param depends on uoffset_t being uint32_t");
static_assert(std::is_standard_layout<flatbuffers::Offset<void>>::value,
"append_param depends on flatbuffers::Offset having "
"standard memory layout");
mgb_assert(type != fbs::OperatorParam_NONE); mgb_assert(type != fbs::OperatorParam_NONE);
m_cur_opr_param_type.emplace_back( m_cur_opr_param_type.emplace_back(
static_cast<fbs::OperatorParam>(type)); static_cast<fbs::OperatorParam>(type));


+ 13
- 6
src/serialization/include/megbrain/serialization/opr_load_dump.h View File

@@ -12,9 +12,12 @@
#include "megbrain/graph.h" #include "megbrain/graph.h"
#include "megbrain/serialization/load_dump_config.h" #include "megbrain/serialization/load_dump_config.h"
#include "megbrain/serialization/opr_registry.h" #include "megbrain/serialization/opr_registry.h"
#if MGB_ENABLE_FBS_SERIALIZATION
#include <flatbuffers/flatbuffers.h>
#endif

// Forward declaration for breaking header dependency: we do not want to hard
// depend on flatbuffers/flatbuffers.h in our public headers.
namespace flatbuffers {
class FlatBufferBuilder;
} // namespace flatbuffers


namespace mgb { namespace mgb {
namespace serialization { namespace serialization {
@@ -122,8 +125,12 @@ class OprDumpContextFlatBuffers : public OprDumpContext {
protected: protected:
OprDumpContextFlatBuffers() OprDumpContextFlatBuffers()
: OprDumpContext(SerializationFormat::FLATBUFFERS) {} : OprDumpContext(SerializationFormat::FLATBUFFERS) {}
virtual void append_param(uint32_t type,
flatbuffers::Offset<void> value) = 0;
// value_offset should be a flatbuffers::Offset<ParamType> (or <void>).
// Assuming flatbuffers::Offset<T> is a wrapper around uoffset_t = uint32_t,
// we pass around a uint32_t to avoid dependency to flatbuffers in public
// headers. There are a few static_asserts in serializer_oss.cpp about the
// assumption.
virtual void append_param(uint32_t type, uint32_t value_offset) = 0;


public: public:
virtual flatbuffers::FlatBufferBuilder& builder() = 0; virtual flatbuffers::FlatBufferBuilder& builder() = 0;
@@ -136,7 +143,7 @@ public:
auto param_offset = auto param_offset =
fbs::ParamConverter<Param>::to_flatbuffer(builder(), param); fbs::ParamConverter<Param>::to_flatbuffer(builder(), param);
append_param(fbs::OperatorParamTraits<ResultType>::enum_value, append_param(fbs::OperatorParamTraits<ResultType>::enum_value,
param_offset.Union());
param_offset.Union().o);
} }


template <class Param> template <class Param>


Loading…
Cancel
Save