15#include "llvm/Option/ArgList.h"
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) &&
65 C.getActions().size() == 1 &&
67 Arg *A = Args.getLastArg(options::OPT_o);
69 CmdArgs.push_back(
"-MT");
70 CmdArgs.push_back(Args.MakeArgString(A->getValue()));
75 CmdArgs.push_back(
"-o");
79 Args.MakeArgString(
getToolChain().GetProgramPath(
"moviCompile"));
81 Args.MakeArgString(Exec), CmdArgs,
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)));
112 Args.MakeArgString(std::string(
"-o:") + Output.
getFilename()));
115 Args.MakeArgString(getToolChain().GetProgramPath(
"moviAsm"));
117 Args.MakeArgString(Exec), CmdArgs,
125 const char *LinkingOutput)
const {
129 ArgStringList CmdArgs;
131 !Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles);
132 bool UseDefaultLibs =
133 !Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs);
135 Args.getLastArg(options::OPT_stdlib_EQ);
137 if (T.getArch() == llvm::Triple::sparc)
138 CmdArgs.push_back(
"-EB");
140 CmdArgs.push_back(
"-EL");
147 Args.ClaimAllArgs(options::OPT_g_Group);
148 Args.ClaimAllArgs(options::OPT_w);
149 Args.ClaimAllArgs(options::OPT_static_libgcc);
151 if (Args.hasArg(options::OPT_s))
152 CmdArgs.push_back(
"-s");
154 CmdArgs.push_back(
"-o");
160 CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath(
"crti.o")));
161 CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath(
"crtbegin.o")));
164 Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group,
165 options::OPT_e, options::OPT_s, options::OPT_t,
166 options::OPT_Z_Flag, options::OPT_r});
168 TC.AddFilePathLibArgs(Args, CmdArgs);
173 if (UseDefaultLibs) {
174 if (NeedsSanitizerDeps)
176 if (
C.getDriver().CCCIsCXX()) {
178 CmdArgs.push_back(
"-lc++");
179 CmdArgs.push_back(
"-lc++abi");
181 CmdArgs.push_back(
"-lstdc++");
183 if (T.getOS() == llvm::Triple::RTEMS) {
184 CmdArgs.push_back(
"--start-group");
185 CmdArgs.push_back(
"-lc");
186 CmdArgs.push_back(
"-lgcc");
188 CmdArgs.push_back(
"-lrtemscpu");
189 CmdArgs.push_back(
"-lrtemsbsp");
190 CmdArgs.push_back(
"--end-group");
192 CmdArgs.push_back(
"-lc");
193 CmdArgs.push_back(
"-lgcc");
197 CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath(
"crtend.o")));
198 CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath(
"crtn.o")));
202 Args.MakeArgString(TC.GetProgramPath(
"sparc-myriad-rtems-ld"));
203 C.addCommand(std::make_unique<Command>(
205 CmdArgs, Inputs, Output));
217 switch (Triple.getArch()) {
219 D.
Diag(clang::diag::err_target_unsupported_arch)
220 << Triple.getArchName() <<
"myriad";
222 case llvm::Triple::shave:
224 case llvm::Triple::sparc:
225 case llvm::Triple::sparcel:
236 addPathIfExists(D, D.
Dir +
"/../sparc-myriad-rtems/lib",
getFilePaths());
242 ArgStringList &CC1Args)
const {
243 if (!DriverArgs.hasArg(clang::driver::options::OPT_nostdinc))
248 const llvm::opt::ArgList &DriverArgs,
249 llvm::opt::ArgStringList &CC1Args)
const {
250 std::string Path(
getDriver().getInstalledDir());
255 const llvm::opt::ArgList &DriverArgs,
256 llvm::opt::ArgStringList &CC1Args)
const {
262 LibDir.str() +
"/../" + TripleStr.str() +
"/include/c++/" + Version.
Text,
277 return Compiler.get();
281 return Assembler.get();
292 return SanitizerKind::Address;
ActionClass getKind() const
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...
DiagnosticBuilder Diag(unsigned DiagID) const
std::string Dir
The path the driver executable was in, as invoked from the command line.
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.
@ C
Languages that the frontend can parse and compile.
static constexpr ResponseFileSupport None()
Returns a ResponseFileSupport indicating that response files are not supported.
static constexpr ResponseFileSupport AtFileCurCP()