119 lines · c
1//===--- AIX.h - AIX ToolChain Implementations ------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_AIX_H10#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_AIX_H11 12#include "clang/Driver/Tool.h"13#include "clang/Driver/ToolChain.h"14 15namespace clang {16namespace driver {17namespace tools {18 19/// Directly call system default assembler and linker.20namespace aix {21 22class LLVM_LIBRARY_VISIBILITY Assembler final : public Tool {23public:24 Assembler(const ToolChain &TC) : Tool("aix::Assembler", "assembler", TC) {}25 26 bool hasIntegratedCPP() const override { return false; }27 28 void ConstructJob(Compilation &C, const JobAction &JA,29 const InputInfo &Output, const InputInfoList &Inputs,30 const llvm::opt::ArgList &TCArgs,31 const char *LinkingOutput) const override;32};33 34class LLVM_LIBRARY_VISIBILITY Linker final : public Tool {35public:36 Linker(const ToolChain &TC) : Tool("aix::Linker", "linker", TC) {}37 38 bool hasIntegratedCPP() const override { return false; }39 bool isLinkJob() const override { return true; }40 41 void ConstructJob(Compilation &C, const JobAction &JA,42 const InputInfo &Output, const InputInfoList &Inputs,43 const llvm::opt::ArgList &TCArgs,44 const char *LinkingOutput) const override;45};46 47} // end namespace aix48 49} // end namespace tools50} // end namespace driver51} // end namespace clang52 53namespace clang {54namespace driver {55namespace toolchains {56 57class LLVM_LIBRARY_VISIBILITY AIX : public ToolChain {58public:59 AIX(const Driver &D, const llvm::Triple &Triple,60 const llvm::opt::ArgList &Args);61 62 bool parseInlineAsmUsingAsmParser() const override {63 return ParseInlineAsmUsingAsmParser;64 }65 bool isPICDefault() const override { return true; }66 bool isPIEDefault(const llvm::opt::ArgList &Args) const override {67 return false;68 }69 bool isPICDefaultForced() const override { return true; }70 bool HasNativeLLVMSupport() const override { return true; }71 72 void73 AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,74 llvm::opt::ArgStringList &CC1Args) const override;75 76 void AddClangCXXStdlibIncludeArgs(77 const llvm::opt::ArgList &DriverArgs,78 llvm::opt::ArgStringList &CC1Args) const override;79 80 void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,81 llvm::opt::ArgStringList &CmdArgs) const override;82 83 void addClangTargetOptions(84 const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CC1Args,85 Action::OffloadKind DeviceOffloadingKind) const override;86 87 void addProfileRTLibs(const llvm::opt::ArgList &Args,88 llvm::opt::ArgStringList &CmdArgs) const override;89 90 CXXStdlibType GetDefaultCXXStdlibType() const override;91 92 RuntimeLibType GetDefaultRuntimeLibType() const override;93 94 // Set default DWARF version to 3 for now as latest AIX OS supports version 3.95 unsigned GetDefaultDwarfVersion() const override { return 3; }96 97 llvm::DebuggerKind getDefaultDebuggerTuning() const override {98 return llvm::DebuggerKind::DBX;99 }100 101 path_list getArchSpecificLibPaths() const override { return path_list(); };102 103protected:104 Tool *buildAssembler() const override;105 Tool *buildLinker() const override;106 107private:108 llvm::StringRef GetHeaderSysroot(const llvm::opt::ArgList &DriverArgs) const;109 bool ParseInlineAsmUsingAsmParser;110 void AddOpenMPIncludeArgs(const llvm::opt::ArgList &DriverArgs,111 llvm::opt::ArgStringList &CC1Args) const;112};113 114} // end namespace toolchains115} // end namespace driver116} // end namespace clang117 118#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_AIX_H119