Jump to: | OMake Home • Guide Home • Guide (single-page) • Contents (short) • Contents (long) | |
Index: | All • Variables • Functions • Objects • Targets • Options |
This feature will be introduced in version 0.9.9.0.
A binding is a the glue code that provides an interface between code written in two different languages. In this section, we'll look specifically at OCaml/OMake bindings for C code. That is, the code to be used is written in C, and the user of the code is an OCaml or OMake program.
OMake provides tools to produce bindings automatically, given the following information:
Usually, a binding is used to provide an interface to a dynamically-linked library. The binding generated by OMake is also compiled for dynamic linking. Using the GTK+ 2.0 binding as an example, there are three layers in the implementation.
Layer | Files |
Application | main.ml |
Binding | gtk.ml, gtk_bindings.ml, gtk_bindings.c (compiled to libgtk_bindings.so) |
Library | -lgtk-x11-2.0, -lgdk-x11-2.0, ... |
The application is linked with the binding and the original library.
For OCaml programs, this is normally done at compile time. For OMake
programs that use the binding, the library is dynamically loaded (with
dlopen(3)
).
The process of constructing a binding is mostly automatic; OMake reads
a header file constaining declarations for the values in the binding
and produces the files xxx.ml
, xxx_bindings.ml
, and
xxx_bindings.c
. However, the programmer needs to specify what
values are to be part of the binding. In some cases, the programmer
may wish to implement some additional code to simplify the use of the
code.
The general process is described in the the binding for GTK+ 2.0 (a graphics windowing binding), because it illustrates nearly all of the features of the binding.
Jump to: | OMake Home • Guide Home • Guide (single-page) • Contents (short) • Contents (long) | |
Index: | All • Variables • Functions • Objects • Targets • Options |