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 const llvm::opt::ArgList &Args)
const;
76 :
Tool(
"GNU::StaticLibTool",
"static-lib-linker", TC) {}
83 const llvm::opt::ArgList &TCArgs,
84 const char *LinkingOutput)
const override;
93 :
Tool(Name, ShortName, TC) {}
101 const llvm::opt::ArgList &TCArgs,
102 const char *LinkingOutput)
const override;
107 llvm::opt::ArgStringList &CmdArgs)
const = 0;
113 :
Common(
"gcc::Preprocessor",
"gcc preprocessor", TC) {}
118 void RenderExtraToolArgs(
const JobAction &JA,
119 llvm::opt::ArgStringList &CmdArgs)
const override;
129 void RenderExtraToolArgs(
const JobAction &JA,
130 llvm::opt::ArgStringList &CmdArgs)
const override;
140 void RenderExtraToolArgs(
const JobAction &JA,
141 llvm::opt::ArgStringList &CmdArgs)
const override;
146 namespace toolchains {
181 static GCCVersion Parse(StringRef VersionText);
182 bool isOlderThan(
int RHSMajor,
int RHSMinor,
int RHSPatch,
183 StringRef RHSPatchSuffix = StringRef())
const;
200 llvm::Triple GCCTriple;
204 std::string GCCInstallPath;
205 std::string GCCParentLibPath;
211 std::optional<Multilib> BiarchSibling;
217 std::set<std::string> CandidateGCCInstallPaths;
223 const std::string GentooConfigDir =
"/etc/env.d/gcc";
227 void init(
const llvm::Triple &TargetTriple,
const llvm::opt::ArgList &Args);
233 const llvm::Triple &
getTriple()
const {
return GCCTriple; }
249 bool getBiarchSibling(
Multilib &M)
const;
255 void print(raw_ostream &OS)
const;
259 CollectLibDirsAndTriples(
const llvm::Triple &TargetTriple,
260 const llvm::Triple &BiarchTriple,
266 void AddDefaultGCCPrefixes(
const llvm::Triple &TargetTriple,
270 bool ScanGCCForMultilibs(
const llvm::Triple &TargetTriple,
271 const llvm::opt::ArgList &Args,
273 bool NeedsBiarchSuffix =
false);
275 void ScanLibDirForGCCTriple(
const llvm::Triple &TargetArch,
276 const llvm::opt::ArgList &Args,
277 const std::string &LibDir,
278 StringRef CandidateTriple,
279 bool NeedsBiarchSuffix,
bool GCCDirExists,
280 bool GCCCrossDirExists);
282 bool ScanGentooConfigs(
const llvm::Triple &TargetTriple,
283 const llvm::opt::ArgList &Args,
287 bool ScanGentooGccConfig(
const llvm::Triple &TargetTriple,
288 const llvm::opt::ArgList &Args,
289 StringRef CandidateTriple,
290 bool NeedsBiarchSuffix =
false);
300 const llvm::opt::ArgList &Args);
303 void printVerboseInfo(raw_ostream &OS)
const override;
306 getDefaultUnwindTableLevel(
const llvm::opt::ArgList &Args)
const override;
307 bool isPICDefault()
const override;
308 bool isPIEDefault(
const llvm::opt::ArgList &Args)
const override;
309 bool isPICDefaultForced()
const override;
310 bool IsIntegratedAssemblerDefault()
const override;
311 llvm::opt::DerivedArgList *
312 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
317 Tool *buildAssembler()
const override;
318 Tool *buildLinker()
const override;
330 void AddMultilibPaths(
const Driver &D,
const std::string &SysRoot,
331 const std::string &OSLibDir,
332 const std::string &MultiarchTriple,
334 void AddMultiarchPaths(
const Driver &D,
const std::string &SysRoot,
335 const std::string &OSLibDir, path_list &Paths);
336 void AddMultilibIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
337 llvm::opt::ArgStringList &CC1Args)
const;
341 void AddClangCXXStdlibIncludeArgs(
342 const llvm::opt::ArgList &DriverArgs,
343 llvm::opt::ArgStringList &CC1Args)
const override;
346 addLibCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
347 llvm::opt::ArgStringList &CC1Args)
const;
349 addLibStdCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
350 llvm::opt::ArgStringList &CC1Args)
const;
352 bool addGCCLibStdCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
353 llvm::opt::ArgStringList &CC1Args,
354 StringRef DebianMultiarch)
const;
356 bool addLibStdCXXIncludePaths(Twine IncludeDir, StringRef Triple,
358 const llvm::opt::ArgList &DriverArgs,
359 llvm::opt::ArgStringList &CC1Args,
360 bool DetectDebian =
false)
const;
365 mutable std::unique_ptr<tools::gcc::Preprocessor>
Preprocess;
366 mutable std::unique_ptr<tools::gcc::Compiler>
Compile;
370 virtual void anchor();
374 const llvm::opt::ArgList &Args)
377 void addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs,
378 llvm::opt::ArgStringList &CC1Args,
void print(llvm::raw_ostream &OS, const Pointer &P, ASTContext &Ctx, 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.
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.