summaryrefslogtreecommitdiff
path: root/src/myocamlbuild.ml
blob: 3974e93926164aace88fc791a3d503becd4d76aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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 ;;