12bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov/*===-- backend_ocaml.c - LLVM OCaml Glue -----------------------*- C++ -*-===*\ 22bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov|* *| 32bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov|* The LLVM Compiler Infrastructure *| 42bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov|* *| 52bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov|* This file is distributed under the University of Illinois Open Source *| 62bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov|* License. See LICENSE.TXT for details. *| 72bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov|* *| 82bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov|*===----------------------------------------------------------------------===*| 92bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov|* *| 102bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov|* This file glues LLVM's OCaml interface to its C interface. These functions *| 112bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov|* are by and large transparent wrappers to the corresponding C functions. *| 122bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov|* *| 132bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov|* Note that these functions intentionally take liberties with the CAMLparamX *| 142bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov|* macros, since most of the parameters are not GC heap objects. *| 152bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov|* *| 162bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov\*===----------------------------------------------------------------------===*/ 172bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov 182bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov#include "llvm-c/Target.h" 192bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov#include "caml/alloc.h" 202bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov#include "caml/memory.h" 212bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov 2268f4dae1c078df09c9b19a0bda9bc8b8d0aae9bePeter Zotov// TODO: Figure out how to call these only for targets which support them. 2368f4dae1c078df09c9b19a0bda9bc8b8d0aae9bePeter Zotov// LLVMInitialize ## target ## AsmPrinter(); 2468f4dae1c078df09c9b19a0bda9bc8b8d0aae9bePeter Zotov// LLVMInitialize ## target ## AsmParser(); 2568f4dae1c078df09c9b19a0bda9bc8b8d0aae9bePeter Zotov// LLVMInitialize ## target ## Disassembler(); 2668f4dae1c078df09c9b19a0bda9bc8b8d0aae9bePeter Zotov 272bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov#define INITIALIZER1(target) \ 282bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov CAMLprim value llvm_initialize_ ## target(value Unit) { \ 292bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov LLVMInitialize ## target ## TargetInfo(); \ 302bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov LLVMInitialize ## target ## Target(); \ 312bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov LLVMInitialize ## target ## TargetMC(); \ 322bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov return Val_unit; \ 332bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov } 342bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov 352bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov#define INITIALIZER(target) INITIALIZER1(target) 362bdf881ee403c0493acdb3253bc697f3bd914ccaPeter Zotov 372bdf881ee403c0493acdb3253bc697f3bd914ccaPeter ZotovINITIALIZER(TARGET) 38