1-
21// ===--- Cuda.h - Cuda ToolChain Implementations ----------------*- C++ -*-===//
32//
43// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
54// See https://llvm.org/LICENSE.txt for license information.
65// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
76//
87// ===----------------------------------------------------------------------===//
8+
99#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_CUDA_H
1010#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_CUDA_H
11+
1112#include " clang/Basic/Cuda.h"
1213#include " clang/Driver/Action.h"
1314#include " clang/Driver/CudaInstallationDetector.h"
1920#include < bitset>
2021#include < set>
2122#include < vector>
23+
2224namespace clang {
2325namespace driver {
2426namespace tools {
2527namespace NVPTX {
28+
2629// Run ptxas, the NVPTX assembler.
2730class LLVM_LIBRARY_VISIBILITY Assembler final : public Tool {
2831public:
@@ -33,6 +36,7 @@ class LLVM_LIBRARY_VISIBILITY Assembler final : public Tool {
3336 const llvm::opt::ArgList &TCArgs,
3437 const char *LinkingOutput) const override ;
3538};
39+
3640// Runs fatbinary, which combines GPU object files ("cubin" files) and/or PTX
3741// assembly into a single output file.
3842class LLVM_LIBRARY_VISIBILITY FatBinary : public Tool {
@@ -44,6 +48,7 @@ class LLVM_LIBRARY_VISIBILITY FatBinary : public Tool {
4448 const llvm::opt::ArgList &TCArgs,
4549 const char *LinkingOutput) const override ;
4650};
51+
4752// Runs nvlink, which links GPU object files ("cubin" files) into a single file.
4853class LLVM_LIBRARY_VISIBILITY Linker final : public Tool {
4954public:
@@ -55,6 +60,7 @@ class LLVM_LIBRARY_VISIBILITY Linker final : public Tool {
5560 const llvm::opt::ArgList &TCArgs,
5661 const char *LinkingOutput) const override ;
5762};
63+
5864class LLVM_LIBRARY_VISIBILITY OpenMPLinker : public Tool {
5965 public:
6066 OpenMPLinker (const ToolChain &TC)
@@ -65,12 +71,15 @@ class LLVM_LIBRARY_VISIBILITY OpenMPLinker : public Tool {
6571 const llvm::opt::ArgList &TCArgs,
6672 const char *LinkingOutput) const override ;
6773};
74+
6875void getNVPTXTargetFeatures (const Driver &D, const llvm::Triple &Triple,
6976 const llvm::opt::ArgList &Args,
7077 std::vector<StringRef> &Features);
7178} // end namespace NVPTX
7279} // end namespace tools
80+
7381namespace toolchains {
82+
7483class LLVM_LIBRARY_VISIBILITY NVPTXToolChain : public ToolChain {
7584public:
7685 NVPTXToolChain (const Driver &D, const llvm::Triple &Triple,
@@ -79,6 +88,7 @@ class LLVM_LIBRARY_VISIBILITY NVPTXToolChain : public ToolChain {
7988
8089 NVPTXToolChain (const Driver &D, const llvm::Triple &Triple,
8190 const llvm::opt::ArgList &Args);
91+
8292 llvm::opt::DerivedArgList *
8393 TranslateArgs (const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
8494 Action::OffloadKind DeviceOffloadKind) const override ;
@@ -102,10 +112,13 @@ class LLVM_LIBRARY_VISIBILITY NVPTXToolChain : public ToolChain {
102112 bool HasNativeLLVMSupport () const override { return true ; }
103113 bool isPICDefaultForced () const override { return false ; }
104114 bool SupportsProfiling () const override { return false ; }
115+
105116 bool IsMathErrnoDefault () const override { return false ; }
117+
106118 bool supportsDebugInfoOption (const llvm::opt::Arg *A) const override ;
107119 void adjustDebugInfoKind (llvm::codegenoptions::DebugInfoKind &DebugInfoKind,
108120 const llvm::opt::ArgList &Args) const override ;
121+
109122 // NVPTX supports only DWARF2.
110123 unsigned GetDefaultDwarfVersion () const override { return 2 ; }
111124 unsigned getMaxDwarfVersion () const override { return 2 ; }
@@ -116,6 +129,7 @@ class LLVM_LIBRARY_VISIBILITY NVPTXToolChain : public ToolChain {
116129 getSystemGPUArchs (const llvm::opt::ArgList &Args) const override ;
117130
118131 CudaInstallationDetector CudaInstallation;
132+
119133protected:
120134 Tool *buildAssembler () const override ; // ptxas.
121135 Tool *buildLinker () const override ; // nvlink.
@@ -128,25 +142,30 @@ class LLVM_LIBRARY_VISIBILITY CudaToolChain : public NVPTXToolChain {
128142 CudaToolChain (const Driver &D, const llvm::Triple &Triple,
129143 const ToolChain &HostTC, const llvm::opt::ArgList &Args,
130144 const std::string TargetID);
145+
131146 const llvm::Triple *getAuxTriple () const override {
132147 return &HostTC.getTriple ();
133148 }
134149
135150 bool HasNativeLLVMSupport () const override { return false ; }
136151
137152 std::string getInputFilename (const InputInfo &Input) const override ;
153+
138154 llvm::opt::DerivedArgList *
139155 TranslateArgs (const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
140156 Action::OffloadKind DeviceOffloadKind) const override ;
141157 void
142158 addClangTargetOptions (const llvm::opt::ArgList &DriverArgs,
143159 llvm::opt::ArgStringList &CC1Args,
144160 Action::OffloadKind DeviceOffloadKind) const override ;
161+
145162 llvm::DenormalMode getDefaultDenormalModeForType (
146163 const llvm::opt::ArgList &DriverArgs, const JobAction &JA,
147164 const llvm::fltSemantics *FPType = nullptr ) const override ;
165+
148166 void AddCudaIncludeArgs (const llvm::opt::ArgList &DriverArgs,
149167 llvm::opt::ArgStringList &CC1Args) const override ;
168+
150169 void addClangWarningOptions (llvm::opt::ArgStringList &CC1Args) const override ;
151170 CXXStdlibType GetCXXStdlibType (const llvm::opt::ArgList &Args) const override ;
152171 void
@@ -157,6 +176,7 @@ class LLVM_LIBRARY_VISIBILITY CudaToolChain : public NVPTXToolChain {
157176 llvm::opt::ArgStringList &CC1Args) const override ;
158177 void AddIAMCUIncludeArgs (const llvm::opt::ArgList &DriverArgs,
159178 llvm::opt::ArgStringList &CC1Args) const override ;
179+
160180 SanitizerMask getSupportedSanitizers () const override ;
161181 VersionTuple
162182 computeMSVCVersion (const Driver *D,
@@ -168,7 +188,9 @@ class LLVM_LIBRARY_VISIBILITY CudaToolChain : public NVPTXToolChain {
168188 Tool *buildAssembler () const override ; // ptxas
169189 Tool *buildLinker () const override ; // fatbinary (ok, not really a linker)
170190};
191+
171192} // end namespace toolchains
172193} // end namespace driver
173194} // end namespace clang
195+
174196#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_CUDA_H
0 commit comments