16f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//===- HexagonMCLinker.cpp ------------------------------------------------===//
26f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//
36f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//                     The MCLinker Project
46f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//
56f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// This file is distributed under the University of Illinois Open Source
66f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// License. See LICENSE.TXT for details.
76f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//
86f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//===----------------------------------------------------------------------===//
96f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include "Hexagon.h"
106f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include "HexagonELFMCLinker.h"
116f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include <mcld/Module.h>
126f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include <mcld/Support/TargetRegistry.h>
136f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include <llvm/ADT/Triple.h>
146f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
156f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesusing namespace mcld;
166f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
176f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesnamespace mcld {
186f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
196f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines/// createHexagonMCLinker - the help funtion to create corresponding
206f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines/// HexagonMCLinker
216f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesMCLinker* createHexagonMCLinker(const std::string &pTriple,
226f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines                                LinkerConfig& pConfig,
236f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines                                mcld::Module& pModule,
24f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines                                FileHandle& pFileHandle)
256f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{
26f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  llvm::Triple theTriple(pTriple);
276f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  if (theTriple.isOSDarwin()) {
286f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines    assert(0 && "MachO linker has not supported yet");
296f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines    return NULL;
306f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  }
316f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  if (theTriple.isOSWindows()) {
326f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines    assert(0 && "COFF linker has not supported yet");
336f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines    return NULL;
346f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  }
356f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
366f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  if (theTriple.isArch32Bit())
37f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines    return new HexagonELFMCLinker(pConfig, pModule, pFileHandle);
386f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
396f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  assert(0 && "Hexagon_64 has not supported yet");
406f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  return NULL;
416f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines}
426f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
436f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} // namespace of mcld
446f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
456f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//===----------------------------------------------------------------------===//
466f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// HexagonMCLinker
476f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//===----------------------------------------------------------------------===//
486f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesextern "C" void MCLDInitializeHexagonMCLinker() {
496f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  // Register the linker frontend
506f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  mcld::TargetRegistry::RegisterMCLinker(TheHexagonTarget,
516f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines                                         createHexagonMCLinker);
526f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines}
536f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
54