15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- DerivedPositionDependentOptions.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_DERIVEDPOSITIONDEPENDENTOPTIONS_H
105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_DERIVEDPOSITIONDEPENDENTOPTIONS_H
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h>
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <string>
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/Support/RealPath.h"
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/Support/PositionDependentOption.h"
195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld
215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  /** \class DerivedPositionDependentOptions
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao   *  \brief This file contains the declarations of classes derived from PositionDependentOption.
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao   */
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  class FileOption : public PositionDependentOption {
285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  private:
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    sys::fs::RealPath m_Path;
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  protected:
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    FileOption(unsigned pPosition, Type pType, const sys::fs::Path &pPath)
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      : PositionDependentOption(pPosition, pType)
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    { m_Path.assign(pPath); }
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  public:
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    inline const sys::fs::Path *path() const { return &m_Path; }
385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  };
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  class NamespecOption : public PositionDependentOption {
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  private:
425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    std::string m_pNamespec;
435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  public:
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    NamespecOption(unsigned pPosition, const std::string &pNamespec)
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      : PositionDependentOption(pPosition, PositionDependentOption::NAMESPEC),
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao        m_pNamespec(pNamespec) { }
485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    inline const std::string &namespec() const { return m_pNamespec; }
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  };
515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  class BitcodeOption : public FileOption {
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  public:
545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    BitcodeOption(unsigned pPosition, const sys::fs::Path &pPath)
555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      : FileOption(pPosition, PositionDependentOption::BITCODE, pPath) { }
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  };
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  class StartGroupOption : public PositionDependentOption {
595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  public:
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    StartGroupOption(unsigned pPosition)
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      : PositionDependentOption(pPosition,
625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                PositionDependentOption::START_GROUP) { }
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  };
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  class EndGroupOption : public PositionDependentOption {
665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  public:
675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    EndGroupOption(unsigned pPosition)
685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      : PositionDependentOption(pPosition,
695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                PositionDependentOption::END_GROUP) { }
705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  };
715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  class InputFileOption : public FileOption {
735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  public:
745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    InputFileOption(unsigned pPosition, const sys::fs::Path &pPath)
755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      : FileOption(pPosition, PositionDependentOption::INPUT_FILE, pPath) { }
765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  };
775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  class WholeArchiveOption : public PositionDependentOption {
795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  public:
805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    WholeArchiveOption(unsigned pPosition)
815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      : PositionDependentOption(pPosition,
825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                PositionDependentOption::WHOLE_ARCHIVE) { }
835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  };
845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  class NoWholeArchiveOption : public PositionDependentOption {
865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  public:
875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    NoWholeArchiveOption(unsigned pPosition)
885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      : PositionDependentOption(pPosition,
895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                PositionDependentOption::NO_WHOLE_ARCHIVE) { }
905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  };
915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  class AsNeededOption : public PositionDependentOption {
935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  public:
945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    AsNeededOption(unsigned pPosition)
955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      : PositionDependentOption(pPosition,
965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                PositionDependentOption::AS_NEEDED) { }
975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  };
985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  class NoAsNeededOption : public PositionDependentOption {
1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  public:
1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    NoAsNeededOption(unsigned pPosition)
1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      : PositionDependentOption(pPosition,
1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                PositionDependentOption::NO_AS_NEEDED) { }
1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  };
1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  class AddNeededOption : public PositionDependentOption {
1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  public:
1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    AddNeededOption(unsigned pPosition)
1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      : PositionDependentOption(pPosition,
1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                PositionDependentOption::ADD_NEEDED) { }
1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  };
1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  class NoAddNeededOption : public PositionDependentOption {
1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  public:
1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    NoAddNeededOption(unsigned pPosition)
1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      : PositionDependentOption(pPosition,
1175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                PositionDependentOption::NO_ADD_NEEDED) { }
1185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  };
1195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  class BDynamicOption : public PositionDependentOption {
1215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  public:
1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    BDynamicOption(unsigned pPosition)
1235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      : PositionDependentOption(pPosition,
1245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                PositionDependentOption::BDYNAMIC) { }
1255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  };
1265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  class BStaticOption : public PositionDependentOption {
1285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  public:
1295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    BStaticOption(unsigned pPosition)
1305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      : PositionDependentOption(pPosition,
1315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                PositionDependentOption::BSTATIC) { }
1325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  };
1335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld
1355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
1375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
138