1193323Sed//===-- BitWriter.cpp -----------------------------------------------------===// 2193323Sed// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6193323Sed// 7193323Sed//===----------------------------------------------------------------------===// 8193323Sed 9193323Sed#include "llvm-c/BitWriter.h" 10314564Sdim#include "llvm/Bitcode/BitcodeWriter.h" 11251662Sdim#include "llvm/IR/Module.h" 12276479Sdim#include "llvm/Support/FileSystem.h" 13314564Sdim#include "llvm/Support/MemoryBuffer.h" 14198090Srdivacky#include "llvm/Support/raw_ostream.h" 15193323Sedusing namespace llvm; 16193323Sed 17193323Sed 18193323Sed/*===-- Operations on modules ---------------------------------------------===*/ 19193323Sed 20193323Sedint LLVMWriteBitcodeToFile(LLVMModuleRef M, const char *Path) { 21280031Sdim std::error_code EC; 22360784Sdim raw_fd_ostream OS(Path, EC, sys::fs::OF_None); 23249423Sdim 24280031Sdim if (EC) 25193323Sed return -1; 26249423Sdim 27341825Sdim WriteBitcodeToFile(*unwrap(M), OS); 28193323Sed return 0; 29193323Sed} 30193323Sed 31204792Srdivackyint LLVMWriteBitcodeToFD(LLVMModuleRef M, int FD, int ShouldClose, 32204792Srdivacky int Unbuffered) { 33204792Srdivacky raw_fd_ostream OS(FD, ShouldClose, Unbuffered); 34249423Sdim 35341825Sdim WriteBitcodeToFile(*unwrap(M), OS); 36193323Sed return 0; 37193323Sed} 38193323Sed 39193323Sedint LLVMWriteBitcodeToFileHandle(LLVMModuleRef M, int FileHandle) { 40204792Srdivacky return LLVMWriteBitcodeToFD(M, FileHandle, true, false); 41193323Sed} 42280031Sdim 43280031SdimLLVMMemoryBufferRef LLVMWriteBitcodeToMemoryBuffer(LLVMModuleRef M) { 44280031Sdim std::string Data; 45280031Sdim raw_string_ostream OS(Data); 46280031Sdim 47341825Sdim WriteBitcodeToFile(*unwrap(M), OS); 48280031Sdim return wrap(MemoryBuffer::getMemBufferCopy(OS.str()).release()); 49280031Sdim} 50