aboutsummaryrefslogtreecommitdiff
path: root/src/rustllvm
diff options
context:
space:
mode:
authorRafael Ávila de Espíndola <[email protected]>2011-04-18 10:02:34 -0400
committerRafael Ávila de Espíndola <[email protected]>2011-04-18 10:02:52 -0400
commitf12998e5d7a4409d2bf748a671c345a79085213e (patch)
treee8ae174f5e6bf1c8c7c87b18d807684d1b126358 /src/rustllvm
parentMake log the log level configurable per module (diff)
downloadrust-f12998e5d7a4409d2bf748a671c345a79085213e.tar.xz
rust-f12998e5d7a4409d2bf748a671c345a79085213e.zip
Add a -c option.
Diffstat (limited to 'src/rustllvm')
-rw-r--r--src/rustllvm/RustWrapper.cpp17
-rw-r--r--src/rustllvm/rustllvm.def.in2
2 files changed, 14 insertions, 5 deletions
diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp
index b2dcd065..ad702555 100644
--- a/src/rustllvm/RustWrapper.cpp
+++ b/src/rustllvm/RustWrapper.cpp
@@ -42,8 +42,15 @@ extern "C" void LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM);
void (*RustHackToFetchPassesO)(LLVMPassManagerRef PM) =
LLVMAddBasicAliasAnalysisPass;
-extern "C" void LLVMRustWriteAssembly(LLVMPassManagerRef PMR, LLVMModuleRef M,
- const char *triple, const char *path) {
+enum LLVMCodeGenFileType {
+ LLVMAssemblyFile,
+ LLVMObjectFile,
+ LLVMNullFile // Do not emit any output.
+};
+
+extern "C" void LLVMRustWriteOutputFile(LLVMPassManagerRef PMR, LLVMModuleRef M,
+ const char *triple, const char *path,
+ LLVMCodeGenFileType FileType) {
InitializeAllTargets();
InitializeAllAsmPrinters();
TargetMachine::setRelocationModel(Reloc::PIC_);
@@ -53,13 +60,15 @@ extern "C" void LLVMRustWriteAssembly(LLVMPassManagerRef PMR, LLVMModuleRef M,
TargetMachine &Target = *TheTarget->createTargetMachine(triple, FeaturesStr);
bool NoVerify = false;
CodeGenOpt::Level OLvl = CodeGenOpt::Default;
- TargetMachine::CodeGenFileType FileType = TargetMachine::CGFT_AssemblyFile;
PassManager *PM = unwrap<PassManager>(PMR);
std::string ErrorInfo;
raw_fd_ostream OS(path, ErrorInfo,
raw_fd_ostream::F_Binary);
formatted_raw_ostream FOS(OS);
- bool foo = Target.addPassesToEmitFile(*PM, FOS, FileType, OLvl, NoVerify);
+ TargetMachine::CodeGenFileType FileType2 =
+ static_cast<TargetMachine::CodeGenFileType>(FileType);
+
+ bool foo = Target.addPassesToEmitFile(*PM, FOS, FileType2, OLvl, NoVerify);
assert(!foo);
PM->run(*unwrap(M));
}
diff --git a/src/rustllvm/rustllvm.def.in b/src/rustllvm/rustllvm.def.in
index f95bb90b..0bd524c2 100644
--- a/src/rustllvm/rustllvm.def.in
+++ b/src/rustllvm/rustllvm.def.in
@@ -1,5 +1,5 @@
LLVMRustCreateMemoryBufferWithContentsOfFile
-LLVMRustWriteAssembly
+LLVMRustWriteOutputFile
LLVMRustGetLastError
LLVMCreateObjectFile
LLVMDisposeObjectFile