@@ -119,6 +119,39 @@ class CSourceModuleNode : public runtime::ModuleNode {
119119
120120 String GetFormat () override { return fmt_; }
121121
122+ void SaveToBinary (dmlc::Stream* stream) final {
123+ stream->Write (code_);
124+ stream->Write (fmt_);
125+
126+ std::vector<std::string> func_names;
127+ for (const auto func_name : func_names_) func_names.push_back (func_name);
128+ std::vector<std::string> const_vars;
129+ for (auto const_var : const_vars_) const_vars.push_back (const_var);
130+ stream->Write (func_names);
131+ stream->Write (const_vars);
132+ }
133+
134+ static runtime::Module LoadFromBinary (void * strm) {
135+ dmlc::Stream* stream = static_cast <dmlc::Stream*>(strm);
136+
137+ std::string code, fmt;
138+ ICHECK (stream->Read (&code)) << " Loading code failed" ;
139+ ICHECK (stream->Read (&fmt)) << " Loading format failed" ;
140+
141+ std::vector<std::string> tmp_func_names, tmp_const_vars;
142+ CHECK (stream->Read (&tmp_func_names)) << " Loading func names failed" ;
143+ CHECK (stream->Read (&tmp_const_vars)) << " Loading const vars failed" ;
144+
145+ Array<String> func_names;
146+ for (auto func_name : tmp_func_names) func_names.push_back (String (func_name));
147+
148+ Array<String> const_vars;
149+ for (auto const_var : tmp_const_vars) const_vars.push_back (String (const_var));
150+
151+ auto n = make_object<CSourceModuleNode>(code, fmt, func_names, const_vars);
152+ return runtime::Module (n);
153+ }
154+
122155 void SaveToFile (const String& file_name, const String& format) final {
123156 std::string fmt = GetFileFormat (file_name, format);
124157 std::string meta_file = GetMetaFilePath (file_name);
@@ -130,7 +163,10 @@ class CSourceModuleNode : public runtime::ModuleNode {
130163 }
131164 }
132165
133- int GetPropertyMask () const override { return runtime::ModulePropertyMask::kDSOExportable ; }
166+ int GetPropertyMask () const override {
167+ return runtime::ModulePropertyMask::kBinarySerializable |
168+ runtime::ModulePropertyMask::kDSOExportable ;
169+ }
134170
135171 bool ImplementsFunction (const String& name, bool query_imports) final {
136172 return std::find (func_names_.begin (), func_names_.end (), name) != func_names_.end ();
@@ -151,6 +187,9 @@ runtime::Module CSourceModuleCreate(const String& code, const String& fmt,
151187 return runtime::Module (n);
152188}
153189
190+ TVM_REGISTER_GLOBAL (" runtime.module.loadbinary_c" )
191+ .set_body_typed(CSourceModuleNode::LoadFromBinary);
192+
154193/* !
155194 * \brief A concrete class to get access to base methods of CodegenSourceBase.
156195 *
0 commit comments