15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- PositionDependentOption.h ------------------------------------------===//
25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//                     The MCLinker Project
45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source
65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details.
75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifndef MCLD_POSITIONDEPENDENTOPTION_H
105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_POSITIONDEPENDENTOPTION_H
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h>
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <vector>
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  /** \class PositionDependentOption
215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao   *  \brief PositionDependentOptions converts LLVM options into MCLDInfo
225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao   */
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  class PositionDependentOption
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  {
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  public:
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    enum Type {
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      BITCODE,
285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      NAMESPEC,
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      INPUT_FILE,
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      START_GROUP,
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      END_GROUP,
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      WHOLE_ARCHIVE,
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      NO_WHOLE_ARCHIVE,
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      AS_NEEDED,
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      NO_AS_NEEDED,
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      ADD_NEEDED,
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      NO_ADD_NEEDED,
385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      BDYNAMIC,
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      BSTATIC
405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    };
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  protected:
43affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    PositionDependentOption(unsigned int pPosition, Type pType)
445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      : m_Type(pType),
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao        m_Position(pPosition) {}
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  public:
48affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    Type type()
495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    { return m_Type; }
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
51affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    Type type() const
52affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    { return m_Type; }
53affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
54affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    unsigned int position()
55affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    { return m_Position; }
56affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
57affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    unsigned int position() const
585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    { return m_Position; }
595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  private:
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    Type m_Type;
62affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    unsigned int m_Position;
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  };
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef std::vector<PositionDependentOption*> PositionDependentOptions;
665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld
675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
70