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