1 //===--- HIP.h - HIP ToolChain Implementations ------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HIP_H
11 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HIP_H
13 #include "clang/Driver/ToolChain.h"
14 #include "clang/Driver/Tool.h"
22 // Runs llvm-link/opt/llc/lld, which links multiple LLVM bitcode, together with
23 // device library, then compiles it to ISA in a shared object.
24 class LLVM_LIBRARY_VISIBILITY Linker : public Tool {
26 Linker(const ToolChain &TC) : Tool("AMDGCN::Linker", "amdgcn-link", TC) {}
28 bool hasIntegratedCPP() const override { return false; }
30 void ConstructJob(Compilation &C, const JobAction &JA,
31 const InputInfo &Output, const InputInfoList &Inputs,
32 const llvm::opt::ArgList &TCArgs,
33 const char *LinkingOutput) const override;
36 /// \return llvm-link output file name.
37 const char *constructLLVMLinkCommand(Compilation &C, const JobAction &JA,
38 const InputInfoList &Inputs,
39 const llvm::opt::ArgList &Args,
40 llvm::StringRef SubArchName,
41 llvm::StringRef OutputFilePrefix) const;
43 /// \return opt output file name.
44 const char *constructOptCommand(Compilation &C, const JobAction &JA,
45 const InputInfoList &Inputs,
46 const llvm::opt::ArgList &Args,
47 llvm::StringRef SubArchName,
48 llvm::StringRef OutputFilePrefix,
49 const char *InputFileName) const;
51 /// \return llc output file name.
52 const char *constructLlcCommand(Compilation &C, const JobAction &JA,
53 const InputInfoList &Inputs,
54 const llvm::opt::ArgList &Args,
55 llvm::StringRef SubArchName,
56 llvm::StringRef OutputFilePrefix,
57 const char *InputFileName) const;
59 void constructLldCommand(Compilation &C, const JobAction &JA,
60 const InputInfoList &Inputs, const InputInfo &Output,
61 const llvm::opt::ArgList &Args,
62 const char *InputFileName) const;
65 } // end namespace AMDGCN
66 } // end namespace tools
68 namespace toolchains {
70 class LLVM_LIBRARY_VISIBILITY HIPToolChain : public ToolChain {
72 HIPToolChain(const Driver &D, const llvm::Triple &Triple,
73 const ToolChain &HostTC, const llvm::opt::ArgList &Args);
75 const llvm::Triple *getAuxTriple() const override {
76 return &HostTC.getTriple();
79 llvm::opt::DerivedArgList *
80 TranslateArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
81 Action::OffloadKind DeviceOffloadKind) const override;
82 void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
83 llvm::opt::ArgStringList &CC1Args,
84 Action::OffloadKind DeviceOffloadKind) const override;
86 bool useIntegratedAs() const override { return true; }
87 bool isCrossCompiling() const override { return true; }
88 bool isPICDefault() const override { return false; }
89 bool isPIEDefault() const override { return false; }
90 bool isPICDefaultForced() const override { return false; }
91 bool SupportsProfiling() const override { return false; }
92 bool IsMathErrnoDefault() const override { return false; }
94 void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override;
95 CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;
97 AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
98 llvm::opt::ArgStringList &CC1Args) const override;
99 void AddClangCXXStdlibIncludeArgs(
100 const llvm::opt::ArgList &Args,
101 llvm::opt::ArgStringList &CC1Args) const override;
102 void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs,
103 llvm::opt::ArgStringList &CC1Args) const override;
105 SanitizerMask getSupportedSanitizers() const override;
108 computeMSVCVersion(const Driver *D,
109 const llvm::opt::ArgList &Args) const override;
111 unsigned GetDefaultDwarfVersion() const override { return 2; }
113 const ToolChain &HostTC;
116 Tool *buildLinker() const override;
119 } // end namespace toolchains
120 } // end namespace driver
121 } // end namespace clang
123 #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HIP_H