blob: 1aac5006d8f6ced4fad72f5487ccba690535cc9a [file] [log] [blame]
Gordon Henriksen8b94a142007-09-18 03:18:57 +00001//===-- BitWriter.cpp -----------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner4ee451d2007-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 Henriksen8b94a142007-09-18 03:18:57 +00007//
8//===----------------------------------------------------------------------===//
9
10#include "llvm-c/BitWriter.h"
Gordon Henriksen8b94a142007-09-18 03:18:57 +000011#include "llvm/Bitcode/ReaderWriter.h"
Gordon Henriksen8b94a142007-09-18 03:18:57 +000012#include <fstream>
13
14using namespace llvm;
15
16
17/*===-- Operations on modules ---------------------------------------------===*/
18
19int LLVMWriteBitcodeToFile(LLVMModuleRef M, const char *Path) {
Gordon Henriksen94007ec2007-12-03 14:50:37 +000020 std::ofstream OS(Path, std::ios_base::out|std::ios::trunc|std::ios::binary);
Gordon Henriksen8b94a142007-09-18 03:18:57 +000021
22 if (!OS.fail())
23 WriteBitcodeToFile(unwrap(M), OS);
24
25 if (OS.fail())
26 return -1;
27
28 return 0;
29}
30
31#ifdef __GNUC__
32#include <ext/stdio_filebuf.h>
33
34// FIXME: Control this with configure? Provide some portable abstraction in
35// libSystem? As is, the user will just get a linker error if they use this on
36// non-GCC. Some C++ stdlibs even have ofstream::ofstream(int fd).
37int LLVMWriteBitcodeToFileHandle(LLVMModuleRef M, int FileHandle) {
Anton Korobeynikov31940122007-12-03 14:35:57 +000038 __gnu_cxx::stdio_filebuf<char> Buffer(FileHandle, std::ios_base::out |
39 std::ios::trunc |
40 std::ios::binary);
41 std::ostream OS(&Buffer);
Gordon Henriksen8b94a142007-09-18 03:18:57 +000042
43 if (!OS.fail())
44 WriteBitcodeToFile(unwrap(M), OS);
45
46 if (OS.fail())
47 return -1;
48
49 return 0;
50}
51
52#endif