15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- DerivedPositionDependentOptions.h ----------------------------------===// 25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// The MCLinker Project 45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source 65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details. 75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifndef MCLD_DERIVEDPOSITIONDEPENDENTOPTIONS_H 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_DERIVEDPOSITIONDEPENDENTOPTIONS_H 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <string> 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/Support/RealPath.h" 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/Support/PositionDependentOption.h" 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /** \class DerivedPositionDependentOptions 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief This file contains the declarations of classes derived from PositionDependentOption. 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao class FileOption : public PositionDependentOption { 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao private: 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao sys::fs::RealPath m_Path; 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao protected: 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao FileOption(unsigned pPosition, Type pType, const sys::fs::Path &pPath) 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : PositionDependentOption(pPosition, pType) 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { m_Path.assign(pPath); } 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao public: 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao inline const sys::fs::Path *path() const { return &m_Path; } 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao class NamespecOption : public PositionDependentOption { 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao private: 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao std::string m_pNamespec; 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao public: 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao NamespecOption(unsigned pPosition, const std::string &pNamespec) 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : PositionDependentOption(pPosition, PositionDependentOption::NAMESPEC), 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pNamespec(pNamespec) { } 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao inline const std::string &namespec() const { return m_pNamespec; } 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao class BitcodeOption : public FileOption { 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao public: 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao BitcodeOption(unsigned pPosition, const sys::fs::Path &pPath) 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : FileOption(pPosition, PositionDependentOption::BITCODE, pPath) { } 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao class StartGroupOption : public PositionDependentOption { 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao public: 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao StartGroupOption(unsigned pPosition) 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : PositionDependentOption(pPosition, 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao PositionDependentOption::START_GROUP) { } 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao class EndGroupOption : public PositionDependentOption { 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao public: 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao EndGroupOption(unsigned pPosition) 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : PositionDependentOption(pPosition, 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao PositionDependentOption::END_GROUP) { } 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao class InputFileOption : public FileOption { 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao public: 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao InputFileOption(unsigned pPosition, const sys::fs::Path &pPath) 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : FileOption(pPosition, PositionDependentOption::INPUT_FILE, pPath) { } 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao class WholeArchiveOption : public PositionDependentOption { 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao public: 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao WholeArchiveOption(unsigned pPosition) 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : PositionDependentOption(pPosition, 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao PositionDependentOption::WHOLE_ARCHIVE) { } 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao class NoWholeArchiveOption : public PositionDependentOption { 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao public: 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao NoWholeArchiveOption(unsigned pPosition) 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : PositionDependentOption(pPosition, 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao PositionDependentOption::NO_WHOLE_ARCHIVE) { } 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao class AsNeededOption : public PositionDependentOption { 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao public: 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao AsNeededOption(unsigned pPosition) 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : PositionDependentOption(pPosition, 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao PositionDependentOption::AS_NEEDED) { } 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao class NoAsNeededOption : public PositionDependentOption { 1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao public: 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao NoAsNeededOption(unsigned pPosition) 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : PositionDependentOption(pPosition, 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao PositionDependentOption::NO_AS_NEEDED) { } 1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao class AddNeededOption : public PositionDependentOption { 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao public: 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao AddNeededOption(unsigned pPosition) 1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : PositionDependentOption(pPosition, 1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao PositionDependentOption::ADD_NEEDED) { } 1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao class NoAddNeededOption : public PositionDependentOption { 1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao public: 1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao NoAddNeededOption(unsigned pPosition) 1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : PositionDependentOption(pPosition, 1175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao PositionDependentOption::NO_ADD_NEEDED) { } 1185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 1195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao class BDynamicOption : public PositionDependentOption { 1215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao public: 1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao BDynamicOption(unsigned pPosition) 1235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : PositionDependentOption(pPosition, 1245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao PositionDependentOption::BDYNAMIC) { } 1255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 1265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao class BStaticOption : public PositionDependentOption { 1285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao public: 1295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao BStaticOption(unsigned pPosition) 1305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : PositionDependentOption(pPosition, 1315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao PositionDependentOption::BSTATIC) { } 1325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 1335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 1355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 1375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 138