[llvm-commits] CVS: llvm/lib/Linker/LinkLibraries.cpp

Reid Spencer reid at x10sys.com
Sun Dec 12 19:00:15 PST 2004



Changes in directory llvm/lib/Linker:

LinkLibraries.cpp added (r1.1)
---
Log message:

This file contains only the Linker's library linking support

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

Index: llvm/lib/Linker/LinkLibraries.cpp
diff -c /dev/null llvm/lib/Linker/LinkLibraries.cpp:1.1
*** /dev/null	Sun Dec 12 21:00:14 2004
--- llvm/lib/Linker/LinkLibraries.cpp	Sun Dec 12 21:00:04 2004
***************
*** 0 ****
--- 1,70 ----
+ //===- lib/Linker/LinkLibraries.cpp - Link LLVM libraries -----------------===//
+ // 
+ //                     The LLVM Compiler Infrastructure
+ //
+ // This file was developed by Reid Spencerand is distributed under the 
+ // University of Illinois Open Source License. See LICENSE.TXT for details.
+ // 
+ //===----------------------------------------------------------------------===//
+ //
+ // This file contains routines to handle finding libraries and linking them in. 
+ //
+ //===----------------------------------------------------------------------===//
+ 
+ #include "llvm/Linker.h"
+ #include "llvm/Module.h"
+ 
+ using namespace llvm;
+ 
+ /// LinkInLibrary - links one library into the HeadModule
+ bool 
+ Linker::LinkInLibrary(const std::string& Lib) 
+ {
+   // Determine where this library lives.
+   sys::Path Pathname = FindLib(Lib);
+   if (Pathname.isEmpty())
+     return warning("Cannot find library '" + Lib + "'");
+ 
+   // If its an archive, try to link it in
+   if (Pathname.isArchive()) {
+     if (LinkInArchive(Pathname)) {
+       return error("Cannot link archive '" + Pathname.toString() + "'");
+     }
+   } else {
+     return warning("Supposed library '" + Lib + "' isn't a library.");
+   }
+   return false;
+ }
+ 
+ /// LinkLibraries - takes the specified library files and links them into the
+ /// main bytecode object file.
+ ///
+ /// Inputs:
+ ///  Libraries  - The list of libraries to link into the module.
+ ///
+ /// Return value:
+ ///  FALSE - No error.
+ ///  TRUE  - Error.
+ ///
+ bool 
+ Linker::LinkInLibraries(const std::vector<std::string> &Libraries) {
+ 
+   // Process the set of libraries we've been provided
+   for (unsigned i = 0; i < Libraries.size(); ++i) {
+     if (LinkInLibrary(Libraries[i]))
+       return true;
+   }
+ 
+   // At this point we have processed all the libraries provided to us. Since
+   // we have an aggregated module at this point, the dependent libraries in
+   // that module should also be aggregated with duplicates eliminated. This is
+   // now the time to process the dependent libraries to resolve any remaining
+   // symbols.
+   const Module::LibraryListType& DepLibs = Composite->getLibraries();
+   for (Module::LibraryListType::const_iterator I = DepLibs.begin(), 
+       E = DepLibs.end(); I != E; ++I) {
+     if (LinkInLibrary(*I)) 
+       return true;
+   }
+   return false;
+ }






More information about the llvm-commits mailing list