162 lines
4.6 KiB
OCaml
162 lines
4.6 KiB
OCaml
(** Compilation contexts *)
|
|
|
|
(** jbuild supports two different kind of contexts:
|
|
|
|
- the default context, which correspond to the environment jbuild is run, i.e. it
|
|
takes [ocamlc] and other tools from the [PATH] and the ocamlfind configuration where
|
|
it can find it
|
|
|
|
- opam switch contexts, where one opam switch correspond to one context
|
|
|
|
each context is built into a sub-directory of "_build":
|
|
|
|
- _build/default for the default context
|
|
- _build/<switch> for other contexts
|
|
|
|
jbuild is able to build simultaneously against several contexts. In particular this
|
|
allow for simple cross-compilation: when an executable running on the host is needed,
|
|
it is obtained by looking in another context.
|
|
*)
|
|
|
|
open! Import
|
|
|
|
module Kind : sig
|
|
module Opam : sig
|
|
type t =
|
|
{ root : string
|
|
; switch : string
|
|
}
|
|
end
|
|
type t = Default | Opam of Opam.t
|
|
end
|
|
|
|
module Env_var : sig
|
|
type t = string
|
|
val compare : t -> t -> int
|
|
end
|
|
|
|
module Env_var_map : Map.S with type key := Env_var.t
|
|
|
|
type t =
|
|
{ name : string
|
|
; kind : Kind.t
|
|
|
|
; (** [true] if this context is used for the .merlin files *)
|
|
merlin : bool
|
|
|
|
; (** If this context is a cross-compilation context, you need another context for
|
|
building tools used for the compilation that run on the host. *)
|
|
for_host : t option
|
|
|
|
; (** [false] if a user explicitly listed this context in the workspace.
|
|
Controls whether we add artifacts from this context @install *)
|
|
implicit : bool
|
|
|
|
; (** Directory where artifact are stored, for instance "_build/default" *)
|
|
build_dir : Path.t
|
|
|
|
; (** [PATH] *)
|
|
path : Path.t list
|
|
|
|
; (** [OCAML_TOPLEVEL_PATH] *)
|
|
toplevel_path : Path.t option
|
|
|
|
; (** Ocaml bin directory with all ocaml tools *)
|
|
ocaml_bin : Path.t
|
|
; ocaml : Path.t
|
|
; ocamlc : Path.t
|
|
; ocamlopt : Path.t option
|
|
; ocamldep : Path.t
|
|
; ocamlmklib : Path.t
|
|
|
|
; (** Environment variables *)
|
|
env : string array
|
|
|
|
; (** Diff between the base environment and [env] *)
|
|
env_extra : string Env_var_map.t
|
|
|
|
; findlib : Findlib.t
|
|
; findlib_toolchain : string option
|
|
|
|
; (** Misc *)
|
|
arch_sixtyfour : bool
|
|
|
|
; opam_var_cache : (string, string) Hashtbl.t
|
|
|
|
; (** Native dynlink *)
|
|
natdynlink_supported : bool
|
|
|
|
; (** Output of [ocamlc -config] *)
|
|
ocamlc_config : (string * string) list
|
|
; version : string
|
|
; stdlib_dir : Path.t
|
|
; ccomp_type : string
|
|
; c_compiler : string
|
|
; ocamlc_cflags : string
|
|
; ocamlopt_cflags : string
|
|
; bytecomp_c_libraries : string
|
|
; native_c_libraries : string
|
|
; native_pack_linker : string
|
|
; ranlib : string
|
|
; cc_profile : string
|
|
; architecture : string
|
|
; system : string
|
|
; ext_obj : string
|
|
; ext_asm : string
|
|
; ext_lib : string
|
|
; ext_dll : string
|
|
; os_type : string
|
|
; default_executable_name : string
|
|
; host : string
|
|
; target : string
|
|
; flambda : bool
|
|
; exec_magic_number : string
|
|
; cmi_magic_number : string
|
|
; cmo_magic_number : string
|
|
; cma_magic_number : string
|
|
; cmx_magic_number : string
|
|
; cmxa_magic_number : string
|
|
; ast_impl_magic_number : string
|
|
; ast_intf_magic_number : string
|
|
; cmxs_magic_number : string
|
|
; cmt_magic_number : string
|
|
|
|
; which_cache : (string, Path.t option) Hashtbl.t
|
|
}
|
|
|
|
val sexp_of_t : t -> Sexp.t
|
|
|
|
(** Compare the context names *)
|
|
val compare : t -> t -> int
|
|
|
|
(** If [use_findlib] is [false], don't try to guess the library search path with opam or
|
|
ocamlfind. This is only for building jbuilder itself, so that its build is completely
|
|
independent of the user setup. *)
|
|
val create
|
|
: ?use_findlib:bool
|
|
-> ?merlin:bool
|
|
-> Workspace.Context.t
|
|
-> t list Future.t
|
|
|
|
val which : t -> string -> Path.t option
|
|
|
|
val extend_env : vars:string Env_var_map.t -> env:string array -> string array
|
|
|
|
val opam_config_var : t -> string -> string option Future.t
|
|
|
|
val install_prefix : t -> Path.t Future.t
|
|
val install_ocaml_libdir : t -> Path.t option Future.t
|
|
|
|
val env_for_exec : t -> string array
|
|
|
|
val initial_env : string array Lazy.t
|
|
|
|
(** Return the compiler needed for this compilation mode *)
|
|
val compiler : t -> Mode.t -> Path.t option
|
|
|
|
(** The best compilation mode for this context *)
|
|
val best_mode : t -> Mode.t
|
|
|
|
(** [\["-g"\]] if [!Clflags.g] and [\[\]] otherwise *)
|
|
val cc_g : t -> string list
|