14 #include "llvm/Option/ArgList.h" 15 #include "llvm/Support/FileSystem.h" 16 #include "llvm/Support/Path.h" 17 #include "llvm/Support/raw_ostream.h" 22 using namespace clang;
27 StringRef InstallPath,
30 for (
const auto &Path : PathsCallback(Multilib))
75 const llvm::opt::ArgList &DriverArgs,
76 llvm::opt::ArgStringList &CC1Args,
78 CC1Args.push_back(
"-nostdsysteminc");
82 ArgStringList &CC1Args)
const {
83 if (DriverArgs.hasArg(options::OPT_nostdinc))
86 if (!DriverArgs.hasArg(options::OPT_nostdlibinc)) {
88 llvm::sys::path::append(Dir,
"include");
94 const llvm::opt::ArgList &DriverArgs,
95 llvm::opt::ArgStringList &CC1Args)
const {
100 "", TripleStr,
"",
"", Multilib.
includeSuffix(), DriverArgs, CC1Args);
103 std::string RISCVToolChain::computeSysRoot()
const {
111 llvm::sys::path::append(SysRootDir, LibDir,
"..", TripleStr);
115 llvm::sys::path::append(SysRootDir,
getDriver().Dir,
"..",
119 if (!llvm::sys::fs::exists(SysRootDir))
120 return std::string();
122 return SysRootDir.str();
129 const char *LinkingOutput)
const {
132 ArgStringList CmdArgs;
135 CmdArgs.push_back(Args.MakeArgString(
"--sysroot=" + D.
SysRoot));
137 bool IsRV64 = ToolChain.
getArch() == llvm::Triple::riscv64;
138 CmdArgs.push_back(
"-m");
140 CmdArgs.push_back(
"elf64lriscv");
142 CmdArgs.push_back(
"elf32lriscv");
145 std::string
Linker = getToolChain().GetProgramPath(getShortName());
148 !Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles);
150 const char *crtbegin, *crtend;
153 crtbegin =
"crtbegin.o";
164 CmdArgs.push_back(Args.MakeArgString(ToolChain.
GetFilePath(
"crt0.o")));
165 CmdArgs.push_back(Args.MakeArgString(ToolChain.
GetFilePath(crtbegin)));
168 Args.AddAllArgs(CmdArgs, options::OPT_L);
170 Args.AddAllArgs(CmdArgs,
171 {options::OPT_T_Group, options::OPT_e, options::OPT_s,
172 options::OPT_t, options::OPT_Z_Flag, options::OPT_r});
178 if (!Args.hasArg(options::OPT_nostdlib) &&
179 !Args.hasArg(options::OPT_nodefaultlibs)) {
182 CmdArgs.push_back(
"--start-group");
183 CmdArgs.push_back(
"-lc");
184 CmdArgs.push_back(
"-lgloss");
185 CmdArgs.push_back(
"--end-group");
190 CmdArgs.push_back(Args.MakeArgString(ToolChain.
GetFilePath(crtend)));
192 CmdArgs.push_back(
"-o");
194 C.
addCommand(std::make_unique<Command>(JA, *
this, Args.MakeArgString(Linker),
const IncludeDirsFunc & filePathsCallback() const
const std::string & includeSuffix() const
Get the include directory suffix.
std::string Dir
The path the driver executable was in, as invoked from the command line.
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
void addCommand(std::unique_ptr< Command > C)
This corresponds to a single GCC Multilib, or a segment of one controlled by a command line flag...
Dataflow Directional Tag Classes.
std::string SysRoot
sysroot, if present
Compilation - A set of tasks to perform for a single driver invocation.