//===- Target.h -----------------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef MCLD_SUPPORT_TARGET_H_ #define MCLD_SUPPORT_TARGET_H_ #include namespace llvm { class Target; class Triple; class TargetMachine; } // namespace llvm namespace mcld { class MCLDTargetMachine; class TargetRegistry; class MCLinker; class LinkerScript; class LinkerConfig; class Module; class FileHandle; class DiagnosticLineInfo; class TargetLDBackend; /** \class Target * \brief Target collects target specific information */ class Target { friend class mcld::MCLDTargetMachine; friend class mcld::TargetRegistry; public: typedef unsigned int (*TripleMatchQualityFnTy)(const llvm::Triple& pTriple); typedef MCLDTargetMachine* (*TargetMachineCtorTy)(const llvm::Target&, const mcld::Target&, llvm::TargetMachine&, const std::string&); typedef MCLinker* (*MCLinkerCtorTy)(const std::string& pTriple, LinkerConfig&, Module&, FileHandle& pFileHandle); typedef bool (*EmulationFnTy)(LinkerScript&, LinkerConfig&); typedef TargetLDBackend* (*TargetLDBackendCtorTy)(const LinkerConfig&); typedef DiagnosticLineInfo* (*DiagnosticLineInfoCtorTy)(const mcld::Target&, const std::string&); public: Target(); /// getName - get the target name const char* name() const { return Name; } unsigned int getTripleQuality(const llvm::Triple& pTriple) const; /// createTargetMachine - create target-specific TargetMachine MCLDTargetMachine* createTargetMachine(const std::string& pTriple, const llvm::Target& pTarget, llvm::TargetMachine& pTM) const; /// createMCLinker - create target-specific MCLinker MCLinker* createMCLinker(const std::string& pTriple, LinkerConfig& pConfig, Module& pModule, FileHandle& pFileHandle) const; /// emulate - given MCLinker default values for the other aspects of the /// target system. bool emulate(LinkerScript& pScript, LinkerConfig& pConfig) const; /// createLDBackend - create target-specific LDBackend TargetLDBackend* createLDBackend(const LinkerConfig& pConfig) const; /// createDiagnosticLineInfo - create target-specific DiagnosticLineInfo DiagnosticLineInfo* createDiagnosticLineInfo( const mcld::Target& pTarget, const std::string& pTriple) const; private: /// Name - The target name const char* Name; TripleMatchQualityFnTy TripleMatchQualityFn; TargetMachineCtorTy TargetMachineCtorFn; MCLinkerCtorTy MCLinkerCtorFn; EmulationFnTy EmulationFn; TargetLDBackendCtorTy TargetLDBackendCtorFn; DiagnosticLineInfoCtorTy DiagnosticLineInfoCtorFn; }; } // namespace mcld #endif // MCLD_SUPPORT_TARGET_H_