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