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