[llvm-commits] CVS: llvm/include/llvm/Linker.h

Reid Spencer reid at x10sys.com
Sun Dec 5 11:14:53 PST 2004



Changes in directory llvm/include/llvm:

Linker.h updated: 1.12 -> 1.13
---
Log message:

Fix PR139: http://llvm.cs.uiuc.edu/PR139 : \
Add support for ordered linking with the LinkItems function

---
Diffs of the changes:  (+37 -0)

Index: llvm/include/llvm/Linker.h
diff -u llvm/include/llvm/Linker.h:1.12 llvm/include/llvm/Linker.h:1.13
--- llvm/include/llvm/Linker.h:1.12	Tue Nov 16 10:46:22 2004
+++ llvm/include/llvm/Linker.h	Sun Dec  5 13:14:43 2004
@@ -14,6 +14,7 @@
 #ifndef LLVM_LINKER_H
 #define LLVM_LINKER_H
 
+#include "llvm/Support/CommandLine.h"
 #include <string>
 #include <vector>
 #include <set>
@@ -22,6 +23,42 @@
 
 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<std::pair<std::string,bool> > 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<std::string>& 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<std::string>. The
+/// resulting \p OutList is suitable for use with LinkItems.
+/// @see LinkItems
+/// @throws nothing
+void BuildLinkItems(
+  LinkItemList& OutList,
+  const cl::list<std::string>& Files, ///< List of files to put in list
+  const cl::list<std::string>& 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






More information about the llvm-commits mailing list