9 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_CLANG_H
10 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_CLANG_H
16 #include "llvm/Frontend/Debug/Options.h"
17 #include "llvm/Option/Option.h"
18 #include "llvm/Support/raw_ostream.h"
19 #include "llvm/TargetParser/Triple.h"
34 static const char *getBaseInputName(
const llvm::opt::ArgList &Args,
36 static const char *getBaseInputStem(
const llvm::opt::ArgList &Args,
38 static const char *getDependencyFileName(
const llvm::opt::ArgList &Args,
43 const Driver &D,
const llvm::opt::ArgList &Args,
44 llvm::opt::ArgStringList &CmdArgs,
48 void RenderTargetOptions(
const llvm::Triple &EffectiveTriple,
49 const llvm::opt::ArgList &Args,
bool KernelOrKext,
50 llvm::opt::ArgStringList &CmdArgs)
const;
52 void AddAArch64TargetArgs(
const llvm::opt::ArgList &Args,
53 llvm::opt::ArgStringList &CmdArgs)
const;
54 void AddARMTargetArgs(
const llvm::Triple &Triple,
55 const llvm::opt::ArgList &Args,
56 llvm::opt::ArgStringList &CmdArgs,
57 bool KernelOrKext)
const;
58 void AddARM64TargetArgs(
const llvm::opt::ArgList &Args,
59 llvm::opt::ArgStringList &CmdArgs)
const;
60 void AddLoongArchTargetArgs(
const llvm::opt::ArgList &Args,
61 llvm::opt::ArgStringList &CmdArgs)
const;
62 void AddMIPSTargetArgs(
const llvm::opt::ArgList &Args,
63 llvm::opt::ArgStringList &CmdArgs)
const;
64 void AddPPCTargetArgs(
const llvm::opt::ArgList &Args,
65 llvm::opt::ArgStringList &CmdArgs)
const;
66 void AddR600TargetArgs(
const llvm::opt::ArgList &Args,
67 llvm::opt::ArgStringList &CmdArgs)
const;
68 void AddRISCVTargetArgs(
const llvm::opt::ArgList &Args,
69 llvm::opt::ArgStringList &CmdArgs)
const;
70 void AddSparcTargetArgs(
const llvm::opt::ArgList &Args,
71 llvm::opt::ArgStringList &CmdArgs)
const;
72 void AddSystemZTargetArgs(
const llvm::opt::ArgList &Args,
73 llvm::opt::ArgStringList &CmdArgs)
const;
74 void AddX86TargetArgs(
const llvm::opt::ArgList &Args,
75 llvm::opt::ArgStringList &CmdArgs)
const;
76 void AddHexagonTargetArgs(
const llvm::opt::ArgList &Args,
77 llvm::opt::ArgStringList &CmdArgs)
const;
78 void AddLanaiTargetArgs(
const llvm::opt::ArgList &Args,
79 llvm::opt::ArgStringList &CmdArgs)
const;
80 void AddWebAssemblyTargetArgs(
const llvm::opt::ArgList &Args,
81 llvm::opt::ArgStringList &CmdArgs)
const;
82 void AddVETargetArgs(
const llvm::opt::ArgList &Args,
83 llvm::opt::ArgStringList &CmdArgs)
const;
85 enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile };
87 ObjCRuntime AddObjCRuntimeArgs(
const llvm::opt::ArgList &args,
89 llvm::opt::ArgStringList &cmdArgs,
90 RewriteKind rewrite)
const;
92 void AddClangCLArgs(
const llvm::opt::ArgList &Args,
types::ID InputType,
93 llvm::opt::ArgStringList &CmdArgs)
const;
98 const llvm::opt::ArgList &TCArgs)
const;
100 mutable std::unique_ptr<llvm::raw_fd_ostream> CompilationDatabase =
nullptr;
104 const llvm::opt::ArgList &Args)
const;
106 void DumpCompilationDatabaseFragmentToDir(
108 const InputInfo &Input,
const llvm::opt::ArgList &Args)
const;
122 const llvm::opt::ArgList &TCArgs,
123 const char *LinkingOutput)
const override;
130 :
Tool(
"clang::as",
"clang integrated assembler", TC) {}
131 void AddLoongArchTargetArgs(
const llvm::opt::ArgList &Args,
132 llvm::opt::ArgStringList &CmdArgs)
const;
133 void AddMIPSTargetArgs(
const llvm::opt::ArgList &Args,
134 llvm::opt::ArgStringList &CmdArgs)
const;
135 void AddX86TargetArgs(
const llvm::opt::ArgList &Args,
136 llvm::opt::ArgStringList &CmdArgs)
const;
137 void AddRISCVTargetArgs(
const llvm::opt::ArgList &Args,
138 llvm::opt::ArgStringList &CmdArgs)
const;
145 const llvm::opt::ArgList &TCArgs,
146 const char *LinkingOutput)
const override;
153 :
Tool(
"offload bundler",
"clang-offload-bundler", TC) {}
158 const llvm::opt::ArgList &TCArgs,
159 const char *LinkingOutput)
const override;
163 const llvm::opt::ArgList &TCArgs,
164 const char *LinkingOutput)
const override;
171 :
Tool(
"offload wrapper",
"clang-offload-wrapper", TC) {}
176 const llvm::opt::ArgList &TCArgs,
177 const char *LinkingOutput)
const override;
184 :
Tool(
"Offload::Packager",
"clang-offload-packager", TC) {}
189 const llvm::opt::ArgList &TCArgs,
190 const char *LinkingOutput)
const override;
197 const llvm::opt::ArgList &TCArgs,
198 const char *LinkingOutput)
const;
202 :
Tool(
"offload deps",
"clang-offload-deps", TC) {}
207 const llvm::opt::ArgList &TCArgs,
208 const char *LinkingOutput)
const override;
212 const llvm::opt::ArgList &TCArgs,
213 const char *LinkingOutput)
const override;
220 :
Tool(
"SPIR-V translator",
"llvm-spirv", TC) {}
225 const llvm::opt::ArgList &TCArgs,
226 const char *LinkingOutput)
const override;
233 :
Tool(
"SYCL post link",
"sycl-post-link", TC) {}
239 const llvm::opt::ArgList &TCArgs,
240 const char *LinkingOutput)
const override;
247 :
Tool(
"File table transformation",
"file-table-tform", TC) {}
253 const llvm::opt::ArgList &TCArgs,
254 const char *LinkingOutput)
const override;
261 :
Tool(
"Append Footer to source",
"append-file", TC) {}
267 const llvm::opt::ArgList &TCArgs,
268 const char *LinkingOutput)
const override;
275 :
Tool(
"Convert SPIR-V to LLVM-IR if needed",
"spirv-to-ir-wrapper", TC) {
282 const llvm::opt::ArgList &TCArgs,
283 const char *LinkingOutput)
const override;
292 :
Tool(
"Offload::Linker",
"linker", TC), Linker(Linker) {}
297 const llvm::opt::ArgList &TCArgs,
298 const char *LinkingOutput)
const override;
304 const llvm::opt::ArgList &Args,
305 llvm::opt::Arg *&Arg);
320 const char *BaseInput);
llvm::MachO::Target Target
The basic abstraction for the target Objective-C runtime.
Compilation - A set of tasks to perform for a single driver invocation.
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
SYCL post-link device code processing tool.
bool hasIntegratedCPP() const override
bool hasGoodDiagnostics() const override
Does this tool have "good" standardized diagnostics, or should the driver add an additional "command ...
SYCLPostLink(const ToolChain &TC)
The JSON file list parser is used to communicate input to InstallAPI.