122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===- CommandAction.h ----------------------------------------------------===// 222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// 322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// The MCLinker Project 422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// 522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// This file is distributed under the University of Illinois Open Source 622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// License. See LICENSE.TXT for details. 722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// 822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#ifndef MCLD_MC_COMMANDACTION_H_ 1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define MCLD_MC_COMMANDACTION_H_ 1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines 1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/MC/InputAction.h" 1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/ScriptFile.h" 1437b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/Path.h" 1522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <string> 1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld { 1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass SearchDirs; 2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass InputBuilder; 2287f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesclass LinkerConfig; 2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// Derived InputAction 2622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 2722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/// InputFileAction 2837b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass InputFileAction : public InputAction { 2937b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 3037b74a387bb3993387029859c2d9d051c41c724eStephen Hines InputFileAction(unsigned int pPosition, const sys::fs::Path& pPath); 3137b74a387bb3993387029859c2d9d051c41c724eStephen Hines 3237b74a387bb3993387029859c2d9d051c41c724eStephen Hines InputFileAction(unsigned int pPosition, const char* pPath); 3322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 3422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const sys::fs::Path& path() const { return m_Path; } 3522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 3622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool activate(InputBuilder&) const; 3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 3837b74a387bb3993387029859c2d9d051c41c724eStephen Hines private: 3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao sys::fs::Path m_Path; 4022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}; 4122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 4222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/// NamespecAction 4337b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass NamespecAction : public InputAction { 4437b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 4522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao NamespecAction(unsigned int pPosition, 4637b74a387bb3993387029859c2d9d051c41c724eStephen Hines const std::string& pNamespec, 4787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const SearchDirs& pSearchDirs); 4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 4937b74a387bb3993387029859c2d9d051c41c724eStephen Hines const std::string& namespec() const { return m_Namespec; } 5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool activate(InputBuilder&) const; 5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5337b74a387bb3993387029859c2d9d051c41c724eStephen Hines private: 5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao std::string m_Namespec; 5587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const SearchDirs& m_SearchDirs; 5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}; 5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/// BitcodeAction 5937b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass BitcodeAction : public InputAction { 6037b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 6137b74a387bb3993387029859c2d9d051c41c724eStephen Hines BitcodeAction(unsigned int pPosition, const sys::fs::Path& pPath); 6222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const sys::fs::Path& path() const { return m_Path; } 6422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool activate(InputBuilder&) const; 6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6737b74a387bb3993387029859c2d9d051c41c724eStephen Hines private: 6822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao sys::fs::Path m_Path; 6922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}; 7022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/// StartGroupAction 7237b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass StartGroupAction : public InputAction { 7337b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 7422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao explicit StartGroupAction(unsigned int pPosition); 7522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool activate(InputBuilder&) const; 7722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}; 7822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/// EndGroupAction 8037b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass EndGroupAction : public InputAction { 8137b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 8222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao explicit EndGroupAction(unsigned int pPosition); 8322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 8422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool activate(InputBuilder&) const; 8522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}; 8622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 8722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/// WholeArchiveAction 8837b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass WholeArchiveAction : public InputAction { 8937b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 9022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao explicit WholeArchiveAction(unsigned int pPosition); 9122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 9222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool activate(InputBuilder&) const; 9322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}; 9422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 9522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/// NoWholeArchiveAction 9637b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass NoWholeArchiveAction : public InputAction { 9737b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 9822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao explicit NoWholeArchiveAction(unsigned int pPosition); 9922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 10022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool activate(InputBuilder&) const; 10122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}; 10222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 10322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/// AsNeededAction 10437b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass AsNeededAction : public InputAction { 10537b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 10622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao explicit AsNeededAction(unsigned int pPosition); 10722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 10822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool activate(InputBuilder&) const; 10922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}; 11022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 11122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/// NoAsNeededAction 11237b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass NoAsNeededAction : public InputAction { 11337b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 11422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao explicit NoAsNeededAction(unsigned int pPosition); 11522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 11622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool activate(InputBuilder&) const; 11722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}; 11822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 11922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/// AddNeededAction 12037b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass AddNeededAction : public InputAction { 12137b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 12222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao explicit AddNeededAction(unsigned int pPosition); 12322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 12422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool activate(InputBuilder&) const; 12522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}; 12622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 12722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/// NoAddNeededAction 12837b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass NoAddNeededAction : public InputAction { 12937b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 13022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao explicit NoAddNeededAction(unsigned int pPosition); 13122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 13222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool activate(InputBuilder&) const; 13322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}; 13422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 13522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/// BDynamicAction 13637b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass BDynamicAction : public InputAction { 13737b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 13822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao explicit BDynamicAction(unsigned int pPosition); 13922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 14022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool activate(InputBuilder&) const; 14122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}; 14222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 14322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/// BStaticAction 14437b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass BStaticAction : public InputAction { 14537b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 14622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao explicit BStaticAction(unsigned int pPosition); 14722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 14822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool activate(InputBuilder&) const; 14922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}; 15022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 15187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/// DefSymAction 15237b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass DefSymAction : public InputAction { 15337b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 1542bf3f881f79c4d883f379e63725e788c310739a3Pirama Arumuga Nainar explicit DefSymAction(unsigned int pPosition, const std::string& pAssignment); 15587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 15687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines bool activate(InputBuilder&) const; 15787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 15887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const std::string& assignment() const { return m_Assignment; } 15987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 16037b74a387bb3993387029859c2d9d051c41c724eStephen Hines private: 1612bf3f881f79c4d883f379e63725e788c310739a3Pirama Arumuga Nainar const std::string& m_Assignment; 16287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines}; 16387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 16487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/// ScriptAction 16537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass ScriptAction : public InputAction { 16637b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 16787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ScriptAction(unsigned int pPosition, 16887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const std::string& pFileName, 16987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ScriptFile::Kind pKind, 17087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const SearchDirs& pSearchDirs); 17187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 17287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines bool activate(InputBuilder&) const; 17387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 17487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const std::string& filename() const { return m_FileName; } 17587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 17687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ScriptFile::Kind kind() const { return m_Kind; } 17787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 17837b74a387bb3993387029859c2d9d051c41c724eStephen Hines private: 17987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines std::string m_FileName; 18087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ScriptFile::Kind m_Kind; 18187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const SearchDirs& m_SearchDirs; 18287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines}; 18387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 18437b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 18522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 18637b74a387bb3993387029859c2d9d051c41c724eStephen Hines#endif // MCLD_MC_COMMANDACTION_H_ 187