1affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===- Linker.h -----------------------------------------------------------===// 2affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// 3affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// The MCLinker Project 4affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// 5affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// This file is distributed under the University of Illinois Open Source 6affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// License. See LICENSE.TXT for details. 7affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// 8affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===----------------------------------------------------------------------===// 9cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 10affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#ifndef ALONE_SUPPORT_LINKER_CONFIG_H 11affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#define ALONE_SUPPORT_LINKER_CONFIG_H 12affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 13affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <string> 14affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 15affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/MC/MCLDInfo.h> 16affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/Support/TargetRegistry.h> 17affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/LD/DiagnosticLineInfo.h> 18affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/LD/DiagnosticPrinter.h> 19affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 20affc150dc44fab1911775a49636d0ce85333b634Zonr Changnamespace alone { 21affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 22affc150dc44fab1911775a49636d0ce85333b634Zonr Changclass LinkerConfig { 23affc150dc44fab1911775a49636d0ce85333b634Zonr Changprivate: 24cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao //===--------------------------------------------------------------------===// 25affc150dc44fab1911775a49636d0ce85333b634Zonr Chang // Available Configurations 26cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao //===--------------------------------------------------------------------===// 27cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao const std::string mTriple; 28cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao bool mShared; 29cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao std::string mSOName; 30affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 31affc150dc44fab1911775a49636d0ce85333b634Zonr Changprivate: 32cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao //===--------------------------------------------------------------------===// 33affc150dc44fab1911775a49636d0ce85333b634Zonr Chang // These are generated by LinkerConfig during initialize(). 34cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao //===--------------------------------------------------------------------===// 35affc150dc44fab1911775a49636d0ce85333b634Zonr Chang const mcld::Target *mTarget; 36affc150dc44fab1911775a49636d0ce85333b634Zonr Chang bool initializeTarget(); 37affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 38affc150dc44fab1911775a49636d0ce85333b634Zonr Chang mcld::MCLDInfo *mLDInfo; 39affc150dc44fab1911775a49636d0ce85333b634Zonr Chang bool initializeLDInfo(); 40affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 41affc150dc44fab1911775a49636d0ce85333b634Zonr Chang mcld::DiagnosticLineInfo *mDiagLineInfo; 42affc150dc44fab1911775a49636d0ce85333b634Zonr Chang mcld::DiagnosticPrinter *mDiagPrinter; 43affc150dc44fab1911775a49636d0ce85333b634Zonr Chang bool initializeDiagnostic(); 44cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 45affc150dc44fab1911775a49636d0ce85333b634Zonr Changpublic: 46cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao //===--------------------------------------------------------------------===// 47affc150dc44fab1911775a49636d0ce85333b634Zonr Chang // Getters 48cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao //===--------------------------------------------------------------------===// 49affc150dc44fab1911775a49636d0ce85333b634Zonr Chang inline const std::string &getTriple() const 50affc150dc44fab1911775a49636d0ce85333b634Zonr Chang { return mTriple; } 51affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 52affc150dc44fab1911775a49636d0ce85333b634Zonr Chang inline const mcld::Target *getTarget() const 53affc150dc44fab1911775a49636d0ce85333b634Zonr Chang { return mTarget; } 54affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 55affc150dc44fab1911775a49636d0ce85333b634Zonr Chang inline mcld::MCLDInfo* getLDInfo() 56affc150dc44fab1911775a49636d0ce85333b634Zonr Chang { return mLDInfo; } 57affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 58affc150dc44fab1911775a49636d0ce85333b634Zonr Chang inline const mcld::MCLDInfo* getLDInfo() const 59affc150dc44fab1911775a49636d0ce85333b634Zonr Chang { return mLDInfo; } 60affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 61cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao inline bool isShared() const 62cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao { return mShared; } 63cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 64cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao inline std::string getSOName() const 65cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao { return mSOName; } 66cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 67cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao void setShared(bool pEnable = true); 68affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 69cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao void setBsymbolic(bool pEnable = true); 70cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 71cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao void setSOName(const std::string &pSOName); 72cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 73cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao void setDyld(const std::string &pDyld); 74affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 75affc150dc44fab1911775a49636d0ce85333b634Zonr Chang void setSysRoot(const std::string &pSysRoot); 76affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 77affc150dc44fab1911775a49636d0ce85333b634Zonr Chang void addWrap(const std::string &pWrapSymbol); 78affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 79cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao void addPortable(const std::string &pPortableSymbol); 80cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 81affc150dc44fab1911775a49636d0ce85333b634Zonr Chang void addSearchDir(const std::string &pDir); 82affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 83affc150dc44fab1911775a49636d0ce85333b634Zonr Changpublic: 84affc150dc44fab1911775a49636d0ce85333b634Zonr Chang LinkerConfig(const std::string& pTriple); 85affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 86affc150dc44fab1911775a49636d0ce85333b634Zonr Chang virtual ~LinkerConfig(); 87affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}; 88affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 89affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} // end namespace alone 90affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 91affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#endif // ALONE_SUPPORT_LINKER_CONFIG_H 92