+
+ (* Now let's generate some code. *)
+ let implem_types, interf_types =
+ CG.generate_types (
+ List.map (
+ fun (struct_name, (_, all_fields, _, _)) ->
+ (struct_name, all_fields)
+ ) structures
+ ) in
+
+ let implem_offsets, interf_offsets =
+ CG.generate_offsets (
+ List.map (
+ fun (struct_name, (kernels, all_fields, _, _)) ->
+ (struct_name, (kernels, all_fields))
+ ) structures
+ ) in
+
+ let (implem_parsers, interf_parsers), subst_parsers =
+ CG.generate_parsers (
+ List.map (
+ fun (struct_name, (_, all_fields, palist, _)) ->
+ (struct_name, (all_fields, palist))
+ ) structures
+ ) in
+
+ let implem_version_maps, interf_version_maps =
+ CG.generate_version_maps (
+ List.map (
+ fun (struct_name, (kernels, _, _, pahash)) ->
+ (struct_name, (kernels, pahash))
+ ) structures
+ ) in
+
+ let implem_followers, interf_followers =
+ CG.generate_followers good_struct_names (
+ List.map (
+ fun (struct_name, (_, all_fields, _, _)) -> (struct_name, all_fields)
+ ) structures
+ ) in
+
+ (* Output the generated code. *)
+ let output_file = outputdir // "kernel.mli" in
+ printf "Writing kernel data interface to %s ...\n%!" output_file;
+ CG.output_interf ~output_file
+ interf_types interf_offsets interf_parsers
+ interf_version_maps interf_followers;
+
+ let output_file = outputdir // "kernel.ml" in
+ printf "Writing kernel data parsers to %s ...\n%!" output_file;
+ CG.output_implem ~output_file
+ implem_types implem_offsets implem_parsers subst_parsers
+ implem_version_maps implem_followers;
+
+ printf "Finished.\n"