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