NaCl.h revision 321369
1//===--- NaCl.h - Native Client ToolChain Implementations -------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_NACL_H 11#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_NACL_H 12 13#include "Gnu.h" 14#include "clang/Driver/Tool.h" 15#include "clang/Driver/ToolChain.h" 16 17namespace clang { 18namespace driver { 19namespace tools { 20namespace nacltools { 21class LLVM_LIBRARY_VISIBILITY AssemblerARM : public gnutools::Assembler { 22public: 23 AssemblerARM(const ToolChain &TC) : gnutools::Assembler(TC) {} 24 25 void ConstructJob(Compilation &C, const JobAction &JA, 26 const InputInfo &Output, const InputInfoList &Inputs, 27 const llvm::opt::ArgList &TCArgs, 28 const char *LinkingOutput) const override; 29}; 30 31class LLVM_LIBRARY_VISIBILITY Linker : public GnuTool { 32public: 33 Linker(const ToolChain &TC) : GnuTool("NaCl::Linker", "linker", TC) {} 34 35 bool hasIntegratedCPP() const override { return false; } 36 bool isLinkJob() const override { return true; } 37 38 void ConstructJob(Compilation &C, const JobAction &JA, 39 const InputInfo &Output, const InputInfoList &Inputs, 40 const llvm::opt::ArgList &TCArgs, 41 const char *LinkingOutput) const override; 42}; 43} // end namespace nacltools 44} // end namespace tools 45 46namespace toolchains { 47 48class LLVM_LIBRARY_VISIBILITY NaClToolChain : public Generic_ELF { 49public: 50 NaClToolChain(const Driver &D, const llvm::Triple &Triple, 51 const llvm::opt::ArgList &Args); 52 53 void 54 AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, 55 llvm::opt::ArgStringList &CC1Args) const override; 56 std::string findLibCxxIncludePath() const override; 57 58 CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override; 59 60 void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args, 61 llvm::opt::ArgStringList &CmdArgs) const override; 62 63 bool IsIntegratedAssemblerDefault() const override { 64 return getTriple().getArch() == llvm::Triple::mipsel; 65 } 66 67 // Get the path to the file containing NaCl's ARM macros. 68 // It lives in NaClToolChain because the ARMAssembler tool needs a 69 // const char * that it can pass around, 70 const char *GetNaClArmMacrosPath() const { return NaClArmMacrosPath.c_str(); } 71 72 std::string ComputeEffectiveClangTriple(const llvm::opt::ArgList &Args, 73 types::ID InputType) const override; 74 75protected: 76 Tool *buildLinker() const override; 77 Tool *buildAssembler() const override; 78 79private: 80 std::string NaClArmMacrosPath; 81}; 82 83} // end namespace toolchains 84} // end namespace driver 85} // end namespace clang 86 87#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_NACL_H 88