//===- CommandAction.h ----------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef MCLD_MC_COMMANDACTION_H_ #define MCLD_MC_COMMANDACTION_H_ #include "mcld/MC/InputAction.h" #include "mcld/Script/ScriptFile.h" #include "mcld/Support/Path.h" #include namespace mcld { class SearchDirs; class InputBuilder; class LinkerConfig; //===----------------------------------------------------------------------===// // Derived InputAction //===----------------------------------------------------------------------===// /// InputFileAction class InputFileAction : public InputAction { public: InputFileAction(unsigned int pPosition, const sys::fs::Path& pPath); InputFileAction(unsigned int pPosition, const char* pPath); const sys::fs::Path& path() const { return m_Path; } bool activate(InputBuilder&) const; private: sys::fs::Path m_Path; }; /// NamespecAction class NamespecAction : public InputAction { public: NamespecAction(unsigned int pPosition, const std::string& pNamespec, const SearchDirs& pSearchDirs); const std::string& namespec() const { return m_Namespec; } bool activate(InputBuilder&) const; private: std::string m_Namespec; const SearchDirs& m_SearchDirs; }; /// BitcodeAction class BitcodeAction : public InputAction { public: BitcodeAction(unsigned int pPosition, const sys::fs::Path& pPath); const sys::fs::Path& path() const { return m_Path; } bool activate(InputBuilder&) const; private: sys::fs::Path m_Path; }; /// StartGroupAction class StartGroupAction : public InputAction { public: explicit StartGroupAction(unsigned int pPosition); bool activate(InputBuilder&) const; }; /// EndGroupAction class EndGroupAction : public InputAction { public: explicit EndGroupAction(unsigned int pPosition); bool activate(InputBuilder&) const; }; /// WholeArchiveAction class WholeArchiveAction : public InputAction { public: explicit WholeArchiveAction(unsigned int pPosition); bool activate(InputBuilder&) const; }; /// NoWholeArchiveAction class NoWholeArchiveAction : public InputAction { public: explicit NoWholeArchiveAction(unsigned int pPosition); bool activate(InputBuilder&) const; }; /// AsNeededAction class AsNeededAction : public InputAction { public: explicit AsNeededAction(unsigned int pPosition); bool activate(InputBuilder&) const; }; /// NoAsNeededAction class NoAsNeededAction : public InputAction { public: explicit NoAsNeededAction(unsigned int pPosition); bool activate(InputBuilder&) const; }; /// AddNeededAction class AddNeededAction : public InputAction { public: explicit AddNeededAction(unsigned int pPosition); bool activate(InputBuilder&) const; }; /// NoAddNeededAction class NoAddNeededAction : public InputAction { public: explicit NoAddNeededAction(unsigned int pPosition); bool activate(InputBuilder&) const; }; /// BDynamicAction class BDynamicAction : public InputAction { public: explicit BDynamicAction(unsigned int pPosition); bool activate(InputBuilder&) const; }; /// BStaticAction class BStaticAction : public InputAction { public: explicit BStaticAction(unsigned int pPosition); bool activate(InputBuilder&) const; }; /// DefSymAction class DefSymAction : public InputAction { public: explicit DefSymAction(unsigned int pPosition, const std::string& pAssignment); bool activate(InputBuilder&) const; const std::string& assignment() const { return m_Assignment; } private: const std::string& m_Assignment; }; /// ScriptAction class ScriptAction : public InputAction { public: ScriptAction(unsigned int pPosition, const std::string& pFileName, ScriptFile::Kind pKind, const SearchDirs& pSearchDirs); bool activate(InputBuilder&) const; const std::string& filename() const { return m_FileName; } ScriptFile::Kind kind() const { return m_Kind; } private: std::string m_FileName; ScriptFile::Kind m_Kind; const SearchDirs& m_SearchDirs; }; } // namespace mcld #endif // MCLD_MC_COMMANDACTION_H_