(library
 (name pocaml)
 (libraries llvm))

(alias
 (name default)
 (deps
  (alias lexer)
  (alias parser)))

(rule
 (alias lexer)
 (deps lexer.mll)
 (target lexer.ml)
 (action
  (chdir
   %{workspace_root}
   (run %{bin:ocamllex} -q -o %{target} %{deps}))))

(rule
 (alias parser)
 (deps parser.mly)
 (targets parser.ml parser.mli)
 (action
  (chdir
   %{workspace_root}
   (run %{bin:ocamlyacc} %{deps}))))

(rule
 (alias yacc_log)
 (deps parser.mly)
 (targets parser_debug.output)
 (action
  (run %{bin:ocamlyacc} -bparser_debug -v %{deps})))

(rule
 (alias pprint)
 (target pprint)
 (deps
  print.ml
  ast.ml
  (alias lexer)
  (alias parser))
 (action
  (chdir
   %{workspace_root}/lib
   (run
    %{bin:ocamlopt}
    -o
    pprint
    ast.ml
    parser.mli
    parser.ml
    lexer.ml
    print.ml))))

(rule
 (alias pprint_ir)
 (target pprint_ir)
 (deps
  print_ir.ml
  ir.ml
  (alias lexer)
  (alias parser))
 (action
  (chdir
   %{workspace_root}/lib
   (run
    %{bin:ocamlopt}
    -o
    pprint_ir
    ir.ml
    parser.mli
    parser.ml
    lexer.ml
    print_ir.ml))))

(env
 (dev
  (flags (:standard -w -26-27))))
