Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 18 additions & 20 deletions src/dune_rules/link_time_code_gen.ml
Original file line number Diff line number Diff line change
Expand Up @@ -138,17 +138,11 @@ let build_info_code cctx ~libs ~api_version =
| Installed_private | Installed -> Memo.return ("None", placeholders)
| Public (_, p) -> version_of_package placeholders p
| Private _ ->
let p =
Lib.info lib |> Lib_info.obj_dir |> Obj_dir.dir
|> Path.drop_build_context_exn
in
placeholder placeholders p)
Lib.info lib |> Lib_info.obj_dir |> Obj_dir.dir
|> Path.drop_build_context_exn |> placeholder placeholders)
in
((Lib.name lib, v) :: libs, placeholders))
in
let libs = List.rev libs in
let context = Compilation_context.context cctx in
let ocaml_version = Ocaml.Version.of_ocaml_config context.ocaml_config in
let buf = Buffer.create 1024 in
(* Parse the replacement format described in [artifact_substitution.ml]. *)
pr buf
Expand All @@ -167,6 +161,8 @@ let build_info_code cctx ~libs ~api_version =
[@@inline never]
|ocaml};
let fmt_eval : _ format6 =
let context = Compilation_context.context cctx in
let ocaml_version = Ocaml.Version.of_ocaml_config context.ocaml_config in
if Ocaml.Version.has_sys_opaque_identity ocaml_version then
"let %s = eval (Sys.opaque_identity %S)"
else "let %s = eval %S"
Expand All @@ -177,7 +173,7 @@ let build_info_code cctx ~libs ~api_version =
if not (Path.Source.Map.is_empty placeholders) then pr buf "";
pr buf "let version = %s" version;
pr buf "";
prlist buf "statically_linked_libraries" libs ~f:(fun (name, v) ->
prlist buf "statically_linked_libraries" (List.rev libs) ~f:(fun (name, v) ->
pr buf "%S, %s" (Lib_name.to_string name) v);
Buffer.contents buf

Expand Down Expand Up @@ -222,8 +218,10 @@ let handle_special_libs cctx =
let ( let& ) m f = Resolve.Memo.bind m ~f in
let& all_libs = Compilation_context.requires_link cctx in
let obj_dir = Compilation_context.obj_dir cctx |> Obj_dir.of_local in
let sctx = Compilation_context.super_context cctx in
let ctx = Super_context.context sctx in
let ctx =
let sctx = Compilation_context.super_context cctx in
Super_context.context sctx
in
let open Memo.O in
let* builtins =
let+ findlib =
Expand All @@ -247,7 +245,8 @@ let handle_special_libs cctx =
~obj_name:None
~code:
(Action_builder.of_memo
(build_info_code cctx ~libs:all_libs ~api_version))
(let* () = Memo.return () in
build_info_code cctx ~libs:all_libs ~api_version))
~requires:(Resolve.Memo.return [ lib ])
~precompiled_cmi:true
in
Expand Down Expand Up @@ -276,10 +275,10 @@ let handle_special_libs cctx =
in
generate_and_compile_module ~obj_name cctx ~lib ~name
~code:
(Action_builder.return
(findlib_init_code
~preds:Findlib.findlib_predicates_set_by_dune
~libs:all_libs))
(Action_builder.delayed (fun () ->
findlib_init_code
~preds:Findlib.findlib_predicates_set_by_dune
~libs:all_libs))
~requires ~precompiled_cmi:false
in
process_libs libs
Expand All @@ -290,10 +289,9 @@ let handle_special_libs cctx =
process_libs libs ~to_link_rev:(Lib lib :: to_link_rev) ~force_linkall
| Dune_site { data_module; plugins } ->
let code =
if plugins then
Action_builder.return
(dune_site_plugins_code ~libs:all_libs ~builtins)
else Action_builder.return (dune_site_code ())
Action_builder.delayed @@ fun () ->
if plugins then dune_site_plugins_code ~libs:all_libs ~builtins
else dune_site_code ()
in
let& module_ =
generate_and_compile_module cctx ~obj_name:None ~name:data_module
Expand Down