Home | History | Annotate | Download | only in MC
      1 //===- CommandAction.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_MC_COMMANDACTION_H
     10 #define MCLD_MC_COMMANDACTION_H
     11 
     12 #include <string>
     13 #include <mcld/Support/Path.h>
     14 #include <mcld/MC/InputAction.h>
     15 #include <mcld/Script/ScriptFile.h>
     16 
     17 namespace mcld {
     18 
     19 class SearchDirs;
     20 class InputBuilder;
     21 class LinkerConfig;
     22 
     23 //===----------------------------------------------------------------------===//
     24 // Derived InputAction
     25 //===----------------------------------------------------------------------===//
     26 /// InputFileAction
     27 class InputFileAction : public InputAction
     28 {
     29 public:
     30   explicit InputFileAction(unsigned int pPosition, const sys::fs::Path &pPath);
     31 
     32   const sys::fs::Path& path() const { return m_Path; }
     33 
     34   bool activate(InputBuilder&) const;
     35 
     36 private:
     37   sys::fs::Path m_Path;
     38 };
     39 
     40 /// NamespecAction
     41 class NamespecAction : public InputAction
     42 {
     43 public:
     44   NamespecAction(unsigned int pPosition,
     45                  const std::string &pNamespec,
     46                  const SearchDirs& pSearchDirs);
     47 
     48   const std::string &namespec() const { return m_Namespec; }
     49 
     50   bool activate(InputBuilder&) const;
     51 
     52 private:
     53   std::string m_Namespec;
     54   const SearchDirs& m_SearchDirs;
     55 };
     56 
     57 /// BitcodeAction
     58 class BitcodeAction : public InputAction
     59 {
     60 public:
     61   BitcodeAction(unsigned int pPosition, const sys::fs::Path &pPath);
     62 
     63   const sys::fs::Path& path() const { return m_Path; }
     64 
     65   bool activate(InputBuilder&) const;
     66 
     67 private:
     68   sys::fs::Path m_Path;
     69 };
     70 
     71 /// StartGroupAction
     72 class StartGroupAction : public InputAction
     73 {
     74 public:
     75   explicit StartGroupAction(unsigned int pPosition);
     76 
     77   bool activate(InputBuilder&) const;
     78 };
     79 
     80 /// EndGroupAction
     81 class EndGroupAction : public InputAction
     82 {
     83 public:
     84   explicit EndGroupAction(unsigned int pPosition);
     85 
     86   bool activate(InputBuilder&) const;
     87 };
     88 
     89 /// WholeArchiveAction
     90 class WholeArchiveAction : public InputAction
     91 {
     92 public:
     93   explicit WholeArchiveAction(unsigned int pPosition);
     94 
     95   bool activate(InputBuilder&) const;
     96 };
     97 
     98 /// NoWholeArchiveAction
     99 class NoWholeArchiveAction : public InputAction
    100 {
    101 public:
    102   explicit NoWholeArchiveAction(unsigned int pPosition);
    103 
    104   bool activate(InputBuilder&) const;
    105 };
    106 
    107 /// AsNeededAction
    108 class AsNeededAction : public InputAction
    109 {
    110 public:
    111   explicit AsNeededAction(unsigned int pPosition);
    112 
    113   bool activate(InputBuilder&) const;
    114 };
    115 
    116 /// NoAsNeededAction
    117 class NoAsNeededAction : public InputAction
    118 {
    119 public:
    120   explicit NoAsNeededAction(unsigned int pPosition);
    121 
    122   bool activate(InputBuilder&) const;
    123 };
    124 
    125 /// AddNeededAction
    126 class AddNeededAction : public InputAction
    127 {
    128 public:
    129   explicit AddNeededAction(unsigned int pPosition);
    130 
    131   bool activate(InputBuilder&) const;
    132 };
    133 
    134 /// NoAddNeededAction
    135 class NoAddNeededAction : public InputAction
    136 {
    137 public:
    138   explicit NoAddNeededAction(unsigned int pPosition);
    139 
    140   bool activate(InputBuilder&) const;
    141 };
    142 
    143 /// BDynamicAction
    144 class BDynamicAction : public InputAction
    145 {
    146 public:
    147   explicit BDynamicAction(unsigned int pPosition);
    148 
    149   bool activate(InputBuilder&) const;
    150 };
    151 
    152 /// BStaticAction
    153 class BStaticAction : public InputAction
    154 {
    155 public:
    156   explicit BStaticAction(unsigned int pPosition);
    157 
    158   bool activate(InputBuilder&) const;
    159 };
    160 
    161 /// DefSymAction
    162 class DefSymAction : public InputAction
    163 {
    164 public:
    165   explicit DefSymAction(unsigned int pPosition, std::string& pAssignment);
    166 
    167   bool activate(InputBuilder&) const;
    168 
    169   const std::string& assignment() const { return m_Assignment; }
    170 
    171 private:
    172   std::string& m_Assignment;
    173 };
    174 
    175 /// ScriptAction
    176 class ScriptAction : public InputAction
    177 {
    178 public:
    179   ScriptAction(unsigned int pPosition,
    180                const std::string& pFileName,
    181                ScriptFile::Kind pKind,
    182                const SearchDirs& pSearchDirs);
    183 
    184   bool activate(InputBuilder&) const;
    185 
    186   const std::string& filename() const { return m_FileName; }
    187 
    188   ScriptFile::Kind kind() const { return m_Kind; }
    189 
    190 private:
    191   std::string m_FileName;
    192   ScriptFile::Kind m_Kind;
    193   const SearchDirs& m_SearchDirs;
    194 };
    195 
    196 } // end of namespace mcld
    197 
    198 #endif
    199 
    200