167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//===- TestLinker.h -------------------------------------------------------===//
267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//
367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//                     The MCLinker Project
467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//
567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao// This file is distributed under the University of Illinois Open Source
667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao// License. See LICENSE.TXT for details.
767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//
867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//===----------------------------------------------------------------------===//
967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#ifndef MCLD_TEST_LINKER_H
1067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#define MCLD_TEST_LINKER_H
1167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
1267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <gtest.h>
1367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
1467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <string>
1567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <list>
1667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
1767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <mcld/MC/MCLDDriver.h>
1867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <mcld/MC/MCLinker.h>
1967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <mcld/LD/DiagnosticPrinter.h>
2067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <mcld/LD/DiagnosticLineInfo.h>
2167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <mcld/Support/TargetRegistry.h>
2267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <mcld/Support/Path.h>
2367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
2467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaonamespace mcld {
2567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
2667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoclass MCLDInfo;
2767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoclass TargetLDBackend;
2867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoclass RegionFactory;
2967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
3067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaonamespace test
3167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao{
3267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
3367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoclass TestLinker
3467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao{
3567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaopublic:
3667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  TestLinker();
3767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
3867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  ~TestLinker();
3967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
4067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  bool initialize(const std::string &pTriple);
4167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
4267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  MCLDInfo* config() {
4367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao    assert(NULL != m_pInfo);
4467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao    return m_pInfo;
4567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  }
4667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
4767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  const MCLDInfo* config() const {
4867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao    assert(NULL != m_pInfo);
4967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao    return m_pInfo;
5067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  }
5167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
52cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao  // -----  search directories  ----- //
53cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao  void addSearchDir(const std::string &pPath);
54cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao
55cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao  void setSysRoot(const mcld::sys::fs::Path &pPath);
56cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao
57cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao  // -----  input operators  ----- //
5867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  void addObject(const std::string &pPath);
5967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
6067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  void addObject(const mcld::sys::fs::Path &pPath)
6167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  { addObject(pPath.native()); }
6267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
6367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  void addObject(void* pMemBuffer, size_t pSize);
6467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
6567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  void addObject(int pFileHandler);
6667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
6767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  void addNameSpec(const std::string &pNameSpec);
6867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
6967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  bool setOutput(const std::string &pPath);
7067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
7167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  bool setOutput(int pFileHandler);
7267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
73cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao  bool setOutput(const sys::fs::Path &pPath);
74cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao
7567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  /// getDriver
7667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  MCLDDriver* getDriver() {
7767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao    assert(NULL != m_pDriver);
7867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao    return m_pDriver;
7967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  }
8067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
8167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  /// getDriver
8267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  const MCLDDriver* getDriver() const {
8367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao    assert(NULL != m_pDriver);
8467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao    return m_pDriver;
8567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  }
8667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
8767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  /// getLinker
8867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  MCLinker* getLinker() {
8967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao    assert(NULL != m_pDriver);
9067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao    return m_pDriver->getLinker();
9167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  }
9267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
9367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  /// getLinker
9467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  const MCLinker* getLinker() const {
9567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao    assert(NULL != m_pDriver);
9667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao    return m_pDriver->getLinker();
9767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  }
9867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
9967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoprivate:
10067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  void advanceRoot();
10167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
10267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoprivate:
10367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  const mcld::Target* m_pTarget;
10467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  mcld::MCLDDriver *m_pDriver;
10567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  mcld::MCLDInfo* m_pInfo;
10667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  mcld::DiagnosticLineInfo* m_pDiagLineInfo;
10767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  mcld::DiagnosticPrinter* m_pDiagPrinter;
10867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  mcld::TargetLDBackend* m_pBackend;
10967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  mcld::InputTree::iterator m_Root;
11067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  mcld::RegionFactory* m_pRegionFactory;
111cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao  mcld::MemoryAreaFactory* m_pMemAreaFactory;
11267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
11367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  std::list<mcld::FileHandle*> m_FileHandleList;
11467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  std::list<mcld::MemoryArea*> m_MemAreaList;
11567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
11667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao};
11767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
11867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao} // namespace of test
11967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao} // namespace of mcld
12067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#endif
12167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
122