Skip to content

Commit

Permalink
Merge pull request ocaml#88 from mshinwell/flambda-backend-changes-20…
Browse files Browse the repository at this point in the history
…22-12-27

Backport flambda-backend changes 2022-12-27
  • Loading branch information
mshinwell committed Dec 28, 2022
2 parents e012992 + 3e49df3 commit cc63992
Show file tree
Hide file tree
Showing 43 changed files with 594 additions and 311 deletions.
42 changes: 40 additions & 2 deletions .depend
Expand Up @@ -105,6 +105,16 @@ utils/identifiable.cmx : \
utils/misc.cmx \
utils/identifiable.cmi
utils/identifiable.cmi :
utils/import_info.cmo : \
utils/misc.cmi \
utils/compilation_unit.cmi \
utils/import_info.cmi
utils/import_info.cmx : \
utils/misc.cmx \
utils/compilation_unit.cmx \
utils/import_info.cmi
utils/import_info.cmi : \
utils/compilation_unit.cmi
utils/int_replace_polymorphic_compare.cmo : \
utils/int_replace_polymorphic_compare.cmi
utils/int_replace_polymorphic_compare.cmx : \
Expand Down Expand Up @@ -720,6 +730,7 @@ typing/env.cmi : \
parsing/longident.cmi \
parsing/location.cmi \
utils/load_path.cmi \
utils/import_info.cmi \
typing/ident.cmi \
utils/compilation_unit.cmi \
file_formats/cmi_format.cmi \
Expand Down Expand Up @@ -1071,6 +1082,7 @@ typing/persistent_env.cmo : \
parsing/location.cmi \
utils/load_path.cmi \
utils/lazy_backtrack.cmi \
utils/import_info.cmi \
utils/consistbl.cmi \
utils/config.cmi \
utils/compilation_unit.cmi \
Expand All @@ -1083,6 +1095,7 @@ typing/persistent_env.cmx : \
parsing/location.cmx \
utils/load_path.cmx \
utils/lazy_backtrack.cmx \
utils/import_info.cmx \
utils/consistbl.cmx \
utils/config.cmx \
utils/compilation_unit.cmx \
Expand All @@ -1094,6 +1107,7 @@ typing/persistent_env.cmi : \
utils/misc.cmi \
parsing/location.cmi \
utils/lazy_backtrack.cmi \
utils/import_info.cmi \
utils/consistbl.cmi \
utils/compilation_unit.cmi \
file_formats/cmi_format.cmi
Expand Down Expand Up @@ -1786,6 +1800,7 @@ typing/typemod.cmo : \
utils/load_path.cmi \
typing/includemod_errorprinter.cmi \
typing/includemod.cmi \
utils/import_info.cmi \
typing/ident.cmi \
typing/envaux.cmi \
typing/env.cmi \
Expand Down Expand Up @@ -1823,6 +1838,7 @@ typing/typemod.cmx : \
utils/load_path.cmx \
typing/includemod_errorprinter.cmx \
typing/includemod.cmx \
utils/import_info.cmx \
typing/ident.cmx \
typing/envaux.cmx \
typing/env.cmx \
Expand Down Expand Up @@ -2080,6 +2096,7 @@ bytecomp/bytelink.cmo : \
parsing/location.cmi \
utils/load_path.cmi \
bytecomp/instruct.cmi \
utils/import_info.cmi \
typing/ident.cmi \
bytecomp/emitcode.cmi \
bytecomp/dll.cmi \
Expand All @@ -2099,6 +2116,7 @@ bytecomp/bytelink.cmx : \
parsing/location.cmx \
utils/load_path.cmx \
bytecomp/instruct.cmx \
utils/import_info.cmx \
typing/ident.cmx \
bytecomp/emitcode.cmx \
bytecomp/dll.cmx \
Expand All @@ -2113,6 +2131,7 @@ bytecomp/bytelink.cmx : \
bytecomp/bytelink.cmi : \
bytecomp/symtable.cmi \
utils/misc.cmi \
utils/import_info.cmi \
utils/compilation_unit.cmi \
file_formats/cmo_format.cmi
bytecomp/bytepackager.cmo : \
Expand All @@ -2126,6 +2145,7 @@ bytecomp/bytepackager.cmo : \
parsing/location.cmi \
utils/load_path.cmi \
bytecomp/instruct.cmi \
utils/import_info.cmi \
typing/ident.cmi \
typing/env.cmi \
bytecomp/emitcode.cmi \
Expand All @@ -2147,6 +2167,7 @@ bytecomp/bytepackager.cmx : \
parsing/location.cmx \
utils/load_path.cmx \
bytecomp/instruct.cmx \
utils/import_info.cmx \
typing/ident.cmx \
typing/env.cmx \
bytecomp/emitcode.cmx \
Expand Down Expand Up @@ -2286,6 +2307,7 @@ bytecomp/symtable.cmo : \
bytecomp/meta.cmi \
parsing/location.cmi \
lambda/lambda.cmi \
utils/import_info.cmi \
typing/ident.cmi \
bytecomp/dll.cmi \
utils/config.cmi \
Expand All @@ -2301,6 +2323,7 @@ bytecomp/symtable.cmx : \
bytecomp/meta.cmx \
parsing/location.cmx \
lambda/lambda.cmx \
utils/import_info.cmx \
typing/ident.cmx \
bytecomp/dll.cmx \
utils/config.cmx \
Expand All @@ -2312,6 +2335,7 @@ bytecomp/symtable.cmx : \
bytecomp/symtable.cmi : \
utils/misc.cmi \
lambda/lambda.cmi \
utils/import_info.cmi \
typing/ident.cmi \
file_formats/cmo_format.cmi
asmcomp/CSE.cmo : \
Expand Down Expand Up @@ -2487,6 +2511,7 @@ asmcomp/asmlink.cmo : \
utils/misc.cmi \
parsing/location.cmi \
utils/load_path.cmi \
utils/import_info.cmi \
asmcomp/emitaux.cmi \
asmcomp/emit.cmi \
utils/consistbl.cmi \
Expand All @@ -2507,6 +2532,7 @@ asmcomp/asmlink.cmx : \
utils/misc.cmx \
parsing/location.cmx \
utils/load_path.cmx \
utils/import_info.cmx \
asmcomp/emitaux.cmx \
asmcomp/emit.cmx \
utils/consistbl.cmx \
Expand All @@ -2522,6 +2548,7 @@ asmcomp/asmlink.cmx : \
asmcomp/asmlink.cmi
asmcomp/asmlink.cmi : \
utils/misc.cmi \
utils/import_info.cmi \
utils/compilation_unit.cmi \
file_formats/cmx_format.cmi
asmcomp/asmpackager.cmo : \
Expand All @@ -2535,6 +2562,7 @@ asmcomp/asmpackager.cmo : \
utils/load_path.cmi \
utils/linkage_name.cmi \
lambda/lambda.cmi \
utils/import_info.cmi \
middle_end/flambda/flambda_middle_end.cmi \
middle_end/flambda/export_info.cmi \
typing/env.cmi \
Expand All @@ -2559,6 +2587,7 @@ asmcomp/asmpackager.cmx : \
utils/load_path.cmx \
utils/linkage_name.cmx \
lambda/lambda.cmx \
utils/import_info.cmx \
middle_end/flambda/flambda_middle_end.cmx \
middle_end/flambda/export_info.cmx \
typing/env.cmx \
Expand Down Expand Up @@ -3421,6 +3450,7 @@ middle_end/compilenv.cmo : \
parsing/location.cmi \
utils/load_path.cmi \
utils/linkage_name.cmi \
utils/import_info.cmi \
typing/ident.cmi \
middle_end/flambda/export_info.cmi \
typing/env.cmi \
Expand All @@ -3440,6 +3470,7 @@ middle_end/compilenv.cmx : \
parsing/location.cmx \
utils/load_path.cmx \
utils/linkage_name.cmx \
utils/import_info.cmx \
typing/ident.cmx \
middle_end/flambda/export_info.cmx \
typing/env.cmx \
Expand Down Expand Up @@ -4050,22 +4081,26 @@ file_formats/cmi_format.cmo : \
typing/types.cmi \
utils/misc.cmi \
parsing/location.cmi \
utils/import_info.cmi \
utils/config.cmi \
utils/compilation_unit.cmi \
file_formats/cmi_format.cmi
file_formats/cmi_format.cmx : \
typing/types.cmx \
utils/misc.cmx \
parsing/location.cmx \
utils/import_info.cmx \
utils/config.cmx \
utils/compilation_unit.cmx \
file_formats/cmi_format.cmi
file_formats/cmi_format.cmi : \
typing/types.cmi \
utils/misc.cmi \
utils/import_info.cmi \
utils/compilation_unit.cmi
file_formats/cmo_format.cmi : \
lambda/lambda.cmi \
utils/import_info.cmi \
typing/ident.cmi \
utils/compilation_unit.cmi
file_formats/cmt_format.cmo : \
Expand All @@ -4077,6 +4112,7 @@ file_formats/cmt_format.cmo : \
parsing/location.cmi \
utils/load_path.cmi \
parsing/lexer.cmi \
utils/import_info.cmi \
typing/env.cmi \
utils/config.cmi \
utils/compilation_unit.cmi \
Expand All @@ -4092,6 +4128,7 @@ file_formats/cmt_format.cmx : \
parsing/location.cmx \
utils/load_path.cmx \
parsing/lexer.cmx \
utils/import_info.cmx \
typing/env.cmx \
utils/config.cmx \
utils/compilation_unit.cmx \
Expand All @@ -4108,6 +4145,7 @@ file_formats/cmt_format.cmi : \
file_formats/cmi_format.cmi
file_formats/cmx_format.cmi : \
lambda/lambda.cmi \
utils/import_info.cmi \
middle_end/flambda/export_info.cmi \
utils/compilation_unit.cmi \
middle_end/clambda.cmi
Expand Down Expand Up @@ -6427,17 +6465,17 @@ toplevel/expunge.cmo : \
bytecomp/symtable.cmi \
lambda/runtimedef.cmi \
utils/misc.cmi \
utils/import_info.cmi \
typing/ident.cmi \
utils/compilation_unit.cmi \
file_formats/cmo_format.cmi \
bytecomp/bytesections.cmi
toplevel/expunge.cmx : \
bytecomp/symtable.cmx \
lambda/runtimedef.cmx \
utils/misc.cmx \
utils/import_info.cmx \
typing/ident.cmx \
utils/compilation_unit.cmx \
file_formats/cmo_format.cmi \
bytecomp/bytesections.cmx
toplevel/genprintval.cmo : \
typing/types.cmi \
Expand Down
6 changes: 3 additions & 3 deletions HACKING.jst.adoc
Expand Up @@ -2,9 +2,9 @@

ocaml-jst has a dune-based build system which is different from
upstream OCaml. To get started, you'll need a working install of OCaml
4.12 and dune, e.g. via OPAM:
4.14 and dune, e.g. via OPAM:

$ opam switch create 4.12.0
$ opam switch create 4.14.0
$ eval $(opam env)
$ opam install dune

Expand All @@ -30,7 +30,7 @@ to build without running the testsuite, or:
to start a continuously polling build of the compiler.

Note that the dune-based build system is entirely separate from the main
Makefile, and so you will need to use `make -f Makefile.jst install`
Makefile, and so you will need to use `make -f Makefile.jst install`
to install after building.

## Testing
Expand Down
29 changes: 21 additions & 8 deletions asmcomp/asmlink.ml
Expand Up @@ -49,8 +49,10 @@ let cmx_required = ref ([] : CU.t list)

let check_consistency file_name unit crc =
begin try
List.iter
(fun (name, crco) ->
Array.iter
(fun import ->
let name = Import_info.name import in
let crco = Import_info.crc_with_unit import in
interfaces := name :: !interfaces;
match crco with
None -> ()
Expand All @@ -68,8 +70,10 @@ let check_consistency file_name unit crc =
raise(Error(Inconsistent_interface(name, user, auth)))
end;
begin try
List.iter
(fun (name, crco) ->
Array.iter
(fun import ->
let name = Import_info.cu import in
let crco = Import_info.crc import in
implementations := name :: !implementations;
match crco with
None ->
Expand Down Expand Up @@ -100,9 +104,15 @@ let check_consistency file_name unit crc =

let extract_crc_interfaces () =
Cmi_consistbl.extract !interfaces crc_interfaces
|> List.map (fun (name, crc_with_unit) ->
Import_info.create name ~crc_with_unit)

let extract_crc_implementations () =
Cmx_consistbl.extract !implementations crc_implementations
|> List.map (fun (name, crco) -> name, Option.map snd crco)
|> List.map (fun (cu, crc) ->
let crc = Option.map (fun ((), crc) -> crc) crc in
Import_info.create_normal cu ~crc)


(* Add C objects and options and "custom" info from a library descriptor.
See bytecomp/bytelink.ml for comments on the order of C objects. *)
Expand Down Expand Up @@ -137,7 +147,8 @@ let is_required name =
try ignore (Hashtbl.find missing_globals name); true
with Not_found -> false

let add_required by (name, _crc) =
let add_required by import =
let name = Import_info.cu import in
try
let rq = Hashtbl.find missing_globals name in
rq := by :: !rq
Expand Down Expand Up @@ -199,7 +210,7 @@ let scan_file file tolink =
| Unit (file_name,info,crc) ->
(* This is a .cmx file. It must be linked in any case. *)
remove_required info.ui_unit;
List.iter (add_required file_name) info.ui_imports_cmx;
Array.iter (add_required file_name) info.ui_imports_cmx;
(info, file_name, crc) :: tolink
| Library (file_name,infos) ->
(* This is an archive file. Each unit contained in it will be linked
Expand All @@ -216,7 +227,7 @@ let scan_file file tolink =
let req_by =
Printf.sprintf "%s(%s)" file_name (ui_name |> CU.Name.to_string)
in
List.iter (add_required req_by) info.ui_imports_cmx;
Array.iter (add_required req_by) info.ui_imports_cmx;
(info, file_name, crc) :: reqd
end else
reqd)
Expand All @@ -231,6 +242,8 @@ let force_linking_of_startup ~ppf_dump =
let make_globals_map units_list ~crc_interfaces =
let crc_interfaces =
crc_interfaces
|> List.map (fun import ->
Import_info.name import, Import_info.crc_with_unit import)
|> CU.Name.Tbl.of_list
in
let defined =
Expand Down
4 changes: 2 additions & 2 deletions asmcomp/asmlink.mli
Expand Up @@ -26,8 +26,8 @@ val call_linker_shared: string list -> string -> unit

val reset : unit -> unit
val check_consistency: filepath -> Cmx_format.unit_infos -> Digest.t -> unit
val extract_crc_interfaces: unit -> Cmx_format.import_info_cmi list
val extract_crc_implementations: unit -> Cmx_format.import_info_cmx list
val extract_crc_interfaces: unit -> Import_info.t list
val extract_crc_implementations: unit -> Import_info.t list

type error =
| File_not_found of filepath
Expand Down

0 comments on commit cc63992

Please sign in to comment.