CommandAction.h revision 22add6ff3426df1a85089fe6a6e1597ee3b6f300
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_COMMAND_ACTION_H
10#define MCLD_MC_COMMAND_ACTION_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
19namespace mcld {
20
21class SearchDirs;
22class InputBuilder;
23
24//===----------------------------------------------------------------------===//
25// Derived InputAction
26//===----------------------------------------------------------------------===//
27/// InputFileAction
28class InputFileAction : public InputAction
29{
30public:
31  explicit InputFileAction(unsigned int pPosition, const sys::fs::Path &pPath);
32
33  const sys::fs::Path& path() const { return m_Path; }
34
35  bool activate(InputBuilder&) const;
36
37private:
38  sys::fs::Path m_Path;
39};
40
41/// NamespecAction
42class NamespecAction : public InputAction
43{
44public:
45  NamespecAction(unsigned int pPosition,
46                 const std::string &pNamespec,
47                 SearchDirs& pSearchDirs);
48
49  const std::string &namespec() const { return m_Namespec; }
50
51  bool activate(InputBuilder&) const;
52
53private:
54  std::string m_Namespec;
55  SearchDirs& m_SearchDirs;
56};
57
58/// BitcodeAction
59class BitcodeAction : public InputAction
60{
61public:
62  BitcodeAction(unsigned int pPosition, const sys::fs::Path &pPath);
63
64  const sys::fs::Path& path() const { return m_Path; }
65
66  bool activate(InputBuilder&) const;
67
68private:
69  sys::fs::Path m_Path;
70};
71
72/// StartGroupAction
73class StartGroupAction : public InputAction
74{
75public:
76  explicit StartGroupAction(unsigned int pPosition);
77
78  bool activate(InputBuilder&) const;
79};
80
81/// EndGroupAction
82class EndGroupAction : public InputAction
83{
84public:
85  explicit EndGroupAction(unsigned int pPosition);
86
87  bool activate(InputBuilder&) const;
88};
89
90/// WholeArchiveAction
91class WholeArchiveAction : public InputAction
92{
93public:
94  explicit WholeArchiveAction(unsigned int pPosition);
95
96  bool activate(InputBuilder&) const;
97};
98
99/// NoWholeArchiveAction
100class NoWholeArchiveAction : public InputAction
101{
102public:
103  explicit NoWholeArchiveAction(unsigned int pPosition);
104
105  bool activate(InputBuilder&) const;
106};
107
108/// AsNeededAction
109class AsNeededAction : public InputAction
110{
111public:
112  explicit AsNeededAction(unsigned int pPosition);
113
114  bool activate(InputBuilder&) const;
115};
116
117/// NoAsNeededAction
118class NoAsNeededAction : public InputAction
119{
120public:
121  explicit NoAsNeededAction(unsigned int pPosition);
122
123  bool activate(InputBuilder&) const;
124};
125
126/// AddNeededAction
127class AddNeededAction : public InputAction
128{
129public:
130  explicit AddNeededAction(unsigned int pPosition);
131
132  bool activate(InputBuilder&) const;
133};
134
135/// NoAddNeededAction
136class NoAddNeededAction : public InputAction
137{
138public:
139  explicit NoAddNeededAction(unsigned int pPosition);
140
141  bool activate(InputBuilder&) const;
142};
143
144/// BDynamicAction
145class BDynamicAction : public InputAction
146{
147public:
148  explicit BDynamicAction(unsigned int pPosition);
149
150  bool activate(InputBuilder&) const;
151};
152
153/// BStaticAction
154class BStaticAction : public InputAction
155{
156public:
157  explicit BStaticAction(unsigned int pPosition);
158
159  bool activate(InputBuilder&) const;
160};
161
162} // end of namespace mcld
163
164#endif
165
166