summaryrefslogtreecommitdiff
path: root/bindings
diff options
context:
space:
mode:
authorPeter Zotov <whitequark@whitequark.org>2014-12-01 19:50:39 +0000
committerPeter Zotov <whitequark@whitequark.org>2014-12-01 19:50:39 +0000
commit787a41926a0bc0aa04091c9e908becf2fbac9289 (patch)
treea8ea3a6e8c7f82546977525f165f2d3e39397192 /bindings
parenta0a26f222bb4ac0b6cf52fd4bbce6f2ad63a4321 (diff)
[OCaml] Move Llvm.clone_module to its own Llvm_transform_utils module.
This way most code won't link this (substantially large) library, if compiled statically with LLVM. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223072 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'bindings')
-rw-r--r--bindings/ocaml/llvm/CMakeLists.txt2
-rw-r--r--bindings/ocaml/llvm/META.llvm.in8
-rw-r--r--bindings/ocaml/llvm/Makefile2
-rw-r--r--bindings/ocaml/llvm/llvm.ml1
-rw-r--r--bindings/ocaml/llvm/llvm.mli3
-rw-r--r--bindings/ocaml/transforms/CMakeLists.txt1
-rw-r--r--bindings/ocaml/transforms/Makefile2
-rw-r--r--bindings/ocaml/transforms/utils/CMakeLists.txt5
-rw-r--r--bindings/ocaml/transforms/utils/Makefile19
-rw-r--r--bindings/ocaml/transforms/utils/llvm_transform_utils.ml10
-rw-r--r--bindings/ocaml/transforms/utils/llvm_transform_utils.mli17
-rw-r--r--bindings/ocaml/transforms/utils/transform_utils_ocaml.c31
12 files changed, 94 insertions, 7 deletions
diff --git a/bindings/ocaml/llvm/CMakeLists.txt b/bindings/ocaml/llvm/CMakeLists.txt
index 0d0fe3bd083..d1c4ae52736 100644
--- a/bindings/ocaml/llvm/CMakeLists.txt
+++ b/bindings/ocaml/llvm/CMakeLists.txt
@@ -1,7 +1,7 @@
add_ocaml_library(llvm
OCAML llvm
C llvm_ocaml
- LLVM core transformutils support)
+ LLVM core support)
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/META.llvm.in"
diff --git a/bindings/ocaml/llvm/META.llvm.in b/bindings/ocaml/llvm/META.llvm.in
index f9808c73eb9..92896e387a6 100644
--- a/bindings/ocaml/llvm/META.llvm.in
+++ b/bindings/ocaml/llvm/META.llvm.in
@@ -61,6 +61,14 @@ package "scalar_opts" (
archive(native) = "llvm_scalar_opts.cmxa"
)
+package "transform_utils" (
+ requires = "llvm"
+ version = "@PACKAGE_VERSION@"
+ description = "Transform utilities for LLVM"
+ archive(byte) = "llvm_transform_utils.cma"
+ archive(native) = "llvm_transform_utils.cmxa"
+)
+
package "vectorize" (
requires = "llvm"
version = "@PACKAGE_VERSION@"
diff --git a/bindings/ocaml/llvm/Makefile b/bindings/ocaml/llvm/Makefile
index fb682c731b4..c0785a154d2 100644
--- a/bindings/ocaml/llvm/Makefile
+++ b/bindings/ocaml/llvm/Makefile
@@ -13,7 +13,7 @@
LEVEL := ../../..
LIBRARYNAME := llvm
-UsedComponents := core transformutils
+UsedComponents := core
UsedOcamlLibs := llvm
ExtraLibs := -lstdc++
diff --git a/bindings/ocaml/llvm/llvm.ml b/bindings/ocaml/llvm/llvm.ml
index 0df4d40c0a2..8df34378b79 100644
--- a/bindings/ocaml/llvm/llvm.ml
+++ b/bindings/ocaml/llvm/llvm.ml
@@ -313,7 +313,6 @@ external mdkind_id : llcontext -> string -> llmdkind = "llvm_mdkind_id"
(*===-- Modules -----------------------------------------------------------===*)
external create_module : llcontext -> string -> llmodule = "llvm_create_module"
external dispose_module : llmodule -> unit = "llvm_dispose_module"
-external clone_module : llmodule -> llmodule = "LLVMCloneModule"
external target_triple: llmodule -> string
= "llvm_target_triple"
external set_target_triple: string -> llmodule -> unit
diff --git a/bindings/ocaml/llvm/llvm.mli b/bindings/ocaml/llvm/llvm.mli
index e5e90c33f4a..e6514327128 100644
--- a/bindings/ocaml/llvm/llvm.mli
+++ b/bindings/ocaml/llvm/llvm.mli
@@ -431,9 +431,6 @@ val create_module : llcontext -> string -> llmodule
[llvm::Module::~Module]. *)
val dispose_module : llmodule -> unit
-(** [clone_module m] returns an exact copy of module [m]. *)
-val clone_module : llmodule -> llmodule
-
(** [target_triple m] is the target specifier for the module [m], something like
[i686-apple-darwin8]. See the method [llvm::Module::getTargetTriple]. *)
val target_triple: llmodule -> string
diff --git a/bindings/ocaml/transforms/CMakeLists.txt b/bindings/ocaml/transforms/CMakeLists.txt
index 8693ffb6ae2..beb8694019b 100644
--- a/bindings/ocaml/transforms/CMakeLists.txt
+++ b/bindings/ocaml/transforms/CMakeLists.txt
@@ -1,4 +1,5 @@
add_subdirectory(ipo)
add_subdirectory(passmgr_builder)
add_subdirectory(scalar_opts)
+add_subdirectory(utils)
add_subdirectory(vectorize)
diff --git a/bindings/ocaml/transforms/Makefile b/bindings/ocaml/transforms/Makefile
index f3637a6717c..15bffb40689 100644
--- a/bindings/ocaml/transforms/Makefile
+++ b/bindings/ocaml/transforms/Makefile
@@ -8,7 +8,7 @@
##===----------------------------------------------------------------------===##
LEVEL := ../../..
-DIRS = scalar_opts ipo vectorize passmgr_builder
+DIRS = ipo passmgr_builder scalar_opts utils vectorize
ocamldoc:
$(Verb) for i in $(DIRS) ; do \
diff --git a/bindings/ocaml/transforms/utils/CMakeLists.txt b/bindings/ocaml/transforms/utils/CMakeLists.txt
new file mode 100644
index 00000000000..37f3eb7d8ec
--- /dev/null
+++ b/bindings/ocaml/transforms/utils/CMakeLists.txt
@@ -0,0 +1,5 @@
+add_ocaml_library(llvm_transform_utils
+ OCAML llvm_transform_utils
+ OCAMLDEP llvm
+ C transform_utils_ocaml
+ LLVM transformutils)
diff --git a/bindings/ocaml/transforms/utils/Makefile b/bindings/ocaml/transforms/utils/Makefile
new file mode 100644
index 00000000000..76a6f0b8d13
--- /dev/null
+++ b/bindings/ocaml/transforms/utils/Makefile
@@ -0,0 +1,19 @@
+##===- bindings/ocaml/transforms/utils/Makefile ------------*- Makefile -*-===##
+#
+# The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+##===----------------------------------------------------------------------===##
+#
+# This is the makefile for the Objective Caml Llvm_vectorize interface.
+#
+##===----------------------------------------------------------------------===##
+
+LEVEL := ../../../..
+LIBRARYNAME := llvm_transform_utils
+UsedComponents := transformutils
+UsedOcamlInterfaces := llvm
+
+include ../../Makefile.ocaml
diff --git a/bindings/ocaml/transforms/utils/llvm_transform_utils.ml b/bindings/ocaml/transforms/utils/llvm_transform_utils.ml
new file mode 100644
index 00000000000..135efe22b5a
--- /dev/null
+++ b/bindings/ocaml/transforms/utils/llvm_transform_utils.ml
@@ -0,0 +1,10 @@
+(*===-- llvm_transform_utils.ml - LLVM OCaml Interface --------*- OCaml -*-===*
+ *
+ * The LLVM Compiler Infrastructure
+ *
+ * This file is distributed under the University of Illinois Open Source
+ * License. See LICENSE.TXT for details.
+ *
+ *===----------------------------------------------------------------------===*)
+
+external clone_module : Llvm.llmodule -> Llvm.llmodule = "llvm_clone_module"
diff --git a/bindings/ocaml/transforms/utils/llvm_transform_utils.mli b/bindings/ocaml/transforms/utils/llvm_transform_utils.mli
new file mode 100644
index 00000000000..1c2b07c3461
--- /dev/null
+++ b/bindings/ocaml/transforms/utils/llvm_transform_utils.mli
@@ -0,0 +1,17 @@
+(*===-- llvm_transform_utils.mli - LLVM OCaml Interface -------*- OCaml -*-===*
+ *
+ * The LLVM Compiler Infrastructure
+ *
+ * This file is distributed under the University of Illinois Open Source
+ * License. See LICENSE.TXT for details.
+ *
+ *===----------------------------------------------------------------------===*)
+
+(** Transform Utilities.
+
+ This interface provides an OCaml API for LLVM transform utilities, the
+ classes in the [LLVMTransformUtils] library. *)
+
+(** [clone_module m] returns an exact copy of module [m].
+ See the [llvm::CloneModule] function. *)
+external clone_module : Llvm.llmodule -> Llvm.llmodule = "llvm_clone_module"
diff --git a/bindings/ocaml/transforms/utils/transform_utils_ocaml.c b/bindings/ocaml/transforms/utils/transform_utils_ocaml.c
new file mode 100644
index 00000000000..75b20527e17
--- /dev/null
+++ b/bindings/ocaml/transforms/utils/transform_utils_ocaml.c
@@ -0,0 +1,31 @@
+/*===-- vectorize_ocaml.c - LLVM OCaml Glue ---------------------*- C++ -*-===*\
+|* *|
+|* The LLVM Compiler Infrastructure *|
+|* *|
+|* This file is distributed under the University of Illinois Open Source *|
+|* License. See LICENSE.TXT for details. *|
+|* *|
+|*===----------------------------------------------------------------------===*|
+|* *|
+|* This file glues LLVM's OCaml interface to its C interface. These functions *|
+|* are by and large transparent wrappers to the corresponding C functions. *|
+|* *|
+|* Note that these functions intentionally take liberties with the CAMLparamX *|
+|* macros, since most of the parameters are not GC heap objects. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#include "llvm-c/Core.h"
+#include "caml/mlvalues.h"
+#include "caml/misc.h"
+
+/*
+ * Do not move directly into external. This function is here to pull in
+ * -lLLVMTransformUtils, which would otherwise be not linked on static builds,
+ * as ld can't see the reference from OCaml code.
+ */
+
+/* llmodule -> llmodule */
+CAMLprim LLVMModuleRef llvm_clone_module(LLVMModuleRef M) {
+ return LLVMCloneModule(M);
+}