15 #include "llvm/Option/ArgList.h" 27 const char *LinkingOutput)
const {
28 ArgStringList CmdArgs;
30 const bool IsArch32Bit = getToolChain().getTriple().isArch32Bit();
31 const bool IsArch64Bit = getToolChain().getTriple().isArch64Bit();
33 if (!IsArch32Bit && !IsArch64Bit)
34 llvm_unreachable(
"Unsupported bit width value.");
38 CmdArgs.push_back(
"-a32");
41 CmdArgs.push_back(
"-a64");
48 CmdArgs.push_back(
"-u");
54 CmdArgs.push_back(
"-many");
56 Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, options::OPT_Xassembler);
61 CmdArgs.push_back(
"-o");
68 if (Inputs.size() != 1)
69 llvm_unreachable(
"Invalid number of input files.");
75 const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath(
"as"));
76 C.
addCommand(std::make_unique<Command>(JA, *
this, Exec, CmdArgs, Inputs));
82 const char *LinkingOutput)
const {
84 ArgStringList CmdArgs;
86 const bool IsArch32Bit = ToolChain.
getTriple().isArch32Bit();
87 const bool IsArch64Bit = ToolChain.
getTriple().isArch64Bit();
89 if (!(IsArch32Bit || IsArch64Bit))
90 llvm_unreachable(
"Unsupported bit width value.");
93 if (Args.hasArg(options::OPT_static))
94 CmdArgs.push_back(
"-bnso");
99 CmdArgs.push_back(
"-o");
106 CmdArgs.push_back(
"-b32");
107 CmdArgs.push_back(
"-bpT:0x10000000");
108 CmdArgs.push_back(
"-bpD:0x20000000");
111 CmdArgs.push_back(
"-b64");
112 CmdArgs.push_back(
"-bpT:0x100000000");
113 CmdArgs.push_back(
"-bpD:0x110000000");
116 auto getCrt0Basename = [&Args, IsArch32Bit] {
118 if (Args.hasArg(options::OPT_pg))
119 return IsArch32Bit ?
"gcrt0.o" :
"gcrt0_64.o";
121 else if (Args.hasArg(options::OPT_p))
122 return IsArch32Bit ?
"mcrt0.o" :
"mcrt0_64.o";
124 return IsArch32Bit ?
"crt0.o" :
"crt0_64.o";
127 if (!Args.hasArg(options::OPT_nostdlib)) {
129 Args.MakeArgString(ToolChain.
GetFilePath(getCrt0Basename())));
136 Args.AddAllArgs(CmdArgs, options::OPT_L);
139 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
141 if (Args.hasArg(options::OPT_pthreads, options::OPT_pthread))
142 CmdArgs.push_back(
"-lpthreads");
144 CmdArgs.push_back(
"-lc");
147 const char *Exec = Args.MakeArgString(ToolChain.
GetLinkerPath());
148 C.
addCommand(std::make_unique<Command>(JA, *
this, Exec, CmdArgs, Inputs));
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
void addCommand(std::unique_ptr< Command > C)
Compilation - A set of tasks to perform for a single driver invocation.
clang::driver::toolchains::AIX AIX