Home | History | Annotate | Download | only in Writer
      1 //===-- BitWriter.cpp -----------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #include "llvm-c/BitWriter.h"
     11 #include "llvm/Bitcode/ReaderWriter.h"
     12 #include "llvm/IR/Module.h"
     13 #include "llvm/Support/FileSystem.h"
     14 #include "llvm/Support/raw_ostream.h"
     15 using namespace llvm;
     16 
     17 
     18 /*===-- Operations on modules ---------------------------------------------===*/
     19 
     20 int LLVMWriteBitcodeToFile(LLVMModuleRef M, const char *Path) {
     21   std::error_code EC;
     22   raw_fd_ostream OS(Path, EC, sys::fs::F_None);
     23 
     24   if (EC)
     25     return -1;
     26 
     27   WriteBitcodeToFile(unwrap(M), OS);
     28   return 0;
     29 }
     30 
     31 int LLVMWriteBitcodeToFD(LLVMModuleRef M, int FD, int ShouldClose,
     32                          int Unbuffered) {
     33   raw_fd_ostream OS(FD, ShouldClose, Unbuffered);
     34 
     35   WriteBitcodeToFile(unwrap(M), OS);
     36   return 0;
     37 }
     38 
     39 int LLVMWriteBitcodeToFileHandle(LLVMModuleRef M, int FileHandle) {
     40   return LLVMWriteBitcodeToFD(M, FileHandle, true, false);
     41 }
     42 
     43 LLVMMemoryBufferRef LLVMWriteBitcodeToMemoryBuffer(LLVMModuleRef M) {
     44   std::string Data;
     45   raw_string_ostream OS(Data);
     46 
     47   WriteBitcodeToFile(unwrap(M), OS);
     48   return wrap(MemoryBuffer::getMemBufferCopy(OS.str()).release());
     49 }
     50