• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
path()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 
namespec()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 
path()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 
assignment()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 
filename()186   const std::string& filename() const { return m_FileName; }
187 
kind()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