diff options
Diffstat (limited to 'source/slang/slang-options.cpp')
| -rw-r--r-- | source/slang/slang-options.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/source/slang/slang-options.cpp b/source/slang/slang-options.cpp index e9a8e7e04..76ebcca52 100644 --- a/source/slang/slang-options.cpp +++ b/source/slang/slang-options.cpp @@ -11,6 +11,7 @@ #include "slang-file-system.h" #include "slang-state-serialize.h" +#include "slang-ir-serialize.h" #include <assert.h> @@ -857,6 +858,26 @@ struct OptionsParser return SLANG_FAIL; } } + else if (argStr == "-r") + { + String moduleName; + SLANG_RETURN_ON_FAIL(tryReadCommandLineArgument(sink, arg, &argCursor, argEnd, moduleName)); + + // We need to deserialize and add the modules + FileStream fileStream(moduleName, FileMode::Open, FileAccess::Read, FileShare::ReadWrite); + + List<RefPtr<IRModule>> irModules; + if (SLANG_FAILED(IRSerialReader::readStreamModules(&fileStream, asInternal(session), requestImpl->getFrontEndReq()->getSourceManager(), irModules))) + { + sink->diagnose(SourceLoc(), Diagnostics::unableToReadModuleContainer, moduleName); + return SLANG_FAIL; + } + + // TODO(JS): May be better to have a ITypeComponent that encapsulates a collection of modules + // For now just add to the linkage + auto linkage = requestImpl->getLinkage(); + linkage->m_libModules.addRange(irModules.getBuffer(), irModules.getCount()); + } else if (argStr == "-v") { sink->diagnoseRaw(Severity::Note, session->getBuildTagString()); |
