10 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLS_H
11 #define LLVM_CLANG_LIB_DRIVER_TOOLS_H
17 #include "llvm/ADT/Triple.h"
18 #include "llvm/Option/Option.h"
19 #include "llvm/Support/Compiler.h"
28 namespace toolchains {
34 namespace visualstudio {
38 using llvm::opt::ArgStringList;
46 static const char *getBaseInputName(
const llvm::opt::ArgList &Args,
48 static const char *getBaseInputStem(
const llvm::opt::ArgList &Args,
50 static const char *getDependencyFileName(
const llvm::opt::ArgList &Args,
56 const llvm::opt::ArgList &Args,
57 llvm::opt::ArgStringList &CmdArgs,
61 void AddAArch64TargetArgs(
const llvm::opt::ArgList &Args,
62 llvm::opt::ArgStringList &CmdArgs)
const;
63 void AddARMTargetArgs(
const llvm::opt::ArgList &Args,
64 llvm::opt::ArgStringList &CmdArgs,
65 bool KernelOrKext)
const;
66 void AddARM64TargetArgs(
const llvm::opt::ArgList &Args,
67 llvm::opt::ArgStringList &CmdArgs)
const;
68 void AddMIPSTargetArgs(
const llvm::opt::ArgList &Args,
69 llvm::opt::ArgStringList &CmdArgs)
const;
70 void AddPPCTargetArgs(
const llvm::opt::ArgList &Args,
71 llvm::opt::ArgStringList &CmdArgs)
const;
72 void AddR600TargetArgs(
const llvm::opt::ArgList &Args,
73 llvm::opt::ArgStringList &CmdArgs)
const;
74 void AddSparcTargetArgs(
const llvm::opt::ArgList &Args,
75 llvm::opt::ArgStringList &CmdArgs)
const;
76 void AddSystemZTargetArgs(
const llvm::opt::ArgList &Args,
77 llvm::opt::ArgStringList &CmdArgs)
const;
78 void AddX86TargetArgs(
const llvm::opt::ArgList &Args,
79 llvm::opt::ArgStringList &CmdArgs)
const;
80 void AddHexagonTargetArgs(
const llvm::opt::ArgList &Args,
81 llvm::opt::ArgStringList &CmdArgs)
const;
83 enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile };
85 ObjCRuntime AddObjCRuntimeArgs(
const llvm::opt::ArgList &args,
86 llvm::opt::ArgStringList &cmdArgs,
87 RewriteKind rewrite)
const;
89 void AddClangCLArgs(
const llvm::opt::ArgList &Args,
90 llvm::opt::ArgStringList &CmdArgs)
const;
94 mutable std::unique_ptr<visualstudio::Compiler> CLFallback;
109 const llvm::opt::ArgList &TCArgs,
110 const char *LinkingOutput)
const override;
117 "clang integrated assembler", TC,
119 void AddMIPSTargetArgs(
const llvm::opt::ArgList &Args,
120 llvm::opt::ArgStringList &CmdArgs)
const;
127 const llvm::opt::ArgList &TCArgs,
128 const char *LinkingOutput)
const override;
134 virtual void anchor();
138 :
Tool(Name, ShortName, TC, RF_Full, llvm::sys::WEM_CurrentCodePage) {}
145 Common(
const char *Name,
const char *ShortName,
151 const llvm::opt::ArgList &TCArgs,
152 const char *LinkingOutput)
const override;
158 llvm::opt::ArgStringList &CmdArgs)
const = 0;
164 :
Common(
"gcc::Preprocessor",
"gcc preprocessor", TC) {}
169 void RenderExtraToolArgs(
const JobAction &JA,
170 llvm::opt::ArgStringList &CmdArgs)
const override;
176 :
Common(
"gcc::Compiler",
"gcc frontend", TC) {}
181 void RenderExtraToolArgs(
const JobAction &JA,
182 llvm::opt::ArgStringList &CmdArgs)
const override;
188 :
Common(
"gcc::Linker",
"linker (via gcc)", TC) {}
193 void RenderExtraToolArgs(
const JobAction &JA,
194 llvm::opt::ArgStringList &CmdArgs)
const override;
205 :
GnuTool(
"hexagon::Assembler",
"hexagon-as", TC) {}
209 void RenderExtraToolArgs(
const JobAction &JA,
210 llvm::opt::ArgStringList &CmdArgs)
const;
213 const llvm::opt::ArgList &TCArgs,
214 const char *LinkingOutput)
const override;
224 virtual void RenderExtraToolArgs(
const JobAction &JA,
225 llvm::opt::ArgStringList &CmdArgs)
const;
228 const llvm::opt::ArgList &TCArgs,
229 const char *LinkingOutput)
const override;
235 const llvm::Triple &Triple);
237 const llvm::Triple &Triple);
239 const llvm::Triple &Triple);
242 void appendEBLinkFlags(
const llvm::opt::ArgList &Args, ArgStringList &CmdArgs,
const llvm::Triple &Triple);
252 const llvm::Triple &Triple, StringRef &CPUName,
255 bool isUCLibc(
const llvm::opt::ArgList &Args);
256 bool isNaN2008(
const llvm::opt::ArgList &Args,
const llvm::Triple &Triple);
257 bool isFPXXDefault(
const llvm::Triple &Triple, StringRef CPUName,
258 StringRef ABIName, StringRef FloatABI);
259 bool shouldUseFPXX(
const llvm::opt::ArgList &Args,
const llvm::Triple &Triple,
260 StringRef CPUName, StringRef ABIName, StringRef FloatABI);
278 const llvm::opt::ArgList &TCArgs,
279 const char *LinkingOutput)
const override;
288 virtual void anchor();
290 void AddMachOArch(
const llvm::opt::ArgList &Args,
291 llvm::opt::ArgStringList &CmdArgs)
const;
299 const char *Name,
const char *ShortName,
const ToolChain &TC,
301 llvm::sys::WindowsEncodingMethod ResponseEncoding = llvm::sys::WEM_UTF8,
302 const char *ResponseFlag =
"@")
303 :
Tool(Name, ShortName, TC, ResponseSupport, ResponseEncoding,
310 :
MachOTool(
"darwin::Assembler",
"assembler", TC) {}
316 const llvm::opt::ArgList &TCArgs,
317 const char *LinkingOutput)
const override;
322 void AddLinkArgs(
Compilation &
C,
const llvm::opt::ArgList &Args,
323 llvm::opt::ArgStringList &CmdArgs,
328 :
MachOTool(
"darwin::Linker",
"linker", TC, RF_FileList,
329 llvm::sys::WEM_UTF8,
"-filelist") {}
336 const llvm::opt::ArgList &TCArgs,
337 const char *LinkingOutput)
const override;
348 const llvm::opt::ArgList &TCArgs,
349 const char *LinkingOutput)
const override;
363 const llvm::opt::ArgList &TCArgs,
364 const char *LinkingOutput)
const override;
376 const llvm::opt::ArgList &TCArgs,
377 const char *LinkingOutput)
const override;
387 :
GnuTool(
"openbsd::Assembler",
"assembler", TC) {}
393 const llvm::opt::ArgList &TCArgs,
394 const char *LinkingOutput)
const override;
405 const llvm::opt::ArgList &TCArgs,
406 const char *LinkingOutput)
const override;
415 :
GnuTool(
"bitrig::Assembler",
"assembler", TC) {}
421 const llvm::opt::ArgList &TCArgs,
422 const char *LinkingOutput)
const override;
433 const llvm::opt::ArgList &TCArgs,
434 const char *LinkingOutput)
const override;
443 :
GnuTool(
"freebsd::Assembler",
"assembler", TC) {}
449 const llvm::opt::ArgList &TCArgs,
450 const char *LinkingOutput)
const override;
461 const llvm::opt::ArgList &TCArgs,
462 const char *LinkingOutput)
const override;
472 :
GnuTool(
"netbsd::Assembler",
"assembler", TC) {}
478 const llvm::opt::ArgList &TCArgs,
479 const char *LinkingOutput)
const override;
491 const llvm::opt::ArgList &TCArgs,
492 const char *LinkingOutput)
const override;
506 const llvm::opt::ArgList &TCArgs,
507 const char *LinkingOutput)
const override;
519 const llvm::opt::ArgList &TCArgs,
520 const char *LinkingOutput)
const override;
524 namespace nacltools {
531 const llvm::opt::ArgList &TCArgs,
532 const char *LinkingOutput)
const override;
544 const llvm::opt::ArgList &TCArgs,
545 const char *LinkingOutput)
const override;
554 :
GnuTool(
"minix::Assembler",
"assembler", TC) {}
560 const llvm::opt::ArgList &TCArgs,
561 const char *LinkingOutput)
const override;
573 const llvm::opt::ArgList &TCArgs,
574 const char *LinkingOutput)
const override;
583 :
Tool(
"solaris::Assembler",
"assembler", TC) {}
589 const llvm::opt::ArgList &TCArgs,
590 const char *LinkingOutput)
const override;
601 const llvm::opt::ArgList &TCArgs,
602 const char *LinkingOutput)
const override;
607 namespace dragonfly {
611 :
GnuTool(
"dragonfly::Assembler",
"assembler", TC) {}
617 const llvm::opt::ArgList &TCArgs,
618 const char *LinkingOutput)
const override;
630 const llvm::opt::ArgList &TCArgs,
631 const char *LinkingOutput)
const override;
636 namespace visualstudio {
638 const llvm::opt::ArgList &Args,
bool IsWindowsMSVC);
643 :
Tool(
"visualstudio::Linker",
"linker", TC, RF_Full,
644 llvm::sys::WEM_UTF16) {}
651 const llvm::opt::ArgList &TCArgs,
652 const char *LinkingOutput)
const override;
658 :
Tool(
"visualstudio::Compiler",
"compiler", TC, RF_Full,
659 llvm::sys::WEM_UTF16) {}
667 const llvm::opt::ArgList &TCArgs,
668 const char *LinkingOutput)
const override;
673 const llvm::opt::ArgList &TCArgs,
674 const char *LinkingOutput)
const;
688 const llvm::opt::ArgList &TCArgs,
689 const char *LinkingOutput)
const override;
701 const llvm::opt::ArgList &TCArgs,
702 const char *LinkingOutput)
const override;
705 void AddLibGCC(
const llvm::opt::ArgList &Args, ArgStringList &CmdArgs)
const;
711 const llvm::Triple &Triple);
724 const llvm::opt::ArgList &TCArgs,
725 const char *LinkingOutput)
const override;
736 const llvm::opt::ArgList &TCArgs,
737 const char *LinkingOutput)
const override;
741 namespace CrossWindows {
745 :
Tool(
"CrossWindows::Assembler",
"as", TC) {}
751 const llvm::opt::ArgList &TCArgs,
752 const char *LinkingOutput)
const override;
758 :
Tool(
"CrossWindows::Linker",
"ld", TC, RF_Full) {}
765 const llvm::opt::ArgList &TCArgs,
766 const char *LinkingOutput)
const override;
780 const llvm::opt::ArgList &TCArgs,
781 const char *LinkingOutput)
const override;
792 const llvm::opt::ArgList &TCArgs,
793 const char *LinkingOutput)
const override;
Represents a version number in the form major[.minor[.subminor[.build]]].
The basic abstraction for the target Objective-C runtime.
Defines the clang::VersionTuple class, which represents a version in the form major[.minor[.subminor]].