Add Module_compilation.ocamlc_i

Signed-off-by: Jeremie Dimino <jeremie@dimino.org>
This commit is contained in:
Jeremie Dimino 2018-05-26 02:05:26 +01:00 committed by Jérémie Dimino
parent 3bd9addeb2
commit b31d281949
2 changed files with 39 additions and 0 deletions

View File

@ -133,3 +133,33 @@ let build_modules ?sandbox ?js_of_ocaml ?dynlink ~dep_graphs cctx =
| None -> CC.modules cctx
| Some (m : Module.t) -> Module.Name.Map.remove (CC.modules cctx) m.name)
~f:(build_module cctx ?sandbox ?js_of_ocaml ?dynlink ~dep_graphs)
let ocamlc_i ?sandbox ?(flags=[]) ~dep_graphs cctx (m : Module.t) ~output =
let sctx = CC.super_context cctx in
let dir = CC.dir cctx in
let obj_dir = CC.obj_dir cctx in
let ctx = SC.context sctx in
let src = Option.value_exn (Module.file ~dir m Impl) in
let dep_graph = Ml_kind.Dict.get dep_graphs Impl in
let cm_deps =
Build.dyn_paths
(Ocamldep.Dep_graph.deps_of dep_graph m >>^ fun deps ->
List.concat_map deps
~f:(fun m -> [Module.cm_file_unsafe m ~obj_dir Cmi]))
in
SC.add_rule sctx ?sandbox
(cm_deps >>>
Ocaml_flags.get_for_cm (CC.flags cctx) ~cm_kind:Cmo >>>
Build.run ~context:ctx (Ok ctx.ocamlc)
[ Dyn (fun ocaml_flags -> As ocaml_flags)
; A "-I"; Path obj_dir
; Cm_kind.Dict.get (CC.includes cctx) Cmo
; (match CC.alias_module cctx with
| None -> S []
| Some (m : Module.t) ->
As ["-open"; Module.Name.to_string m.name])
; As flags
; A "-i"; Ml_kind.flag Impl; Dep src
]
>>^ (fun act -> Action.with_stdout_to output act)
>>> Build.action_dyn () ~targets:[output])

View File

@ -20,3 +20,12 @@ val build_modules
-> dep_graphs:Ocamldep.Dep_graphs.t
-> Compilation_context.t
-> unit
val ocamlc_i
: ?sandbox:bool
-> ?flags:string list
-> dep_graphs:Ocamldep.Dep_graphs.t
-> Compilation_context.t
-> Module.t
-> output:Path.t
-> unit