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 {
176 static GCCVersion Parse(StringRef VersionText);
177 bool isOlderThan(
int RHSMajor,
int RHSMinor,
int RHSPatch,
178 StringRef RHSPatchSuffix = StringRef())
const;
195 llvm::Triple GCCTriple;
199 std::string GCCInstallPath;
200 std::string GCCParentLibPath;
206 std::optional<Multilib> BiarchSibling;
212 std::set<std::string> CandidateGCCInstallPaths;
218 const std::string GentooConfigDir =
"/etc/env.d/gcc";
222 void init(
const llvm::Triple &TargetTriple,
const llvm::opt::ArgList &Args);
228 const llvm::Triple &
getTriple()
const {
return GCCTriple; }
244 bool getBiarchSibling(
Multilib &M)
const;
250 void print(raw_ostream &OS)
const;
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);
296 const llvm::opt::ArgList &Args);
299 void printVerboseInfo(raw_ostream &OS)
const override;
302 getDefaultUnwindTableLevel(
const llvm::opt::ArgList &Args)
const override;
303 bool isPICDefault()
const override;
304 bool isPIEDefault(
const llvm::opt::ArgList &Args)
const override;
305 bool isPICDefaultForced()
const override;
306 bool IsIntegratedAssemblerDefault()
const override;
307 llvm::opt::DerivedArgList *
308 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
313 Tool *buildAssembler()
const override;
314 Tool *buildLinker()
const override;
326 void AddMultilibPaths(
const Driver &
D,
const std::string &SysRoot,
327 const std::string &OSLibDir,
328 const std::string &MultiarchTriple,
330 void AddMultiarchPaths(
const Driver &
D,
const std::string &SysRoot,
331 const std::string &OSLibDir, path_list &Paths);
332 void AddMultilibIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
333 llvm::opt::ArgStringList &CC1Args)
const;
337 void AddClangCXXStdlibIncludeArgs(
338 const llvm::opt::ArgList &DriverArgs,
339 llvm::opt::ArgStringList &CC1Args)
const override;
341 void addSYCLIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
342 llvm::opt::ArgStringList &CC1Args)
const override;
345 addLibCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
346 llvm::opt::ArgStringList &CC1Args)
const;
348 addLibStdCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
349 llvm::opt::ArgStringList &CC1Args)
const;
351 bool addGCCLibStdCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
352 llvm::opt::ArgStringList &CC1Args,
353 StringRef DebianMultiarch)
const;
355 bool addLibStdCXXIncludePaths(Twine IncludeDir, StringRef Triple,
357 const llvm::opt::ArgList &DriverArgs,
358 llvm::opt::ArgStringList &CC1Args,
359 bool DetectDebian =
false)
const;
364 mutable std::unique_ptr<tools::gcc::Preprocessor> Preprocess;
365 mutable std::unique_ptr<tools::gcc::Compiler> Compile;
369 virtual void anchor();
373 const llvm::opt::ArgList &Args)
376 void addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs,
377 llvm::opt::ArgStringList &CC1Args,
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.
@ 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.