176a0374bSGordon Henriksen //===-- BitWriter.cpp -----------------------------------------------------===// 276a0374bSGordon Henriksen // 376a0374bSGordon Henriksen // The LLVM Compiler Infrastructure 476a0374bSGordon Henriksen // 5*c3d661a0SGordon Henriksen // This file was developed by Gordon Henriksen and is distributed under the 6*c3d661a0SGordon Henriksen // University of Illinois Open Source License. See LICENSE.TXT for details. 776a0374bSGordon Henriksen // 876a0374bSGordon Henriksen //===----------------------------------------------------------------------===// 976a0374bSGordon Henriksen 1076a0374bSGordon Henriksen #include "llvm-c/BitWriter.h" 1176a0374bSGordon Henriksen #include "llvm/Bitcode/ReaderWriter.h" 1276a0374bSGordon Henriksen #include <fstream> 1376a0374bSGordon Henriksen 1476a0374bSGordon Henriksen using namespace llvm; 1576a0374bSGordon Henriksen 1676a0374bSGordon Henriksen 1776a0374bSGordon Henriksen /*===-- Operations on modules ---------------------------------------------===*/ 1876a0374bSGordon Henriksen 1976a0374bSGordon Henriksen int LLVMWriteBitcodeToFile(LLVMModuleRef M, const char *Path) { 2076a0374bSGordon Henriksen std::ofstream OS(Path); 2176a0374bSGordon Henriksen 2276a0374bSGordon Henriksen if (!OS.fail()) 2376a0374bSGordon Henriksen WriteBitcodeToFile(unwrap(M), OS); 2476a0374bSGordon Henriksen 2576a0374bSGordon Henriksen if (OS.fail()) 2676a0374bSGordon Henriksen return -1; 2776a0374bSGordon Henriksen 2876a0374bSGordon Henriksen return 0; 2976a0374bSGordon Henriksen } 3076a0374bSGordon Henriksen 3176a0374bSGordon Henriksen #ifdef __GNUC__ 3276a0374bSGordon Henriksen #include <ext/stdio_filebuf.h> 3376a0374bSGordon Henriksen 3476a0374bSGordon Henriksen // FIXME: Control this with configure? Provide some portable abstraction in 3576a0374bSGordon Henriksen // libSystem? As is, the user will just get a linker error if they use this on 3676a0374bSGordon Henriksen // non-GCC. Some C++ stdlibs even have ofstream::ofstream(int fd). 3776a0374bSGordon Henriksen int LLVMWriteBitcodeToFileHandle(LLVMModuleRef M, int FileHandle) { 3876a0374bSGordon Henriksen __gnu_cxx::stdio_filebuf<char> Buffer(FileHandle, std::ios_base::out); 3976a0374bSGordon Henriksen std::ostream OS(&Buffer); 4076a0374bSGordon Henriksen 4176a0374bSGordon Henriksen if (!OS.fail()) 4276a0374bSGordon Henriksen WriteBitcodeToFile(unwrap(M), OS); 4376a0374bSGordon Henriksen 4476a0374bSGordon Henriksen if (OS.fail()) 4576a0374bSGordon Henriksen return -1; 4676a0374bSGordon Henriksen 4776a0374bSGordon Henriksen return 0; 4876a0374bSGordon Henriksen } 4976a0374bSGordon Henriksen 5076a0374bSGordon Henriksen #endif 51