OCaml wire format DSL with EverParse 3D output for verified parsers
at main 57 lines 2.1 kB view raw
1(** Code generation for EverParse differential testing. 2 3 Generates .3d files from Wire schemas, invokes EverParse, and produces C 4 stubs, OCaml externals, and a test runner for comparing OCaml codecs against 5 EverParse-generated C parsers. 6 7 {b Typical usage:} 8 {[ 9 (* In gen_c.ml *) 10 let schemas = 11 [ 12 Diff_gen.schema ~name:"MyFrame" ~struct_:My_3d.frame_struct 13 ~module_:My_3d.frame_module 14 |> Option.get; 15 ] 16 17 let () = Diff_gen.generate ~schema_dir:"schemas" ~outdir:"." schemas 18 ]} *) 19 20type schema 21(** A schema bundles a Wire struct, module, and computed wire size. *) 22 23val schema : 24 name:string -> struct_:Wire.struct_ -> module_:Wire.module_ -> schema option 25(** [schema ~name ~struct_ ~module_] creates a schema if the struct has a known 26 fixed wire size. Returns [None] for variable-length structs. *) 27 28(** {1 Full Pipeline} *) 29 30val generate : 31 schema_dir:string -> outdir:string -> ?num_values:int -> schema list -> unit 32(** [generate ~schema_dir ~outdir schemas] runs the full pipeline: 1. Generates 33 .3d files in [schema_dir] 2. Invokes EverParse to produce C parsers 3. 34 Generates [stubs.c], [stubs.ml], [diff_test.ml] in [outdir] 35 36 Requires EverParse installed at [~/.local/everparse/]. *) 37 38(** {1 Individual Steps} *) 39 40val generate_3d_files : schema_dir:string -> schema list -> unit 41 42val run_everparse : schema_dir:string -> unit 43(** [run_everparse ~schema_dir] runs EverParse on all [.3d] files in 44 [schema_dir]. *) 45 46val generate_c_stubs : schema_dir:string -> outdir:string -> schema list -> unit 47(** [generate_c_stubs ~schema_dir ~outdir schemas] generates a C stubs file in 48 [outdir]. *) 49 50val generate_ml_stubs : outdir:string -> schema list -> unit 51(** [generate_ml_stubs ~outdir schemas] generates an OCaml stubs file in 52 [outdir]. *) 53 54val generate_test_runner : 55 outdir:string -> ?num_values:int -> schema list -> unit 56(** [generate_test_runner ~outdir ?num_values schemas] generates a differential 57 test runner in [outdir]. *)