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 17namespace mcld { 18 19class SearchDirs; 20class InputBuilder; 21class LinkerConfig; 22 23//===----------------------------------------------------------------------===// 24// Derived InputAction 25//===----------------------------------------------------------------------===// 26/// InputFileAction 27class InputFileAction : public InputAction 28{ 29public: 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 36private: 37 sys::fs::Path m_Path; 38}; 39 40/// NamespecAction 41class NamespecAction : public InputAction 42{ 43public: 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 52private: 53 std::string m_Namespec; 54 const SearchDirs& m_SearchDirs; 55}; 56 57/// BitcodeAction 58class BitcodeAction : public InputAction 59{ 60public: 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 67private: 68 sys::fs::Path m_Path; 69}; 70 71/// StartGroupAction 72class StartGroupAction : public InputAction 73{ 74public: 75 explicit StartGroupAction(unsigned int pPosition); 76 77 bool activate(InputBuilder&) const; 78}; 79 80/// EndGroupAction 81class EndGroupAction : public InputAction 82{ 83public: 84 explicit EndGroupAction(unsigned int pPosition); 85 86 bool activate(InputBuilder&) const; 87}; 88 89/// WholeArchiveAction 90class WholeArchiveAction : public InputAction 91{ 92public: 93 explicit WholeArchiveAction(unsigned int pPosition); 94 95 bool activate(InputBuilder&) const; 96}; 97 98/// NoWholeArchiveAction 99class NoWholeArchiveAction : public InputAction 100{ 101public: 102 explicit NoWholeArchiveAction(unsigned int pPosition); 103 104 bool activate(InputBuilder&) const; 105}; 106 107/// AsNeededAction 108class AsNeededAction : public InputAction 109{ 110public: 111 explicit AsNeededAction(unsigned int pPosition); 112 113 bool activate(InputBuilder&) const; 114}; 115 116/// NoAsNeededAction 117class NoAsNeededAction : public InputAction 118{ 119public: 120 explicit NoAsNeededAction(unsigned int pPosition); 121 122 bool activate(InputBuilder&) const; 123}; 124 125/// AddNeededAction 126class AddNeededAction : public InputAction 127{ 128public: 129 explicit AddNeededAction(unsigned int pPosition); 130 131 bool activate(InputBuilder&) const; 132}; 133 134/// NoAddNeededAction 135class NoAddNeededAction : public InputAction 136{ 137public: 138 explicit NoAddNeededAction(unsigned int pPosition); 139 140 bool activate(InputBuilder&) const; 141}; 142 143/// BDynamicAction 144class BDynamicAction : public InputAction 145{ 146public: 147 explicit BDynamicAction(unsigned int pPosition); 148 149 bool activate(InputBuilder&) const; 150}; 151 152/// BStaticAction 153class BStaticAction : public InputAction 154{ 155public: 156 explicit BStaticAction(unsigned int pPosition); 157 158 bool activate(InputBuilder&) const; 159}; 160 161/// DefSymAction 162class DefSymAction : public InputAction 163{ 164public: 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 171private: 172 std::string& m_Assignment; 173}; 174 175/// ScriptAction 176class ScriptAction : public InputAction 177{ 178public: 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 190private: 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