9#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GNU_H
10#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GNU_H
35 StringRef Path,
const llvm::opt::ArgList &Args,
50 const llvm::opt::ArgList &TCArgs,
51 const char *LinkingOutput)
const override;
63 const llvm::opt::ArgList &TCArgs,
64 const char *LinkingOutput)
const override;
70 :
Tool(
"GNU::StaticLibTool",
"static-lib-linker", TC) {}
77 const llvm::opt::ArgList &TCArgs,
78 const char *LinkingOutput)
const override;
87 :
Tool(Name, ShortName, TC) {}
95 const llvm::opt::ArgList &TCArgs,
96 const char *LinkingOutput)
const override;
101 llvm::opt::ArgStringList &CmdArgs)
const = 0;
107 :
Common(
"gcc::Preprocessor",
"gcc preprocessor", TC) {}
112 void RenderExtraToolArgs(
const JobAction &JA,
113 llvm::opt::ArgStringList &CmdArgs)
const override;
123 void RenderExtraToolArgs(
const JobAction &JA,
124 llvm::opt::ArgStringList &CmdArgs)
const override;
134 void RenderExtraToolArgs(
const JobAction &JA,
135 llvm::opt::ArgStringList &CmdArgs)
const override;
140namespace toolchains {
175 static GCCVersion Parse(StringRef VersionText);
176 bool isOlderThan(
int RHSMajor,
int RHSMinor,
int RHSPatch,
177 StringRef RHSPatchSuffix = StringRef())
const;
194 llvm::Triple GCCTriple;
198 std::string GCCInstallPath;
199 std::string GCCParentLibPath;
205 std::optional<Multilib> BiarchSibling;
211 std::set<std::string> CandidateGCCInstallPaths;
217 const std::string GentooConfigDir =
"/etc/env.d/gcc";
221 void init(
const llvm::Triple &TargetTriple,
const llvm::opt::ArgList &Args);
227 const llvm::Triple &
getTriple()
const {
return GCCTriple; }
243 bool getBiarchSibling(
Multilib &M)
const;
249 void print(raw_ostream &OS)
const;
252 std::string TripleNoVendor;
254 CollectLibDirsAndTriples(
const llvm::Triple &TargetTriple,
255 const llvm::Triple &BiarchTriple,
261 void AddDefaultGCCPrefixes(
const llvm::Triple &TargetTriple,
265 bool ScanGCCForMultilibs(
const llvm::Triple &TargetTriple,
266 const llvm::opt::ArgList &Args,
268 bool NeedsBiarchSuffix =
false);
270 void ScanLibDirForGCCTriple(
const llvm::Triple &TargetArch,
271 const llvm::opt::ArgList &Args,
272 const std::string &LibDir,
273 StringRef CandidateTriple,
274 bool NeedsBiarchSuffix,
bool GCCDirExists,
275 bool GCCCrossDirExists);
277 bool ScanGentooConfigs(
const llvm::Triple &TargetTriple,
278 const llvm::opt::ArgList &Args,
282 bool ScanGentooGccConfig(
const llvm::Triple &TargetTriple,
283 const llvm::opt::ArgList &Args,
284 StringRef CandidateTriple,
285 bool NeedsBiarchSuffix =
false);
295 const llvm::opt::ArgList &Args);
298 void printVerboseInfo(raw_ostream &OS)
const override;
301 getDefaultUnwindTableLevel(
const llvm::opt::ArgList &Args)
const override;
302 bool isPICDefault()
const override;
303 bool isPIEDefault(
const llvm::opt::ArgList &Args)
const override;
304 bool isPICDefaultForced()
const override;
305 bool IsIntegratedAssemblerDefault()
const override;
306 llvm::opt::DerivedArgList *
307 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
312 Tool *buildAssembler()
const override;
313 Tool *buildLinker()
const override;
325 void AddMultilibPaths(
const Driver &D,
const std::string &SysRoot,
326 const std::string &OSLibDir,
327 const std::string &MultiarchTriple,
329 void AddMultiarchPaths(
const Driver &D,
const std::string &SysRoot,
330 const std::string &OSLibDir, path_list &Paths);
331 void AddMultilibIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
332 llvm::opt::ArgStringList &CC1Args)
const;
336 void AddClangCXXStdlibIncludeArgs(
337 const llvm::opt::ArgList &DriverArgs,
338 llvm::opt::ArgStringList &CC1Args)
const override;
341 addLibCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
342 llvm::opt::ArgStringList &CC1Args)
const;
344 addLibStdCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
345 llvm::opt::ArgStringList &CC1Args)
const;
347 bool addGCCLibStdCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
348 llvm::opt::ArgStringList &CC1Args,
349 StringRef DebianMultiarch)
const;
351 bool addLibStdCXXIncludePaths(Twine IncludeDir, StringRef Triple,
353 const llvm::opt::ArgList &DriverArgs,
354 llvm::opt::ArgStringList &CC1Args,
355 bool DetectDebian =
false)
const;
360 mutable std::unique_ptr<tools::gcc::Preprocessor> Preprocess;
361 mutable std::unique_ptr<tools::gcc::Compiler> Compile;
365 virtual void anchor();
369 const llvm::opt::ArgList &Args)
372 void addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs,
373 llvm::opt::ArgStringList &CC1Args,
static void print(llvm::raw_ostream &OS, const T &V, ASTContext &, QualType)
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)
@ Result
The result type of a method or 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.