|  | //===--- HIP.h - HIP ToolChain Implementations ------------------*- C++ -*-===// | 
|  | // | 
|  | //                     The LLVM Compiler Infrastructure | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HIP_H | 
|  | #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HIP_H | 
|  |  | 
|  | #include "clang/Driver/ToolChain.h" | 
|  | #include "clang/Driver/Tool.h" | 
|  |  | 
|  | namespace clang { | 
|  | namespace driver { | 
|  |  | 
|  | namespace tools { | 
|  |  | 
|  | namespace AMDGCN { | 
|  | // Runs llvm-link/opt/llc/lld, which links multiple LLVM bitcode, together with | 
|  | // device library, then compiles it to ISA in a shared object. | 
|  | class LLVM_LIBRARY_VISIBILITY Linker : public Tool { | 
|  | public: | 
|  | Linker(const ToolChain &TC) : Tool("AMDGCN::Linker", "amdgcn-link", TC) {} | 
|  |  | 
|  | bool hasIntegratedCPP() const override { return false; } | 
|  |  | 
|  | void ConstructJob(Compilation &C, const JobAction &JA, | 
|  | const InputInfo &Output, const InputInfoList &Inputs, | 
|  | const llvm::opt::ArgList &TCArgs, | 
|  | const char *LinkingOutput) const override; | 
|  |  | 
|  | private: | 
|  | /// \return llvm-link output file name. | 
|  | const char *constructLLVMLinkCommand(Compilation &C, const JobAction &JA, | 
|  | const InputInfoList &Inputs, | 
|  | const llvm::opt::ArgList &Args, | 
|  | llvm::StringRef SubArchName, | 
|  | llvm::StringRef OutputFilePrefix) const; | 
|  |  | 
|  | /// \return opt output file name. | 
|  | const char *constructOptCommand(Compilation &C, const JobAction &JA, | 
|  | const InputInfoList &Inputs, | 
|  | const llvm::opt::ArgList &Args, | 
|  | llvm::StringRef SubArchName, | 
|  | llvm::StringRef OutputFilePrefix, | 
|  | const char *InputFileName) const; | 
|  |  | 
|  | /// \return llc output file name. | 
|  | const char *constructLlcCommand(Compilation &C, const JobAction &JA, | 
|  | const InputInfoList &Inputs, | 
|  | const llvm::opt::ArgList &Args, | 
|  | llvm::StringRef SubArchName, | 
|  | llvm::StringRef OutputFilePrefix, | 
|  | const char *InputFileName) const; | 
|  |  | 
|  | void constructLldCommand(Compilation &C, const JobAction &JA, | 
|  | const InputInfoList &Inputs, const InputInfo &Output, | 
|  | const llvm::opt::ArgList &Args, | 
|  | const char *InputFileName) const; | 
|  | }; | 
|  |  | 
|  | } // end namespace AMDGCN | 
|  | } // end namespace tools | 
|  |  | 
|  | namespace toolchains { | 
|  |  | 
|  | class LLVM_LIBRARY_VISIBILITY HIPToolChain : public ToolChain { | 
|  | public: | 
|  | HIPToolChain(const Driver &D, const llvm::Triple &Triple, | 
|  | const ToolChain &HostTC, const llvm::opt::ArgList &Args); | 
|  |  | 
|  | const llvm::Triple *getAuxTriple() const override { | 
|  | return &HostTC.getTriple(); | 
|  | } | 
|  |  | 
|  | llvm::opt::DerivedArgList * | 
|  | TranslateArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch, | 
|  | Action::OffloadKind DeviceOffloadKind) const override; | 
|  | void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs, | 
|  | llvm::opt::ArgStringList &CC1Args, | 
|  | Action::OffloadKind DeviceOffloadKind) const override; | 
|  |  | 
|  | bool useIntegratedAs() const override { return true; } | 
|  | bool isCrossCompiling() const override { return true; } | 
|  | bool isPICDefault() const override { return false; } | 
|  | bool isPIEDefault() const override { return false; } | 
|  | bool isPICDefaultForced() const override { return false; } | 
|  | bool SupportsProfiling() const override { return false; } | 
|  | bool IsMathErrnoDefault() const override { return false; } | 
|  |  | 
|  | void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override; | 
|  | CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override; | 
|  | void | 
|  | AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, | 
|  | llvm::opt::ArgStringList &CC1Args) const override; | 
|  | void AddClangCXXStdlibIncludeArgs( | 
|  | const llvm::opt::ArgList &Args, | 
|  | llvm::opt::ArgStringList &CC1Args) const override; | 
|  | void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs, | 
|  | llvm::opt::ArgStringList &CC1Args) const override; | 
|  |  | 
|  | SanitizerMask getSupportedSanitizers() const override; | 
|  |  | 
|  | VersionTuple | 
|  | computeMSVCVersion(const Driver *D, | 
|  | const llvm::opt::ArgList &Args) const override; | 
|  |  | 
|  | unsigned GetDefaultDwarfVersion() const override { return 2; } | 
|  |  | 
|  | const ToolChain &HostTC; | 
|  |  | 
|  | protected: | 
|  | Tool *buildLinker() const override; | 
|  | }; | 
|  |  | 
|  | } // end namespace toolchains | 
|  | } // end namespace driver | 
|  | } // end namespace clang | 
|  |  | 
|  | #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HIP_H |