blob: f44d2b0670f336e83a3fc93bd35853116c364625 [file] [log] [blame]
//===- TestLinker.h -------------------------------------------------------===//
//
// The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef MCLD_TEST_LINKER_H
#define MCLD_TEST_LINKER_H
#include <gtest.h>
#include <string>
#include <list>
#include <mcld/MC/MCLDDriver.h>
#include <mcld/MC/MCLinker.h>
#include <mcld/LD/DiagnosticPrinter.h>
#include <mcld/LD/DiagnosticLineInfo.h>
#include <mcld/Support/TargetRegistry.h>
#include <mcld/Support/Path.h>
namespace mcld {
class MCLDInfo;
class TargetLDBackend;
class RegionFactory;
namespace test
{
class TestLinker
{
public:
TestLinker();
~TestLinker();
bool initialize(const std::string &pTriple);
MCLDInfo* config() {
assert(NULL != m_pInfo);
return m_pInfo;
}
const MCLDInfo* config() const {
assert(NULL != m_pInfo);
return m_pInfo;
}
// ----- search directories ----- //
void addSearchDir(const std::string &pPath);
void setSysRoot(const mcld::sys::fs::Path &pPath);
// ----- input operators ----- //
void addObject(const std::string &pPath);
void addObject(const mcld::sys::fs::Path &pPath)
{ addObject(pPath.native()); }
void addObject(void* pMemBuffer, size_t pSize);
void addObject(int pFileHandler);
void addNameSpec(const std::string &pNameSpec);
bool setOutput(const std::string &pPath);
bool setOutput(int pFileHandler);
bool setOutput(const sys::fs::Path &pPath);
/// getDriver
MCLDDriver* getDriver() {
assert(NULL != m_pDriver);
return m_pDriver;
}
/// getDriver
const MCLDDriver* getDriver() const {
assert(NULL != m_pDriver);
return m_pDriver;
}
/// getLinker
MCLinker* getLinker() {
assert(NULL != m_pDriver);
return m_pDriver->getLinker();
}
/// getLinker
const MCLinker* getLinker() const {
assert(NULL != m_pDriver);
return m_pDriver->getLinker();
}
private:
void advanceRoot();
private:
const mcld::Target* m_pTarget;
mcld::MCLDDriver *m_pDriver;
mcld::MCLDInfo* m_pInfo;
mcld::DiagnosticLineInfo* m_pDiagLineInfo;
mcld::DiagnosticPrinter* m_pDiagPrinter;
mcld::TargetLDBackend* m_pBackend;
mcld::InputTree::iterator m_Root;
mcld::RegionFactory* m_pRegionFactory;
mcld::MemoryAreaFactory* m_pMemAreaFactory;
std::list<mcld::FileHandle*> m_FileHandleList;
std::list<mcld::MemoryArea*> m_MemAreaList;
};
} // namespace of test
} // namespace of mcld
#endif