1480093f4SDimitry Andric //===--- AIX.h - AIX ToolChain Implementations ------------------*- C++ -*-===// 2480093f4SDimitry Andric // 3480093f4SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4480093f4SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5480093f4SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6480093f4SDimitry Andric // 7480093f4SDimitry Andric //===----------------------------------------------------------------------===// 8480093f4SDimitry Andric 9480093f4SDimitry Andric #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_AIX_H 10480093f4SDimitry Andric #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_AIX_H 11480093f4SDimitry Andric 12480093f4SDimitry Andric #include "clang/Driver/Tool.h" 13480093f4SDimitry Andric #include "clang/Driver/ToolChain.h" 14480093f4SDimitry Andric 15480093f4SDimitry Andric namespace clang { 16480093f4SDimitry Andric namespace driver { 17480093f4SDimitry Andric namespace tools { 18480093f4SDimitry Andric 19480093f4SDimitry Andric /// aix -- Directly call system default assembler and linker. 20480093f4SDimitry Andric namespace aix { 21480093f4SDimitry Andric 22480093f4SDimitry Andric class LLVM_LIBRARY_VISIBILITY Assembler : public Tool { 23480093f4SDimitry Andric public: 24480093f4SDimitry Andric Assembler(const ToolChain &TC) : Tool("aix::Assembler", "assembler", TC) {} 25480093f4SDimitry Andric 26480093f4SDimitry Andric bool hasIntegratedCPP() const override { return false; } 27480093f4SDimitry Andric 28480093f4SDimitry Andric void ConstructJob(Compilation &C, const JobAction &JA, 29480093f4SDimitry Andric const InputInfo &Output, const InputInfoList &Inputs, 30480093f4SDimitry Andric const llvm::opt::ArgList &TCArgs, 31480093f4SDimitry Andric const char *LinkingOutput) const override; 32480093f4SDimitry Andric }; 33480093f4SDimitry Andric 34480093f4SDimitry Andric class LLVM_LIBRARY_VISIBILITY Linker : public Tool { 35480093f4SDimitry Andric public: 36480093f4SDimitry Andric Linker(const ToolChain &TC) : Tool("aix::Linker", "linker", TC) {} 37480093f4SDimitry Andric 38480093f4SDimitry Andric bool hasIntegratedCPP() const override { return false; } 39480093f4SDimitry Andric bool isLinkJob() const override { return true; } 40480093f4SDimitry Andric 41480093f4SDimitry Andric void ConstructJob(Compilation &C, const JobAction &JA, 42480093f4SDimitry Andric const InputInfo &Output, const InputInfoList &Inputs, 43480093f4SDimitry Andric const llvm::opt::ArgList &TCArgs, 44480093f4SDimitry Andric const char *LinkingOutput) const override; 45480093f4SDimitry Andric }; 46480093f4SDimitry Andric 47480093f4SDimitry Andric } // end namespace aix 48480093f4SDimitry Andric 49480093f4SDimitry Andric } // end namespace tools 50480093f4SDimitry Andric } // end namespace driver 51480093f4SDimitry Andric } // end namespace clang 52480093f4SDimitry Andric 53480093f4SDimitry Andric namespace clang { 54480093f4SDimitry Andric namespace driver { 55480093f4SDimitry Andric namespace toolchains { 56480093f4SDimitry Andric 57480093f4SDimitry Andric class LLVM_LIBRARY_VISIBILITY AIX : public ToolChain { 58480093f4SDimitry Andric public: 59480093f4SDimitry Andric AIX(const Driver &D, const llvm::Triple &Triple, 60480093f4SDimitry Andric const llvm::opt::ArgList &Args); 61480093f4SDimitry Andric 62480093f4SDimitry Andric bool isPICDefault() const override { return true; } 63480093f4SDimitry Andric bool isPIEDefault() const override { return false; } 64480093f4SDimitry Andric bool isPICDefaultForced() const override { return true; } 65480093f4SDimitry Andric 665ffd83dbSDimitry Andric void 675ffd83dbSDimitry Andric AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, 685ffd83dbSDimitry Andric llvm::opt::ArgStringList &CC1Args) const override; 695ffd83dbSDimitry Andric 70*e8d8bef9SDimitry Andric void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args, 71*e8d8bef9SDimitry Andric llvm::opt::ArgStringList &CmdArgs) const override; 72*e8d8bef9SDimitry Andric 73*e8d8bef9SDimitry Andric CXXStdlibType GetDefaultCXXStdlibType() const override; 74*e8d8bef9SDimitry Andric 75*e8d8bef9SDimitry Andric RuntimeLibType GetDefaultRuntimeLibType() const override; 76*e8d8bef9SDimitry Andric 77480093f4SDimitry Andric protected: 78480093f4SDimitry Andric Tool *buildAssembler() const override; 79480093f4SDimitry Andric Tool *buildLinker() const override; 805ffd83dbSDimitry Andric 815ffd83dbSDimitry Andric private: 825ffd83dbSDimitry Andric llvm::StringRef GetHeaderSysroot(const llvm::opt::ArgList &DriverArgs) const; 83480093f4SDimitry Andric }; 84480093f4SDimitry Andric 85480093f4SDimitry Andric } // end namespace toolchains 86480093f4SDimitry Andric } // end namespace driver 87480093f4SDimitry Andric } // end namespace clang 88480093f4SDimitry Andric 89480093f4SDimitry Andric #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_AIX_H 90