1 //===- DerivedPositionDependentOptions.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_DERIVEDPOSITIONDEPENDENTOPTIONS_H 10 #define MCLD_DERIVEDPOSITIONDEPENDENTOPTIONS_H 11 #ifdef ENABLE_UNITTEST 12 #include <gtest.h> 13 #endif 14 15 #include <string> 16 17 #include "mcld/Support/RealPath.h" 18 #include "mcld/Support/PositionDependentOption.h" 19 20 namespace mcld 21 { 22 23 /** \class DerivedPositionDependentOptions 24 * \brief This file contains the declarations of classes derived from PositionDependentOption. 25 */ 26 27 class FileOption : public PositionDependentOption { 28 private: 29 sys::fs::RealPath m_Path; 30 31 protected: 32 FileOption(unsigned pPosition, Type pType, const sys::fs::Path &pPath) 33 : PositionDependentOption(pPosition, pType) 34 { m_Path.assign(pPath); } 35 36 public: 37 inline const sys::fs::Path *path() const { return &m_Path; } 38 }; 39 40 class NamespecOption : public PositionDependentOption { 41 private: 42 std::string m_pNamespec; 43 44 public: 45 NamespecOption(unsigned pPosition, const std::string &pNamespec) 46 : PositionDependentOption(pPosition, PositionDependentOption::NAMESPEC), 47 m_pNamespec(pNamespec) { } 48 49 inline const std::string &namespec() const { return m_pNamespec; } 50 }; 51 52 class BitcodeOption : public FileOption { 53 public: 54 BitcodeOption(unsigned pPosition, const sys::fs::Path &pPath) 55 : FileOption(pPosition, PositionDependentOption::BITCODE, pPath) { } 56 }; 57 58 class StartGroupOption : public PositionDependentOption { 59 public: 60 StartGroupOption(unsigned pPosition) 61 : PositionDependentOption(pPosition, 62 PositionDependentOption::START_GROUP) { } 63 }; 64 65 class EndGroupOption : public PositionDependentOption { 66 public: 67 EndGroupOption(unsigned pPosition) 68 : PositionDependentOption(pPosition, 69 PositionDependentOption::END_GROUP) { } 70 }; 71 72 class InputFileOption : public FileOption { 73 public: 74 InputFileOption(unsigned pPosition, const sys::fs::Path &pPath) 75 : FileOption(pPosition, PositionDependentOption::INPUT_FILE, pPath) { } 76 }; 77 78 class WholeArchiveOption : public PositionDependentOption { 79 public: 80 WholeArchiveOption(unsigned pPosition) 81 : PositionDependentOption(pPosition, 82 PositionDependentOption::WHOLE_ARCHIVE) { } 83 }; 84 85 class NoWholeArchiveOption : public PositionDependentOption { 86 public: 87 NoWholeArchiveOption(unsigned pPosition) 88 : PositionDependentOption(pPosition, 89 PositionDependentOption::NO_WHOLE_ARCHIVE) { } 90 }; 91 92 class AsNeededOption : public PositionDependentOption { 93 public: 94 AsNeededOption(unsigned pPosition) 95 : PositionDependentOption(pPosition, 96 PositionDependentOption::AS_NEEDED) { } 97 }; 98 99 class NoAsNeededOption : public PositionDependentOption { 100 public: 101 NoAsNeededOption(unsigned pPosition) 102 : PositionDependentOption(pPosition, 103 PositionDependentOption::NO_AS_NEEDED) { } 104 }; 105 106 class AddNeededOption : public PositionDependentOption { 107 public: 108 AddNeededOption(unsigned pPosition) 109 : PositionDependentOption(pPosition, 110 PositionDependentOption::ADD_NEEDED) { } 111 }; 112 113 class NoAddNeededOption : public PositionDependentOption { 114 public: 115 NoAddNeededOption(unsigned pPosition) 116 : PositionDependentOption(pPosition, 117 PositionDependentOption::NO_ADD_NEEDED) { } 118 }; 119 120 class BDynamicOption : public PositionDependentOption { 121 public: 122 BDynamicOption(unsigned pPosition) 123 : PositionDependentOption(pPosition, 124 PositionDependentOption::BDYNAMIC) { } 125 }; 126 127 class BStaticOption : public PositionDependentOption { 128 public: 129 BStaticOption(unsigned pPosition) 130 : PositionDependentOption(pPosition, 131 PositionDependentOption::BSTATIC) { } 132 }; 133 134 } // namespace of mcld 135 136 #endif 137 138