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