9 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GNU_H
10 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GNU_H
34 StringRef Path,
const llvm::opt::ArgList &Args,
49 const llvm::opt::ArgList &TCArgs,
50 const char *LinkingOutput)
const override;
62 const llvm::opt::ArgList &TCArgs,
63 const char *LinkingOutput)
const override;
69 :
Tool(
"GNU::StaticLibTool",
"static-lib-linker", TC) {}
76 const llvm::opt::ArgList &TCArgs,
77 const char *LinkingOutput)
const override;
86 :
Tool(Name, ShortName, TC) {}
94 const llvm::opt::ArgList &TCArgs,
95 const char *LinkingOutput)
const override;
99 virtual void RenderExtraToolArgs(
const JobAction &JA,
100 llvm::opt::ArgStringList &CmdArgs)
const = 0;
106 :
Common(
"gcc::Preprocessor",
"gcc preprocessor", TC) {}
111 void RenderExtraToolArgs(
const JobAction &JA,
112 llvm::opt::ArgStringList &CmdArgs)
const override;
122 void RenderExtraToolArgs(
const JobAction &JA,
123 llvm::opt::ArgStringList &CmdArgs)
const override;
133 void RenderExtraToolArgs(
const JobAction &JA,
134 llvm::opt::ArgStringList &CmdArgs)
const override;
139 namespace toolchains {
174 static GCCVersion Parse(StringRef VersionText);
175 bool isOlderThan(
int RHSMajor,
int RHSMinor,
int RHSPatch,
176 StringRef RHSPatchSuffix = StringRef())
const;
193 llvm::Triple GCCTriple;
204 std::optional<Multilib> BiarchSibling;
210 std::set<std::string> CandidateGCCInstallPaths;
216 const std::string GentooConfigDir =
"/etc/env.d/gcc";
220 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;
253 CollectLibDirsAndTriples(
const llvm::Triple &TargetTriple,
254 const llvm::Triple &BiarchTriple,
260 void AddDefaultGCCPrefixes(
const llvm::Triple &TargetTriple,
264 bool ScanGCCForMultilibs(
const llvm::Triple &TargetTriple,
265 const llvm::opt::ArgList &Args,
267 bool NeedsBiarchSuffix =
false);
269 void ScanLibDirForGCCTriple(
const llvm::Triple &TargetArch,
270 const llvm::opt::ArgList &Args,
272 StringRef CandidateTriple,
273 bool NeedsBiarchSuffix,
bool GCCDirExists,
274 bool GCCCrossDirExists);
276 bool ScanGentooConfigs(
const llvm::Triple &TargetTriple,
277 const llvm::opt::ArgList &Args,
281 bool ScanGentooGccConfig(
const llvm::Triple &TargetTriple,
282 const llvm::opt::ArgList &Args,
283 StringRef CandidateTriple,
284 bool NeedsBiarchSuffix =
false);
294 const llvm::opt::ArgList &Args);
297 void printVerboseInfo(raw_ostream &OS)
const override;
300 getDefaultUnwindTableLevel(
const llvm::opt::ArgList &Args)
const override;
301 bool isPICDefault()
const override;
302 bool isPIEDefault(
const llvm::opt::ArgList &Args)
const override;
303 bool isPICDefaultForced()
const override;
304 bool IsIntegratedAssemblerDefault()
const override;
305 llvm::opt::DerivedArgList *
306 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
311 Tool *buildAssembler()
const override;
312 Tool *buildLinker()
const override;
330 void AddMultilibIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
331 llvm::opt::ArgStringList &CC1Args)
const;
335 void AddClangCXXStdlibIncludeArgs(
336 const llvm::opt::ArgList &DriverArgs,
337 llvm::opt::ArgStringList &CC1Args)
const override;
340 addLibCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
341 llvm::opt::ArgStringList &CC1Args)
const;
343 addLibStdCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
344 llvm::opt::ArgStringList &CC1Args)
const;
346 bool addGCCLibStdCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
347 llvm::opt::ArgStringList &CC1Args,
348 StringRef DebianMultiarch)
const;
350 bool addLibStdCXXIncludePaths(Twine IncludeDir, StringRef Triple,
352 const llvm::opt::ArgList &DriverArgs,
353 llvm::opt::ArgStringList &CC1Args,
354 bool DetectDebian =
false)
const;
359 mutable std::unique_ptr<tools::gcc::Preprocessor>
Preprocess;
360 mutable std::unique_ptr<tools::gcc::Compiler>
Compile;
364 virtual void anchor();
368 const llvm::opt::ArgList &Args)
371 void addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs,
372 llvm::opt::ArgStringList &CC1Args,
386 #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GNU_H