//===- Linker.h -----------------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef ALONE_LINKER_H #define ALONE_LINKER_H #include <string> namespace mcld { class Module; class IRBuilder; class LinkerConfig; class Linker; class Input; class MemoryArea; namespace sys { namespace fs { class Path; } } // end namespace sys::fs } // end namespace mcld namespace alone { class LinkerConfig; class Linker { public: enum ErrorCode { kSuccess, kDoubleConfig, kDelegateLDInfo, kFindNameSpec, kOpenObjectFile, kOpenMemory, kNotConfig, kNotSetUpOutput, kOpenOutput, kReadSections, kReadSymbols, kAddAdditionalSymbols, kMaxErrorCode }; static const char *GetErrorString(enum ErrorCode pErrCode); private: const mcld::LinkerConfig *mLDConfig; mcld::Module *mModule; mcld::Linker *mLinker; mcld::IRBuilder *mBuilder; std::string mSOName; std::string mOutputPath; int mOutputHandler; public: Linker(); Linker(const LinkerConfig& pConfig); ~Linker(); enum ErrorCode config(const LinkerConfig& pConfig); enum ErrorCode addNameSpec(const std::string &pNameSpec); enum ErrorCode addObject(const std::string &pObjectPath); enum ErrorCode addObject(void* pMemory, size_t pSize); enum ErrorCode addCode(void* pMemory, size_t pSize); enum ErrorCode setOutput(const std::string &pPath); enum ErrorCode setOutput(int pFileHandler); enum ErrorCode link(); private: enum ErrorCode extractFiles(const LinkerConfig& pConfig); }; } // end namespace alone #endif // ALONE_LINKER_H