15 #include "llvm/Option/ArgList.h" 19 using namespace clang;
28 const char *LinkingOutput)
const {
29 ArgStringList CmdArgs;
30 assert(Inputs.size() == 1);
32 assert(II.getType() == types::TY_C || II.getType() == types::TY_CXX ||
33 II.getType() == types::TY_PP_CXX);
37 CmdArgs.push_back(
"-E");
39 assert(Output.
getType() == types::TY_PP_Asm);
40 CmdArgs.push_back(
"-S");
41 CmdArgs.push_back(
"-fno-exceptions");
43 CmdArgs.push_back(
"-DMYRIAD2");
49 Args.AddAllArgsExcept(
51 {options::OPT_I_Group, options::OPT_clang_i_Group, options::OPT_std_EQ,
52 options::OPT_D, options::OPT_U, options::OPT_f_Group,
53 options::OPT_f_clang_Group, options::OPT_g_Group, options::OPT_M_Group,
54 options::OPT_O_Group, options::OPT_W_Group, options::OPT_mcpu_EQ,
55 options::OPT_mllvm, options::OPT_Xclang},
56 {options::OPT_fno_split_dwarf_inlining});
57 Args.hasArg(options::OPT_fno_split_dwarf_inlining);
64 if (Args.getLastArg(options::OPT_MF) && !Args.getLastArg(options::OPT_MT) &&
67 Arg *A = Args.getLastArg(options::OPT_o);
69 CmdArgs.push_back(
"-MT");
70 CmdArgs.push_back(Args.MakeArgString(A->getValue()));
74 CmdArgs.push_back(II.getFilename());
75 CmdArgs.push_back(
"-o");
79 Args.MakeArgString(getToolChain().GetProgramPath(
"moviCompile"));
80 C.
addCommand(llvm::make_unique<Command>(JA, *
this, Args.MakeArgString(Exec),
88 const char *LinkingOutput)
const {
89 ArgStringList CmdArgs;
91 assert(Inputs.size() == 1);
93 assert(II.getType() == types::TY_PP_Asm);
94 assert(Output.
getType() == types::TY_Object);
96 CmdArgs.push_back(
"-no6thSlotCompression");
97 const Arg *CPUArg = Args.getLastArg(options::OPT_mcpu_EQ);
100 Args.MakeArgString(
"-cv:" + StringRef(CPUArg->getValue())));
101 CmdArgs.push_back(
"-noSPrefixing");
102 CmdArgs.push_back(
"-a");
103 Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, options::OPT_Xassembler);
104 for (
const Arg *A : Args.filtered(options::OPT_I, options::OPT_isystem)) {
107 Args.MakeArgString(std::string(
"-i:") + A->getValue(0)));
109 CmdArgs.push_back(II.getFilename());
111 Args.MakeArgString(std::string(
"-o:") + Output.
getFilename()));
114 Args.MakeArgString(getToolChain().GetProgramPath(
"moviAsm"));
115 C.
addCommand(llvm::make_unique<Command>(JA, *
this, Args.MakeArgString(Exec),
123 const char *LinkingOutput)
const {
127 ArgStringList CmdArgs;
129 !Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles);
130 bool UseDefaultLibs =
131 !Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs);
133 Args.getLastArg(options::OPT_stdlib_EQ);
135 if (T.getArch() == llvm::Triple::sparc)
136 CmdArgs.push_back(
"-EB");
138 CmdArgs.push_back(
"-EL");
145 Args.ClaimAllArgs(options::OPT_g_Group);
146 Args.ClaimAllArgs(options::OPT_w);
147 Args.ClaimAllArgs(options::OPT_static_libgcc);
149 if (Args.hasArg(options::OPT_s))
150 CmdArgs.push_back(
"-s");
152 CmdArgs.push_back(
"-o");
158 CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath(
"crti.o")));
159 CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath(
"crtbegin.o")));
162 Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group,
163 options::OPT_e, options::OPT_s, options::OPT_t,
164 options::OPT_Z_Flag, options::OPT_r});
166 TC.AddFilePathLibArgs(Args, CmdArgs);
171 if (UseDefaultLibs) {
172 if (NeedsSanitizerDeps)
176 CmdArgs.push_back(
"-lc++");
177 CmdArgs.push_back(
"-lc++abi");
179 CmdArgs.push_back(
"-lstdc++");
181 if (T.getOS() == llvm::Triple::RTEMS) {
182 CmdArgs.push_back(
"--start-group");
183 CmdArgs.push_back(
"-lc");
184 CmdArgs.push_back(
"-lgcc");
186 CmdArgs.push_back(
"-lrtemscpu");
187 CmdArgs.push_back(
"-lrtemsbsp");
188 CmdArgs.push_back(
"--end-group");
190 CmdArgs.push_back(
"-lc");
191 CmdArgs.push_back(
"-lgcc");
195 CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath(
"crtend.o")));
196 CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath(
"crtn.o")));
200 Args.MakeArgString(TC.GetProgramPath(
"sparc-myriad-rtems-ld"));
201 C.
addCommand(llvm::make_unique<Command>(JA, *
this, Args.MakeArgString(Exec),
214 switch (Triple.getArch()) {
216 D.
Diag(clang::diag::err_target_unsupported_arch)
217 << Triple.getArchName() <<
"myriad";
219 case llvm::Triple::shave:
221 case llvm::Triple::sparc:
222 case llvm::Triple::sparcel:
239 ArgStringList &CC1Args)
const {
240 if (!DriverArgs.hasArg(clang::driver::options::OPT_nostdinc))
245 const llvm::opt::ArgList &DriverArgs,
246 llvm::opt::ArgStringList &CC1Args)
const {
247 std::string Path(
getDriver().getInstalledDir());
252 const llvm::opt::ArgList &DriverArgs,
253 llvm::opt::ArgStringList &CC1Args)
const {
259 LibDir.str() +
"/../" + TripleStr.str() +
"/include/c++/" + Version.
Text,
260 "", TripleStr,
"",
"", Multilib.
includeSuffix(), DriverArgs, CC1Args);
274 return Compiler.get();
278 return Assembler.get();
289 return SanitizerKind::Address;
DiagnosticBuilder Diag(unsigned DiagID) 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...
ActionClass getKind() const
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...
bool CCCIsCXX() const
Whether the driver should follow g++ like behavior.
Dataflow Directional Tag Classes.
std::string SysRoot
sysroot, if present
ActionList & getActions()
Compilation - A set of tasks to perform for a single driver invocation.
const Driver & getDriver() const