| //===- Linker.h - Module Linker Interface -----------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_LINKER_LINKER_H |
| #define LLVM_LINKER_LINKER_H |
| |
| #include "llvm/ADT/SmallPtrSet.h" |
| #include <string> |
| |
| namespace llvm { |
| |
| class Comdat; |
| class GlobalValue; |
| class Module; |
| class StringRef; |
| class StructType; |
| |
| /// This class provides the core functionality of linking in LLVM. It keeps a |
| /// pointer to the merged module so far. It doesn't take ownership of the |
| /// module since it is assumed that the user of this class will want to do |
| /// something with it after the linking. |
| class Linker { |
| public: |
| enum LinkerMode { |
| DestroySource = 0, // Allow source module to be destroyed. |
| PreserveSource = 1 // Preserve the source module. |
| }; |
| |
| Linker(Module *M, bool SuppressWarnings=false); |
| ~Linker(); |
| |
| Module *getModule() const { return Composite; } |
| void deleteModule(); |
| |
| /// \brief Link \p Src into the composite. The source is destroyed if |
| /// \p Mode is DestroySource and preserved if it is PreserveSource. |
| /// If \p ErrorMsg is not null, information about any error is written |
| /// to it. |
| /// Returns true on error. |
| bool linkInModule(Module *Src, unsigned Mode, std::string *ErrorMsg); |
| bool linkInModule(Module *Src, std::string *ErrorMsg) { |
| return linkInModule(Src, Linker::DestroySource, ErrorMsg); |
| } |
| |
| static bool LinkModules(Module *Dest, Module *Src, unsigned Mode, |
| std::string *ErrorMsg); |
| |
| private: |
| Module *Composite; |
| SmallPtrSet<StructType*, 32> IdentifiedStructTypes; |
| |
| bool SuppressWarnings; |
| }; |
| |
| } // End llvm namespace |
| |
| #endif |