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,
63 void AddAArch64TargetArgs(
const llvm::opt::ArgList &Args,
64 llvm::opt::ArgStringList &CmdArgs)
const;
65 void AddARMTargetArgs(
const llvm::Triple &Triple,
66 const llvm::opt::ArgList &Args,
67 llvm::opt::ArgStringList &CmdArgs,
68 bool KernelOrKext)
const;
69 void AddARM64TargetArgs(
const llvm::opt::ArgList &Args,
70 llvm::opt::ArgStringList &CmdArgs)
const;
71 void AddMIPSTargetArgs(
const llvm::opt::ArgList &Args,
72 llvm::opt::ArgStringList &CmdArgs)
const;
73 void AddPPCTargetArgs(
const llvm::opt::ArgList &Args,
74 llvm::opt::ArgStringList &CmdArgs)
const;
75 void AddR600TargetArgs(
const llvm::opt::ArgList &Args,
76 llvm::opt::ArgStringList &CmdArgs)
const;
77 void AddSparcTargetArgs(
const llvm::opt::ArgList &Args,
78 llvm::opt::ArgStringList &CmdArgs)
const;
79 void AddSystemZTargetArgs(
const llvm::opt::ArgList &Args,
80 llvm::opt::ArgStringList &CmdArgs)
const;
81 void AddX86TargetArgs(
const llvm::opt::ArgList &Args,
82 llvm::opt::ArgStringList &CmdArgs)
const;
83 void AddHexagonTargetArgs(
const llvm::opt::ArgList &Args,
84 llvm::opt::ArgStringList &CmdArgs)
const;
85 void AddWebAssemblyTargetArgs(
const llvm::opt::ArgList &Args,
86 llvm::opt::ArgStringList &CmdArgs)
const;
88 enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile };
90 ObjCRuntime AddObjCRuntimeArgs(
const llvm::opt::ArgList &args,
91 llvm::opt::ArgStringList &cmdArgs,
92 RewriteKind rewrite)
const;
94 void AddClangCLArgs(
const llvm::opt::ArgList &Args,
95 llvm::opt::ArgStringList &CmdArgs,
97 bool *EmitCodeView)
const;
101 mutable std::unique_ptr<visualstudio::Compiler> CLFallback;
116 const llvm::opt::ArgList &TCArgs,
117 const char *LinkingOutput)
const override;
124 :
Tool(
"clang::as",
"clang integrated assembler", TC, RF_Full) {}
125 void AddMIPSTargetArgs(
const llvm::opt::ArgList &Args,
126 llvm::opt::ArgStringList &CmdArgs)
const;
133 const llvm::opt::ArgList &TCArgs,
134 const char *LinkingOutput)
const override;
140 virtual void anchor();
144 :
Tool(Name, ShortName, TC, RF_Full, llvm::sys::WEM_CurrentCodePage) {}
152 :
GnuTool(Name, ShortName, TC) {}
160 const llvm::opt::ArgList &TCArgs,
161 const char *LinkingOutput)
const override;
165 virtual void RenderExtraToolArgs(
const JobAction &JA,
166 llvm::opt::ArgStringList &CmdArgs)
const = 0;
172 :
Common(
"gcc::Preprocessor",
"gcc preprocessor", TC) {}
177 void RenderExtraToolArgs(
const JobAction &JA,
178 llvm::opt::ArgStringList &CmdArgs)
const override;
188 void RenderExtraToolArgs(
const JobAction &JA,
189 llvm::opt::ArgStringList &CmdArgs)
const override;
199 void RenderExtraToolArgs(
const JobAction &JA,
200 llvm::opt::ArgStringList &CmdArgs)
const override;
211 :
GnuTool(
"hexagon::Assembler",
"hexagon-as", TC) {}
215 void RenderExtraToolArgs(
const JobAction &JA,
216 llvm::opt::ArgStringList &CmdArgs)
const;
219 const llvm::opt::ArgList &TCArgs,
220 const char *LinkingOutput)
const override;
230 virtual void RenderExtraToolArgs(
const JobAction &JA,
231 llvm::opt::ArgStringList &CmdArgs)
const;
234 const llvm::opt::ArgList &TCArgs,
235 const char *LinkingOutput)
const override;
248 const llvm::opt::ArgList &TCArgs,
249 const char *LinkingOutput)
const override;
259 bool isLinkJob()
const override;
260 bool hasIntegratedCPP()
const override;
263 const llvm::opt::ArgList &TCArgs,
264 const char *LinkingOutput)
const override;
271 const llvm::Triple &Triple);
273 const llvm::Triple &Triple);
276 const llvm::Triple &Triple);
279 const llvm::Triple &Triple);
293 const llvm::Triple &Triple, StringRef &CPUName,
296 const llvm::Triple &Triple);
298 bool isUCLibc(
const llvm::opt::ArgList &Args);
299 bool isNaN2008(
const llvm::opt::ArgList &Args,
const llvm::Triple &Triple);
300 bool isFPXXDefault(
const llvm::Triple &Triple, StringRef CPUName,
302 bool shouldUseFPXX(
const llvm::opt::ArgList &Args,
const llvm::Triple &Triple,
303 StringRef CPUName, StringRef ABIName,
322 const llvm::opt::ArgList &TCArgs,
323 const char *LinkingOutput)
const override;
332 virtual void anchor();
335 void AddMachOArch(
const llvm::opt::ArgList &Args,
336 llvm::opt::ArgStringList &CmdArgs)
const;
344 const char *
Name,
const char *ShortName,
const ToolChain &TC,
346 llvm::sys::WindowsEncodingMethod ResponseEncoding = llvm::sys::WEM_UTF8,
347 const char *ResponseFlag =
"@")
348 :
Tool(Name, ShortName, TC, ResponseSupport, ResponseEncoding,
355 :
MachOTool(
"darwin::Assembler",
"assembler", TC) {}
361 const llvm::opt::ArgList &TCArgs,
362 const char *LinkingOutput)
const override;
367 void AddLinkArgs(
Compilation &
C,
const llvm::opt::ArgList &Args,
368 llvm::opt::ArgStringList &CmdArgs,
373 :
MachOTool(
"darwin::Linker",
"linker", TC, RF_FileList,
374 llvm::sys::WEM_UTF8,
"-filelist") {}
381 const llvm::opt::ArgList &TCArgs,
382 const char *LinkingOutput)
const override;
393 const llvm::opt::ArgList &TCArgs,
394 const char *LinkingOutput)
const override;
400 :
MachOTool(
"darwin::Dsymutil",
"dsymutil", TC) {}
407 const llvm::opt::ArgList &TCArgs,
408 const char *LinkingOutput)
const override;
414 :
MachOTool(
"darwin::VerifyDebug",
"dwarfdump", TC) {}
420 const llvm::opt::ArgList &TCArgs,
421 const char *LinkingOutput)
const override;
430 :
GnuTool(
"openbsd::Assembler",
"assembler", TC) {}
436 const llvm::opt::ArgList &TCArgs,
437 const char *LinkingOutput)
const override;
449 const llvm::opt::ArgList &TCArgs,
450 const char *LinkingOutput)
const override;
459 :
GnuTool(
"bitrig::Assembler",
"assembler", TC) {}
465 const llvm::opt::ArgList &TCArgs,
466 const char *LinkingOutput)
const override;
478 const llvm::opt::ArgList &TCArgs,
479 const char *LinkingOutput)
const override;
488 :
GnuTool(
"freebsd::Assembler",
"assembler", TC) {}
494 const llvm::opt::ArgList &TCArgs,
495 const char *LinkingOutput)
const override;
507 const llvm::opt::ArgList &TCArgs,
508 const char *LinkingOutput)
const override;
517 :
GnuTool(
"netbsd::Assembler",
"assembler", TC) {}
523 const llvm::opt::ArgList &TCArgs,
524 const char *LinkingOutput)
const override;
536 const llvm::opt::ArgList &TCArgs,
537 const char *LinkingOutput)
const override;
551 const llvm::opt::ArgList &TCArgs,
552 const char *LinkingOutput)
const override;
564 const llvm::opt::ArgList &TCArgs,
565 const char *LinkingOutput)
const override;
569 namespace nacltools {
576 const llvm::opt::ArgList &TCArgs,
577 const char *LinkingOutput)
const override;
589 const llvm::opt::ArgList &TCArgs,
590 const char *LinkingOutput)
const override;
599 :
GnuTool(
"minix::Assembler",
"assembler", TC) {}
605 const llvm::opt::ArgList &TCArgs,
606 const char *LinkingOutput)
const override;
618 const llvm::opt::ArgList &TCArgs,
619 const char *LinkingOutput)
const override;
628 :
Tool(
"solaris::Assembler",
"assembler", TC) {}
634 const llvm::opt::ArgList &TCArgs,
635 const char *LinkingOutput)
const override;
647 const llvm::opt::ArgList &TCArgs,
648 const char *LinkingOutput)
const override;
653 namespace dragonfly {
657 :
GnuTool(
"dragonfly::Assembler",
"assembler", TC) {}
663 const llvm::opt::ArgList &TCArgs,
664 const char *LinkingOutput)
const override;
676 const llvm::opt::ArgList &TCArgs,
677 const char *LinkingOutput)
const override;
682 namespace visualstudio {
684 const llvm::opt::ArgList &Args,
bool IsWindowsMSVC);
689 :
Tool(
"visualstudio::Linker",
"linker", TC, RF_Full,
690 llvm::sys::WEM_UTF16) {}
697 const llvm::opt::ArgList &TCArgs,
698 const char *LinkingOutput)
const override;
704 :
Tool(
"visualstudio::Compiler",
"compiler", TC, RF_Full,
705 llvm::sys::WEM_UTF16) {}
713 const llvm::opt::ArgList &TCArgs,
714 const char *LinkingOutput)
const override;
719 const llvm::opt::ArgList &TCArgs,
720 const char *LinkingOutput)
const;
734 const llvm::opt::ArgList &TCArgs,
735 const char *LinkingOutput)
const override;
747 const llvm::opt::ArgList &TCArgs,
748 const char *LinkingOutput)
const override;
751 void AddLibGCC(
const llvm::opt::ArgList &Args, ArgStringList &CmdArgs)
const;
787 const llvm::opt::ArgList &TCArgs,
788 const char *LinkingOutput)
const override;
799 const llvm::opt::ArgList &TCArgs,
800 const char *LinkingOutput)
const override;
804 namespace CrossWindows {
813 const llvm::opt::ArgList &TCArgs,
814 const char *LinkingOutput)
const override;
820 :
Tool(
"CrossWindows::Linker",
"ld", TC, RF_Full) {}
827 const llvm::opt::ArgList &TCArgs,
828 const char *LinkingOutput)
const override;
842 const llvm::opt::ArgList &TCArgs,
843 const char *LinkingOutput)
const override;
854 const llvm::opt::ArgList &TCArgs,
855 const char *LinkingOutput)
const override;
871 const llvm::opt::ArgList &TCArgs,
872 const char *LinkingOutput)
const override;
880 :
Tool(
"PS4cpu::Assemble",
"assembler", TC, RF_Full) {}
887 const llvm::opt::ArgList &TCArgs,
888 const char *LinkingOutput)
const override;
901 const llvm::opt::ArgList &TCArgs,
902 const char *LinkingOutput)
const override;
910 #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]].