LinkerConfig.h revision affc150dc44fab1911775a49636d0ce85333b634
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//===----------------------------------------------------------------------===//
9affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#ifndef ALONE_SUPPORT_LINKER_CONFIG_H
10affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#define ALONE_SUPPORT_LINKER_CONFIG_H
11affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
12affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <string>
13affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
14affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/MC/MCLDInfo.h>
15affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/MC/MCLDFile.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:
24affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  //===----------------------------------------------------------------------===//
25affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  // Available Configurations
26affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  //===----------------------------------------------------------------------===//
27affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  std::string mTriple;
28affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
29affc150dc44fab1911775a49636d0ce85333b634Zonr Changprivate:
30affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  //===----------------------------------------------------------------------===//
31affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  // These are generated by LinkerConfig during initialize().
32affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  //===----------------------------------------------------------------------===//
33affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  const mcld::Target *mTarget;
34affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  bool initializeTarget();
35affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
36affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  mcld::MCLDInfo *mLDInfo;
37affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  bool initializeLDInfo();
38affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
39affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  mcld::DiagnosticLineInfo *mDiagLineInfo;
40affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  mcld::DiagnosticPrinter *mDiagPrinter;
41affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  bool initializeDiagnostic();
42affc150dc44fab1911775a49636d0ce85333b634Zonr Changpublic:
43affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  //===----------------------------------------------------------------------===//
44affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  // Getters
45affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  //===----------------------------------------------------------------------===//
46affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  inline const std::string &getTriple() const
47affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  { return mTriple; }
48affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
49affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  inline const mcld::Target *getTarget() const
50affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  { return mTarget; }
51affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
52affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  inline mcld::MCLDInfo* getLDInfo()
53affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  { return mLDInfo; }
54affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
55affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  inline const mcld::MCLDInfo* getLDInfo() const
56affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  { return mLDInfo; }
57affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
58affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  inline void setSOName(const std::string &pSOName)
59affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  { mLDInfo->output().setSOName(pSOName); }
60affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
61affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  inline void setDyld(const std::string &pDyld)
62affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  { mLDInfo->options().setDyld(pDyld); }
63affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
64affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  void setSysRoot(const std::string &pSysRoot);
65affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
66affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  void addWrap(const std::string &pWrapSymbol);
67affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
68affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  void addSearchDir(const std::string &pDir);
69affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
70affc150dc44fab1911775a49636d0ce85333b634Zonr Changpublic:
71affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  LinkerConfig(const std::string& pTriple);
72affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
73affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  virtual ~LinkerConfig();
74affc150dc44fab1911775a49636d0ce85333b634Zonr Chang};
75affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
76affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} // end namespace alone
77affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
78affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#endif // ALONE_SUPPORT_LINKER_CONFIG_H
79