diff options
author | Bill Wendling <isanbard@gmail.com> | 2012-05-09 08:55:40 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2012-05-09 08:55:40 +0000 |
commit | f24fde20c8d6db5a52b50a010e831c9159d3fec7 (patch) | |
tree | 1ac4b1367d308b7ecb6b36e2b13c96d69577adbe | |
parent | b12af898c317e64bba3ac1692073c812503e01c4 (diff) | |
download | external_llvm-f24fde20c8d6db5a52b50a010e831c9159d3fec7.tar.gz external_llvm-f24fde20c8d6db5a52b50a010e831c9159d3fec7.tar.bz2 external_llvm-f24fde20c8d6db5a52b50a010e831c9159d3fec7.zip |
Supply a C interface to the "LinkModules" method.
Patch by Andrew Wilkins!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156469 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm-c/Linker.h | 42 | ||||
-rw-r--r-- | lib/Linker/LinkModules.cpp | 15 |
2 files changed, 57 insertions, 0 deletions
diff --git a/include/llvm-c/Linker.h b/include/llvm-c/Linker.h new file mode 100644 index 0000000000..9f337cfba4 --- /dev/null +++ b/include/llvm-c/Linker.h @@ -0,0 +1,42 @@ +/*===-- llvm-c/Linker.h - Module Linker C Interface -------------*- C++ -*-===*\ +|* *| +|* The LLVM Compiler Infrastructure *| +|* *| +|* This file is distributed under the University of Illinois Open Source *| +|* License. See LICENSE.TXT for details. *| +|* *| +|*===----------------------------------------------------------------------===*| +|* *| +|* This file defines the C interface to the module/file/archive linker. *| +|* *| +\*===----------------------------------------------------------------------===*/ + +#ifndef LLVM_C_LINKER_H +#define LLVM_C_LINKER_H + +#include "llvm-c/Core.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef enum { + LLVMLinkerDestroySource = 0, /* Allow source module to be destroyed. */ + LLVMLinkerPreserveSource = 1 /* Preserve the source module. */ +} LLVMLinkerMode; + + +/* Links the source module into the destination module, taking ownership + * of the source module away from the caller. Optionally returns a + * human-readable description of any errors that occurred in linking. + * OutMessage must be disposed with LLVMDisposeMessage. The return value + * is true if an error occurred, false otherwise. */ +LLVMBool LLVMLinkModules(LLVMModuleRef Dest, LLVMModuleRef Src, + LLVMLinkerMode Mode, char **OutMessage); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp index 630289b2bd..7293f3d0e8 100644 --- a/lib/Linker/LinkModules.cpp +++ b/lib/Linker/LinkModules.cpp @@ -25,6 +25,7 @@ #include "llvm/Support/raw_ostream.h" #include "llvm/Transforms/Utils/Cloning.h" #include "llvm/Transforms/Utils/ValueMapper.h" +#include "llvm-c/Linker.h" #include <cctype> using namespace llvm; @@ -1335,3 +1336,17 @@ bool Linker::LinkModules(Module *Dest, Module *Src, unsigned Mode, return false; } + +//===----------------------------------------------------------------------===// +// C API. +//===----------------------------------------------------------------------===// + +LLVMBool LLVMLinkModules(LLVMModuleRef Dest, LLVMModuleRef Src, + LLVMLinkerMode Mode, char **OutMessages) { + std::string Messages; + LLVMBool Result = Linker::LinkModules(unwrap(Dest), unwrap(Src), + Mode, OutMessages? &Messages : 0); + if (OutMessages) + *OutMessages = strdup(Messages.c_str()); + return Result; +} |