1//===- PositionDependentOption.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_POSITIONDEPENDENTOPTION_H
10#define MCLD_POSITIONDEPENDENTOPTION_H
11#ifdef ENABLE_UNITTEST
12#include <gtest.h>
13#endif
14
15#include <vector>
16
17namespace mcld
18{
19
20  /** \class PositionDependentOption
21   *  \brief PositionDependentOptions converts LLVM options into MCLDInfo
22   */
23  class PositionDependentOption
24  {
25  public:
26    enum Type {
27      BITCODE,
28      NAMESPEC,
29      INPUT_FILE,
30      START_GROUP,
31      END_GROUP,
32      WHOLE_ARCHIVE,
33      NO_WHOLE_ARCHIVE,
34      AS_NEEDED,
35      NO_AS_NEEDED,
36      ADD_NEEDED,
37      NO_ADD_NEEDED,
38      BDYNAMIC,
39      BSTATIC
40    };
41
42  protected:
43    PositionDependentOption(unsigned int pPosition, Type pType)
44      : m_Type(pType),
45        m_Position(pPosition) {}
46
47  public:
48    Type type()
49    { return m_Type; }
50
51    Type type() const
52    { return m_Type; }
53
54    unsigned int position()
55    { return m_Position; }
56
57    unsigned int position() const
58    { return m_Position; }
59
60  private:
61    Type m_Type;
62    unsigned int m_Position;
63  };
64
65  typedef std::vector<PositionDependentOption*> PositionDependentOptions;
66} // namespace of mcld
67
68#endif
69
70