Skip to content
This repository was archived by the owner on May 25, 2021. It is now read-only.

nojb/ocaml-gccjit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Feb 13, 2017
d201f40 · Feb 13, 2017

History

96 Commits
Apr 11, 2015
Apr 17, 2015
Feb 13, 2017
Apr 10, 2015
Apr 17, 2015
Apr 11, 2015
Feb 13, 2017
Apr 8, 2015
Apr 17, 2015
Apr 9, 2015
Apr 11, 2015
Apr 11, 2015
Apr 17, 2015
Apr 16, 2015
Apr 11, 2015
Apr 17, 2015
Apr 11, 2015
Apr 11, 2015
Apr 16, 2015

Repository files navigation

ocaml-gccjit is a OCaml library that provides bidings for libgccjit. libgccjit is an embeddable shared library included in GCC 5 for adding compilation to existing programs using GCC as the backend.

For example, consider this C function:

int square (int i)
{
  return i * i;
}

We can construct this function at runtime using libgccjit, as follows:

open Gccjit

let square =
  let ctx = Context.create () in

  (* Create parameter "i" *)
  let param_i = Param.create ctx Type.(get ctx Int) "i" in

  (* Create the function *)
  let fn = Function.create ctx Function.Exported Type.(get ctx Int) "square" [ param_i ] in

  (* Create a basic block within the function *)
  let block = Block.create ~name:"entry" fn in

  (* This basic block is relatively simple *)
  let expr = RValue.binary_op ctx Mult Type.(get ctx Int) (RValue.param param_i) (RValue.param param_i) in
  Block.return block expr;

  (* Having populated the context, compile it *)
  let jit_result = Context.compile ctx in

  (* Look up a specific machine code routine within the gccjit.Result, in this
     case, the function we created above: *)
  Result.code jit_result "square" Ctypes.(int @-> returning int)

We can now call the function by doing simply

(* Now try running the code *)
Printf.printf "square(5) = %d\n%!" (square 5)

Installation

# Soon: opam install gccjit
opam pin add gccjit git://github.com/nojb/ocaml-gccjit

In order for compilation to be successful the library libgccjit needs to be found by the C compiler using the -lgccjit flag. If the libgccjit library in your system is a non-standard location, please set the LIBGCCJIT_DIR environment variable before installing this package, like this:

LIBGCCJIT_DIR=<libgccjit dir> opam pin add gccjit git://github.com/nojb/ocaml-gccjit

Links

Contact

Nicolas Ojeda Bar: n.oje.bar@gmail.com

About

OCaml bindings for libgccjit

Resources

License

Stars

Watchers

Forks

Packages

No packages published