blob: e0388418a3d9fcb1d6273e079a2b00900d2c6a10 [file] [log] [blame]
Gordon Henriksen76a03742007-09-18 03:18:57 +00001//===-- BitWriter.cpp -----------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattnerf3ebc3f2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Gordon Henriksen76a03742007-09-18 03:18:57 +00007//
8//===----------------------------------------------------------------------===//
9
10#include "llvm-c/BitWriter.h"
Teresa Johnsonad176792016-11-11 05:34:58 +000011#include "llvm/Bitcode/BitcodeWriter.h"
Filip Pizlodec20e42013-05-01 20:59:00 +000012#include "llvm/IR/Module.h"
Benjamin Kramerd59664f2014-04-29 23:26:49 +000013#include "llvm/Support/FileSystem.h"
Teresa Johnsonad176792016-11-11 05:34:58 +000014#include "llvm/Support/MemoryBuffer.h"
Chris Lattner69733952009-08-23 07:49:08 +000015#include "llvm/Support/raw_ostream.h"
Gordon Henriksen76a03742007-09-18 03:18:57 +000016using namespace llvm;
17
18
19/*===-- Operations on modules ---------------------------------------------===*/
20
21int LLVMWriteBitcodeToFile(LLVMModuleRef M, const char *Path) {
Rafael Espindola3fd1e992014-08-25 18:16:47 +000022 std::error_code EC;
23 raw_fd_ostream OS(Path, EC, sys::fs::F_None);
Joe Abbey2ad8df22012-11-25 15:23:39 +000024
Rafael Espindola3fd1e992014-08-25 18:16:47 +000025 if (EC)
Gordon Henriksen76a03742007-09-18 03:18:57 +000026 return -1;
Joe Abbey2ad8df22012-11-25 15:23:39 +000027
Chris Lattner69733952009-08-23 07:49:08 +000028 WriteBitcodeToFile(unwrap(M), OS);
Gordon Henriksen76a03742007-09-18 03:18:57 +000029 return 0;
30}
31
Erick Tryzelaar381268e2010-03-06 00:30:06 +000032int LLVMWriteBitcodeToFD(LLVMModuleRef M, int FD, int ShouldClose,
33 int Unbuffered) {
34 raw_fd_ostream OS(FD, ShouldClose, Unbuffered);
Joe Abbey2ad8df22012-11-25 15:23:39 +000035
Chris Lattner69733952009-08-23 07:49:08 +000036 WriteBitcodeToFile(unwrap(M), OS);
Gordon Henriksen76a03742007-09-18 03:18:57 +000037 return 0;
38}
Erick Tryzelaar381268e2010-03-06 00:30:06 +000039
40int LLVMWriteBitcodeToFileHandle(LLVMModuleRef M, int FileHandle) {
41 return LLVMWriteBitcodeToFD(M, FileHandle, true, false);
42}
Peter Collingbourneba689ee2014-10-14 00:30:59 +000043
44LLVMMemoryBufferRef LLVMWriteBitcodeToMemoryBuffer(LLVMModuleRef M) {
45 std::string Data;
46 raw_string_ostream OS(Data);
47
48 WriteBitcodeToFile(unwrap(M), OS);
49 return wrap(MemoryBuffer::getMemBufferCopy(OS.str()).release());
50}