llvm-6502/test/Bindings/Ocaml/passmgr_builder.ml
Peter Zotov 47f88b5bdf [OCaml] [autoconf] Migrate to ocamlfind.
This commit updates the OCaml bindings and tests to use ocamlfind.
The bindings are migrated in order to use ctypes, which are now
required for MCJIT-backed Llvm_executionengine.
The tests are migrated in order to use OUnit and to verify that
the distributed META.llvm allows to build working executables.

Every OCaml toolchain invocation is now chained through ocamlfind,
which (in theory) allows to cross-compile the OCaml bindings.

The configure script now checks for ctypes (>= 0.2.3) and
OUnit (>= 2). The code depending on these libraries will be added
later. The configure script does not check the package versions
in order to keep changes less invasive.

Additionally, OCaml bindings will now be automatically enabled
if ocamlfind is detected on the system, rather than ocamlc, as it
was before.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220899 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-30 08:29:45 +00:00

63 lines
1.8 KiB
OCaml

(* RUN: cp %s %T/passmgr_builder.ml
* RUN: %ocamlcomp -warn-error A -package llvm.passmgr_builder -linkpkg %T/passmgr_builder.ml -o %t
* RUN: %t %t.bc
* XFAIL: vg_leak
*)
(* Note: It takes several seconds for ocamlopt to link an executable with
libLLVMCore.a, so it's better to write a big test than a bunch of
little ones. *)
open Llvm
open Llvm_passmgr_builder
let context = global_context ()
let void_type = Llvm.void_type context
(* Tiny unit test framework - really just to help find which line is busted *)
let print_checkpoints = false
let suite name f =
if print_checkpoints then
prerr_endline (name ^ ":");
f ()
(*===-- Fixture -----------------------------------------------------------===*)
let filename = Sys.argv.(1)
let m = create_module context filename
(*===-- Pass Manager Builder ----------------------------------------------===*)
let test_pmbuilder () =
let (++) x f = ignore (f x); x in
let module_passmgr = PassManager.create () in
let func_passmgr = PassManager.create_function m in
let lto_passmgr = PassManager.create () in
ignore (Llvm_passmgr_builder.create ()
++ set_opt_level 3
++ set_size_level 1
++ set_disable_unit_at_a_time false
++ set_disable_unroll_loops false
++ use_inliner_with_threshold 10
++ populate_function_pass_manager func_passmgr
++ populate_module_pass_manager module_passmgr
++ populate_lto_pass_manager lto_passmgr
~internalize:false ~run_inliner:false);
Gc.compact ();
PassManager.dispose module_passmgr;
PassManager.dispose func_passmgr;
PassManager.dispose lto_passmgr
(*===-- Driver ------------------------------------------------------------===*)
let _ =
suite "pass manager builder" test_pmbuilder;
dispose_module m