//===- Target.cpp ---------------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "mcld/Support/Target.h" #include <llvm/ADT/Triple.h> namespace mcld { //===----------------------------------------------------------------------===// // Target //===----------------------------------------------------------------------===// Target::Target() : Name(NULL), TripleMatchQualityFn(NULL), TargetMachineCtorFn(NULL), MCLinkerCtorFn(NULL), TargetLDBackendCtorFn(NULL), DiagnosticLineInfoCtorFn(NULL) { } unsigned int Target::getTripleQuality(const llvm::Triple& pTriple) const { if (TripleMatchQualityFn == NULL) return 0; return TripleMatchQualityFn(pTriple); } MCLDTargetMachine* Target::createTargetMachine(const std::string& pTriple, const llvm::Target& pTarget, llvm::TargetMachine& pTM) const { if (TargetMachineCtorFn == NULL) return NULL; return TargetMachineCtorFn(pTarget, *this, pTM, pTriple); } /// createMCLinker - create target-specific MCLinker MCLinker* Target::createMCLinker(const std::string& pTriple, LinkerConfig& pConfig, Module& pModule, FileHandle& pFileHandle) const { if (MCLinkerCtorFn == NULL) return NULL; return MCLinkerCtorFn(pTriple, pConfig, pModule, pFileHandle); } /// emulate - given MCLinker default values for the other aspects of the /// target system. bool Target::emulate(LinkerScript& pScript, LinkerConfig& pConfig) const { if (EmulationFn == NULL) return false; return EmulationFn(pScript, pConfig); } /// createLDBackend - create target-specific LDBackend TargetLDBackend* Target::createLDBackend(const LinkerConfig& pConfig) const { if (TargetLDBackendCtorFn == NULL) return NULL; return TargetLDBackendCtorFn(pConfig); } /// createDiagnosticLineInfo - create target-specific DiagnosticLineInfo DiagnosticLineInfo* Target::createDiagnosticLineInfo( const mcld::Target& pTarget, const std::string& pTriple) const { if (DiagnosticLineInfoCtorFn == NULL) return NULL; return DiagnosticLineInfoCtorFn(pTarget, pTriple); } } // namespace mcld