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;
197 std::string GCCInstallPath;
198 std::string GCCParentLibPath;
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,
271 const std::string &LibDir,
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;
299 bool IsUnwindTablesDefault(
const llvm::opt::ArgList &Args)
const override;
300 bool isPICDefault()
const override;
301 bool isPIEDefault()
const override;
302 bool isPICDefaultForced()
const override;
303 bool IsIntegratedAssemblerDefault()
const override;
304 llvm::opt::DerivedArgList *
305 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
310 Tool *buildAssembler()
const override;
311 Tool *buildLinker()
const override;
314 const llvm::Triple &TargetTriple,
315 StringRef SysRoot)
const
316 {
return TargetTriple.str(); }
328 void AddMultilibPaths(
const Driver &D,
const std::string &SysRoot,
329 const std::string &OSLibDir,
330 const std::string &MultiarchTriple,
332 void AddMultiarchPaths(
const Driver &D,
const std::string &SysRoot,
333 const std::string &OSLibDir, path_list &Paths);
334 void AddMultilibIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
335 llvm::opt::ArgStringList &CC1Args)
const;
339 void AddClangCXXStdlibIncludeArgs(
340 const llvm::opt::ArgList &DriverArgs,
341 llvm::opt::ArgStringList &CC1Args)
const override;
344 addLibCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
345 llvm::opt::ArgStringList &CC1Args)
const;
347 addLibStdCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
348 llvm::opt::ArgStringList &CC1Args)
const;
351 addGCCLibStdCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
352 llvm::opt::ArgStringList &CC1Args)
const;
354 bool addLibStdCXXIncludePaths(Twine
Base, Twine Suffix, StringRef GCCTriple,
355 StringRef GCCMultiarchTriple,
356 StringRef TargetMultiarchTriple,
358 const llvm::opt::ArgList &DriverArgs,
359 llvm::opt::ArgStringList &CC1Args)
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,
391 #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_GNU_H