//===- lib/Linker/LinkItems.cpp - Link LLVM objects and libraries ---------===// // // The LLVM Compiler Infrastructure // // This file was developed by Reid Spencer and is distributed under the // University of Illinois Open Source License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file contains routines to handle linking together LLVM bytecode files, // and to handle annoying things like static libraries. // //===----------------------------------------------------------------------===// #include "llvm/Linker.h" #include "llvm/Module.h" using namespace llvm; // LinkItems - preserve link order for an arbitrary set of linkage items. bool Linker::LinkInItems(const ItemList& Items) { // For each linkage item ... for (ItemList::const_iterator I = Items.begin(), E = Items.end(); I != E; ++I) { if (I->second) { // Link in the library suggested. if (LinkInLibrary(I->first)) return true; } else { if (LinkInFile(sys::Path(I->first))) return true; } } // At this point we have processed all the link items 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; }