9#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GNU_H
10#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GNU_H
36 StringRef
Path,
const llvm::opt::ArgList &Args,
51 const llvm::opt::ArgList &TCArgs,
52 const char *LinkingOutput)
const override;
64 const llvm::opt::ArgList &TCArgs,
65 const char *LinkingOutput)
const override;
71 :
Tool(
"GNU::StaticLibTool",
"static-lib-linker", TC) {}
78 const llvm::opt::ArgList &TCArgs,
79 const char *LinkingOutput)
const override;
96 const llvm::opt::ArgList &TCArgs,
97 const char *LinkingOutput)
const override;
102 llvm::opt::ArgStringList &CmdArgs)
const = 0;
108 :
Common(
"gcc::Preprocessor",
"gcc preprocessor", TC) {}
113 void RenderExtraToolArgs(
const JobAction &JA,
114 llvm::opt::ArgStringList &CmdArgs)
const override;
124 void RenderExtraToolArgs(
const JobAction &JA,
125 llvm::opt::ArgStringList &CmdArgs)
const override;
135 void RenderExtraToolArgs(
const JobAction &JA,
136 llvm::opt::ArgStringList &CmdArgs)
const override;
141namespace toolchains {
177 bool isOlderThan(
int RHSMajor,
int RHSMinor,
int RHSPatch,
178 StringRef RHSPatchSuffix = StringRef())
const;
200 const llvm::Triple &
getTriple()
const {
return GCCTriple; }
214 bool addGCCLibStdCxxIncludePaths(llvm::vfs::FileSystem &vfs,
215 const llvm::opt::ArgList &DriverArgs,
216 llvm::opt::ArgStringList &CC1Args,
217 StringRef DebianMultiarch)
const;
235 std::optional<Multilib> BiarchSibling;
239 std::set<std::string> CandidateGCCInstallPaths;
245 const std::string GentooConfigDir =
"/etc/env.d/gcc";
252 [](
const llvm::Triple &
T) {
253 StringRef S =
T.str();
259 void init(
const llvm::Triple &TargetTriple,
const llvm::opt::ArgList &Args);
270 return SelectedInstallation;
298 bool getBiarchSibling(
Multilib &M)
const;
302 return SelectedInstallation.
Version;
306 void print(raw_ostream &OS)
const;
310 CollectLibDirsAndTriples(
const llvm::Triple &TargetTriple,
311 const llvm::Triple &BiarchTriple,
317 void AddDefaultGCCPrefixes(
const llvm::Triple &TargetTriple,
323 bool GCCInstallationHasLibStdcxxIncludePaths(
325 const llvm::opt::ArgList &DriverArgs)
const;
329 bool SelectGCCInstallationDirectory(
331 const llvm::opt::ArgList &Args,
334 bool ScanGCCForMultilibs(
const llvm::Triple &TargetTriple,
335 const llvm::opt::ArgList &Args, StringRef
Path,
336 bool NeedsBiarchSuffix =
false);
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);
345 bool ScanGentooConfigs(
const llvm::Triple &TargetTriple,
346 const llvm::opt::ArgList &Args,
350 bool ScanGentooGccConfig(
const llvm::Triple &TargetTriple,
351 const llvm::opt::ArgList &Args,
352 StringRef CandidateTriple,
353 bool NeedsBiarchSuffix =
false);
364 const llvm::opt::ArgList &Args);
367 void printVerboseInfo(raw_ostream &OS)
const override;
370 getDefaultUnwindTableLevel(
const llvm::opt::ArgList &Args)
const override;
371 bool isPICDefault()
const override;
372 bool isPIEDefault(
const llvm::opt::ArgList &Args)
const override;
373 bool isPICDefaultForced()
const override;
374 bool IsIntegratedAssemblerDefault()
const override;
375 llvm::opt::DerivedArgList *
376 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
381 Tool *buildAssembler()
const override;
382 Tool *buildLinker()
const override;
394 void AddMultilibPaths(
const Driver &
D,
const std::string &SysRoot,
395 const std::string &OSLibDir,
396 const std::string &MultiarchTriple,
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;
405 void AddClangCXXStdlibIncludeArgs(
406 const llvm::opt::ArgList &DriverArgs,
407 llvm::opt::ArgStringList &CC1Args)
const override;
409 void addSYCLIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
410 llvm::opt::ArgStringList &CC1Args)
const override;
413 addLibCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
414 llvm::opt::ArgStringList &CC1Args)
const;
416 addLibStdCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
417 llvm::opt::ArgStringList &CC1Args)
const;
419 bool addGCCLibStdCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
420 llvm::opt::ArgStringList &CC)
const;
424 const llvm::opt::ArgList &DriverArgs,
425 llvm::opt::ArgStringList &CC1Args,
426 bool DetectDebian =
false)
const;
431 mutable std::unique_ptr<tools::gcc::Preprocessor> Preprocess;
432 mutable std::unique_ptr<tools::gcc::Compiler> Compile;
436 virtual void anchor();
440 const llvm::opt::ArgList &Args)
443 void addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs,
444 llvm::opt::ArgStringList &CC1Args,
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...
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.
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.
@ Parse
Parse the block; this code is always used.
@ 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.
std::optional< Multilib > BiarchSibling
On Biarch systems, this corresponds to the default multilib when targeting the non-default multilib.
llvm::SmallVector< Multilib > SelectedMultilibs
The multilibs appropriate for the given flags.