You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.5 KiB
76 lines
2.5 KiB
7 months ago
|
//===- 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
|