Home | History | Annotate | Download | only in mcld
      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 
     12 #include <string>
     13 
     14 namespace mcld {
     15 
     16 class FileHandle;
     17 class FileOutputBuffer;
     18 class IRBuilder;
     19 class LinkerConfig;
     20 class LinkerScript;
     21 class Module;
     22 class ObjectLinker;
     23 class Target;
     24 class TargetLDBackend;
     25 
     26 /** \class Linker
     27 *  \brief Linker is a modular linker.
     28 */
     29 class Linker {
     30  public:
     31   Linker();
     32 
     33   ~Linker();
     34 
     35   /// emulate - To set up target-dependent options and default linker script.
     36   bool emulate(LinkerScript& pScript, LinkerConfig& pConfig);
     37 
     38   /// normalize - To normalize the command line language into mcld::Module.
     39   bool normalize(Module& pModule, IRBuilder& pBuilder);
     40 
     41   /// resolve - To build up the topology of mcld::Module.
     42   bool resolve(Module& pModule);
     43 
     44   /// layout - To serialize the final result of the output mcld::Module.
     45   bool layout();
     46 
     47   /// link - A convenient way to resolve and to layout the output mcld::Module.
     48   bool link(Module& pModule, IRBuilder& pBuilder);
     49 
     50   /// emit - To emit output mcld::Module to a FileOutputBuffer.
     51   bool emit(FileOutputBuffer& pOutput);
     52 
     53   /// emit - To open a file for output in pPath and to emit output mcld::Module
     54   /// to the file.
     55   bool emit(const Module& pModule, const std::string& pPath);
     56 
     57   /// emit - To emit output mcld::Module in the pFileDescriptor.
     58   bool emit(const Module& pModule, int pFileDescriptor);
     59 
     60   bool reset();
     61 
     62  private:
     63   bool initTarget();
     64 
     65   bool initBackend();
     66 
     67   bool initOStream();
     68 
     69   bool initEmulator(LinkerScript& pScript);
     70 
     71  private:
     72   LinkerConfig* m_pConfig;
     73   IRBuilder* m_pIRBuilder;
     74 
     75   const Target* m_pTarget;
     76   TargetLDBackend* m_pBackend;
     77   ObjectLinker* m_pObjLinker;
     78 };
     79 
     80 }  // namespace mcld
     81 
     82 #endif  // MCLD_LINKER_H_
     83