You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
4.2 KiB
187 lines
4.2 KiB
//===- 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_
|