Wire_diff_genSourceCode generation for EverParse differential testing.
Generates .3d files from Wire schemas, invokes EverParse, and produces C stubs, OCaml externals, and a test runner for comparing OCaml codecs against EverParse-generated C parsers.
Typical usage:
(* In gen_c.ml *)
let schemas =
[
Diff_gen.schema ~name:"MyFrame" ~struct_:My_3d.frame_struct
~module_:My_3d.frame_module
|> Option.get;
]
let () = Diff_gen.generate ~outdir:"schemas" ~outdir:"." schemasSame as Wire.Everparse.t.
val schema :
name:string ->
struct_:Wire.Everparse.Raw.struct_ ->
module_:Wire.Everparse.Raw.module_ ->
schema optionschema ~name ~struct_ ~module_ creates a schema if the struct has a known fixed wire size. Returns None for variable-length structs.
generate ~schema_dir ~outdir schemas runs the full pipeline: 1. Generate .3d files in schema_dir 2. Invoke EverParse to produce C parsers 3. Generate stubs.c, stubs.ml, diff_test.ml in outdir
Requires EverParse installed at ~/.local/everparse/.
Delegates to Wire_3d.generate_3d.
Delegates to Wire_3d.run_everparse.
generate_c_stubs ~schema_dir ~outdir schemas generates stubs.c with OCaml C stubs using Wire_3d.everparse_name.
generate_ml_stubs ~outdir schemas generates stubs.ml with OCaml externals.