//===- TargetRegistry.cpp -------------------------------------------------===//
//
//                     The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include <mcld/Support/TargetRegistry.h>


mcld::TargetRegistry::TargetListTy mcld::TargetRegistry::s_TargetList;

void mcld::TargetRegistry::RegisterTarget(mcld::Target &T)
{
  s_TargetList.push_back(&T);
}

const mcld::Target* mcld::TargetRegistry::lookupTarget(const llvm::Target &pTarget)
{
  mcld::Target *result = 0;
  TargetListTy::const_iterator TIter, TEnd = s_TargetList.end();
  for (TIter=s_TargetList.begin(); TIter!=TEnd; ++TIter) {
    if ((*TIter)->get()==&pTarget) {
      result = (*TIter);
      break;
    }
  }
  return result;
}

const mcld::Target *mcld::TargetRegistry::lookupTarget(const std::string &pTriple,
                                                       std::string &pError) 
{
  const llvm::Target* target = llvm::TargetRegistry::lookupTarget(pTriple, pError);
  if (!target)
    return 0;
  return lookupTarget( *target );
}

