176a0374bSGordon Henriksen //===-- BitWriter.cpp -----------------------------------------------------===//
276a0374bSGordon Henriksen //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
676a0374bSGordon Henriksen //
776a0374bSGordon Henriksen //===----------------------------------------------------------------------===//
876a0374bSGordon Henriksen 
976a0374bSGordon Henriksen #include "llvm-c/BitWriter.h"
10ad17679aSTeresa Johnson #include "llvm/Bitcode/BitcodeWriter.h"
11dec20e43SFilip Pizlo #include "llvm/IR/Module.h"
12d59664f4SBenjamin Kramer #include "llvm/Support/FileSystem.h"
13ad17679aSTeresa Johnson #include "llvm/Support/MemoryBuffer.h"
146973395cSChris Lattner #include "llvm/Support/raw_ostream.h"
1576a0374bSGordon Henriksen using namespace llvm;
1676a0374bSGordon Henriksen 
1776a0374bSGordon Henriksen 
1876a0374bSGordon Henriksen /*===-- Operations on modules ---------------------------------------------===*/
1976a0374bSGordon Henriksen 
LLVMWriteBitcodeToFile(LLVMModuleRef M,const char * Path)2076a0374bSGordon Henriksen int LLVMWriteBitcodeToFile(LLVMModuleRef M, const char *Path) {
213fd1e993SRafael Espindola   std::error_code EC;
22*d9b948b6SFangrui Song   raw_fd_ostream OS(Path, EC, sys::fs::OF_None);
2376a0374bSGordon Henriksen 
243fd1e993SRafael Espindola   if (EC)
2576a0374bSGordon Henriksen     return -1;
2676a0374bSGordon Henriksen 
276a86e25dSRafael Espindola   WriteBitcodeToFile(*unwrap(M), OS);
2876a0374bSGordon Henriksen   return 0;
2976a0374bSGordon Henriksen }
3076a0374bSGordon Henriksen 
LLVMWriteBitcodeToFD(LLVMModuleRef M,int FD,int ShouldClose,int Unbuffered)31381268e6SErick Tryzelaar int LLVMWriteBitcodeToFD(LLVMModuleRef M, int FD, int ShouldClose,
32381268e6SErick Tryzelaar                          int Unbuffered) {
33381268e6SErick Tryzelaar   raw_fd_ostream OS(FD, ShouldClose, Unbuffered);
3476a0374bSGordon Henriksen 
356a86e25dSRafael Espindola   WriteBitcodeToFile(*unwrap(M), OS);
3676a0374bSGordon Henriksen   return 0;
3776a0374bSGordon Henriksen }
38381268e6SErick Tryzelaar 
LLVMWriteBitcodeToFileHandle(LLVMModuleRef M,int FileHandle)39381268e6SErick Tryzelaar int LLVMWriteBitcodeToFileHandle(LLVMModuleRef M, int FileHandle) {
40381268e6SErick Tryzelaar   return LLVMWriteBitcodeToFD(M, FileHandle, true, false);
41381268e6SErick Tryzelaar }
42ba689eebSPeter Collingbourne 
LLVMWriteBitcodeToMemoryBuffer(LLVMModuleRef M)43ba689eebSPeter Collingbourne LLVMMemoryBufferRef LLVMWriteBitcodeToMemoryBuffer(LLVMModuleRef M) {
44ba689eebSPeter Collingbourne   std::string Data;
45ba689eebSPeter Collingbourne   raw_string_ostream OS(Data);
46ba689eebSPeter Collingbourne 
476a86e25dSRafael Espindola   WriteBitcodeToFile(*unwrap(M), OS);
48ba689eebSPeter Collingbourne   return wrap(MemoryBuffer::getMemBufferCopy(OS.str()).release());
49ba689eebSPeter Collingbourne }
50