(**************************************************************************) (* *) (* OCaml *) (* *) (* Xavier Leroy, projet Gallium, INRIA Rocquencourt *) (* Pierre Chambart, OCamlPro *) (* Mark Shinwell and Leo White, Jane Street Europe *) (* *) (* Copyright 2010 Institut National de Recherche en Informatique et *) (* en Automatique *) (* Copyright 2013--2016 OCamlPro SAS *) (* Copyright 2014--2016 Jane Street Group LLC *) (* *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Lesser General Public License version 2.1, with the *) (* special exception on linking described in the file ../LICENSE. *) (* *) (**************************************************************************) (* Format of .cmx, .cmxa and .cmxs files *) (* Each .o file has a matching .cmx file that provides the following infos on the compilation unit: - list of other units imported, with MD5s of their .cmx files - approximation of the structure implemented (includes descriptions of known functions: arity and direct entry points) - list of currying functions and application functions needed The .cmx file contains these infos (as an externed record) plus a MD5 of these infos *) type export_info = | Clambda of Clambda.value_approximation | Flambda of Export_info.t type unit_infos = { mutable ui_name: string; (* Name of unit implemented *) mutable ui_symbol: string; (* Prefix for symbols *) mutable ui_defines: string list; (* Unit and sub-units implemented *) mutable ui_imports_cmi: (string * Digest.t option) list; (* Interfaces imported *) mutable ui_imports_cmx:(string * Digest.t option) list; (* Infos imported *) mutable ui_curry_fun: int list; (* Currying functions needed *) mutable ui_apply_fun: int list; (* Apply functions needed *) mutable ui_send_fun: int list; (* Send functions needed *) mutable ui_export_info: export_info; mutable ui_force_link: bool } (* Always linked *) (* Each .a library has a matching .cmxa file that provides the following infos on the library: *) type library_infos = { lib_units: (unit_infos * Digest.t) list; (* List of unit infos w/ MD5s *) lib_ccobjs: string list; (* C object files needed *) lib_ccopts: string list } (* Extra opts to C compiler *) (* Each .cmxs dynamically-loaded plugin contains a symbol "caml_plugin_header" containing the following info (as an externed record) *) type dynunit = { dynu_name: string; dynu_crc: Digest.t; dynu_imports_cmi: (string * Digest.t option) list; dynu_imports_cmx: (string * Digest.t option) list; dynu_defines: string list; } type dynheader = { dynu_magic: string; dynu_units: dynunit list; }