| //===- DerivedPositionDependentOptions.h ----------------------------------===// |
| // |
| // The MCLinker Project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef MCLD_DERIVEDPOSITIONDEPENDENTOPTIONS_H |
| #define MCLD_DERIVEDPOSITIONDEPENDENTOPTIONS_H |
| #ifdef ENABLE_UNITTEST |
| #include <gtest.h> |
| #endif |
| |
| #include <string> |
| |
| #include "mcld/Support/RealPath.h" |
| #include "mcld/Support/PositionDependentOption.h" |
| |
| namespace mcld |
| { |
| |
| /** \class DerivedPositionDependentOptions |
| * \brief This file contains the declarations of classes derived from PositionDependentOption. |
| */ |
| |
| class FileOption : public PositionDependentOption { |
| private: |
| sys::fs::RealPath m_Path; |
| |
| protected: |
| FileOption(unsigned pPosition, Type pType, const sys::fs::Path &pPath) |
| : PositionDependentOption(pPosition, pType) |
| { m_Path.assign(pPath); } |
| |
| public: |
| inline const sys::fs::Path *path() const { return &m_Path; } |
| }; |
| |
| class NamespecOption : public PositionDependentOption { |
| private: |
| std::string m_pNamespec; |
| |
| public: |
| NamespecOption(unsigned pPosition, const std::string &pNamespec) |
| : PositionDependentOption(pPosition, PositionDependentOption::NAMESPEC), |
| m_pNamespec(pNamespec) { } |
| |
| inline const std::string &namespec() const { return m_pNamespec; } |
| }; |
| |
| class BitcodeOption : public FileOption { |
| public: |
| BitcodeOption(unsigned pPosition, const sys::fs::Path &pPath) |
| : FileOption(pPosition, PositionDependentOption::BITCODE, pPath) { } |
| }; |
| |
| class StartGroupOption : public PositionDependentOption { |
| public: |
| StartGroupOption(unsigned pPosition) |
| : PositionDependentOption(pPosition, |
| PositionDependentOption::START_GROUP) { } |
| }; |
| |
| class EndGroupOption : public PositionDependentOption { |
| public: |
| EndGroupOption(unsigned pPosition) |
| : PositionDependentOption(pPosition, |
| PositionDependentOption::END_GROUP) { } |
| }; |
| |
| class InputFileOption : public FileOption { |
| public: |
| InputFileOption(unsigned pPosition, const sys::fs::Path &pPath) |
| : FileOption(pPosition, PositionDependentOption::INPUT_FILE, pPath) { } |
| }; |
| |
| class WholeArchiveOption : public PositionDependentOption { |
| public: |
| WholeArchiveOption(unsigned pPosition) |
| : PositionDependentOption(pPosition, |
| PositionDependentOption::WHOLE_ARCHIVE) { } |
| }; |
| |
| class NoWholeArchiveOption : public PositionDependentOption { |
| public: |
| NoWholeArchiveOption(unsigned pPosition) |
| : PositionDependentOption(pPosition, |
| PositionDependentOption::NO_WHOLE_ARCHIVE) { } |
| }; |
| |
| class AsNeededOption : public PositionDependentOption { |
| public: |
| AsNeededOption(unsigned pPosition) |
| : PositionDependentOption(pPosition, |
| PositionDependentOption::AS_NEEDED) { } |
| }; |
| |
| class NoAsNeededOption : public PositionDependentOption { |
| public: |
| NoAsNeededOption(unsigned pPosition) |
| : PositionDependentOption(pPosition, |
| PositionDependentOption::NO_AS_NEEDED) { } |
| }; |
| |
| class AddNeededOption : public PositionDependentOption { |
| public: |
| AddNeededOption(unsigned pPosition) |
| : PositionDependentOption(pPosition, |
| PositionDependentOption::ADD_NEEDED) { } |
| }; |
| |
| class NoAddNeededOption : public PositionDependentOption { |
| public: |
| NoAddNeededOption(unsigned pPosition) |
| : PositionDependentOption(pPosition, |
| PositionDependentOption::NO_ADD_NEEDED) { } |
| }; |
| |
| class BDynamicOption : public PositionDependentOption { |
| public: |
| BDynamicOption(unsigned pPosition) |
| : PositionDependentOption(pPosition, |
| PositionDependentOption::BDYNAMIC) { } |
| }; |
| |
| class BStaticOption : public PositionDependentOption { |
| public: |
| BStaticOption(unsigned pPosition) |
| : PositionDependentOption(pPosition, |
| PositionDependentOption::BSTATIC) { } |
| }; |
| |
| } // namespace of mcld |
| |
| #endif |
| |