diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b2243fb73cbb478acf89b2041a07bc04dab24629..8fe240f9e137d9a95cd9a51302cea8ff7042f172 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -12,6 +12,7 @@ tests:
   - if [ ! -d _opam ]; then echo "no local switch in the CI cache, we setup a new switch"; opam switch create --yes --no-install . ocaml-base-compiler.4.11.1; fi
   - eval $(opam env)
   - sudo apt-get update
+  - sudo apt install -y protobuf-compiler
   - opam repository add remote https://opam.ocaml.org
   - opam depext --yes ocplib-endian base fmt alt-ergo.2.4.0
   - opam install . --deps-only --with-test --yes
diff --git a/lib/onnx/dune b/lib/onnx/dune
index 8040d4808e13f95b0ab42c35232a41592c8819c7..b6defdaae529d3da1f7f80a934d3e4eac796ae90 100644
--- a/lib/onnx/dune
+++ b/lib/onnx/dune
@@ -1,5 +1,15 @@
 (library
- (name onnx)
- (public_name onnx)
- (libraries base csv piqirun.pb)
- (synopsis "ONNX parser"))
+  (name onnx)
+  (public_name onnx)
+  (libraries base csv piqirun.pb)
+  (synopsis "ONNX parser"))
+(rule
+  (targets onnx_piqi.ml onnx_piqi.mli)
+  (action
+    (run ./generate_onnx_interface.sh)
+    )
+  (deps
+    onnx.proto
+    generate_onnx_interface.sh)
+  (mode
+    promote))
diff --git a/lib/onnx/generate_onnx_interface.sh b/lib/onnx/generate_onnx_interface.sh
new file mode 100755
index 0000000000000000000000000000000000000000..3925d5189410e11aa2f305b3f788884de5dd3e19
--- /dev/null
+++ b/lib/onnx/generate_onnx_interface.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+piqi of-proto onnx.proto
+sed -ie 's/-START-VERSION/START-VERSION/' onnx.proto.piqi
+piqic-ocaml onnx.proto.piqi
+sed -ie 's/external/externall/g' onnx_piqi.ml
+ocamlfind ocamlc -package piqirun.pb -i onnx_piqi.ml > onnx_piqi.mli