brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 8812f52 Raw
50 lines · c
1/*===-- bitwriter_ocaml.c - LLVM OCaml Glue ---------------------*- C++ -*-===*\2|*                                                                            *|3|* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|4|* Exceptions.                                                                *|5|* See https://llvm.org/LICENSE.txt for license information.                  *|6|* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|7|*                                                                            *|8|*===----------------------------------------------------------------------===*|9|*                                                                            *|10|* This file glues LLVM's OCaml interface to its C interface. These functions *|11|* are by and large transparent wrappers to the corresponding C functions.    *|12|*                                                                            *|13|* Note that these functions intentionally take liberties with the CAMLparamX *|14|* macros, since most of the parameters are not GC heap objects.              *|15|*                                                                            *|16\*===----------------------------------------------------------------------===*/17 18#include "caml/alloc.h"19#include "caml/memory.h"20#include "caml/mlvalues.h"21#include "llvm_ocaml.h"22#include "llvm-c/BitWriter.h"23#include "llvm-c/Core.h"24 25/* Llvm.llmodule -> string -> bool */26value llvm_write_bitcode_file(value M, value Path) {27  int Result = LLVMWriteBitcodeToFile(Module_val(M), String_val(Path));28  return Val_bool(Result == 0);29}30 31/* ?unbuffered:bool -> Llvm.llmodule -> Unix.file_descr -> bool */32value llvm_write_bitcode_to_fd(value U, value M, value FD) {33  int Unbuffered;34  int Result;35 36  if (U == Val_int(0)) {37    Unbuffered = 0;38  } else {39    Unbuffered = Bool_val(Field(U, 0));40  }41 42  Result = LLVMWriteBitcodeToFD(Module_val(M), Int_val(FD), 0, Unbuffered);43  return Val_bool(Result == 0);44}45 46/* Llvm.llmodule -> Llvm.llmemorybuffer */47value llvm_write_bitcode_to_memory_buffer(value M) {48  return to_val(LLVMWriteBitcodeToMemoryBuffer(Module_val(M)));49}50