clang: lib/Driver/ToolChains/CSKYToolChain.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
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"
18
22using namespace clang;
24
27 StringRef InstallPath,
30 for (const auto &Path : PathsCallback(Multilib))
32}
33
34
36 const ArgList &Args)
43
49
50
53 .str());
55 getFilePaths().push_back(computeSysRoot() + "/lib" +
57 } else {
59 getFilePaths().push_back(computeSysRoot() + "/lib");
60 }
61}
62
65}
66
70}
71
75}
76
78 llvm::opt::ArgStringList &CC1Args,
80 CC1Args.push_back("-nostdsysteminc");
81}
82
84 ArgStringList &CC1Args) const {
85 if (DriverArgs.hasArg(options::OPT_nostdinc))
86 return;
87
88 if (!DriverArgs.hasArg(options::OPT_nostdlibinc)) {
90 llvm::sys::path::append(Dir, "include");
93 llvm::sys::path::append(Dir2, "sys-include");
95 }
96}
97
99 const llvm::opt::ArgList &DriverArgs,
100 llvm::opt::ArgStringList &CC1Args) const {
106 CC1Args);
107}
108
109std::string CSKYToolChain::computeSysRoot() const {
110 if (().SysRoot.empty())
112
117 llvm::sys::path::append(SysRootDir, LibDir, "..", TripleStr);
118 } else {
119
120
121 llvm::sys::path::append(SysRootDir, getDriver().Dir, "..",
123 }
124
125 if (!llvm::sys::fs::exists(SysRootDir))
126 return std::string();
127
128 return std::string(SysRootDir);
129}
130
134 const ArgList &Args,
135 const char *LinkingOutput) const {
138 ArgStringList CmdArgs;
139
140 if (.SysRoot.empty())
141 CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot));
142
143 CmdArgs.push_back("-m");
144 CmdArgs.push_back("cskyelf");
145
146 std::string Linker = getToolChain().GetLinkerPath();
147
148 bool WantCRTs =
149 !Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles);
150
151 const char *crtbegin, *crtend;
154 crtbegin = "crtbegin.o";
155 crtend = "crtend.o";
156 } else {
160 crtend =
162 }
163
164 if (WantCRTs) {
168 }
169
170 Args.AddAllArgs(CmdArgs, options::OPT_L);
172 Args.addAllArgs(CmdArgs, {options::OPT_T_Group, options::OPT_s,
173 options::OPT_t, options::OPT_r});
174
176
177
178
179 if (!Args.hasArg(options::OPT_nostdlib) &&
180 !Args.hasArg(options::OPT_nodefaultlibs)) {
183 CmdArgs.push_back("--start-group");
184 CmdArgs.push_back("-lc");
185 if (Args.hasArg(options::OPT_msim))
186 CmdArgs.push_back("-lsemi");
187 else
188 CmdArgs.push_back("-lnosys");
189 CmdArgs.push_back("--end-group");
191 }
192
193 if (WantCRTs) {
196 }
197
198 CmdArgs.push_back("-o");
200 C.addCommand(std::make_unique(
202 CmdArgs, Inputs, Output));
203}
204
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...
std::string SysRoot
sysroot, if present
InputInfo - Wrapper for information about an input source.
const char * getFilename() const
See also MultilibSetBuilder for combining multilibs into a set.
const IncludeDirsFunc & filePathsCallback() const
This corresponds to a single GCC Multilib, or a segment of one controlled by a command line flag.
const std::string & includeSuffix() const
Get the include directory suffix.
The JSON file list parser is used to communicate input to InstallAPI.
static constexpr ResponseFileSupport AtFileCurCP()