9 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_MSVC_H
10 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_MSVC_H
18 #include "llvm/Frontend/Debug/Options.h"
19 #include "llvm/WindowsDriver/MSVCPaths.h"
26 namespace visualstudio {
27 class LLVM_LIBRARY_VISIBILITY
Linker final :
public Tool {
36 const llvm::opt::ArgList &TCArgs,
37 const char *LinkingOutput)
const override;
43 const llvm::opt::ArgList &Args)
const;
49 namespace toolchains {
54 const llvm::opt::ArgList &Args);
56 llvm::opt::DerivedArgList *
57 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
61 getDefaultUnwindTableLevel(
const llvm::opt::ArgList &Args)
const override;
62 bool isPICDefault()
const override;
63 bool isPIEDefault(
const llvm::opt::ArgList &Args)
const override;
64 bool isPICDefaultForced()
const override;
70 return getTriple().isOSBinFormatMachO()
71 ? llvm::codegenoptions::DIF_DWARF
72 : llvm::codegenoptions::DIF_CodeView;
78 return llvm::DebuggerKind::Default;
85 std::string getSubDirectoryPath(llvm::SubDirectoryType
Type,
86 llvm::StringRef SubdirParent =
"")
const;
87 std::string getSubDirectoryPath(llvm::SubDirectoryType
Type,
88 llvm::Triple::ArchType TargetArch)
const;
91 return VSLayout == llvm::ToolsetLayout::VS2017OrNewer;
95 AddClangSystemIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
96 llvm::opt::ArgStringList &CC1Args)
const override;
97 void AddClangCXXStdlibIncludeArgs(
98 const llvm::opt::ArgList &DriverArgs,
99 llvm::opt::ArgStringList &CC1Args)
const override;
101 void AddCudaIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
102 llvm::opt::ArgStringList &CC1Args)
const override;
104 void AddHIPIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
105 llvm::opt::ArgStringList &CC1Args)
const override;
107 void AddHIPRuntimeLibArgs(
const llvm::opt::ArgList &Args,
108 llvm::opt::ArgStringList &CmdArgs)
const override;
110 bool getWindowsSDKLibraryPath(
111 const llvm::opt::ArgList &Args, std::string &path)
const;
112 bool getUniversalCRTLibraryPath(
const llvm::opt::ArgList &Args,
113 std::string &path)
const;
114 bool useUniversalCRT()
const;
116 computeMSVCVersion(
const Driver *D,
117 const llvm::opt::ArgList &Args)
const override;
119 std::string ComputeEffectiveClangTriple(
const llvm::opt::ArgList &Args,
123 void printVerboseInfo(raw_ostream &OS)
const override;
128 addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs,
129 llvm::opt::ArgStringList &CC1Args,
133 void AddSystemIncludeWithSubfolder(
const llvm::opt::ArgList &DriverArgs,
134 llvm::opt::ArgStringList &CC1Args,
135 const std::string &folder,
136 const Twine &subfolder1,
137 const Twine &subfolder2 =
"",
138 const Twine &subfolder3 =
"")
const;
140 Tool *buildLinker()
const override;
141 Tool *buildAssembler()
const override;
143 std::optional<llvm::StringRef> WinSdkDir, WinSdkVersion, WinSysRoot;
144 std::string VCToolChainPath;
145 llvm::ToolsetLayout VSLayout = llvm::ToolsetLayout::OlderVS;
Simple wrapper for toolchain detector with costly initialization.
The base class of the type hierarchy.
Compilation - A set of tasks to perform for a single driver invocation.
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
The JSON file list parser is used to communicate input to InstallAPI.