1 //===- SearchDirs.h -------------------------------------------------------===// 2 // 3 // The MCLinker Project 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 #ifndef MCLD_MC_SEARCHDIRS_H_ 10 #define MCLD_MC_SEARCHDIRS_H_ 11 12 #include "mcld/MC/Input.h" 13 #include "mcld/Support/Path.h" 14 #include "mcld/Support/Compiler.h" 15 16 #include <llvm/ADT/StringRef.h> 17 18 #include <string> 19 #include <vector> 20 21 namespace mcld { 22 23 class MCLDDirectory; 24 class MCLDFile; 25 26 /** \class SearchDirs 27 * \brief SearchDirs contains the list of paths that MCLinker will search for 28 * archive libraries and control scripts. 29 * 30 * SearchDirs is customized for linking. It handles -L on the command line 31 * and SEARCH_DIR macro in the link script. 32 * 33 * @see MCLDDirectory. 34 */ 35 class SearchDirs { 36 public: 37 typedef std::vector<MCLDDirectory*> DirList; 38 typedef DirList::iterator iterator; 39 typedef DirList::const_iterator const_iterator; 40 41 public: 42 SearchDirs(); 43 44 explicit SearchDirs(const sys::fs::Path& pSysRoot); 45 46 ~SearchDirs(); 47 48 // find - give a namespec, return a real path of the shared object. 49 sys::fs::Path* find(const std::string& pNamespec, 50 mcld::Input::Type pPreferType); 51 52 const sys::fs::Path* find(const std::string& pNamespec, 53 mcld::Input::Type pPreferType) const; 54 setSysRoot(const sys::fs::Path & pSysRoot)55 void setSysRoot(const sys::fs::Path& pSysRoot) { m_SysRoot = pSysRoot; } sysroot()56 const sys::fs::Path& sysroot() const { return m_SysRoot; } 57 58 // ----- iterators ----- // begin()59 const_iterator begin() const { return m_DirList.begin(); } begin()60 iterator begin() { return m_DirList.begin(); } end()61 const_iterator end() const { return m_DirList.end(); } end()62 iterator end() { return m_DirList.end(); } 63 64 // ----- modifiers ----- // 65 bool insert(const char* pDirectory); 66 67 bool insert(const std::string& pDirectory); 68 69 bool insert(const sys::fs::Path& pDirectory); 70 71 private: 72 DirList m_DirList; 73 sys::fs::Path m_SysRoot; 74 75 private: 76 DISALLOW_COPY_AND_ASSIGN(SearchDirs); 77 }; 78 79 } // namespace mcld 80 81 #endif // MCLD_MC_SEARCHDIRS_H_ 82