mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 15:11:24 +00:00
[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
This commit is contained in:
parent
a0a26f222b
commit
787a41926a
@ -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"
|
||||
|
@ -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@"
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
LEVEL := ../../..
|
||||
LIBRARYNAME := llvm
|
||||
UsedComponents := core transformutils
|
||||
UsedComponents := core
|
||||
UsedOcamlLibs := llvm
|
||||
ExtraLibs := -lstdc++
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -1,4 +1,5 @@
|
||||
add_subdirectory(ipo)
|
||||
add_subdirectory(passmgr_builder)
|
||||
add_subdirectory(scalar_opts)
|
||||
add_subdirectory(utils)
|
||||
add_subdirectory(vectorize)
|
||||
|
@ -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 \
|
||||
|
5
bindings/ocaml/transforms/utils/CMakeLists.txt
Normal file
5
bindings/ocaml/transforms/utils/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
||||
add_ocaml_library(llvm_transform_utils
|
||||
OCAML llvm_transform_utils
|
||||
OCAMLDEP llvm
|
||||
C transform_utils_ocaml
|
||||
LLVM transformutils)
|
19
bindings/ocaml/transforms/utils/Makefile
Normal file
19
bindings/ocaml/transforms/utils/Makefile
Normal file
@ -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
|
10
bindings/ocaml/transforms/utils/llvm_transform_utils.ml
Normal file
10
bindings/ocaml/transforms/utils/llvm_transform_utils.ml
Normal file
@ -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"
|
17
bindings/ocaml/transforms/utils/llvm_transform_utils.mli
Normal file
17
bindings/ocaml/transforms/utils/llvm_transform_utils.mli
Normal file
@ -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"
|
31
bindings/ocaml/transforms/utils/transform_utils_ocaml.c
Normal file
31
bindings/ocaml/transforms/utils/transform_utils_ocaml.c
Normal file
@ -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);
|
||||
}
|
@ -120,6 +120,7 @@ if( NOT uses_ocaml LESS 0 )
|
||||
ocaml_llvm_ipo
|
||||
ocaml_llvm_passmgr_builder
|
||||
ocaml_llvm_scalar_opts
|
||||
ocaml_llvm_transform_utils
|
||||
ocaml_llvm_vectorize
|
||||
)
|
||||
|
||||
|
21
test/Bindings/OCaml/transform_utils.ml
Normal file
21
test/Bindings/OCaml/transform_utils.ml
Normal file
@ -0,0 +1,21 @@
|
||||
(* RUN: cp %s %T/transform_utils.ml
|
||||
* RUN: %ocamlc -g -warn-error A -package llvm.transform_utils -linkpkg %T/transform_utils.ml -o %t
|
||||
* RUN: %t
|
||||
* RUN: %ocamlopt -g -warn-error A -package llvm.transform_utils -linkpkg %T/transform_utils.ml -o %t
|
||||
* RUN: %t
|
||||
* XFAIL: vg_leak
|
||||
*)
|
||||
|
||||
open Llvm
|
||||
open Llvm_transform_utils
|
||||
|
||||
let context = global_context ()
|
||||
|
||||
let test_clone_module () =
|
||||
let m = create_module context "mod" in
|
||||
let m' = clone_module m in
|
||||
if m == m' then failwith "m == m'";
|
||||
if string_of_llmodule m <> string_of_llmodule m' then failwith "string_of m <> m'"
|
||||
|
||||
let () =
|
||||
test_clone_module ()
|
@ -82,6 +82,7 @@ if(TARGET ocaml_llvm)
|
||||
ocaml_llvm_ipo
|
||||
ocaml_llvm_passmgr_builder
|
||||
ocaml_llvm_scalar_opts
|
||||
ocaml_llvm_transform_utils
|
||||
ocaml_llvm_vectorize
|
||||
)
|
||||
endif()
|
||||
|
Loading…
Reference in New Issue
Block a user