summaryrefslogtreecommitdiff
path: root/source/slang/slang-options.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-options.cpp')
-rw-r--r--source/slang/slang-options.cpp21
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());