50 lines · cpp
1//===-- BitWriter.cpp -----------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "llvm-c/BitWriter.h"10#include "llvm/Bitcode/BitcodeWriter.h"11#include "llvm/IR/Module.h"12#include "llvm/Support/FileSystem.h"13#include "llvm/Support/MemoryBuffer.h"14#include "llvm/Support/raw_ostream.h"15using namespace llvm;16 17 18/*===-- Operations on modules ---------------------------------------------===*/19 20int LLVMWriteBitcodeToFile(LLVMModuleRef M, const char *Path) {21 std::error_code EC;22 raw_fd_ostream OS(Path, EC, sys::fs::OF_None);23 24 if (EC)25 return -1;26 27 WriteBitcodeToFile(*unwrap(M), OS);28 return 0;29}30 31int 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 39int LLVMWriteBitcodeToFileHandle(LLVMModuleRef M, int FileHandle) {40 return LLVMWriteBitcodeToFD(M, FileHandle, true, false);41}42 43LLVMMemoryBufferRef 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