diff --git a/llvm/include/llvm/Linker.h b/llvm/include/llvm/Linker.h index 2e548116d095..5c6a2924e05b 100644 --- a/llvm/include/llvm/Linker.h +++ b/llvm/include/llvm/Linker.h @@ -14,6 +14,7 @@ #ifndef LLVM_LINKER_H #define LLVM_LINKER_H +#include "llvm/Support/CommandLine.h" #include #include #include @@ -22,6 +23,42 @@ namespace llvm { class Module; +/// This type is used to pass the linkage items (libraries and files) to +/// the LinkItems function. It is composed of string/bool pairs. The string +/// provides the name of the file or library (as with the -l option). The bool +/// should be true for libraries, false for files, signifying "isLibrary". +/// @brief A list of string/bool pairs +typedef std::vector > LinkItemList; + +/// This function can be used to link a set of linkage items into a module. A +/// linkage item is one of the three things identified by the LinkItemKind +/// enumeration. This function allows linking to preserve the order of +/// specification associated with a command line, or for other purposes. Each +/// item will be linked in turn as it occurs in \p Items. Note that library +/// path items will only be in effect after they have been processed. +/// @returns The aggregated/linked Module. +/// @throws nothing +Module* LinkItems ( + const char * progname, ///< Name of the program being linked (for output) + const LinkItemList& Items, // Set of libraries/files to link in + const std::vector& LibPaths, // Paths to search for libraries + bool Verbose, ///< Link verbosely, indicating each action + bool Native ///< Linking is for a native executable +); + +/// This function provides some utility for tools that need to build the list +/// of link items from a triplet of command line options: Files, Libraries, and +/// LibraryPaths. The command line ordering is preserved by this function even +/// though the options are split into three separate cl::list. The +/// resulting \p OutList is suitable for use with LinkItems. +/// @see LinkItems +/// @throws nothing +void BuildLinkItems( + LinkItemList& OutList, + const cl::list& Files, ///< List of files to put in list + const cl::list& Libs ///< List of libraries to put in list +); + /// This is the heart of the linker. The \p Src module is linked into the \p /// Dest module. If an error occurs, true is returned, otherwise false. If \p /// ErrorMsg is not null and an error occurs, \p *ErrorMsg will be set to a