Better support for byte-code only architectures
This commit is contained in:
parent
0b0d80011c
commit
ae376d30d2
|
@ -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
|
||||||
|
|
|
@ -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 |
|
||||||
+-----------------------------------------------------------------+ *)
|
+-----------------------------------------------------------------+ *)
|
||||||
|
|
Loading…
Reference in New Issue