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