Index: src/IceCompiler.cpp |
diff --git a/src/IceCompiler.cpp b/src/IceCompiler.cpp |
index 7a426fc28de566adac7e312d331106da5175663f..53a3c6f6b8165193984a678d83abd75742814a16 100644 |
--- a/src/IceCompiler.cpp |
+++ b/src/IceCompiler.cpp |
@@ -25,6 +25,7 @@ |
#include "IceConverter.h" |
#include "IceELFObjectWriter.h" |
#include "PNaClTranslator.h" |
+#include "WasmTranslator.h" |
#ifdef __clang__ |
#pragma clang diagnostic push |
@@ -54,6 +55,11 @@ bool llvmIRInput(const std::string &Filename) { |
std::regex_match(Filename, std::regex(".*\\.ll")); |
} |
+bool wasmInput(const std::string &Filename) { |
+ return BuildDefs::llvmIrAsInput() && |
+ std::regex_match(Filename, std::regex(".*\\.wasm")); |
+} |
+ |
} // end of anonymous namespace |
void Compiler::run(const Ice::ClFlags &Flags, GlobalContext &Ctx, |
@@ -75,13 +81,27 @@ void Compiler::run(const Ice::ClFlags &Flags, GlobalContext &Ctx, |
std::unique_ptr<Translator> Translator; |
const std::string IRFilename = Flags.getIRFilename(); |
- const bool BuildOnRead = Flags.getBuildOnRead() && !llvmIRInput(IRFilename); |
+ const bool BuildOnRead = Flags.getBuildOnRead() && !llvmIRInput(IRFilename) && |
+ !wasmInput(IRFilename); |
+ const bool WasmBuildOnRead = Flags.getBuildOnRead() && wasmInput(IRFilename); |
if (BuildOnRead) { |
std::unique_ptr<PNaClTranslator> PTranslator(new PNaClTranslator(&Ctx)); |
std::unique_ptr<llvm::StreamingMemoryObject> MemObj( |
new llvm::StreamingMemoryObjectImpl(InputStream.release())); |
PTranslator->translate(IRFilename, std::move(MemObj)); |
Translator.reset(PTranslator.release()); |
+ } else if (WasmBuildOnRead) { |
+ if (BuildDefs::wasm()) { |
+ std::unique_ptr<WasmTranslator> WTranslator(new WasmTranslator(&Ctx)); |
+ |
+ WTranslator->translate(IRFilename, std::move(InputStream)); |
+ |
+ Translator.reset(WTranslator.release()); |
+ } else { |
+ Ctx.getStrError() << "WASM support not enabled\n"; |
+ Ctx.getErrorStatus()->assign(EC_Args); |
+ return; |
+ } |
} else if (BuildDefs::llvmIr()) { |
if (BuildDefs::browser()) { |
Ctx.getStrError() |