SpaceOS wire protocol codecs for host-guest communication
1; Differential testing: OCaml wire vs EverParse C parsers
2;
3; Workflow:
4; 1. BUILD_EVERPARSE=1 dune build @space-wire/test/diff/gen_c
5; (generates .3d schemas, runs EverParse, produces C stubs)
6; 2. BUILD_EVERPARSE=1 dune build @space-wire/test/diff/diff
7; (runs differential tests)
8;
9; EverParse is slow, so code generation only runs when BUILD_EVERPARSE=1.
10; Generated C code can be promoted and committed for C API consumers.
11
12; Generate .3d files from SpaceOS Wire codecs
13
14(executable
15 (name gen_schemas)
16 (modules gen_schemas)
17 (enabled_if
18 (= %{env:BUILD_EVERPARSE=} "1"))
19 (libraries space_wire_3d))
20
21(rule
22 (alias gen_schemas)
23 (enabled_if
24 (= %{env:BUILD_EVERPARSE=} "1"))
25 (targets SpaceOSFrame.3d ErrorPayload.3d DpPayload.3d Superblock.3d)
26 (deps gen_schemas.exe)
27 (action
28 (run ./gen_schemas.exe)))
29
30; Generate EverParse C code and differential test infrastructure
31; Run with: BUILD_EVERPARSE=1 dune build @space-wire/test/diff/gen_c
32
33(executable
34 (name gen_c)
35 (modules gen_c)
36 (enabled_if
37 (= %{env:BUILD_EVERPARSE=} "1"))
38 (libraries space_wire_3d wire.diff-gen))
39
40(rule
41 (alias gen_c)
42 (enabled_if
43 (= %{env:BUILD_EVERPARSE=} "1"))
44 (targets
45 (dir schemas)
46 stubs.c
47 stubs.ml
48 diff_test.ml)
49 (deps gen_c.exe)
50 (action
51 (run ./gen_c.exe schemas)))
52
53; Compile C stubs (includes EverParse generated C)
54; NOTE: Only builds with BUILD_EVERPARSE=1 after running @gen_c first
55
56(library
57 (name stubs)
58 (modules stubs)
59 (enabled_if
60 (= %{env:BUILD_EVERPARSE=} "1"))
61 (foreign_stubs
62 (language c)
63 (names stubs)
64 (flags :standard -I schemas)))
65
66(executable
67 (name diff_test)
68 (modules diff_test)
69 (enabled_if
70 (= %{env:BUILD_EVERPARSE=} "1"))
71 (libraries stubs))
72
73(rule
74 (alias diff)
75 (enabled_if
76 (= %{env:BUILD_EVERPARSE=} "1"))
77 (deps diff_test.exe)
78 (action
79 (run ./diff_test.exe)))