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