15 #include "llvm/Option/ArgList.h" 16 #include "llvm/Support/FileSystem.h" 17 #include "llvm/Support/Path.h" 18 #include "llvm/Support/raw_ostream.h" 23 using namespace clang;
44 const llvm::opt::ArgList &DriverArgs,
45 llvm::opt::ArgStringList &CC1Args,
47 CC1Args.push_back(
"-nostdsysteminc");
48 CC1Args.push_back(
"-fuse-init-array");
52 ArgStringList &CC1Args)
const {
53 if (DriverArgs.hasArg(options::OPT_nostdinc))
56 if (!DriverArgs.hasArg(options::OPT_nostdlibinc)) {
58 llvm::sys::path::append(Dir,
"include");
64 const llvm::opt::ArgList &DriverArgs,
65 llvm::opt::ArgStringList &CC1Args)
const {
70 "", TripleStr,
"",
"", Multilib.
includeSuffix(), DriverArgs, CC1Args);
73 std::string RISCVToolChain::computeSysRoot()
const {
82 std::string SysRootDir = LibDir.str() +
"/../" + TripleStr.str();
84 if (!llvm::sys::fs::exists(SysRootDir))
94 const char *LinkingOutput)
const {
97 ArgStringList CmdArgs;
100 CmdArgs.push_back(Args.MakeArgString(
"--sysroot=" + D.
SysRoot));
102 std::string
Linker = getToolChain().GetProgramPath(getShortName());
105 !Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles);
108 CmdArgs.push_back(Args.MakeArgString(ToolChain.
GetFilePath(
"crt0.o")));
109 CmdArgs.push_back(Args.MakeArgString(ToolChain.
GetFilePath(
"crtbegin.o")));
112 Args.AddAllArgs(CmdArgs, options::OPT_L);
114 Args.AddAllArgs(CmdArgs,
115 {options::OPT_T_Group, options::OPT_e, options::OPT_s,
116 options::OPT_t, options::OPT_Z_Flag, options::OPT_r});
122 if (!Args.hasArg(options::OPT_nostdlib) &&
123 !Args.hasArg(options::OPT_nodefaultlibs)) {
126 CmdArgs.push_back(
"--start-group");
127 CmdArgs.push_back(
"-lc");
128 CmdArgs.push_back(
"-lgloss");
129 CmdArgs.push_back(
"--end-group");
130 CmdArgs.push_back(
"-lgcc");
134 CmdArgs.push_back(Args.MakeArgString(ToolChain.
GetFilePath(
"crtend.o")));
136 CmdArgs.push_back(
"-o");
138 C.
addCommand(llvm::make_unique<Command>(JA, *
this, Args.MakeArgString(Linker),
const std::string & includeSuffix() const
Get the include directory suffix.
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.