SpaceOS wire protocol codecs for host-guest communication
at main 79 lines 1.8 kB view raw
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)))