mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-01 16:31:13 +00:00
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
63 lines
1.8 KiB
OCaml
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
|