summaryrefslogtreecommitdiff
path: root/src/myocamlbuild.ml
diff options
context:
space:
mode:
Diffstat (limited to 'src/myocamlbuild.ml')
-rw-r--r--src/myocamlbuild.ml35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/myocamlbuild.ml b/src/myocamlbuild.ml
new file mode 100644
index 00000000..3974e939
--- /dev/null
+++ b/src/myocamlbuild.ml
@@ -0,0 +1,35 @@
+open Ocamlbuild_plugin ;;
+open Command ;;
+open Pathname ;;
+open Outcome ;;
+
+(* paths relative to _build *)
+let lem_dir = "../../../lem" ;;
+let lem_libdir = lem_dir / "ocaml-lib/_build" ;;
+let lem_lib = lem_libdir / "extract" ;;
+let lem = lem_dir / "lem" ;;
+let interp_ast = "lem_interp/interp_ast.lem" ;;
+
+dispatch begin function
+| After_rules ->
+ (* ocaml_lib "lem_interp/interp"; *)
+ ocaml_lib ~extern:true ~dir:lem_libdir ~tag_name:"use_lem" lem_lib;
+
+ rule "lem -> ml"
+ ~prod: "%.ml"
+ ~deps: ["%.lem"; interp_ast]
+ (fun env builder -> Seq [
+ Cmd (S [ P lem; A "-i"; P interp_ast; A "-ocaml"; P (env "%.lem") ]);
+ mv (basename (env "%.ml")) (dirname (env "%.ml"))
+ ]);
+
+ rule "sail -> lem"
+ ~prod: "%.lem"
+ ~deps: ["%.sail"; "main.native"]
+ (fun env builder -> Seq [
+ Cmd (S [ P "./main.native"; A "-lem_ast"; P (env "%.sail") ]);
+ mv (basename (env "%.lem")) (dirname (env "%.lem"))
+ ]);
+
+| _ -> ()
+end ;;