Linker.h revision 22add6ff3426df1a85089fe6a6e1597ee3b6f300
1//===- Linker.h -----------------------------------------------------------===//
2//
3//                     The MCLinker Project
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9#ifndef MCLD_LINKER_H
10#define MCLD_LINKER_H
11#ifdef ENABLE_UNITTEST
12#include <gtest.h>
13#endif
14
15#include <string>
16
17namespace mcld {
18
19class Module;
20class LinkerConfig;
21
22class Target;
23class TargetLDBackend;
24
25class IRBuilder;
26class ObjectLinker;
27
28class FileHandle;
29class MemoryArea;
30
31/** \class Linker
32*  \brief Linker is a modular linker.
33*/
34class Linker
35{
36public:
37  Linker();
38
39  ~Linker();
40
41  bool config(LinkerConfig& pConfig);
42
43  bool link(Module& pModule, IRBuilder& pBuilder);
44
45  bool emit(MemoryArea& pOutput);
46
47  bool emit(const std::string& pPath);
48
49  bool emit(int pFileDescriptor);
50
51  bool reset();
52
53private:
54  bool initTarget();
55
56  bool initBackend();
57
58  bool initEmulator();
59
60  bool initOStream();
61
62private:
63  LinkerConfig* m_pConfig;
64  Module* m_pModule;
65  IRBuilder* m_pIRBuilder;
66
67  const Target* m_pTarget;
68  TargetLDBackend* m_pBackend;
69  ObjectLinker* m_pObjLinker;
70};
71
72} // namespace of MC Linker
73
74#endif
75
76