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"
26namespace visualstudio {
27class LLVM_LIBRARY_VISIBILITY
Linker final :
public Tool {
36 const llvm::opt::ArgList &TCArgs,
37 const char *LinkingOutput)
const override;
48 const llvm::opt::ArgList &Args);
50 llvm::opt::DerivedArgList *
51 TranslateArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
55 getDefaultUnwindTableLevel(
const llvm::opt::ArgList &Args)
const override;
56 bool isPICDefault()
const override;
57 bool isPIEDefault(
const llvm::opt::ArgList &Args)
const override;
58 bool isPICDefaultForced()
const override;
64 return getTriple().isOSBinFormatMachO()
65 ? llvm::codegenoptions::DIF_DWARF
66 : llvm::codegenoptions::DIF_CodeView;
72 return llvm::DebuggerKind::Default;
79 std::string getSubDirectoryPath(llvm::SubDirectoryType
Type,
80 llvm::StringRef SubdirParent =
"")
const;
81 std::string getSubDirectoryPath(llvm::SubDirectoryType
Type,
82 llvm::Triple::ArchType TargetArch)
const;
85 return VSLayout == llvm::ToolsetLayout::VS2017OrNewer;
89 AddClangSystemIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
90 llvm::opt::ArgStringList &CC1Args)
const override;
91 void AddClangCXXStdlibIncludeArgs(
92 const llvm::opt::ArgList &DriverArgs,
93 llvm::opt::ArgStringList &CC1Args)
const override;
95 void AddCudaIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
96 llvm::opt::ArgStringList &CC1Args)
const override;
98 void AddHIPIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
99 llvm::opt::ArgStringList &CC1Args)
const override;
101 void AddHIPRuntimeLibArgs(
const llvm::opt::ArgList &Args,
102 llvm::opt::ArgStringList &CmdArgs)
const override;
104 bool getWindowsSDKLibraryPath(
105 const llvm::opt::ArgList &Args, std::string &path)
const;
106 bool getUniversalCRTLibraryPath(
const llvm::opt::ArgList &Args,
107 std::string &path)
const;
108 bool useUniversalCRT()
const;
110 computeMSVCVersion(
const Driver *D,
111 const llvm::opt::ArgList &Args)
const override;
113 std::string ComputeEffectiveClangTriple(
const llvm::opt::ArgList &Args,
117 void printVerboseInfo(raw_ostream &OS)
const override;
122 addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs,
123 llvm::opt::ArgStringList &CC1Args,
127 void AddSystemIncludeWithSubfolder(
const llvm::opt::ArgList &DriverArgs,
128 llvm::opt::ArgStringList &CC1Args,
129 const std::string &folder,
130 const Twine &subfolder1,
131 const Twine &subfolder2 =
"",
132 const Twine &subfolder3 =
"")
const;
134 Tool *buildLinker()
const override;
135 Tool *buildAssembler()
const override;
137 std::optional<llvm::StringRef> WinSdkDir, WinSdkVersion, WinSysRoot;
138 std::string VCToolChainPath;
139 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.