clang: lib/Driver/ToolChains/Gnu.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GNU_H
10#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GNU_H
11
18#include
19
22
34
36 StringRef Path, const llvm::opt::ArgList &Args,
38
40
41
44public:
46
48
51 const llvm::opt::ArgList &TCArgs,
52 const char *LinkingOutput) const override;
53};
54
55class LLVM_LIBRARY_VISIBILITY Linker : public Tool {
56public:
58
60 bool isLinkJob() const override { return true; }
61
64 const llvm::opt::ArgList &TCArgs,
65 const char *LinkingOutput) const override;
66};
67
69public:
71 : Tool("GNU::StaticLibTool", "static-lib-linker", TC) {}
72
74 bool isLinkJob() const override { return true; }
75
78 const llvm::opt::ArgList &TCArgs,
79 const char *LinkingOutput) const override;
80};
81}
82
83
85class LLVM_LIBRARY_VISIBILITY Common : public Tool {
86public:
87 Common(const char *Name, const char *ShortName, const ToolChain &TC)
88 : Tool(Name, ShortName, TC) {}
89
90
91
92
96 const llvm::opt::ArgList &TCArgs,
97 const char *LinkingOutput) const override;
98
99
100
102 llvm::opt::ArgStringList &CmdArgs) const = 0;
103};
104
106public:
108 : Common("gcc::Preprocessor", "gcc preprocessor", TC) {}
109
112
113 void RenderExtraToolArgs(const JobAction &JA,
114 llvm::opt::ArgStringList &CmdArgs) const override;
115};
116
118public:
120
123
124 void RenderExtraToolArgs(const JobAction &JA,
125 llvm::opt::ArgStringList &CmdArgs) const override;
126};
127
129public:
131
133 bool isLinkJob() const override { return true; }
134
135 void RenderExtraToolArgs(const JobAction &JA,
136 llvm::opt::ArgStringList &CmdArgs) const override;
137};
138}
139}
140
141namespace toolchains {
142
143
144
145
147public:
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
164
166
167
169
170
172
173
175
177 bool isOlderThan(int RHSMajor, int RHSMinor, int RHSPatch,
178 StringRef RHSPatchSuffix = StringRef()) const;
185 };
186
188
191
193
194
196
198
199
201
202
204
205
207
208
210
211
213
215 const llvm::opt::ArgList &DriverArgs,
216 llvm::opt::ArgStringList &CC1Args,
217 StringRef DebianMultiarch) const;
218 };
219
220
221
222
223
224
225
227 bool IsValid;
228
230
232
233
234
235 std::optional BiarchSibling;
236
237
238
239 std::setstd::string CandidateGCCInstallPaths;
240
241
243
244
245 const std::string GentooConfigDir = "/etc/env.d/gcc";
246
247 public:
248
249
250
252 [](const llvm::Triple &T) {
253 StringRef S = T.str();
254 return S;
255 };
256
258
259 void init(const llvm::Triple &TargetTriple, const llvm::opt::ArgList &Args);
260
261
262
263
264
265
266
267 bool isValid() const { return IsValid; }
268
270 return SelectedInstallation;
271 }
272
273
275 return SelectedInstallation.GCCTriple;
276 }
277
278
280 return SelectedInstallation.GCCInstallPath;
281 }
282
283
285 return SelectedInstallation.GCCParentLibPath;
286 }
287
288
290 return SelectedInstallation.SelectedMultilib;
291 }
292
293
295
296
297
298 bool getBiarchSibling(Multilib &M) const;
299
300
302 return SelectedInstallation.Version;
303 }
304
305
306 void print(raw_ostream &OS) const;
307
308 private:
309 static void
310 CollectLibDirsAndTriples(const llvm::Triple &TargetTriple,
311 const llvm::Triple &BiarchTriple,
316
317 void AddDefaultGCCPrefixes(const llvm::Triple &TargetTriple,
319 StringRef SysRoot);
320
321
322
323 bool GCCInstallationHasLibStdcxxIncludePaths(
325 const llvm::opt::ArgList &DriverArgs) const;
326
327
328
329 bool SelectGCCInstallationDirectory(
331 const llvm::opt::ArgList &Args,
333
334 bool ScanGCCForMultilibs(const llvm::Triple &TargetTriple,
335 const llvm::opt::ArgList &Args, StringRef Path,
336 bool NeedsBiarchSuffix = false);
337
338 void ScanLibDirForGCCTriple(const llvm::Triple &TargetArch,
339 const llvm::opt::ArgList &Args,
340 const std::string &LibDir,
341 StringRef CandidateTriple,
342 bool NeedsBiarchSuffix, bool GCCDirExists,
343 bool GCCCrossDirExists);
344
345 bool ScanGentooConfigs(const llvm::Triple &TargetTriple,
346 const llvm::opt::ArgList &Args,
349
350 bool ScanGentooGccConfig(const llvm::Triple &TargetTriple,
351 const llvm::opt::ArgList &Args,
352 StringRef CandidateTriple,
353 bool NeedsBiarchSuffix = false);
354 };
355
356protected:
361
362public:
364 const llvm::opt::ArgList &Args);
366
368
372 bool isPIEDefault(const llvm::opt::ArgList &Args) const override;
375 llvm::opt::DerivedArgList *
376 TranslateArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
378
379protected:
383
384
385
386
387
389
390
392
394 void AddMultilibPaths(const Driver &D, const std::string &SysRoot,
395 const std::string &OSLibDir,
396 const std::string &MultiarchTriple,
397 path_list &Paths);
398 void AddMultiarchPaths(const Driver &D, const std::string &SysRoot,
399 const std::string &OSLibDir, path_list &Paths);
400 void AddMultilibIncludeArgs(const llvm::opt::ArgList &DriverArgs,
401 llvm::opt::ArgStringList &CC1Args) const;
402
403
404
405 void AddClangCXXStdlibIncludeArgs(
406 const llvm::opt::ArgList &DriverArgs,
407 llvm::opt::ArgStringList &CC1Args) const override;
408
409 void addSYCLIncludeArgs(const llvm::opt::ArgList &DriverArgs,
410 llvm::opt::ArgStringList &CC1Args) const override;
411
412 virtual void
413 addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
414 llvm::opt::ArgStringList &CC1Args) const;
415 virtual void
416 addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
417 llvm::opt::ArgStringList &CC1Args) const;
418
419 bool addGCCLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
420 llvm::opt::ArgStringList &CC) const;
421
423 Twine IncludeSuffix,
424 const llvm::opt::ArgList &DriverArgs,
425 llvm::opt::ArgStringList &CC1Args,
426 bool DetectDebian = false) const;
427
428
429
430private:
431 mutable std::unique_ptrtools::gcc::Preprocessor Preprocess;
432 mutable std::unique_ptrtools::gcc::Compiler Compile;
433};
434
436 virtual void anchor();
437
438public:
440 const llvm::opt::ArgList &Args)
442
443 void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
444 llvm::opt::ArgStringList &CC1Args,
446
447 virtual std::string getDynamicLinker(const llvm::opt::ArgList &Args) const {
448 return {};
449 }
450
451 virtual void addExtraOpts(llvm::opt::ArgStringList &CmdArgs) const {}
452};
453
454}
455}
456}
457
458#endif
static bool addLibStdCXXIncludePaths(llvm::vfs::FileSystem &vfs, Twine IncludeDir, StringRef Triple, Twine IncludeSuffix, const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args, bool DetectDebian=false)
static void print(llvm::raw_ostream &OS, const T &V, ASTContext &ASTCtx, QualType Ty)
Simple wrapper for toolchain detector with costly initialization.
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...
InputInfo - Wrapper for information about an input source.
See also MultilibSetBuilder for combining multilibs into a set.
This corresponds to a single GCC Multilib, or a segment of one controlled by a command line flag.
SmallVector< InputInfo, 4 > InputInfoList
bool findMIPSMultilibs(const Driver &D, const llvm::Triple &TargetTriple, StringRef Path, const llvm::opt::ArgList &Args, DetectedMultilibs &Result)
The JSON file list parser is used to communicate input to InstallAPI.
@ Result
The result type of a method or function.
const FunctionProtoType * T
int const char * function
MultilibSet Multilibs
The set of multilibs that the detected installation supports.
Definition Gnu.h:25
std::optional< Multilib > BiarchSibling
On Biarch systems, this corresponds to the default multilib when targeting the non-default multilib.
Definition Gnu.h:32
llvm::SmallVector< Multilib > SelectedMultilibs
The multilibs appropriate for the given flags.
Definition Gnu.h:28