1 //===- Linker.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 10 #ifndef ALONE_SUPPORT_LINKER_CONFIG_H 11 #define ALONE_SUPPORT_LINKER_CONFIG_H 12 13 #include <string> 14 15 #include <mcld/MC/MCLDInfo.h> 16 #include <mcld/Support/TargetRegistry.h> 17 #include <mcld/LD/DiagnosticLineInfo.h> 18 #include <mcld/LD/DiagnosticPrinter.h> 19 20 namespace alone { 21 22 class LinkerConfig { 23 private: 24 //===--------------------------------------------------------------------===// 25 // Available Configurations 26 //===--------------------------------------------------------------------===// 27 const std::string mTriple; 28 bool mShared; 29 std::string mSOName; 30 31 private: 32 //===--------------------------------------------------------------------===// 33 // These are generated by LinkerConfig during initialize(). 34 //===--------------------------------------------------------------------===// 35 const mcld::Target *mTarget; 36 bool initializeTarget(); 37 38 mcld::MCLDInfo *mLDInfo; 39 bool initializeLDInfo(); 40 41 mcld::DiagnosticLineInfo *mDiagLineInfo; 42 mcld::DiagnosticPrinter *mDiagPrinter; 43 bool initializeDiagnostic(); 44 45 public: 46 //===--------------------------------------------------------------------===// 47 // Getters 48 //===--------------------------------------------------------------------===// getTriple()49 inline const std::string &getTriple() const 50 { return mTriple; } 51 getTarget()52 inline const mcld::Target *getTarget() const 53 { return mTarget; } 54 getLDInfo()55 inline mcld::MCLDInfo* getLDInfo() 56 { return mLDInfo; } 57 getLDInfo()58 inline const mcld::MCLDInfo* getLDInfo() const 59 { return mLDInfo; } 60 isShared()61 inline bool isShared() const 62 { return mShared; } 63 getSOName()64 inline std::string getSOName() const 65 { return mSOName; } 66 67 void setShared(bool pEnable = true); 68 69 void setBsymbolic(bool pEnable = true); 70 71 void setSOName(const std::string &pSOName); 72 73 void setDyld(const std::string &pDyld); 74 75 void setSysRoot(const std::string &pSysRoot); 76 77 void addWrap(const std::string &pWrapSymbol); 78 79 void addPortable(const std::string &pPortableSymbol); 80 81 void addSearchDir(const std::string &pDir); 82 83 public: 84 LinkerConfig(const std::string& pTriple); 85 86 virtual ~LinkerConfig(); 87 }; 88 89 } // end namespace alone 90 91 #endif // ALONE_SUPPORT_LINKER_CONFIG_H 92