10 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLS_H
11 #define LLVM_CLANG_LIB_DRIVER_TOOLS_H
18 #include "llvm/ADT/Triple.h"
19 #include "llvm/Option/Option.h"
20 #include "llvm/Support/Compiler.h"
29 namespace toolchains {
35 namespace visualstudio {
39 using llvm::opt::ArgStringList;
42 const llvm::opt::ArgList &Args,
43 StringRef Component,
bool Shared =
false);
48 static const char *getBaseInputName(
const llvm::opt::ArgList &Args,
50 static const char *getBaseInputStem(
const llvm::opt::ArgList &Args,
52 static const char *getDependencyFileName(
const llvm::opt::ArgList &Args,
57 const Driver &D,
const llvm::opt::ArgList &Args,
58 llvm::opt::ArgStringList &CmdArgs,
62 void AddAArch64TargetArgs(
const llvm::opt::ArgList &Args,
63 llvm::opt::ArgStringList &CmdArgs)
const;
64 void AddARMTargetArgs(
const llvm::Triple &Triple,
65 const llvm::opt::ArgList &Args,
66 llvm::opt::ArgStringList &CmdArgs,
67 bool KernelOrKext)
const;
68 void AddARM64TargetArgs(
const llvm::opt::ArgList &Args,
69 llvm::opt::ArgStringList &CmdArgs)
const;
70 void AddMIPSTargetArgs(
const llvm::opt::ArgList &Args,
71 llvm::opt::ArgStringList &CmdArgs)
const;
72 void AddPPCTargetArgs(
const llvm::opt::ArgList &Args,
73 llvm::opt::ArgStringList &CmdArgs)
const;
74 void AddR600TargetArgs(
const llvm::opt::ArgList &Args,
75 llvm::opt::ArgStringList &CmdArgs)
const;
76 void AddSparcTargetArgs(
const llvm::opt::ArgList &Args,
77 llvm::opt::ArgStringList &CmdArgs)
const;
78 void AddSystemZTargetArgs(
const llvm::opt::ArgList &Args,
79 llvm::opt::ArgStringList &CmdArgs)
const;
80 void AddX86TargetArgs(
const llvm::opt::ArgList &Args,
81 llvm::opt::ArgStringList &CmdArgs)
const;
82 void AddHexagonTargetArgs(
const llvm::opt::ArgList &Args,
83 llvm::opt::ArgStringList &CmdArgs)
const;
84 void AddLanaiTargetArgs(
const llvm::opt::ArgList &Args,
85 llvm::opt::ArgStringList &CmdArgs)
const;
86 void AddWebAssemblyTargetArgs(
const llvm::opt::ArgList &Args,
87 llvm::opt::ArgStringList &CmdArgs)
const;
89 enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile };
91 ObjCRuntime AddObjCRuntimeArgs(
const llvm::opt::ArgList &args,
92 llvm::opt::ArgStringList &cmdArgs,
93 RewriteKind rewrite)
const;
95 void AddClangCLArgs(
const llvm::opt::ArgList &Args,
types::ID InputType,
96 llvm::opt::ArgStringList &CmdArgs,
98 bool *EmitCodeView)
const;
102 mutable std::unique_ptr<visualstudio::Compiler> CLFallback;
117 const llvm::opt::ArgList &TCArgs,
118 const char *LinkingOutput)
const override;
125 :
Tool(
"clang::as",
"clang integrated assembler", TC, RF_Full) {}
126 void AddMIPSTargetArgs(
const llvm::opt::ArgList &Args,
127 llvm::opt::ArgStringList &CmdArgs)
const;
134 const llvm::opt::ArgList &TCArgs,
135 const char *LinkingOutput)
const override;
141 virtual void anchor();
145 :
Tool(Name, ShortName, TC, RF_Full, llvm::sys::WEM_CurrentCodePage) {}
153 :
GnuTool(Name, ShortName, TC) {}
161 const llvm::opt::ArgList &TCArgs,
162 const char *LinkingOutput)
const override;
166 virtual void RenderExtraToolArgs(
const JobAction &JA,
167 llvm::opt::ArgStringList &CmdArgs)
const = 0;
173 :
Common(
"gcc::Preprocessor",
"gcc preprocessor", TC) {}
178 void RenderExtraToolArgs(
const JobAction &JA,
179 llvm::opt::ArgStringList &CmdArgs)
const override;
189 void RenderExtraToolArgs(
const JobAction &JA,
190 llvm::opt::ArgStringList &CmdArgs)
const override;
200 void RenderExtraToolArgs(
const JobAction &JA,
201 llvm::opt::ArgStringList &CmdArgs)
const override;
212 :
GnuTool(
"hexagon::Assembler",
"hexagon-as", TC) {}
216 void RenderExtraToolArgs(
const JobAction &JA,
217 llvm::opt::ArgStringList &CmdArgs)
const;
220 const llvm::opt::ArgList &TCArgs,
221 const char *LinkingOutput)
const override;
231 virtual void RenderExtraToolArgs(
const JobAction &JA,
232 llvm::opt::ArgStringList &CmdArgs)
const;
235 const llvm::opt::ArgList &TCArgs,
236 const char *LinkingOutput)
const override;
249 const llvm::opt::ArgList &TCArgs,
250 const char *LinkingOutput)
const override;
260 bool isLinkJob()
const override;
261 bool hasIntegratedCPP()
const override;
264 const llvm::opt::ArgList &TCArgs,
265 const char *LinkingOutput)
const override;
272 const llvm::Triple &Triple);
274 const llvm::Triple &Triple);
277 const llvm::Triple &Triple);
280 const llvm::Triple &Triple);
295 const llvm::Triple &Triple, StringRef &CPUName,
298 const llvm::Triple &Triple);
300 bool isUCLibc(
const llvm::opt::ArgList &Args);
301 bool isNaN2008(
const llvm::opt::ArgList &Args,
const llvm::Triple &Triple);
302 bool isFP64ADefault(
const llvm::Triple &Triple, StringRef CPUName);
303 bool isFPXXDefault(
const llvm::Triple &Triple, StringRef CPUName,
305 bool shouldUseFPXX(
const llvm::opt::ArgList &Args,
const llvm::Triple &Triple,
306 StringRef CPUName, StringRef ABIName,
325 const llvm::opt::ArgList &TCArgs,
326 const char *LinkingOutput)
const override;
335 virtual void anchor();
338 void AddMachOArch(
const llvm::opt::ArgList &Args,
339 llvm::opt::ArgStringList &CmdArgs)
const;
347 const char *
Name,
const char *ShortName,
const ToolChain &TC,
349 llvm::sys::WindowsEncodingMethod ResponseEncoding = llvm::sys::WEM_UTF8,
350 const char *ResponseFlag =
"@")
351 :
Tool(Name, ShortName, TC, ResponseSupport, ResponseEncoding,
358 :
MachOTool(
"darwin::Assembler",
"assembler", TC) {}
364 const llvm::opt::ArgList &TCArgs,
365 const char *LinkingOutput)
const override;
370 void AddLinkArgs(
Compilation &C,
const llvm::opt::ArgList &Args,
371 llvm::opt::ArgStringList &CmdArgs,
376 :
MachOTool(
"darwin::Linker",
"linker", TC, RF_FileList,
377 llvm::sys::WEM_UTF8,
"-filelist") {}
384 const llvm::opt::ArgList &TCArgs,
385 const char *LinkingOutput)
const override;
396 const llvm::opt::ArgList &TCArgs,
397 const char *LinkingOutput)
const override;
403 :
MachOTool(
"darwin::Dsymutil",
"dsymutil", TC) {}
410 const llvm::opt::ArgList &TCArgs,
411 const char *LinkingOutput)
const override;
417 :
MachOTool(
"darwin::VerifyDebug",
"dwarfdump", TC) {}
423 const llvm::opt::ArgList &TCArgs,
424 const char *LinkingOutput)
const override;
433 :
GnuTool(
"openbsd::Assembler",
"assembler", TC) {}
439 const llvm::opt::ArgList &TCArgs,
440 const char *LinkingOutput)
const override;
452 const llvm::opt::ArgList &TCArgs,
453 const char *LinkingOutput)
const override;
462 :
GnuTool(
"bitrig::Assembler",
"assembler", TC) {}
468 const llvm::opt::ArgList &TCArgs,
469 const char *LinkingOutput)
const override;
481 const llvm::opt::ArgList &TCArgs,
482 const char *LinkingOutput)
const override;
491 :
GnuTool(
"freebsd::Assembler",
"assembler", TC) {}
497 const llvm::opt::ArgList &TCArgs,
498 const char *LinkingOutput)
const override;
510 const llvm::opt::ArgList &TCArgs,
511 const char *LinkingOutput)
const override;
520 :
GnuTool(
"netbsd::Assembler",
"assembler", TC) {}
526 const llvm::opt::ArgList &TCArgs,
527 const char *LinkingOutput)
const override;
539 const llvm::opt::ArgList &TCArgs,
540 const char *LinkingOutput)
const override;
554 const llvm::opt::ArgList &TCArgs,
555 const char *LinkingOutput)
const override;
567 const llvm::opt::ArgList &TCArgs,
568 const char *LinkingOutput)
const override;
572 namespace nacltools {
579 const llvm::opt::ArgList &TCArgs,
580 const char *LinkingOutput)
const override;
592 const llvm::opt::ArgList &TCArgs,
593 const char *LinkingOutput)
const override;
602 :
GnuTool(
"minix::Assembler",
"assembler", TC) {}
608 const llvm::opt::ArgList &TCArgs,
609 const char *LinkingOutput)
const override;
621 const llvm::opt::ArgList &TCArgs,
622 const char *LinkingOutput)
const override;
631 :
Tool(
"solaris::Assembler",
"assembler", TC) {}
637 const llvm::opt::ArgList &TCArgs,
638 const char *LinkingOutput)
const override;
650 const llvm::opt::ArgList &TCArgs,
651 const char *LinkingOutput)
const override;
656 namespace dragonfly {
660 :
GnuTool(
"dragonfly::Assembler",
"assembler", TC) {}
666 const llvm::opt::ArgList &TCArgs,
667 const char *LinkingOutput)
const override;
679 const llvm::opt::ArgList &TCArgs,
680 const char *LinkingOutput)
const override;
685 namespace visualstudio {
687 const llvm::Triple &Triple,
688 const llvm::opt::ArgList &Args,
bool IsWindowsMSVC);
693 :
Tool(
"visualstudio::Linker",
"linker", TC, RF_Full,
694 llvm::sys::WEM_UTF16) {}
701 const llvm::opt::ArgList &TCArgs,
702 const char *LinkingOutput)
const override;
708 :
Tool(
"visualstudio::Compiler",
"compiler", TC, RF_Full,
709 llvm::sys::WEM_UTF16) {}
717 const llvm::opt::ArgList &TCArgs,
718 const char *LinkingOutput)
const override;
723 const llvm::opt::ArgList &TCArgs,
724 const char *LinkingOutput)
const;
738 const llvm::opt::ArgList &TCArgs,
739 const char *LinkingOutput)
const override;
751 const llvm::opt::ArgList &TCArgs,
752 const char *LinkingOutput)
const override;
755 void AddLibGCC(
const llvm::opt::ArgList &Args, ArgStringList &CmdArgs)
const;
801 const llvm::opt::ArgList &TCArgs,
802 const char *LinkingOutput)
const override;
813 const llvm::opt::ArgList &TCArgs,
814 const char *LinkingOutput)
const override;
818 namespace CrossWindows {
827 const llvm::opt::ArgList &TCArgs,
828 const char *LinkingOutput)
const override;
834 :
Tool(
"CrossWindows::Linker",
"ld", TC, RF_Full) {}
841 const llvm::opt::ArgList &TCArgs,
842 const char *LinkingOutput)
const override;
856 const llvm::opt::ArgList &TCArgs,
857 const char *LinkingOutput)
const override;
868 const llvm::opt::ArgList &TCArgs,
869 const char *LinkingOutput)
const override;
885 const llvm::opt::ArgList &TCArgs,
886 const char *LinkingOutput)
const override;
894 :
Tool(
"PS4cpu::Assemble",
"assembler", TC, RF_Full) {}
901 const llvm::opt::ArgList &TCArgs,
902 const char *LinkingOutput)
const override;
915 const llvm::opt::ArgList &TCArgs,
916 const char *LinkingOutput)
const override;
926 :
Tool(
"NVPTX::Assembler",
"ptxas", TC, RF_Full, llvm::sys::WEM_UTF8,
933 const llvm::opt::ArgList &TCArgs,
934 const char *LinkingOutput)
const override;
942 :
Tool(
"NVPTX::Linker",
"fatbinary", TC, RF_Full, llvm::sys::WEM_UTF8,
949 const llvm::opt::ArgList &TCArgs,
950 const char *LinkingOutput)
const override;
959 #endif // LLVM_CLANG_LIB_DRIVER_TOOLS_H
Represents a version number in the form major[.minor[.subminor[.build]]].
class LLVM_ALIGNAS(8) DependentTemplateSpecializationType const IdentifierInfo * Name
Represents a template specialization type whose template cannot be resolved, e.g. ...
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
The basic abstraction for the target Objective-C runtime.
Compilation - A set of tasks to perform for a single driver invocation.
Defines the clang::VersionTuple class, which represents a version in the form major[.minor[.subminor]].