16 #include "llvm/Option/ArgList.h" 20 using namespace clang;
29 const char *LinkingOutput)
const {
30 ArgStringList CmdArgs;
31 assert(Inputs.size() == 1);
33 assert(II.getType() == types::TY_C || II.getType() == types::TY_CXX ||
34 II.getType() == types::TY_PP_CXX);
38 CmdArgs.push_back(
"-E");
40 assert(Output.
getType() == types::TY_PP_Asm);
41 CmdArgs.push_back(
"-S");
42 CmdArgs.push_back(
"-fno-exceptions");
44 CmdArgs.push_back(
"-DMYRIAD2");
50 Args.AddAllArgsExcept(
52 {options::OPT_I_Group, options::OPT_clang_i_Group, options::OPT_std_EQ,
53 options::OPT_D, options::OPT_U, options::OPT_f_Group,
54 options::OPT_f_clang_Group, options::OPT_g_Group, options::OPT_M_Group,
55 options::OPT_O_Group, options::OPT_W_Group, options::OPT_mcpu_EQ,
56 options::OPT_mllvm, options::OPT_Xclang},
57 {options::OPT_fno_split_dwarf_inlining});
58 Args.hasArg(options::OPT_fno_split_dwarf_inlining);
65 if (Args.getLastArg(options::OPT_MF) && !Args.getLastArg(options::OPT_MT) &&
68 Arg *A = Args.getLastArg(options::OPT_o);
70 CmdArgs.push_back(
"-MT");
71 CmdArgs.push_back(Args.MakeArgString(A->getValue()));
75 CmdArgs.push_back(II.getFilename());
76 CmdArgs.push_back(
"-o");
80 Args.MakeArgString(getToolChain().GetProgramPath(
"moviCompile"));
81 C.
addCommand(llvm::make_unique<Command>(JA, *
this, Args.MakeArgString(Exec),
89 const char *LinkingOutput)
const {
90 ArgStringList CmdArgs;
92 assert(Inputs.size() == 1);
94 assert(II.getType() == types::TY_PP_Asm);
95 assert(Output.
getType() == types::TY_Object);
97 CmdArgs.push_back(
"-no6thSlotCompression");
98 const Arg *CPUArg = Args.getLastArg(options::OPT_mcpu_EQ);
101 Args.MakeArgString(
"-cv:" + StringRef(CPUArg->getValue())));
102 CmdArgs.push_back(
"-noSPrefixing");
103 CmdArgs.push_back(
"-a");
104 Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, options::OPT_Xassembler);
105 for (
const Arg *A : Args.filtered(options::OPT_I, options::OPT_isystem)) {
108 Args.MakeArgString(std::string(
"-i:") + A->getValue(0)));
110 CmdArgs.push_back(II.getFilename());
112 Args.MakeArgString(std::string(
"-o:") + Output.
getFilename()));
115 Args.MakeArgString(getToolChain().GetProgramPath(
"moviAsm"));
116 C.
addCommand(llvm::make_unique<Command>(JA, *
this, Args.MakeArgString(Exec),
124 const char *LinkingOutput)
const {
128 ArgStringList CmdArgs;
130 !Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles);
131 bool UseDefaultLibs =
132 !Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs);
134 Args.getLastArg(options::OPT_stdlib_EQ);
136 if (T.getArch() == llvm::Triple::sparc)
137 CmdArgs.push_back(
"-EB");
139 CmdArgs.push_back(
"-EL");
146 Args.ClaimAllArgs(options::OPT_g_Group);
147 Args.ClaimAllArgs(options::OPT_w);
148 Args.ClaimAllArgs(options::OPT_static_libgcc);
150 if (Args.hasArg(options::OPT_s))
151 CmdArgs.push_back(
"-s");
153 CmdArgs.push_back(
"-o");
159 CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath(
"crti.o")));
160 CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath(
"crtbegin.o")));
163 Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group,
164 options::OPT_e, options::OPT_s, options::OPT_t,
165 options::OPT_Z_Flag, options::OPT_r});
167 TC.AddFilePathLibArgs(Args, CmdArgs);
172 if (UseDefaultLibs) {
173 if (NeedsSanitizerDeps)
177 CmdArgs.push_back(
"-lc++");
178 CmdArgs.push_back(
"-lc++abi");
180 CmdArgs.push_back(
"-lstdc++");
182 if (T.getOS() == llvm::Triple::RTEMS) {
183 CmdArgs.push_back(
"--start-group");
184 CmdArgs.push_back(
"-lc");
185 CmdArgs.push_back(
"-lgcc");
187 CmdArgs.push_back(
"-lrtemscpu");
188 CmdArgs.push_back(
"-lrtemsbsp");
189 CmdArgs.push_back(
"--end-group");
191 CmdArgs.push_back(
"-lc");
192 CmdArgs.push_back(
"-lgcc");
196 CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath(
"crtend.o")));
197 CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath(
"crtn.o")));
201 Args.MakeArgString(TC.GetProgramPath(
"sparc-myriad-rtems-ld"));
202 C.
addCommand(llvm::make_unique<Command>(JA, *
this, Args.MakeArgString(Exec),
215 switch (Triple.getArch()) {
217 D.
Diag(clang::diag::err_target_unsupported_arch)
218 << Triple.getArchName() <<
"myriad";
220 case llvm::Triple::shave:
222 case llvm::Triple::sparc:
223 case llvm::Triple::sparcel:
240 ArgStringList &CC1Args)
const {
241 if (!DriverArgs.hasArg(clang::driver::options::OPT_nostdinc))
246 const llvm::opt::ArgList &DriverArgs,
247 llvm::opt::ArgStringList &CC1Args)
const {
248 std::string Path(
getDriver().getInstalledDir());
253 const llvm::opt::ArgList &DriverArgs,
254 llvm::opt::ArgStringList &CC1Args)
const {
260 LibDir.str() +
"/../" + TripleStr.str() +
"/include/c++/" + Version.
Text,
261 "", TripleStr,
"",
"", Multilib.
includeSuffix(), DriverArgs, CC1Args);
275 return Compiler.get();
279 return Assembler.get();
290 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