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(
"-elf");
111 CmdArgs.push_back(II.getFilename());
113 Args.MakeArgString(std::string(
"-o:") + Output.
getFilename()));
116 Args.MakeArgString(getToolChain().GetProgramPath(
"moviAsm"));
117 C.
addCommand(llvm::make_unique<Command>(JA, *
this, Args.MakeArgString(Exec),
125 const char *LinkingOutput)
const {
128 const llvm::Triple &
T = TC.getTriple();
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)
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(llvm::make_unique<Command>(JA, *
this, Args.MakeArgString(Exec),
216 switch (Triple.getArch()) {
218 D.
Diag(clang::diag::err_target_unsupported_arch)
219 << Triple.getArchName() <<
"myriad";
221 case llvm::Triple::shave:
223 case llvm::Triple::sparc:
224 case llvm::Triple::sparcel:
241 ArgStringList &CC1Args)
const {
242 if (!DriverArgs.hasArg(clang::driver::options::OPT_nostdinc))
247 std::string Path(
getDriver().getInstalledDir());
248 return Path +
"/../include/c++/v1";
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
const FunctionProtoType * T
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