//===- 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 <string>
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_