Better support for byte-code only architectures

This commit is contained in:
Jeremie Dimino 2017-02-24 10:13:13 +00:00
parent 0b0d80011c
commit ae376d30d2
2 changed files with 35 additions and 25 deletions

View File

@ -361,6 +361,12 @@ the current directory, you only need to list the entry point in
and =<name>.bc= is a bytecode executable which requires =ocamlrun= to and =<name>.bc= is a bytecode executable which requires =ocamlrun= to
run. run.
Note that in case native compilation is not available, =<name>.exe=
will in fact be a custom byte-code executable. Custom in the sense of
=ocamlc -custom=, meaning that it is a native executable that embeds
the =ocamlrun= virtual machine as well as the byte code. As such you
can always rely on =<name>.exe= begin available.
=<optional-fields>= are: =<optional-fields>= are:
- =(libraries (<library-dependencies>))= is the same as the - =(libraries (<library-dependencies>))= is the same as the

View File

@ -1087,30 +1087,35 @@ module Gen(P : Params) = struct
+-----------------------------------------------------------------+ *) +-----------------------------------------------------------------+ *)
let build_exe ~flags ~dir ~requires ~name ~mode ~modules ~dep_graph ~link_flags = let build_exe ~flags ~dir ~requires ~name ~mode ~modules ~dep_graph ~link_flags =
Option.iter (Mode.compiler mode ctx) ~f:(fun compiler -> let ext_ext = Mode.exe_ext mode in
let dep_graph = Ml_kind.Dict.get dep_graph Impl in let mode, link_flags, compiler =
let exe = Path.relative dir (name ^ Mode.exe_ext mode) in match Mode.compiler mode ctx with
add_rule | Some compiler -> (mode, link_flags, compiler)
(Build.fanout | None -> (Byte, "-custom" :: link_flags, ctx.ocamlc)
(requires in
>>> Build.dyn_paths (Build.arr (Lib.archive_files ~mode ~ext_lib:ctx.ext_lib))) let dep_graph = Ml_kind.Dict.get dep_graph Impl in
(dep_graph let exe = Path.relative dir (name ^ exe_ext) in
>>> Build.arr (fun dep_graph -> add_rule
names_to_top_closed_cm_files (Build.fanout
~dir (requires
~dep_graph >>> Build.dyn_paths (Build.arr (Lib.archive_files ~mode ~ext_lib:ctx.ext_lib)))
~modules (dep_graph
~mode >>> Build.arr (fun dep_graph ->
[String.capitalize name])) names_to_top_closed_cm_files
>>> ~dir
Build.run ~dep_graph
(Dep compiler) ~modules
[ Ocaml_flags.get flags mode ~mode
; A "-o"; Target exe [String.capitalize name]))
; As link_flags >>>
; Dyn (fun (libs, _) -> Lib.link_flags libs ~mode) Build.run
; Dyn (fun (_, cm_files) -> Deps cm_files) (Dep compiler)
])) [ Ocaml_flags.get flags mode
; A "-o"; Target exe
; As link_flags
; Dyn (fun (libs, _) -> Lib.link_flags libs ~mode)
; Dyn (fun (_, cm_files) -> Deps cm_files)
])
let executables_rules (exes : Executables.t) ~dir ~all_modules = let executables_rules (exes : Executables.t) ~dir ~all_modules =
let dep_kind = Build.Required in let dep_kind = Build.Required in
@ -1151,7 +1156,6 @@ module Gen(P : Params) = struct
build_exe ~flags ~dir ~requires ~name ~mode ~modules ~dep_graph build_exe ~flags ~dir ~requires ~name ~mode ~modules ~dep_graph
~link_flags:exes.link_flags)) ~link_flags:exes.link_flags))
(* +-----------------------------------------------------------------+ (* +-----------------------------------------------------------------+
| User actions | | User actions |
+-----------------------------------------------------------------+ *) +-----------------------------------------------------------------+ *)