Register a few more dependencies statically
This is needed for "external-lib-deps" and it improves parallelism.
This commit is contained in:
parent
341de6e50f
commit
cd2cfb44e8
|
@ -429,7 +429,7 @@ module Gen(P : Install_rules.Params) = struct
|
||||||
List.map cclibs ~f
|
List.map cclibs ~f
|
||||||
|
|
||||||
let build_lib (lib : Library.t) ~scope ~flags ~dir ~obj_dir ~mode
|
let build_lib (lib : Library.t) ~scope ~flags ~dir ~obj_dir ~mode
|
||||||
~top_sorted_modules =
|
~top_sorted_modules ~modules =
|
||||||
Option.iter (Context.compiler ctx mode) ~f:(fun compiler ->
|
Option.iter (Context.compiler ctx mode) ~f:(fun compiler ->
|
||||||
let target = lib_archive lib ~dir ~ext:(Mode.compiled_lib_ext mode) in
|
let target = lib_archive lib ~dir ~ext:(Mode.compiled_lib_ext mode) in
|
||||||
let stubs_flags =
|
let stubs_flags =
|
||||||
|
@ -451,17 +451,21 @@ module Gen(P : Install_rules.Params) = struct
|
||||||
let artifacts ~ext modules =
|
let artifacts ~ext modules =
|
||||||
List.map modules ~f:(Module.obj_file ~obj_dir ~ext)
|
List.map modules ~f:(Module.obj_file ~obj_dir ~ext)
|
||||||
in
|
in
|
||||||
let register_native_objs_deps build =
|
let obj_deps =
|
||||||
|
Build.paths (artifacts modules ~ext:(Cm_kind.ext (Mode.cm_kind mode)))
|
||||||
|
in
|
||||||
|
let obj_deps =
|
||||||
match mode with
|
match mode with
|
||||||
| Byte -> build
|
| Byte -> obj_deps
|
||||||
| Native ->
|
| Native ->
|
||||||
build >>>
|
obj_deps >>>
|
||||||
Build.dyn_paths (Build.arr (artifacts ~ext:ctx.ext_obj))
|
Build.paths (artifacts modules ~ext:ctx.ext_obj)
|
||||||
in
|
in
|
||||||
SC.add_rule sctx
|
SC.add_rule sctx
|
||||||
(Build.fanout4
|
(obj_deps
|
||||||
(register_native_objs_deps top_sorted_modules
|
>>>
|
||||||
>>^ artifacts ~ext:(Cm_kind.ext (Mode.cm_kind mode)))
|
Build.fanout4
|
||||||
|
(top_sorted_modules >>^ artifacts ~ext:(Cm_kind.ext (Mode.cm_kind mode)))
|
||||||
(SC.expand_and_eval_set sctx ~scope ~dir lib.c_library_flags ~standard:[])
|
(SC.expand_and_eval_set sctx ~scope ~dir lib.c_library_flags ~standard:[])
|
||||||
(Ocaml_flags.get flags mode)
|
(Ocaml_flags.get flags mode)
|
||||||
(SC.expand_and_eval_set sctx ~scope ~dir lib.library_flags ~standard:[])
|
(SC.expand_and_eval_set sctx ~scope ~dir lib.library_flags ~standard:[])
|
||||||
|
@ -721,12 +725,12 @@ module Gen(P : Install_rules.Params) = struct
|
||||||
Path.relative dir (header ^ ".h"))
|
Path.relative dir (header ^ ".h"))
|
||||||
|> Path.Set.of_list);
|
|> Path.Set.of_list);
|
||||||
|
|
||||||
let top_sorted_modules =
|
(let modules = Module.Name.Map.values modules in
|
||||||
Ocamldep.Dep_graph.top_closed_implementations dep_graphs.impl
|
let top_sorted_modules =
|
||||||
(Module.Name.Map.values modules)
|
Ocamldep.Dep_graph.top_closed_implementations dep_graphs.impl modules
|
||||||
in
|
in
|
||||||
List.iter Mode.all ~f:(fun mode ->
|
List.iter Mode.all ~f:(fun mode ->
|
||||||
build_lib lib ~scope ~flags ~dir ~obj_dir ~mode ~top_sorted_modules);
|
build_lib lib ~scope ~flags ~dir ~obj_dir ~mode ~top_sorted_modules ~modules));
|
||||||
(* Build *.cma.js *)
|
(* Build *.cma.js *)
|
||||||
SC.add_rules sctx (
|
SC.add_rules sctx (
|
||||||
let src = lib_archive lib ~dir ~ext:(Mode.compiled_lib_ext Mode.Byte) in
|
let src = lib_archive lib ~dir ~ext:(Mode.compiled_lib_ext Mode.Byte) in
|
||||||
|
|
Loading…
Reference in New Issue