[LLVMdev] C Compiler written in OCaml, Pointers Wanted

Jianzhou Zhao jianzhou at seas.upenn.edu
Tue Feb 23 19:58:03 PST 2010

On Tue, Feb 23, 2010 at 10:37 PM, Nyx <mcheva at cs.mcgill.ca> wrote:
> Hello,
> For a course project, I am required to write a compiler for some language of
> my choice, and this compiler has to be implemented in a functional language.
> I have chosen create a *JIT* compiler for C source, and to implement my
> compiler in OCaml using LLVM for the back-end. I have experience using LLVM
> in C++ (I wrote a MATLAB JIT compiler not long ago), however, I am a bit
> puzzled as to how to go about some things, and would appreciate some
> pointers:
> 1. When writing my MATLAB JIT in C++, I created bindings to native C++
> functions to serve as my runtime library. This hardly seems practical in
> OCaml. I would ideally want to write my runtime library in C (this will
> contain functions such as malloc, free, puts, strlen, etc.), and link it
> with the code I compile somehow. Is there any way for LLVM to link with code
> in pre-compiled C object files?

I think so. You may need to modify LLVM's Makefile to do so.
Here is how Makefile is configured. http://llvm.org/docs/MakefileGuide.html

> Please note that this is for a JIT compiler,
> I need to be able to do this at run-time, I will not be generating an
> executable file.
> 2. One thing I don't know how to go about is memory allocation. As I just
> said, this will be a C *JIT* compiler. This means that my running compiled
> code will have to co-exist with OCaml. How do I go about implementing malloc
> in this context? Does LLVM provide some memory allocation implementation
> that will work with a JIT?
> 3. Do the OCaml LLVM bindings even allow using LLVM in JIT mode?

I think LLVM OCaml bindings do not support JIT too much.
All the exposed C++ interfaces, which are possibly relative to JIT,
are /bindings/ocaml/executionengine/llvm_executionengine.ml.
But you could be able to expose more JIT interfaces into OCaml.

> And of course, if anyone has experience writing a JIT using LLVM, or using
> the OCaml LLVM bindings, any advice you may have will be greatly
> appreciated.
> --
> View this message in context: http://old.nabble.com/C-Compiler-written-in-OCaml%2C-Pointers-Wanted-tp27714082p27714082.html
> Sent from the LLVM - Dev mailing list archive at Nabble.com.
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

More information about the llvm-dev mailing list