15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- MCLDInfo.h ---------------------------------------------------------===//
25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//                     The MCLinker Project
45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source
65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details.
75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifndef MCLD_LDINFO_H
105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_LDINFO_H
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h>
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <llvm/ADT/Triple.h>
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/Support/FileSystem.h>
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/Support/MemoryAreaFactory.h>
195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/MC/MCLDOutput.h>
205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/MC/MCLDOptions.h>
215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/MC/MCLDInputTree.h>
225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/MC/AttributeFactory.h>
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/MC/ContextFactory.h>
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/StrSymPool.h>
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <string>
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <cassert>
285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class MCLDInfo
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  \brief MCLDInfo is composed of argumments of MCLinker.
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *   options()        - the general options.
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *   inputs()         - the tree of inputs
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *   bitcode()        - the bitcode being linked
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *   output()         - the output file
385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *   inputFactory()   - the list of all inputs
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *   attrFactory()    - the list of all attributes
405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *   contextFactory() - the list of all contexts.
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *   memAreaFactory() - the list of all MemoryAreas.
425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */
435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass MCLDInfo
445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  explicit MCLDInfo(const std::string &pTripleString,
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                    size_t pAttrNum,
485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                    size_t InputSize);
495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  virtual ~MCLDInfo();
515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  GeneralOptions& options()
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return m_Options; }
545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const GeneralOptions& options() const
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return m_Options; }
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  void setBitcode(const Input& pInput);
595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  Input& bitcode();
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const Input& bitcode() const;
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  Output& output()
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return *m_pOutput; }
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const Output& output() const
665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return *m_pOutput; }
675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  InputTree& inputs()
695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return *m_pInputTree; }
705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const InputTree& inputs() const
725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return *m_pInputTree; }
735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  InputFactory& inputFactory()
755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return *m_pInputFactory; }
765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const InputFactory& inputFactory() const
785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return *m_pInputFactory; }
795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  AttributeFactory& attrFactory()
815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return *m_pAttrFactory; }
825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const AttributeFactory& attrFactory() const
855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return *m_pAttrFactory; }
865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ContextFactory& contextFactory()
885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return *m_pCntxtFactory; }
895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const ContextFactory& contextFactory() const
915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return *m_pCntxtFactory; }
925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  MemoryAreaFactory& memAreaFactory()
945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return *m_pMemAreaFactory; }
955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const MemoryAreaFactory& memAreaFactory() const
975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return *m_pMemAreaFactory; }
985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const llvm::Triple& triple() const
1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return m_Triple; }
1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  static const char* version();
1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  void setNamePool(StrSymPool& pPool)
1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { m_pStrSymPool = &pPool; }
1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  StrSymPool& getStrSymPool() {
1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != m_pStrSymPool);
1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *m_pStrSymPool;
1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const StrSymPool& getStrSymPool() const {
1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    assert(NULL != m_pStrSymPool);
1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *m_pStrSymPool;
1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate:
1185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // -----  General Options  ----- //
1195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  GeneralOptions m_Options;
1205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  InputTree *m_pInputTree;
1215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  Input* m_pBitcode;
1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  Output* m_pOutput;
1235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  llvm::Triple m_Triple;
1245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // -----  factories  ----- //
1265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  InputFactory *m_pInputFactory;
1275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  AttributeFactory *m_pAttrFactory;
1285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ContextFactory *m_pCntxtFactory;
1295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  MemoryAreaFactory *m_pMemAreaFactory;
1305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // -----  string and symbols  ----- //
1325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  StrSymPool* m_pStrSymPool;
1335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
1345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld
1365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
1385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
139