15 #include "llvm/ADT/SmallString.h" 16 #include "llvm/Option/ArgList.h" 17 #include "llvm/Support/Path.h" 22 using namespace clang;
29 const char *LinkingOutput)
const {
32 ArgStringList CmdArgs;
35 Args.ClaimAllArgs(options::OPT_g_Group);
37 Args.ClaimAllArgs(options::OPT_emit_llvm);
40 Args.ClaimAllArgs(options::OPT_w);
43 CmdArgs.push_back(Args.MakeArgString(
"--sysroot=" + D.
SysRoot));
46 CmdArgs.push_back(
"-Bstatic");
47 CmdArgs.push_back(
"--no-dynamic-linker");
51 CmdArgs.push_back(
"-pie");
52 CmdArgs.push_back(
"-zrelro");
55 CmdArgs.push_back(
"--eh-frame-hdr");
56 CmdArgs.push_back(
"--gc-sections");
59 CmdArgs.push_back(
"-o");
62 assert(Output.
isNothing() &&
"Invalid output.");
65 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) {
66 CmdArgs.push_back(Args.MakeArgString(ToolChain.
GetFilePath(
"crt0.o")));
67 CmdArgs.push_back(Args.MakeArgString(ToolChain.
GetFilePath(
"crtbegin.o")));
70 Args.AddAllArgs(CmdArgs, options::OPT_L);
72 Args.AddAllArgs(CmdArgs,
73 {options::OPT_T_Group, options::OPT_e, options::OPT_s,
74 options::OPT_t, options::OPT_Z_Flag, options::OPT_r});
77 assert(!Inputs.empty() &&
"Must have at least one input.");
86 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
87 CmdArgs.push_back(
"-lc");
88 CmdArgs.push_back(
"-lcompiler_rt");
91 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles))
92 CmdArgs.push_back(Args.MakeArgString(ToolChain.
GetFilePath(
"crtend.o")));
94 const char *Exec = Args.MakeArgString(ToolChain.
GetLinkerPath());
95 C.
addCommand(llvm::make_unique<Command>(JA, *
this, Exec, CmdArgs, Inputs));
100 CloudABI::CloudABI(
const Driver &D,
const llvm::Triple &Triple,
104 llvm::sys::path::append(P,
"..",
getTriple().str(),
"lib");
109 llvm::opt::ArgStringList &CC1Args)
const {
111 llvm::sys::path::append(P,
"..",
getTriple().str(),
"include/c++/v1");
116 ArgStringList &CmdArgs)
const {
117 CmdArgs.push_back(
"-lc++");
118 CmdArgs.push_back(
"-lc++abi");
119 CmdArgs.push_back(
"-lunwind");
131 case llvm::Triple::aarch64:
132 case llvm::Triple::x86_64:
141 Res |= SanitizerKind::SafeStack;
146 return SanitizerKind::SafeStack;
bool isUsingLTO() const
Returns true if we are performing any kind of LTO.
LTOKind getLTOMode() const
Get the specific kind of LTO being performed.
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
void addCommand(std::unique_ptr< Command > C)
Dataflow Directional Tag Classes.
std::string SysRoot
sysroot, if present
Compilation - A set of tasks to perform for a single driver invocation.