blob: ba8e80562131f5c09a6a92760f68c8045288fd49 [file] [log] [blame]
//===-- ToolChain.cpp -----------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// Gollvm driver helper class ToolChain methods.
//
//===----------------------------------------------------------------------===//
#include "llvm/Support/raw_ostream.h"
#include "Action.h"
#include "Driver.h"
#include "Tool.h"
#include "ToolChain.h"
namespace gollvm {
namespace driver {
ToolChain::ToolChain(Driver &driver,
const llvm::Triple &targetTriple)
: driver_(driver),
triple_(targetTriple)
{
}
ToolChain::~ToolChain()
{
}
Tool *ToolChain::getCompiler()
{
if (compiler_.get() == nullptr)
compiler_.reset(buildCompiler());
return compiler_.get();
}
Tool *ToolChain::getAssembler()
{
if (assembler_.get() == nullptr)
assembler_.reset(buildAssembler());
return assembler_.get();
}
Tool *ToolChain::getLinker()
{
if (linker_.get() == nullptr)
linker_.reset(buildLinker());
return linker_.get();
}
Tool *ToolChain::getTool(Action *act)
{
assert(act != nullptr);
switch(act->type()) {
case Action::A_Compile:
return getCompiler();
case Action::A_Assemble:
return getAssembler();
case Action::A_Link:
return getLinker();
default:
assert(false);
return nullptr;
}
return nullptr;
}
std::string ToolChain::getFilePath(const char *afile)
{
return driver_.getFilePath(afile, thisToolChain());
}
std::string ToolChain::getProgramPath(const char *atool)
{
return driver_.getProgramPath(atool, thisToolChain());
}
} // end namespace driver
} // end namespace gollvm