193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao/*
293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * Copyright 2012, The Android Open Source Project
393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao *
493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * Licensed under the Apache License, Version 2.0 (the "License");
593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * you may not use this file except in compliance with the License.
693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * You may obtain a copy of the License at
793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao *
893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao *     http://www.apache.org/licenses/LICENSE-2.0
993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao *
1093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * Unless required by applicable law or agreed to in writing, software
1193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * distributed under the License is distributed on an "AS IS" BASIS,
1293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * See the License for the specific language governing permissions and
1493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * limitations under the License.
1593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao */
1693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
1793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao#ifndef BCC_SUPPORT_LINKER_CONFIG_H
1893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao#define BCC_SUPPORT_LINKER_CONFIG_H
1993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
2093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao#include <string>
2193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
2293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao#include <mcld/MC/MCLDInfo.h>
2393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao#include <mcld/Support/TargetRegistry.h>
2493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao#include <mcld/LD/DiagnosticLineInfo.h>
2593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao#include <mcld/LD/DiagnosticPrinter.h>
2693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
2793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaonamespace bcc {
2893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
2993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaoclass LinkerConfig {
3093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaoprivate:
3193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  //===--------------------------------------------------------------------===//
3293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  // Available Configurations
3393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  //===--------------------------------------------------------------------===//
3440b9ba0213349a9eed81dfe974c0ea6f9a514558Shih-wei Liao  const std::string mTriple;
3593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  bool mShared;
3693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  std::string mSOName;
3793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
3893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaoprivate:
3993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  //===--------------------------------------------------------------------===//
4093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  // These are generated by LinkerConfig during initialize().
4193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  //===--------------------------------------------------------------------===//
4293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  const mcld::Target *mTarget;
4393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  bool initializeTarget();
4493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
4593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  mcld::MCLDInfo *mLDInfo;
4693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  bool initializeLDInfo();
4793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
4893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  mcld::DiagnosticLineInfo *mDiagLineInfo;
4993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  mcld::DiagnosticPrinter *mDiagPrinter;
5093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  bool initializeDiagnostic();
5193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
5293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaopublic:
5393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  //===--------------------------------------------------------------------===//
5493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  // Getters
5593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  //===--------------------------------------------------------------------===//
5693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  inline const std::string &getTriple() const
5793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  { return mTriple; }
5893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
5993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  inline const mcld::Target *getTarget() const
6093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  { return mTarget; }
6193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
6293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  inline mcld::MCLDInfo* getLDInfo()
6393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  { return mLDInfo; }
6493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
6593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  inline const mcld::MCLDInfo* getLDInfo() const
6693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  { return mLDInfo; }
6793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
6893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  inline bool isShared() const
6993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  { return mShared; }
7093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
7193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  inline std::string getSOName() const
7293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  { return mSOName; }
7393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
7493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  void setShared(bool pEnable = true);
7593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
7693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  void setBsymbolic(bool pEnable = true);
7793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
7893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  void setSOName(const std::string &pSOName);
7993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
8093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  void setDyld(const std::string &pDyld);
8193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
8293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  void setSysRoot(const std::string &pSysRoot);
8393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
8493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  void addWrap(const std::string &pWrapSymbol);
8593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
8693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  void addPortable(const std::string &pPortableSymbol);
8793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
8893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  void addSearchDir(const std::string &pDir);
8993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
9093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaopublic:
9193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  LinkerConfig(const std::string& pTriple);
9293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
9393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao  virtual ~LinkerConfig();
9493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao};
9593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
9693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao} // end namespace bcc
9793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao
9893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao#endif // BCC_SUPPORT_LINKER_CONFIG_H
99