1*76a0374bSGordon Henriksen //===-- BitWriter.cpp -----------------------------------------------------===// 2*76a0374bSGordon Henriksen // 3*76a0374bSGordon Henriksen // The LLVM Compiler Infrastructure 4*76a0374bSGordon Henriksen // 5*76a0374bSGordon Henriksen // This file was developed by the LLVM research group and is distributed under 6*76a0374bSGordon Henriksen // the University of Illinois Open Source License. See LICENSE.TXT for details. 7*76a0374bSGordon Henriksen // 8*76a0374bSGordon Henriksen //===----------------------------------------------------------------------===// 9*76a0374bSGordon Henriksen 10*76a0374bSGordon Henriksen #include "llvm-c/BitWriter.h" 11*76a0374bSGordon Henriksen #include "llvm/CHelpers.h" 12*76a0374bSGordon Henriksen #include "llvm/Bitcode/ReaderWriter.h" 13*76a0374bSGordon Henriksen #include <fstream> 14*76a0374bSGordon Henriksen 15*76a0374bSGordon Henriksen using namespace llvm; 16*76a0374bSGordon Henriksen 17*76a0374bSGordon Henriksen 18*76a0374bSGordon Henriksen /*===-- Operations on modules ---------------------------------------------===*/ 19*76a0374bSGordon Henriksen 20*76a0374bSGordon Henriksen int LLVMWriteBitcodeToFile(LLVMModuleRef M, const char *Path) { 21*76a0374bSGordon Henriksen std::ofstream OS(Path); 22*76a0374bSGordon Henriksen 23*76a0374bSGordon Henriksen if (!OS.fail()) 24*76a0374bSGordon Henriksen WriteBitcodeToFile(unwrap(M), OS); 25*76a0374bSGordon Henriksen 26*76a0374bSGordon Henriksen if (OS.fail()) 27*76a0374bSGordon Henriksen return -1; 28*76a0374bSGordon Henriksen 29*76a0374bSGordon Henriksen return 0; 30*76a0374bSGordon Henriksen } 31*76a0374bSGordon Henriksen 32*76a0374bSGordon Henriksen #ifdef __GNUC__ 33*76a0374bSGordon Henriksen #include <ext/stdio_filebuf.h> 34*76a0374bSGordon Henriksen 35*76a0374bSGordon Henriksen // FIXME: Control this with configure? Provide some portable abstraction in 36*76a0374bSGordon Henriksen // libSystem? As is, the user will just get a linker error if they use this on 37*76a0374bSGordon Henriksen // non-GCC. Some C++ stdlibs even have ofstream::ofstream(int fd). 38*76a0374bSGordon Henriksen int LLVMWriteBitcodeToFileHandle(LLVMModuleRef M, int FileHandle) { 39*76a0374bSGordon Henriksen __gnu_cxx::stdio_filebuf<char> Buffer(FileHandle, std::ios_base::out); 40*76a0374bSGordon Henriksen std::ostream OS(&Buffer); 41*76a0374bSGordon Henriksen 42*76a0374bSGordon Henriksen if (!OS.fail()) 43*76a0374bSGordon Henriksen WriteBitcodeToFile(unwrap(M), OS); 44*76a0374bSGordon Henriksen 45*76a0374bSGordon Henriksen if (OS.fail()) 46*76a0374bSGordon Henriksen return -1; 47*76a0374bSGordon Henriksen 48*76a0374bSGordon Henriksen return 0; 49*76a0374bSGordon Henriksen } 50*76a0374bSGordon Henriksen 51*76a0374bSGordon Henriksen #endif 52