//===- 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