1 //===- CommandAction.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_COMMANDACTION_H 10 #define MCLD_MC_COMMANDACTION_H 11 12 #include <string> 13 #include <mcld/Support/Path.h> 14 #include <mcld/MC/InputAction.h> 15 #include <mcld/Script/ScriptFile.h> 16 17 namespace mcld { 18 19 class SearchDirs; 20 class InputBuilder; 21 class LinkerConfig; 22 23 //===----------------------------------------------------------------------===// 24 // Derived InputAction 25 //===----------------------------------------------------------------------===// 26 /// InputFileAction 27 class InputFileAction : public InputAction 28 { 29 public: 30 explicit InputFileAction(unsigned int pPosition, const sys::fs::Path &pPath); 31 32 const sys::fs::Path& path() const { return m_Path; } 33 34 bool activate(InputBuilder&) const; 35 36 private: 37 sys::fs::Path m_Path; 38 }; 39 40 /// NamespecAction 41 class NamespecAction : public InputAction 42 { 43 public: 44 NamespecAction(unsigned int pPosition, 45 const std::string &pNamespec, 46 const SearchDirs& pSearchDirs); 47 48 const std::string &namespec() const { return m_Namespec; } 49 50 bool activate(InputBuilder&) const; 51 52 private: 53 std::string m_Namespec; 54 const SearchDirs& m_SearchDirs; 55 }; 56 57 /// BitcodeAction 58 class BitcodeAction : public InputAction 59 { 60 public: 61 BitcodeAction(unsigned int pPosition, const sys::fs::Path &pPath); 62 63 const sys::fs::Path& path() const { return m_Path; } 64 65 bool activate(InputBuilder&) const; 66 67 private: 68 sys::fs::Path m_Path; 69 }; 70 71 /// StartGroupAction 72 class StartGroupAction : public InputAction 73 { 74 public: 75 explicit StartGroupAction(unsigned int pPosition); 76 77 bool activate(InputBuilder&) const; 78 }; 79 80 /// EndGroupAction 81 class EndGroupAction : public InputAction 82 { 83 public: 84 explicit EndGroupAction(unsigned int pPosition); 85 86 bool activate(InputBuilder&) const; 87 }; 88 89 /// WholeArchiveAction 90 class WholeArchiveAction : public InputAction 91 { 92 public: 93 explicit WholeArchiveAction(unsigned int pPosition); 94 95 bool activate(InputBuilder&) const; 96 }; 97 98 /// NoWholeArchiveAction 99 class NoWholeArchiveAction : public InputAction 100 { 101 public: 102 explicit NoWholeArchiveAction(unsigned int pPosition); 103 104 bool activate(InputBuilder&) const; 105 }; 106 107 /// AsNeededAction 108 class AsNeededAction : public InputAction 109 { 110 public: 111 explicit AsNeededAction(unsigned int pPosition); 112 113 bool activate(InputBuilder&) const; 114 }; 115 116 /// NoAsNeededAction 117 class NoAsNeededAction : public InputAction 118 { 119 public: 120 explicit NoAsNeededAction(unsigned int pPosition); 121 122 bool activate(InputBuilder&) const; 123 }; 124 125 /// AddNeededAction 126 class AddNeededAction : public InputAction 127 { 128 public: 129 explicit AddNeededAction(unsigned int pPosition); 130 131 bool activate(InputBuilder&) const; 132 }; 133 134 /// NoAddNeededAction 135 class NoAddNeededAction : public InputAction 136 { 137 public: 138 explicit NoAddNeededAction(unsigned int pPosition); 139 140 bool activate(InputBuilder&) const; 141 }; 142 143 /// BDynamicAction 144 class BDynamicAction : public InputAction 145 { 146 public: 147 explicit BDynamicAction(unsigned int pPosition); 148 149 bool activate(InputBuilder&) const; 150 }; 151 152 /// BStaticAction 153 class BStaticAction : public InputAction 154 { 155 public: 156 explicit BStaticAction(unsigned int pPosition); 157 158 bool activate(InputBuilder&) const; 159 }; 160 161 /// DefSymAction 162 class DefSymAction : public InputAction 163 { 164 public: 165 explicit DefSymAction(unsigned int pPosition, std::string& pAssignment); 166 167 bool activate(InputBuilder&) const; 168 169 const std::string& assignment() const { return m_Assignment; } 170 171 private: 172 std::string& m_Assignment; 173 }; 174 175 /// ScriptAction 176 class ScriptAction : public InputAction 177 { 178 public: 179 ScriptAction(unsigned int pPosition, 180 const std::string& pFileName, 181 ScriptFile::Kind pKind, 182 const SearchDirs& pSearchDirs); 183 184 bool activate(InputBuilder&) const; 185 186 const std::string& filename() const { return m_FileName; } 187 188 ScriptFile::Kind kind() const { return m_Kind; } 189 190 private: 191 std::string m_FileName; 192 ScriptFile::Kind m_Kind; 193 const SearchDirs& m_SearchDirs; 194 }; 195 196 } // end of namespace mcld 197 198 #endif 199 200