76 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
//===- 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
 |