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