1//===- DerivedPositionDependentOptions.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_DERIVEDPOSITIONDEPENDENTOPTIONS_H
10#define MCLD_DERIVEDPOSITIONDEPENDENTOPTIONS_H
11#ifdef ENABLE_UNITTEST
12#include <gtest.h>
13#endif
14
15#include <string>
16
17#include "mcld/Support/RealPath.h"
18#include "mcld/Support/PositionDependentOption.h"
19
20namespace mcld
21{
22
23  /** \class DerivedPositionDependentOptions
24   *  \brief This file contains the declarations of classes derived from PositionDependentOption.
25   */
26
27  class FileOption : public PositionDependentOption {
28  private:
29    sys::fs::RealPath m_Path;
30
31  protected:
32    FileOption(unsigned pPosition, Type pType, const sys::fs::Path &pPath)
33      : PositionDependentOption(pPosition, pType)
34    { m_Path.assign(pPath); }
35
36  public:
37    inline const sys::fs::Path *path() const { return &m_Path; }
38  };
39
40  class NamespecOption : public PositionDependentOption {
41  private:
42    std::string m_pNamespec;
43
44  public:
45    NamespecOption(unsigned pPosition, const std::string &pNamespec)
46      : PositionDependentOption(pPosition, PositionDependentOption::NAMESPEC),
47        m_pNamespec(pNamespec) { }
48
49    inline const std::string &namespec() const { return m_pNamespec; }
50  };
51
52  class BitcodeOption : public FileOption {
53  public:
54    BitcodeOption(unsigned pPosition, const sys::fs::Path &pPath)
55      : FileOption(pPosition, PositionDependentOption::BITCODE, pPath) { }
56  };
57
58  class StartGroupOption : public PositionDependentOption {
59  public:
60    StartGroupOption(unsigned pPosition)
61      : PositionDependentOption(pPosition,
62                                PositionDependentOption::START_GROUP) { }
63  };
64
65  class EndGroupOption : public PositionDependentOption {
66  public:
67    EndGroupOption(unsigned pPosition)
68      : PositionDependentOption(pPosition,
69                                PositionDependentOption::END_GROUP) { }
70  };
71
72  class InputFileOption : public FileOption {
73  public:
74    InputFileOption(unsigned pPosition, const sys::fs::Path &pPath)
75      : FileOption(pPosition, PositionDependentOption::INPUT_FILE, pPath) { }
76  };
77
78  class WholeArchiveOption : public PositionDependentOption {
79  public:
80    WholeArchiveOption(unsigned pPosition)
81      : PositionDependentOption(pPosition,
82                                PositionDependentOption::WHOLE_ARCHIVE) { }
83  };
84
85  class NoWholeArchiveOption : public PositionDependentOption {
86  public:
87    NoWholeArchiveOption(unsigned pPosition)
88      : PositionDependentOption(pPosition,
89                                PositionDependentOption::NO_WHOLE_ARCHIVE) { }
90  };
91
92  class AsNeededOption : public PositionDependentOption {
93  public:
94    AsNeededOption(unsigned pPosition)
95      : PositionDependentOption(pPosition,
96                                PositionDependentOption::AS_NEEDED) { }
97  };
98
99  class NoAsNeededOption : public PositionDependentOption {
100  public:
101    NoAsNeededOption(unsigned pPosition)
102      : PositionDependentOption(pPosition,
103                                PositionDependentOption::NO_AS_NEEDED) { }
104  };
105
106  class AddNeededOption : public PositionDependentOption {
107  public:
108    AddNeededOption(unsigned pPosition)
109      : PositionDependentOption(pPosition,
110                                PositionDependentOption::ADD_NEEDED) { }
111  };
112
113  class NoAddNeededOption : public PositionDependentOption {
114  public:
115    NoAddNeededOption(unsigned pPosition)
116      : PositionDependentOption(pPosition,
117                                PositionDependentOption::NO_ADD_NEEDED) { }
118  };
119
120  class BDynamicOption : public PositionDependentOption {
121  public:
122    BDynamicOption(unsigned pPosition)
123      : PositionDependentOption(pPosition,
124                                PositionDependentOption::BDYNAMIC) { }
125  };
126
127  class BStaticOption : public PositionDependentOption {
128  public:
129    BStaticOption(unsigned pPosition)
130      : PositionDependentOption(pPosition,
131                                PositionDependentOption::BSTATIC) { }
132  };
133
134} // namespace of mcld
135
136#endif
137
138