1 //===- MCLDInfo.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_LDINFO_H 10 #define MCLD_LDINFO_H 11 #ifdef ENABLE_UNITTEST 12 #include <gtest.h> 13 #endif 14 15 #include <llvm/ADT/Triple.h> 16 17 #include <mcld/Support/FileSystem.h> 18 #include <mcld/Support/MemoryAreaFactory.h> 19 #include <mcld/MC/MCLDOutput.h> 20 #include <mcld/MC/MCLDOptions.h> 21 #include <mcld/MC/MCLDInputTree.h> 22 #include <mcld/MC/AttributeFactory.h> 23 #include <mcld/MC/ContextFactory.h> 24 #include <mcld/LD/StrSymPool.h> 25 26 #include <string> 27 #include <cassert> 28 29 namespace mcld 30 { 31 32 /** \class MCLDInfo 33 * \brief MCLDInfo is composed of argumments of MCLinker. 34 * options() - the general options. 35 * inputs() - the tree of inputs 36 * bitcode() - the bitcode being linked 37 * output() - the output file 38 * inputFactory() - the list of all inputs 39 * attrFactory() - the list of all attributes 40 * contextFactory() - the list of all contexts. 41 * memAreaFactory() - the list of all MemoryAreas. 42 */ 43 class MCLDInfo 44 { 45 public: 46 explicit MCLDInfo(const std::string &pTripleString, 47 size_t pAttrNum, 48 size_t InputSize); 49 50 virtual ~MCLDInfo(); 51 52 GeneralOptions& options() 53 { return m_Options; } 54 55 const GeneralOptions& options() const 56 { return m_Options; } 57 58 void setBitcode(const Input& pInput); 59 Input& bitcode(); 60 const Input& bitcode() const; 61 62 Output& output() 63 { return *m_pOutput; } 64 65 const Output& output() const 66 { return *m_pOutput; } 67 68 InputTree& inputs() 69 { return *m_pInputTree; } 70 71 const InputTree& inputs() const 72 { return *m_pInputTree; } 73 74 InputFactory& inputFactory() 75 { return *m_pInputFactory; } 76 77 const InputFactory& inputFactory() const 78 { return *m_pInputFactory; } 79 80 AttributeFactory& attrFactory() 81 { return *m_pAttrFactory; } 82 83 84 const AttributeFactory& attrFactory() const 85 { return *m_pAttrFactory; } 86 87 ContextFactory& contextFactory() 88 { return *m_pCntxtFactory; } 89 90 const ContextFactory& contextFactory() const 91 { return *m_pCntxtFactory; } 92 93 MemoryAreaFactory& memAreaFactory() 94 { return *m_pMemAreaFactory; } 95 96 const MemoryAreaFactory& memAreaFactory() const 97 { return *m_pMemAreaFactory; } 98 99 const llvm::Triple& triple() const 100 { return m_Triple; } 101 102 static const char* version(); 103 104 void setNamePool(StrSymPool& pPool) 105 { m_pStrSymPool = &pPool; } 106 107 StrSymPool& getStrSymPool() { 108 assert(NULL != m_pStrSymPool); 109 return *m_pStrSymPool; 110 } 111 112 const StrSymPool& getStrSymPool() const { 113 assert(NULL != m_pStrSymPool); 114 return *m_pStrSymPool; 115 } 116 117 private: 118 // ----- General Options ----- // 119 GeneralOptions m_Options; 120 InputTree *m_pInputTree; 121 Input* m_pBitcode; 122 Output* m_pOutput; 123 llvm::Triple m_Triple; 124 125 // ----- factories ----- // 126 InputFactory *m_pInputFactory; 127 AttributeFactory *m_pAttrFactory; 128 ContextFactory *m_pCntxtFactory; 129 MemoryAreaFactory *m_pMemAreaFactory; 130 131 // ----- string and symbols ----- // 132 StrSymPool* m_pStrSymPool; 133 }; 134 135 } // namespace of mcld 136 137 #endif 138 139