Home | History | Annotate | Download | only in Support
      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