From fcd2db7483a099e8f14022b672e14ebbe8f58fc2 Mon Sep 17 00:00:00 2001 From: Hugo Heuzard Date: Thu, 5 Jan 2023 16:32:43 +0100 Subject: [PATCH] Jsoo: don't ignore linkall --- src/dune_rules/exe.ml | 33 +++++++++++++++++++++++++++++++-- src/dune_rules/jsoo_rules.ml | 2 +- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/dune_rules/exe.ml b/src/dune_rules/exe.ml index 1ebf2009f26f..749cb2cad0de 100644 --- a/src/dune_rules/exe.ml +++ b/src/dune_rules/exe.ml @@ -202,6 +202,35 @@ let link_exe ~loc ~name ~(linkage : Linkage.t) ~cm_files ~link_time_code_gen | Some p -> Promote p) action_with_targets +let command_args_has_flag ~f args = + let rec has_flag : 'a. 'a Command.Args.t -> bool Action_builder.t = + fun (type a) (a : a Command.Args.t) -> + match a with + | Command.Args.A a -> Action_builder.return (f a) + | As l -> Action_builder.return (List.exists l ~f) + | S l -> + Action_builder.all (List.map l ~f:has_flag) + |> Action_builder.map ~f:(List.exists ~f:(fun x -> x)) + | Concat (s, l) -> + if f s then Action_builder.return true + else + Action_builder.all (List.map l ~f:has_flag) + |> Action_builder.map ~f:(List.exists ~f:(fun x -> x)) + | Dyn a -> has_flag_action_builder a + | Dep _ + | Deps _ + | Target _ + | Path _ + | Paths _ + | Hidden_deps _ + | Hidden_targets _ + | Fail _ + | Expand _ -> Action_builder.return false + and has_flag_action_builder a = + Action_builder.bind a ~f:(fun t -> has_flag t) + in + has_flag args + let link_js ~name ~loc ~obj_dir ~top_sorted_modules ~link_args ~promote ~link_time_code_gen cctx = let in_context = @@ -209,8 +238,8 @@ let link_js ~name ~loc ~obj_dir ~top_sorted_modules ~link_args ~promote in let src = exe_path_from_name cctx ~name ~linkage:Linkage.byte_for_jsoo in let linkall = - ignore link_args; - Action_builder.return false + Action_builder.bind link_args + ~f:(command_args_has_flag ~f:(String.equal "-linkall")) in Jsoo_rules.build_exe cctx ~loc ~obj_dir ~in_context ~src ~top_sorted_modules ~promote ~link_time_code_gen ~linkall diff --git a/src/dune_rules/jsoo_rules.ml b/src/dune_rules/jsoo_rules.ml index 61d7c42217e1..d16ad994233d 100644 --- a/src/dune_rules/jsoo_rules.ml +++ b/src/dune_rules/jsoo_rules.ml @@ -248,7 +248,6 @@ let link_rule cc ~runtime ~target ~obj_dir cm ~flags ~linkall [ "stdlib"; "std_exit" ^ Js_of_ocaml.Ext.cmo ]) in let linkall = force_linkall || force_linkall2 in - ignore linkall; Command.Args.S [ Deps (List.concat @@ -258,6 +257,7 @@ let link_rule cc ~runtime ~target ~obj_dir cm ~flags ~linkall ; all_other_modules ; [ std_exit ] ]) + ; (if linkall then A "-linkall" else As []) ] in let spec = Command.Args.S [ Dep (Path.build runtime); Dyn get_all ] in